【我的】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