mywdrivers
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2004-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2735回复:10

在什么样的情况下,KeWaitForSingleObject 才工作正常呀!

楼主#
更多 发布于:2003-06-23 00:05
在我的IRP_MJ_READ 中我采用一个等待KeWaitForSingleObject来等待接受足够的数据,我是在 KeSetTimer 中 DPC中来作 KeSetEvent 操作,第一次时 KeWaitForSingleObject时好象是对的,但是之后的循环中,没有等到KeSetEvent ,KeWaitForSingleObject 好象没有进行难道KeWaitForSingleObject没有进行重新将 Event置为 non signaled state.
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-23 09:51
在KeWaitForSingleObject后加个KeClearEvent即可
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-23 11:14
或者
KeInitializeEvent(... SynchronizationEvent, ...);
我打字很快。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-23 11:50
我的问题和你们说的类似,我是采用中断来传输数据,用DS写的驱动。当中断到来的时候进入ISR,在这里面我什么也不做,只是确认中断,然后转到DPC里,在这里我设置事件为有效,来通知应用层可以发DEVICEIOCTL请求,读取数据。
在驱动程序里,我是否需要清理事件,如果是的话,我在什么地方清理呢??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-06-23 12:12
NotificationEvent要手动clear或reset
SynchronizationEvent会自己reset
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-24 09:09
楼上大哥说的同步事件和通知事件是在什么地方设定??指点!
谢谢!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-06-24 10:46
看你怎么用的了。
比如app等一个event,等到了,app就clear。而driver在某个时候setevent,好让app恢复。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-24 11:41
看你怎么用的了。
比如app等一个event,等到了,app就clear。而driver在某个时候setevent,好让app恢复。


谢谢你的回答,我那么清掉后,应用层是否还要重新创建事件对象??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-06-24 12:53
上面说的clear,不是指把event给kill,当然也就不需要重新创建了。

说reset可能明白些

app等event---×××----app设置event为nonsignaled
     driver设置event为信号态(signaled)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-24 16:24
呵呵,谢谢你的回答,你回答的很透彻,真的很感激你!
另外我有个问题想问你,我在“开发工具篇里发了没人回答,我用SOFTICE产生中断来模拟硬件中断,怎么我的中断处理程序不执行?我是在WIN2000下的ISA驱动,写成NT试的了。我用DS写的,硬件中断号是3,我用SOFTICE的:genint 33 来产生该中断,可是中断处理程序就是不执行,我的中断资源申请是成功的。

看了以前的很多帖子,没人能很完整的回答这个问题,而且,有些人的回答还误到人,说要设置8259的相关寄存器,我觉得这种说法是没什么道理的,我看到一本驱动的书里,写的很明白,在NT系统下,由于HAL的存在,驱动不能直接控制中断控制寄存器8259,能控制的只能是外设。我的中断触发方式是边沿触发的方式,我想用SOFTICE模拟的中断也应当是这种类型的,既然我已经申请资源成功,并以连接好了中断,那么中断到来,我的中断处理程序就应当执行啊,可是为什么不能执行?
很着急!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
mywdrivers
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2004-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-24 22:05
Thank you all ,It does me great favor.
游客

返回顶部