MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
阅读:1872回复:9

关于系统阻塞的问题请教各位大牛

楼主#
更多 发布于:2007-07-11 16:14
HOOK了ZwLoadDriver来监控驱动的加载,用了ZwWaitForSingleObject来等侯应用层的处理,如果是第三方程序调用ZwLoadDriver则程序可以正常运行,无任何问题。
但~如果是用Service.exe来加载驱动,则调用程序会死掉~
有哪位大牛知道什么原因,需要做何物殊处理么?

据观察好像是系统进程中使用ZwWaitForSingleObject都会死~
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-07-12 14:44
1.service.sys加载驱动,是不是services.exe?
2.调用程序会死掉.什么现象,是不是因为等待的event一直没有返回
3.据观察好像是系统进程中使用ZwWaitForSingleObject都会死.不会!
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-12 18:49
汗~打错了,是用Service.exe加载驱动。

是的,ZwWaitForSingleObject等待的事件没有返回~其后的指令得不到执行。

A程序调用Service.exe来装载驱动,A会失去响应。这时去掉对ZwLoadDriver的HOOK,关掉监控程序。重新运行程序来调用Service.exe的相应功能,仍然不能成功,包括创建服务。显然,Service.exe也应该死掉了~

(注:不通Service.exe,直接调用ZwLoadDriver来装载驱动,可以正常拦截,事件也可以得到响应,无任何问题,所以代码书写BUG的可能性不大,严重怀疑是Service.exe的特殊性造成的。)
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-12 19:15
汗~找到原因了~~是我的应用层程序无法打开在Serivce.exe线程空间中创建的事件~所以,导致问题的发生~

版主老大,这需要如何处理呢?
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-12 19:39
搜了一大通,也没发现,打开系统进程中所创建事件需要的相关权限~~这需要什么权限呢?
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-13 11:05
用麻烦的句柄复制方法解决了问题,但应该是可以提升权限来解决的~哪位老大知道需要什么权限还麻烦提醒一下儿,谢谢了。
galihoo
驱动牛犊
驱动牛犊
  • 注册日期2005-12-17
  • 最后登录2010-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-13 15:36
引用第5楼MuseHero于2007-07-13 11:05发表的  :
用麻烦的句柄复制方法解决了问题,但应该是可以提升权限来解决的~哪位老大知道需要什么权限还麻烦提醒一下儿,谢谢了。


那就你自己的进程创建一个事件,然后services.exe的线程来open就可以了吧
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2007-07-13 16:31
简单事情复杂化。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-14 11:50
引用第6楼galihoo于2007-07-13 15:36发表的  :


那就你自己的进程创建一个事件,然后services.exe的线程来open就可以了吧



这个不行的~~这是需要反向通知的~~由驱动来通知应用,所以你的方法不可取~
MuseHero
驱动小牛
驱动小牛
  • 注册日期2005-04-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望156点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-14 11:52
引用第7楼wowocock于2007-07-13 16:31发表的  :
简单事情复杂化。


汗~~我也这么认为~~但是没办法啊~在应用中就是打不开~


除了句柄复制外,我看只有提升应用到系统权限了~可那样也麻烦啊~

我总认为应该是增加某个权限后就可以了的~只是不知道哪一个,试了N多也不行~
游客

返回顶部