阅读:2735回复:10
在什么样的情况下,KeWaitForSingleObject 才工作正常呀!
在我的IRP_MJ_READ 中我采用一个等待KeWaitForSingleObject来等待接受足够的数据,我是在 KeSetTimer 中 DPC中来作 KeSetEvent 操作,第一次时 KeWaitForSingleObject时好象是对的,但是之后的循环中,没有等到KeSetEvent ,KeWaitForSingleObject 好象没有进行难道KeWaitForSingleObject没有进行重新将 Event置为 non signaled state.
|
|
沙发#
发布于:2003-06-23 09:51
在KeWaitForSingleObject后加个KeClearEvent即可
|
|
板凳#
发布于:2003-06-23 11:14
或者
KeInitializeEvent(... SynchronizationEvent, ...); |
|
|
地板#
发布于:2003-06-23 11:50
我的问题和你们说的类似,我是采用中断来传输数据,用DS写的驱动。当中断到来的时候进入ISR,在这里面我什么也不做,只是确认中断,然后转到DPC里,在这里我设置事件为有效,来通知应用层可以发DEVICEIOCTL请求,读取数据。
在驱动程序里,我是否需要清理事件,如果是的话,我在什么地方清理呢?? |
|
|
地下室#
发布于:2003-06-23 12:12
NotificationEvent要手动clear或reset
SynchronizationEvent会自己reset |
|
5楼#
发布于:2003-06-24 09:09
楼上大哥说的同步事件和通知事件是在什么地方设定??指点!
谢谢! |
|
|
6楼#
发布于:2003-06-24 10:46
看你怎么用的了。
比如app等一个event,等到了,app就clear。而driver在某个时候setevent,好让app恢复。 |
|
7楼#
发布于:2003-06-24 11:41
看你怎么用的了。 谢谢你的回答,我那么清掉后,应用层是否还要重新创建事件对象?? |
|
|
8楼#
发布于:2003-06-24 12:53
上面说的clear,不是指把event给kill,当然也就不需要重新创建了。
说reset可能明白些 app等event---×××----app设置event为nonsignaled driver设置event为信号态(signaled) |
|
9楼#
发布于:2003-06-24 16:24
呵呵,谢谢你的回答,你回答的很透彻,真的很感激你!
另外我有个问题想问你,我在“开发工具篇里发了没人回答,我用SOFTICE产生中断来模拟硬件中断,怎么我的中断处理程序不执行?我是在WIN2000下的ISA驱动,写成NT试的了。我用DS写的,硬件中断号是3,我用SOFTICE的:genint 33 来产生该中断,可是中断处理程序就是不执行,我的中断资源申请是成功的。 看了以前的很多帖子,没人能很完整的回答这个问题,而且,有些人的回答还误到人,说要设置8259的相关寄存器,我觉得这种说法是没什么道理的,我看到一本驱动的书里,写的很明白,在NT系统下,由于HAL的存在,驱动不能直接控制中断控制寄存器8259,能控制的只能是外设。我的中断触发方式是边沿触发的方式,我想用SOFTICE模拟的中断也应当是这种类型的,既然我已经申请资源成功,并以连接好了中断,那么中断到来,我的中断处理程序就应当执行啊,可是为什么不能执行? 很着急! |
|
|
10楼#
发布于:2003-06-24 22:05
Thank you all ,It does me great favor.
|
|