阅读:2122回复:10
在Hook的ZwCreateFile函数中读写注册表,加载该驱动重启失败
我Hook了ZwCreateFile,在里面读注册表,编译出来安装后,重启系统失败,我使用DriverMonitor加载驱动,可以正常运行,功能也实现了,但是重启时系统死住了
后来我把访问注册表的代码都屏蔽掉,重启系统就没事了 访问注册表我使用的是ZwOpenKey、ZwQueryValueKey函数,在调用ZwOpenKey的时候就死住了 我这个程序中挂钩了两个函数 一个是ZwOpenFile,一个是ZwCreateFile 在ZwOpenFile中访问注册表没有问题 但是在ZwCreateFile中访问注册表,重启的时候就死住了 把start值改成auto后,系统启动正常,程序功能正常 估计应该是访问注册表的时候注册表还没有加载,或者这种文件过滤驱动(我是说挂钩ZwCreateFile的文件过滤驱动)本身需要依赖于某个程序,实在想不通。请高手指点,不胜感激 |
|
沙发#
发布于:2009-06-22 11:11
|
|
板凳#
发布于:2009-06-22 22:00
|
|
地板#
发布于:2009-06-23 09:32
有点冷~~~~~~哦
|
|
地下室#
发布于:2009-06-23 10:54
我也是新手,是不是没有对注册表做读取失败的处理?
|
|
5楼#
发布于:2009-06-23 11:16
有失败处理,失败的时候是返回原来的ZwCreateFile
|
|
6楼#
发布于:2009-06-23 21:53
More details are needed:
1. Which registry key are you trying to open in DriverEntry? 2. What is your driver's start type and group? 3. It's better to post your driver entry's thread stack when your system stuck. I think mostly the problem is you are trying to open a registry key from an un-available registry hive. |
|
7楼#
发布于:2009-06-24 13:38
回 6楼(michaelgz) 的帖子
非常感谢您的帮助我想访问的是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\下我自定义的某个项下的某个自定义键,我没有在DriverEntry中打开,我是在DriverEntry里面调用了hook之后了的ZwCreateFile函数MyZwCreateFile,在MyZwCreateFile下打开注册表并且访问的,start值是boot,boot试过了,system也试过了,都不行,group暂时没加,后来尝试在GroupOrderList下找了几个FSFilter打头的,设置为depend或者group,但是没成功 |
|
8楼#
发布于:2009-06-25 21:28
|
|
9楼#
发布于:2009-09-15 10:22
我觉得这很好理解,因为加载注册表数据文件(HIVE)的时候也要调用ZwOpenKey,并且注册表由很多HIVE文件组成。你的驱动是不是设得启动太早,你要的那个项所在的文件还没有加载。以致进入了死循环?
|
|
10楼#
发布于:2009-09-15 10:31
注册表也是文件,最终也要zwcreatefile,想想是不是死锁了
|
|