【Windows内核驱动开发】——读取注册表

本文介绍了Windows驱动如何通过ZwOpenKey()函数打开注册表,以及使用ZwQueryValueKey()读取注册表键值的方法。在读取过程中需要注意OBJECT_ATTRIBUTES的初始化、权限设置以及正确处理缓冲区长度以避免浪费内存。
摘要由CSDN通过智能技术生成

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

作者:zcr214 时间:2016/5/5

 

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

1.    ZwOpenKey()打开注册表

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

NTSTATUS

NTAPI

ZwOpenKey(

    _Out_PHANDLE KeyHandle,

    _In_ACCESS_MASK DesiredAccess,

    _In_POBJECT_ATTRIBUTES ObjectAttributes

);

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

需要ACCESS_MASK来指定打开该注册表的权限,读权限对应KEY_READ,写权限对应KEY_WRITE,如果需要全部权限则是KEY_ALL_ACCESS。

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

OBJECT_ATTRIBUTESobj_attr={ 0};

InitializeObjectAttributes(

      &obj_attr,

      Reg_Key_Path,

      OBJ_CASE_INSENSITIVE,

      NULL,

      NULL);

其中obj_attr是初始化的OBJECT_ATTRIBUTES,Reg_Key_Path是注册表项的路径,它是一个UNICODE_STRING字符串,如UNICODE_STRINGReg_key_path=RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\ControlSet001\\services\\SwapBuffers\\");其余三个参数表示大小写敏感和安全描述符,一般情况下就按照这个例子这样填写即可。

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

   status

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值