阅读:1788回复:11
在驱动中睡眠和唤醒用哪些函数?
我写了Windows Native API的hook驱动,当进入hook程序时我想睡眠来等待应用层的处理,应用层处理后在唤醒驱动,请问在驱动中睡眠和唤醒的函数是什么呢?
或者说在Windows的内核中有没有类似于linux下的interruptible_sleep_on(&wq)这样的函数? [编辑 - 1/5/05 by cicada] |
|
沙发#
发布于:2005-01-04 17:38
use share event
|
|
|
板凳#
发布于:2005-01-04 17:48
use share event 就用共享事件,简单快捷。 |
|
|
地板#
发布于:2005-01-04 18:09
不行啊,系统显示使用率100%。如何解决?
|
|
地下室#
发布于:2005-01-04 18:13
用KeStallExecutionProcessor(
ULONG MicroSeconds ); 来延时行不行啊 |
|
5楼#
发布于:2005-01-04 20:14
我写的是ZwCreateProcess的hook,每次hook程序中创建的共享事件应用层好像无法设置,那么hook程序就没法唤醒。而且cpu100%。高手帮忙啊!
|
|
6楼#
发布于:2005-01-05 08:54
我写的是ZwCreateProcess的hook,每次hook程序中创建的共享事件应用层好像无法设置,那么hook程序就没法唤醒。而且cpu100%。高手帮忙啊! 应用层是不能设置内核创建的共享事件的。 如果需要在内核唤醒应用层,则直接在需要时,执行下面的命令: KeSetEvent(ShareEvent, 0, FALSE); KeClearEvent(ShareEvent); 然后在应用层中用WaitForMultipleObjects等待,其中时间设为INFINITE。 |
|
|
7楼#
发布于:2005-01-05 14:37
是啊!可是设计上要求,在内核等待,应用层唤醒内核。而且内核的hook程序的执行不在应用层的上下文中,如何解决呢?
|
|
8楼#
发布于:2005-01-05 17:48
在应用层创建事件不就OK了。
想问一下,你在内核的等待,是阻塞式的吗,等待什么事件? |
|
|
9楼#
发布于:2005-01-05 19:35
每次有新的进程启动,就会进入我的hook程序。此时在hook中通知应用层并等待应用层的结果是继续执行还是退出,由于可能同时会有多个进程启动,而应用层返回的结果不是一样的(执行或退出)。又由于进程的启动具有随机性,所以我不知道如何在事件上等待。有没有好的设计方案?
我现在用的是KeWaitForSingleObject在内核等待,好像是阻塞式。 或者说在Windows的内核中有没有类似于linux下的interruptible_sleep_on(&wq)这样的函数? [编辑 - 1/5/05 by cicada] |
|
10楼#
发布于:2005-01-06 09:09
明白了,你是通过HOOK来控制进程的执行,在内核中拦截和控制进程,而具体的策略判断在应用层。
个人认为你的设计不是很好,建议你采用共享内存来做,将安全策略放在内核缓冲区,直接在内核进行判断。 这样做虽然有点麻烦,但是一劳永逸。 |
|
|
11楼#
发布于:2005-01-06 14:44
可惜,安全策略太复杂,只能在应用层做。难道在Windows的内核中没有类似于linux下的interruptible_sleep_on(&wq)这样的函数?
|
|