阅读:1519回复:2
关于IoStartParket()的调用?
请问下列代码执行后是立即返回还是等StartIo()执行完后再返回;
IoMarkIrpPending(); IoStartParket(); return STATUS_PENDING; |
|
沙发#
发布于:2001-09-24 17:16
应该有两种情况
1 如果设备忙则该函数将把新IRP加入队列并立即返回 2 如果设备空闲则STARTIO完成之后再返回,因此有可能 IoStartPacket返回之后IRP已经完成并释放掉了 |
|
板凳#
发布于:2001-09-25 14:52
[QUOTE]原本由 Qfwfq 发表
[B]应该有两种情况 1 如果设备忙则该函数将把新IRP加入队列并立即返回 2 如果设备空闲则STARTIO完成之后再返回,因此有可能 IoStartPacket返回之后IRP已经完成并释放掉了 [/B][/QUOTE] 关于第二点,我也没弄的太懂,现讨论如下: iostartpacket只是一个将IPR控制权发送到startio的函数, iostartpacket应该在dispatch level完成,同样startio(真正处理irp的部分)也是在dispatch完成的,所以对于uniprocessor来讲,此IRP的完成是否应该在函数返回之前完成。 当然如果是multiprossor 则情况就不一样了 |
|