首页
社区
课程
招聘
[已解决]驱动中打开注册表失败
发表于: 2013-7-21 10:59 6534

[已解决]驱动中打开注册表失败

2013-7-21 10:59
6534
代码
---------------------------------
        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直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
代码没错,MY_REG_SOFTWARE_KEY_NAME的注册表值错了吧?
2013-7-21 11:58
0
雪    币: 207
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这是我自己定义的一个宏

#define  MY_REG_SOFTWARE_KEY_NAME         L"\\Registry\\Machine\\Software\\Zhangfan"
2013-7-21 12:32
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是不是\\Zhangfan\\
2013-7-21 12:39
0
雪    币: 207
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是饿,我在看张帆的书~~~
2013-7-21 12:45
0
游客
登录 | 注册 方可回帖
返回
//