仙人指路的编程乐园
留言簿
主人介绍
返回主页
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
是否保密
留言内容