masmasm
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-16分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1519回复:2

关于IoStartParket()的调用?

楼主#
更多 发布于:2001-09-22 10:48
请问下列代码执行后是立即返回还是等StartIo()执行完后再返回;
IoMarkIrpPending();
IoStartParket();
return STATUS_PENDING;
Qfwfq
驱动牛犊
驱动牛犊
  • 注册日期2001-04-06
  • 最后登录2002-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-24 17:16
应该有两种情况
1  如果设备忙则该函数将把新IRP加入队列并立即返回
2  如果设备空闲则STARTIO完成之后再返回,因此有可能
   IoStartPacket返回之后IRP已经完成并释放掉了
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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 则情况就不一样了
游客

返回顶部