仙人指路的编程乐园
留言簿 主人介绍 返回主页
Windows驱动 毕设 电子电路 电脑 PE外壳 心情 Windows应用程序 随笔 Web技术 加密算法 古老的DOS编程 杂项
PendingReturned,一句话惊醒梦中人
类别: Windows驱动  上传时间: 2010-3-17 9:35:29  浏览(324)  留言(0) 
if (Irp->PendingReturned)
{
    //传播pending位
    IoMarkIrpPending( Irp );
}
return STATUS_SUCCESS; //同STATUS_CONTINUE_COMPLETION


在完成例程中经常看到这样的代码,为什么要IoMarkIrpPending呢,我冥思苦想了一天也没有想明白,后来在网上看到一句话,"Irp->PendingReturned说明下层驱动是异步返回的",我一下子就醒悟了,马上知道了该什么时候调用IoMarkIrpPending。

我进一步看到看了windows内核情景分析这本书关于IoCompleteRequest函数的内容,大概情况是这样

(1)最底层驱动调用IoCompleteRequest

(2)IoCompleteRequest中从下到上循环每一层驱动
  {
      a. 如果本层驱动有完成例程,就调用完成例程
      b. 如果本层没有完成例程,就向上传播Pending位
  }
  循环完了之后,根据是否是PendingReturned执行不同的清理操作


这样我就明白了 在上层驱动的完成例程中IoMarkIrpPending很重要。

谢谢,有什么说的不对的地方,欢迎指正
上一篇: 虚拟机不识别USB设备了-已解决  下一篇: 枚举USB设备(代码)


留言
 
查看全部留言



Copyright © 2009 BY MISSSIR,网站版权所有。 京ICP备09095257号

花褪残红青青杏小。燕子飞时,绿水人家绕。枝上柳绵吹又少。天涯何处无芳草。
墙里秋千墙外道。墙外行人,墙里佳人笑。笑渐不闻声渐悄。多情总被无情恼。

今年访问量 24291  今月访问量 851  今日访问量 29 

关于 您的地址
您的大名 您的邮箱
QQ/MSN/Tel 是否保密
留言内容