kkmax
驱动牛犊
驱动牛犊
  • 注册日期2007-05-03
  • 最后登录2007-06-02
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1338回复:3

关于Ring0与Ring3交互的问题

楼主#
更多 发布于:2007-05-08 22:58
  我在写一个实时监控API的驱动,现在可以截获调用。但是截获以后我要驱动等待用户的决定。
(就像卡吧那样),代码如下:

KeSetEvent(pMyhook,0,FALSE);//通知用户
KeClearEvent(pMyhook); //自己等待用户的决定
KeWaitForSingleObject(pMyhook,Executive,KernelMode,FALSE,NULL);
我在我的HOOK函数里这样写,可以吗?

可是,这样写后,整个系统都几乎无法操作,很慢,但CPU占用正常,好象被阻塞了一样。

大家谁有这方面的经验,谢谢!
GNiDiA
驱动小牛
驱动小牛
  • 注册日期2006-10-11
  • 最后登录2017-10-09
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望145点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-05-11 13:41
SetEvent完了立即又Clear,恐怕用户层没有多少机会能等到这个事件
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-09 21:33
呵呵,我最近也在做这方面的开发,我是用双事件的,你试试看:
KeSetEvent(pEventA, IO_NO_INCREMENT, TRUE);      //通知用户
KeWaitForSingleObject((PKEVENT)pEventB,UserRequest,UserMode,FALSE,NULL);   //转入等待
KeResetEvent(pEventB);      //复位事件

同时建议不要对每次的调用都要通知用户,这样太频繁了
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-05-09 20:17
不要无限等待,请采用短时等待+超时再循环来

呵呵~至于存在逻辑错误死锁的话,LZ就自己搞定吧~
没有战争就没有进步 X3工作组 为您提供最好的军火
游客

返回顶部