20楼#
发布于:2005-02-22 11:25
[quote][quote]或者,用个定时器检测超时,用CustomTimerDpc处理吧 这种方法对于自己创建的irp好像不可行。 我测试过,customerTimerDpc运行在dispatch_level上,在这个中断级上,不能等待。而如果我在customerTimerDpc中用IoCancelIrp取消自己创建的irp,此时立即就会进入此irp地完成例程,这样的话,我在customerTimerDpc中就要等待了,直到完成例程执行完毕。而在dispatch_level上是没法子等待的。 [/quote] 下次customerTimerDpc中再处理不行吗? [/quote] 能详细说明一下吗? 我今天用了cancelroutine,也是不行,cancelroutine 运行在dispatch_level上。 |
|
21楼#
发布于:2005-02-22 10:58
[quote]或者,用个定时器检测超时,用CustomTimerDpc处理吧 这种方法对于自己创建的irp好像不可行。 我测试过,customerTimerDpc运行在dispatch_level上,在这个中断级上,不能等待。而如果我在customerTimerDpc中用IoCancelIrp取消自己创建的irp,此时立即就会进入此irp地完成例程,这样的话,我在customerTimerDpc中就要等待了,直到完成例程执行完毕。而在dispatch_level上是没法子等待的。 [/quote] 下次customerTimerDpc中再处理不行吗? |
|
|
22楼#
发布于:2005-02-21 11:23
或者,用个定时器检测超时,用CustomTimerDpc处理吧 这种方法对于自己创建的irp好像不可行。 我测试过,customerTimerDpc运行在dispatch_level上,在这个中断级上,不能等待。而如果我在customerTimerDpc中用IoCancelIrp取消自己创建的irp,此时立即就会进入此irp地完成例程,这样的话,我在customerTimerDpc中就要等待了,直到完成例程执行完毕。而在dispatch_level上是没法子等待的。 |
|
23楼#
发布于:2005-02-21 10:19
驱动中接受app得读请求,然后自己创建irp,注册完成例程,并把它发送给总线驱动,如果此irp尚未完成,此时app被异常结束(如结束任务)了,那我在驱动中应该如何处理irp呢? 刚刚看到,如果是自己创建的Irp,那么肯定要自己负责调用IoCancelIrp来cancel这个自己创建的Irp了。 |
|
24楼#
发布于:2005-02-21 10:15
这种情况,我前段时间专门试验过。
当应用层某一个线程发送到驱动的Irp没有返回,就是说驱动IoMarkIrpPending,return STATUS_PENDING,这种情况下,若该线程步进行等待而要直接完成退出,那么该线程结束代码会要求I/O manager调用该Irp的cancel routien(如果有的话)。如果驱动中没有为该Irp设置cancel routine,那么该线程不会结束。 所以对于有可能无限期完成的Irp,最好设置cancel routine。当然如果你驱动中有一个定时器,定时对pending的Irp完成的话,就完全没有必要设置cancel routine.这段话DDK里边详细提过。 现在ddk提供了新的cancel routine的处理方法,CSQ。详细的清参考IoCsqInitialize等函数。 |
|
25楼#
发布于:2005-02-21 09:58
或者,用个定时器检测超时,用CustomTimerDpc处理吧
|
|
|
26楼#
发布于:2005-02-21 09:13
cancelroutine是下层驱动在取消IRP或者应用程序调用CancelIo的时候才会被调用吧。
现在如果应用程序被结束任务了,应用程序不会调用cancelIo了,要想取消IRP,只能是下层驱动取消irp,然后上层驱动的cancelroutine才会被调用了。 下层驱动如何知道要取消Irp呢?我在驱动中设置了cancelroutine,在应用程序被结束任务的时候,cancelroutine没有被调用。 |
|
27楼#
发布于:2005-02-07 09:59
驱动中接受app得读请求,然后自己创建irp,注册完成例程,并把它发送给总线驱动,如果此irp尚未完成,此时app被异常结束(如结束任务)了,那我在驱动中应该如何处理irp呢? 在DPC中创建一个核心线程专门处理此事就可以了。 |
|
|
28楼#
发布于:2005-02-06 15:03
怎么个注册法!
|
|
29楼#
发布于:2005-02-06 09:41
[quote]注册CancelRountion 好像比较麻烦的 [/quote] 为什么??? |
|
|
30楼#
发布于:2005-02-05 17:43
注册CancelRountion 好像比较麻烦的 |
|
|
31楼#
发布于:2005-02-05 17:15
注册CancelRountion
|
|
|
上一页
下一页