action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
阅读:2101回复:19

用事件同步驱动跟应用程序时碰到的一个问题

楼主#
更多 发布于:2008-05-13 10:39
应用程序中创建一个命名事件,传递给驱动。由应用程序来SetEvent,驱动KeWaitForSingleObject并KeResetEvent。
一般情况下正常,但是当先关闭应用程序后驱动由于没有得到有信号event,一直等待。但是重新开去应用程序打开该命名事件,并且SetEvent,驱动还是无响应?!
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-13 15:18
调试发现是该事件已经被系统注销掉。但是我已经在驱动里调用ObReferenceObjectByHandle来增加计数器啊。
然后我发送几次事件给驱动,驱动就调用几次ObReferenceObjectByHandle,但是关闭应用程序后事件还是被系统注销?!
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2008-05-13 15:46
呵呵,你应用程序退出后 该进程对应的乱七八糟的内核对象被系统强制回收了!
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-13 15:53
但是我已经在驱动里调用ObReferenceObjectByHandle来增加计数器啊,应用程序推出,事件计数器应该只会减1啊。
那如果应用程序一推出,事件就被注销掉,共享事件岂不是意义不大?应用程序很容易被终止啊。
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2008-05-13 16:34
事实上那是你一厢情愿的以为,哈哈!
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-05-13 21:18
那应该是怎么样呢,我应该如何做?
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-05-13 21:30
这不是我一厢情愿的以为,是微软的文档说明
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2008-05-14 11:22
文档错了,实际系统为准,具体怎么搞 我也关注ing 哈哈
驱动ObReferenceObjectByHandle,如果失败就别等了,就这样吧
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-05-14 13:26
驱动ObReferenceObjectByHandle,如果失败就别等了---------》问题是该函数返回成功啊!
文档错了?
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-05-14 13:36
不知用windbg是否可以看到Event的参考计数器值
win32fan
驱动牛犊
驱动牛犊
  • 注册日期2008-03-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望39点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-05-16 10:01
帮忙UP
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
11楼#
发布于:2008-05-16 21:31
不使用Event,用Callgate或者其他~
嘿嘿~

要暴力,要暴力~

不走寻常路,兼容各种操作系统~
没有战争就没有进步 X3工作组 为您提供最好的军火
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
12楼#
发布于:2008-05-17 12:43
我是用APC 嘿嘿 稳定可靠
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2008-05-19 14:01
直接呼叫或者用APC可以得到用户程序的完成信息么?如果用户程序异常终止会如何?
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
14楼#
发布于:2008-05-19 14:54
尽量不要在驱动里面wait吧!用户完成后通过DeviceIoControl通知驱动啊
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2008-05-19 15:14
但是我需要等待用户程序完成工作后才能IoCompleteRequest IRP啊,否则不能做下一次工作。
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2008-05-19 15:15
我刚才试着设定超时值0xFFFFFFFF,结果每次都超时!算起来要等待400多秒啊,怎么会这样?
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2008-05-20 17:23
尽量不要在驱动里面wait吧!用户完成后通过DeviceIoControl通知驱动啊----------------------------->试了不等待,直接在完成后通过deviceiocontrol通知驱动,然后驱动再完成IRP,巨慢,系统被卡住动不了。
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
18楼#
发布于:2008-05-21 07:52
你不会是在驱动里面这么写吧?
while (not 完成);
这样还不如用事件等呢
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2008-05-21 09:27
没有等,这样等死机是正常的吧。我是在驱动里直接做动作,但是不调用IoCompleteRequest IRP,而是在用户程序通过deviceiocontrol发送特定信息时才调用IoCompleteRequest IRP。
游客

返回顶部