6602|16

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

在Hook的ZwCreateFile函数中读写注册表,加载该驱动重启失败 [复制链接]

我Hook了ZwCreateFile,在里面读注册表,编译出来安装后,重启系统失败,查了一些资料,是不是跟ZwCreateFile运行的kernel mode或者user mode有关啊,应该怎么修改呢?

最新回复

确实是Start值的问题  详情 回复 发表于 2009-7-13 01:46
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
与mode无关,调试看执行到哪里出问题。
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼上前辈使用什么调试工具啊?
除了DriverStdio之外,前辈可否推荐一款比较好用的
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
我使用DriverMonitor加载驱动,可以正常运行,功能也实现了,使用Syser加载也可以正常运行,但是重启时系统死住了
后来我把访问注册表的代码都屏蔽掉,重启系统就没事了
访问注册表我使用的是ZwOpenKey、ZwQueryValueKey函数,在调用ZwOpenKey的时候就死住了
实在想不通
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
我现在只用WinDbg调试,虽然不太好用,但毕竟是MS提供的,调试MS的操作系统比较可靠。
如果你的驱动程序的Start值设置为0,在初始化时大部分注册表键是没有加载的,不能访问。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 

我刚才查了资料,有人说加个延迟
但是我不知道驱动中如何延迟
应用程序中可以使用sleep,但是驱动中呢?
也有人说用ZwLoadKey加载的,不知道哪种方式好,我想都试试
呵呵
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
但是我读的是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下我自定义的键的,在初始化的时候应该已经加载了才对啊
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
找到一个延迟的函数KeStallExecutionProcessor,呵呵
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 
延迟是不行的。
驱动程序自己对应的注册表键是已经加载了的,可能是路径写法不对,你试试用DriverEntry函数参数中传过来的路径来访问。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
路径没有写错
我这个程序中挂钩了两个函数
一个是ZwOpenFile,一个是ZwCreateFile
在ZwOpenFile中访问注册表没有问题
但是在ZwCreateFile中访问注册表,重启的时候就死住了
如果路径不对,调试的时候也应该报错才对
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 
应该是加载顺序的问题吧  你试验下 双机调试 找找自己错误的来源

或者 你直接在不能访问的时候就 返回 看看能不能卡住

鸡生蛋蛋生鸡  启动的时候最麻烦了
如果真需要的话 不要把数据放注册表里面 放系统外面 比方硬盘上 bios里
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

12
 
以下是部分代码:
        RtlInitUnicodeString(&RegString, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\自定义项");
        RtlInitUnicodeString(&ValueName, L"自定义键");

        //KeStallExecutionProcessor(3000);
        //初始化OBJECT_ATTRIBUTE
        InitializeObjectAttributes(&objAttrib, &RegString, OBJ_CASE_INSENSITIVE, NULL, NULL);
        //打开注册表
        status = ZwOpenKey(&hRegister, KEY_READ, &objAttrib);
        if (!NT_SUCCESS(status))
        {
                return ((ZWCREATEFILE)(OldZwCreateFile)) (FileHandle, DesiredAccess,
                        ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes,
                        ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);       
        }
               
        //获取注册表键值数据长度并申请内存
        ……
        //获取数据
        status = ZwQueryValueKey(hRegister, &ValueName, KeyValuePartialInformation, KeyValue, ValueDataLen, &ValueDataLen);
        if (!NT_SUCCESS(status))
        {
                if (hRegister != NULL)
                {
                        ZwClose(hRegister);
                        hRegister = NULL;
                }
                if (KeyValue != NULL)
                {
                        ExFreePool(KeyValue);
                        KeyValue = NULL;
                }
                return ((ZWCREATEFILE)(OldZwCreateFile)) (FileHandle, DesiredAccess,
                        ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes,
                        ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
        }
        if (hRegister != NULL)
        {
                ZwClose(hRegister);
                hRegister = NULL;
        }
请前辈指点

今天有点晚了,前辈有时间帮忙给看看吧
先谢过了  呵呵
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
具体是哪行代码出什么错?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
ZwOpenKey那行出错
刚开始接触驱动,双机调试还没弄好,还没跟出来错误原因
我在弄双机调试,呵呵
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
WinDBG 单步调试一下吧,确认一下究竟哪段代码出了问题.
装个虚拟机,然后双机调试,应该还是有帮助的.

同时你的驱动启动时,"注册表还没有加载"也是非常值得怀疑的.尝试一下把你的驱动和别的驱动之间加个Dependency,让驱动晚点被加载.

"如果你的驱动程序的Start值设置为0,在初始化时大部分注册表键是没有加载的,不能访问。"
把你的Start 值设置为手动再尝试一下.
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 
不好意思,前几天出去了一下

我把start值改成auto后,系统启动正常,程序功能正常
估计应该是注册表没有加载,或者这种文件过滤驱动(我是说挂钩ZwCreateFile的文件过滤驱动)本身需要依赖于某个程序

注册表中GroupOrderList下好多组,我试着将驱动放到组里,但是没成功
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

17
 
确实是Start值的问题
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表