少了实况2012运行注册表注册表 它说not h...

怎样从注册表中读取默认的值,在ReadString中传递什么参数

不好意思,我原来写的是WriteString.所以没注意

反正把那个默认的读取改成 '' 就行了

toz9945: 权限不够不可能读出来的.. 部分权限只能读取属于自己权限范围内的注册表信息.

相信大家对Windows系统的注册表(registry)一定都不陌生了,我们可以用系统提供的注册表编辑器(regedit)来访问和修改注册表中的数据。直观的讲,注册表呈现出来的是图1所示的形式,它由根键(rootkey)、子键(subkey)、键值(value)和数据(data)组成。数据之间有类型的分别,常见的有:REG_SZ、字符串型,REG_BINARY、二进制型, 注册表相当于Windows系统中所有32位硬件/驱动和32位应用程序的数据文件,是一个系统信息的数据库。既然是数据文件,那在磁盘上就一定有注册表的影子的存在。Windows 2000/XP的注册表文件在系统设置和缺省用户配置数据的情况下,是存放在\系统文件夹 \SYSTEM\CurrentControlSet\Control\HⅣElist下的键值指出。
我们看到的注册表结构是经过注册表编辑器读取之后呈现给我们的,其磁盘形式并不是一个简单的大文件,而是一组称被为HⅣE的单独文件形式,HⅣE中文名曰“储巢”。每个HⅣE文件可以被理解为一棵单独注册表树,就像Windows的PE格式一样,它也有自己的组织形式。本文的任务就是要分析HⅣE文件的组织形式并完成一个HⅣE格式的分析程序。

【我的】Windows驱动开发——读取注册表

注册表对于驱动来说是很重要的小伙伴,注册表可以很好的扮演用户到内核的桥梁角色,很多时候用户可以通过修改注册表的内容来达到控制驱动的目的。那么驱动要做的首先当然是读取到注册表啦,WDK提供了标准的接口函数,所以直接使用就可以了。

WDK提供了打开注册表的接口函数ZwOpenKey,其原型如下:

这个函数将得到一个打开注册表的操作句柄指针,保存在KeyHandle,并返回状态值。

从第三个参数可以看出,它不是接受一个字符串来表示一个注册表项,而是要求输入一个OBJECT_ATTRIBUTES的指针,这需要我们提前初始化一个OBJECT_ATTRIBUTES。下面举个初始化的例子:

初始化完毕后就可以打开注册表了。

读取注册表子键的值,使用ZwQueryValueKey(),其原型如下:

ValueName是要读取的子键的名字。

ResultLength是返回回来的实际需要的长度。

通过分析这个函数可以知道,主要问题存在于读取长度这里,如果为了方便总是定义一个足够大的空间,这样势必造成内存的浪费,所以实际应用中,应该耐心的获取合适的长度,不足时再动态分配内存,所以应如下读取键值。

   //如果读取成功,则分配足够的空间再次读取

所有的操作完毕,如果此时status为成功,那么注册表信息已经保存在Reg_info->Data中了,它是UCHAR类型的可变长度数组,下面只需要再转化成需要的字符串类型PCHAR,UNICODE_STRING等即可。

传入函数的所有类型的参数都要严格的初始化定义,最有可能出问题的地方就是UNICODE_STRING字符串。

我要回帖

更多关于 实况2012运行注册表 的文章

 

随机推荐