驱动中接受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)
ShentuCancel例程是不需要等待的,在你自己的完成例程里面置上一个事件,然后再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)

返回顶部