代码
---------------------------------
UNICODE_STRING RegUnicodestring;
HANDLE HRegister;
//初始化字符串
RtlInitUnicodeString(&RegUnicodestring,MY_REG_SOFTWARE_KEY_NAME);
//初始化OBJECATTRIBUTES
OBJECT_ATTRIBUTES objectattrtibutes;
InitializeObjectAttributes(&objectattrtibutes,
&RegUnicodestring,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
//创建或者打开注册表
ULONG UlResult;
NTSTATUS status = ZwCreateKey(&HRegister,
KEY_ALL_ACCESS,
&objectattrtibutes,
0,
NULL,
REG_OPTION_NON_VOLATILE,
&UlResult);
KdPrint(("status = %d",status));
KdPrint(("HRegister = %d",HRegister));
-----------------------------------------------------------------------
DbugView中 反应 status = -1073741765
DbugView中 反应 HRegister = 0
我查过百度, 发现咱们看雪的一个帖子
http://bbs.pediy.com/showthread.php?p=606209
2楼说,没有初始化objectattrtibutes
但是确实他的意思,因为我已经用InitializeObjectAttributes初始化了
所以,请懂的亲,为我解释一番
===================================我的分割线
正确的代码
//创建或打开某注册表项目
UNICODE_STRING RegUnicodeString;
HANDLE hRegister;
//初始化UNICODE_STRING字符串
RtlInitUnicodeString( &RegUnicodeString,
MY_REG_SOFTWARE_KEY_NAME);
OBJECT_ATTRIBUTES objectAttributes;
//初始化objectAttributes
InitializeObjectAttributes(&objectAttributes,
&RegUnicodeString,
OBJ_CASE_INSENSITIVE,//对大小写敏感
NULL,
NULL );
ULONG ulResult;
//创建或带开注册表项目
NTSTATUS ntStatus = ZwCreateKey( &hRegister,
KEY_ALL_ACCESS,
&objectAttributes,
0,
NULL,
REG_OPTION_NON_VOLATILE,
&ulResult);
KdPrint(("ntStatus = %d",ntStatus));
KdPrint(("ntStatus = %s",ntStatus));
KdPrint(("hRegister = %d",hRegister));
if (NT_SUCCESS(ntStatus))
{
//判断是被新创建,还是已经被创建
if(ulResult==REG_CREATED_NEW_KEY)
{
KdPrint(("The register item is created\n"));
}else if(ulResult==REG_OPENED_EXISTING_KEY)
{
KdPrint(("The register item has been created,and now is opened\n"));
}
}
这样就可以正确的获取到句柄了,谢谢大家的支持
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课