版块
论坛
喜欢
话题
应用
搜索
登录
注册
xiaorain的个人空间
访问量
0
新鲜事
帖子
资料
http://bbs3.driverdevelop.com/index.php?m=space&uid=54736
app异常结束的时候,驱动里如何完成已经挂起或尚未完成的irp?
驱动中接受app得读请求,然后自己创建irp,注册完成例程,并把它发送给总线驱动,如果此irp尚未完成,此时app被异常结束(如结束任务)了,那我在驱动中应该如何处理irp呢?如果是用计时器,在dpc例程中取消掉这个irp,然后等待。此时会进入完成例程,等到完成例程处理完毕,在设...
全文
回复
(
31
)
2005-02-05 12:18
来自版块 -
内核编程
◆
◆
表情
告诉我的粉丝
提 交
tooflat
:
简单的方法 这里有两个irp,一个是应用层发给驱动的irp,一个是驱动自己构造发给下层的irp 在应用程序退出的时候(异常退出或正常退出都可以),以失败状态完成应用层发的irp,然后在完成例程里直接free掉自己构造的irp 如何检测应用程序(异常)退出,简单的...
(2005-02-23 17:32)
回复
bmyyyud
:
[quote]想了想,为什么不在customerTimerDpc用代码直接取消irp,为什么要调用取消例程再等待呢?Copy/Paste再用些互斥手段不可以吗? 因为自己构造了irp,在取消系统发来的irp的时候,要cancel掉自己构造的irp。而如果cancel自己构造的...
(2005-02-23 15:25)
回复
Shentu
:
Cancel例程是不需要等待的,在你自己的完成例程里面置上一个事件,然后再Passiv_level上等待那个事件不就可以了。IoCancelRoutine不是在CancelRoutine里调用的。 // Cancel routine VOID CancelTestIrp...
(2005-02-22 20:43)
回复
xiaorain
:
[quote]今天发现结束任务的时候,如果还有irp没有完成,应用无法结束,总是剩下一个线程。但是过了几分钟后,系统会发送IRP_MJ_CLEANUP的irp,然后我在clean例程中结束irp,应用结束了。 不知道大家以前又没有发现这样的现象? 参看9楼acidfis...
(2005-02-22 17:17)
回复
xiaorain
:
想了想,为什么不在customerTimerDpc用代码直接取消irp,为什么要调用取消例程再等待呢?Copy/Paste再用些互斥手段不可以吗? 因为自己构造了irp,在取消系统发来的irp的时候,要cancel掉自己构造的irp。而如果cancel自己构造的irp的话,调...
(2005-02-22 17:07)
回复
Shentu
:
今天发现结束任务的时候,如果还有irp没有完成,应用无法结束,总是剩下一个线程。但是过了几分钟后,系统会发送IRP_MJ_CLEANUP的irp,然后我在clean例程中结束irp,应用结束了。 不知道大家以前又没有发现这样的现象? 参看9楼acidfish大哥的办法,...
(2005-02-22 16:16)
回复
bmyyyud
:
想了想,为什么不在customerTimerDpc用代码直接取消irp,为什么要调用取消例程再等待呢?Copy/Paste再用些互斥手段不可以吗?
(2005-02-22 15:16)
回复
xiaorain
:
今天发现结束任务的时候,如果还有irp没有完成,应用无法结束,总是剩下一个线程。但是过了几分钟后,系统会发送IRP_MJ_CLEANUP的irp,然后我在clean例程中结束irp,应用结束了。 不知道大家以前又没有发现这样的现象?
(2005-02-22 12:07)
回复
bmyyyud
:
在取消例程中设置变量表明取消,不过我总觉得哪里出问题了,办法太笨。也许看看WINDDK\\2600.1106\\src\\general\\cancel有用,我也得先好好看看
(2005-02-22 11:48)
回复
xiaorain
:
[quote][quote]或者,用个定时器检测超时,用CustomTimerDpc处理吧 这种方法对于自己创建的irp好像不可行。 我测试过,customerTimerDpc运行在dispatch_level上,在这个中断级上,不能等待。而如果我在customerTi...
(2005-02-22 11:25)
回复
« 上一页
1
2
3
4
下一页 »
xiaorain
加关注
写私信
0
关注
0
粉丝
95
帖子
返回顶部