waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2122回复:10

在Hook的ZwCreateFile函数中读写注册表,加载该驱动重启失败

楼主#
更多 发布于:2009-06-21 22:59
我Hook了ZwCreateFile,在里面读注册表,编译出来安装后,重启系统失败,我使用DriverMonitor加载驱动,可以正常运行,功能也实现了,但是重启时系统死住了
后来我把访问注册表的代码都屏蔽掉,重启系统就没事了
访问注册表我使用的是ZwOpenKey、ZwQueryValueKey函数,在调用ZwOpenKey的时候就死住了
我这个程序中挂钩了两个函数
一个是ZwOpenFile,一个是ZwCreateFile
在ZwOpenFile中访问注册表没有问题
但是在ZwCreateFile中访问注册表,重启的时候就死住了
把start值改成auto后,系统启动正常,程序功能正常
估计应该是访问注册表的时候注册表还没有加载,或者这种文件过滤驱动(我是说挂钩ZwCreateFile的文件过滤驱动)本身需要依赖于某个程序,实在想不通。请高手指点,不胜感激
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-06-22 11:11
 
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-06-22 22:00
   
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-06-23 09:32
有点冷~~~~~~哦
xinlingzhihuo
驱动牛犊
驱动牛犊
  • 注册日期2009-03-24
  • 最后登录2011-02-24
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望281点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-06-23 10:54
我也是新手,是不是没有对注册表做读取失败的处理?
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-06-23 11:16
有失败处理,失败的时候是返回原来的ZwCreateFile
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
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.
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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,但是没成功
waltsin
驱动牛犊
驱动牛犊
  • 注册日期2009-02-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-06-25 21:28
   
玄风残翼
驱动牛犊
驱动牛犊
  • 注册日期2005-10-10
  • 最后登录2015-04-07
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望172点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2009-09-15 10:22
我觉得这很好理解,因为加载注册表数据文件(HIVE)的时候也要调用ZwOpenKey,并且注册表由很多HIVE文件组成。你的驱动是不是设得启动太早,你要的那个项所在的文件还没有加载。以致进入了死循环?
dywangj
驱动牛犊
驱动牛犊
  • 注册日期2008-08-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望82点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-09-15 10:31
注册表也是文件,最终也要zwcreatefile,想想是不是死锁了
游客

返回顶部