cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1788回复:11

在驱动中睡眠和唤醒用哪些函数?

楼主#
更多 发布于:2005-01-04 16:59
我写了Windows Native API的hook驱动,当进入hook程序时我想睡眠来等待应用层的处理,应用层处理后在唤醒驱动,请问在驱动中睡眠和唤醒的函数是什么呢?
或者说在Windows的内核中有没有类似于linux下的interruptible_sleep_on(&wq)这样的函数?

[编辑 -  1/5/05 by  cicada]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-01-04 17:38
use share event
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-04 17:48
use share event

就用共享事件,简单快捷。
在交流中学习。。。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-04 18:09
不行啊,系统显示使用率100%。如何解决?
binjuny
驱动牛犊
驱动牛犊
  • 注册日期2003-03-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望8点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-04 18:13
用KeStallExecutionProcessor(
    ULONG  MicroSeconds
    );
来延时行不行啊
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-04 20:14
我写的是ZwCreateProcess的hook,每次hook程序中创建的共享事件应用层好像无法设置,那么hook程序就没法唤醒。而且cpu100%。高手帮忙啊!
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-05 08:54
我写的是ZwCreateProcess的hook,每次hook程序中创建的共享事件应用层好像无法设置,那么hook程序就没法唤醒。而且cpu100%。高手帮忙啊!

应用层是不能设置内核创建的共享事件的。
如果需要在内核唤醒应用层,则直接在需要时,执行下面的命令:
KeSetEvent(ShareEvent, 0, FALSE);
KeClearEvent(ShareEvent);
然后在应用层中用WaitForMultipleObjects等待,其中时间设为INFINITE。
在交流中学习。。。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-05 14:37
是啊!可是设计上要求,在内核等待,应用层唤醒内核。而且内核的hook程序的执行不在应用层的上下文中,如何解决呢?
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-05 17:48
在应用层创建事件不就OK了。
想问一下,你在内核的等待,是阻塞式的吗,等待什么事件?
在交流中学习。。。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-05 19:35
每次有新的进程启动,就会进入我的hook程序。此时在hook中通知应用层并等待应用层的结果是继续执行还是退出,由于可能同时会有多个进程启动,而应用层返回的结果不是一样的(执行或退出)。又由于进程的启动具有随机性,所以我不知道如何在事件上等待。有没有好的设计方案?
我现在用的是KeWaitForSingleObject在内核等待,好像是阻塞式。
或者说在Windows的内核中有没有类似于linux下的interruptible_sleep_on(&wq)这样的函数?

[编辑 -  1/5/05 by  cicada]
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-06 09:09
明白了,你是通过HOOK来控制进程的执行,在内核中拦截和控制进程,而具体的策略判断在应用层。
个人认为你的设计不是很好,建议你采用共享内存来做,将安全策略放在内核缓冲区,直接在内核进行判断。
这样做虽然有点麻烦,但是一劳永逸。
在交流中学习。。。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-06 14:44
可惜,安全策略太复杂,只能在应用层做。难道在Windows的内核中没有类似于linux下的interruptible_sleep_on(&wq)这样的函数?
游客

返回顶部