驱动开发之 完成IRP的几种情况
来源:互联网 发布:淘宝衣服款式怎么设置 编辑:程序博客网 时间:2024/05/23 00:42
完成IRP时是忽略还是拷贝当前栈空间,返回什么状态值,以及完成函数中如何结束IRP,是不那么容易弄清楚的一件事情。
下面做个总结:
1.如果对IRP完成之后的事情无兴趣,则直接忽略当前IO_STACK_LOCATION(从代码上说,调用内核API函数IoSkipCurrentIrpLocation),然后向下传递请求,返回IoCallDriver所返回的状态。
2.不但对IRP完成之后的事情无兴趣,而且不打算继续传递,打算立即返回成功或失败,那么不用忽略或者拷贝当前IO_STACK_LOCATION,填写IRP的状态参数后调用IoCompleteRequest,并返回自己想返回的结果。
3.如果对IRP完成之后的事情有兴趣,并打算在完成函数中处理,应该首先拷贝当前IO_STACK_LOCATION(IoCopyCurrentIrpStackLocationToNext),然后指定完成函数,并返回IoCallDriver()所返回的状态。在完成函数中,不需要调用IoCompleteRequest,直接返回IRP的当前状态即可。
4.同 3 的情况,有时候,会把任务塞入系统工作线程或者希望在另外的线程中去完成IRP,那么完成函数中应该返回STATUS_MORE_PROCESSING_REQUIRED,此时完成irp时应该调用IoCompleteRequest。另一种类似的情况是在分发函数中等待完成函数中设置的事件,那么完成函数返回STATUS_MORE_PROCESSING_REQUIRED,分发函数在等待结束后调用IoCompleteRequest。
0 0
- 驱动开发之 完成IRP的几种情况
- 驱动开发(13)IRP 的异步完成和 CancelRoutine
- 驱动开发之 常见IRP
- 驱动开发程序的IRP处理过程
- 分层驱动模型中IRP的传递与完成
- 分层驱动模型中IRP的传递与完成
- IRP的完成例程
- IRP的异步完成
- 驱动开发之 最简单的处理IRP的派遣函数
- WDM驱动之IRP处理:取消IRP
- WDM驱动之IRP处理:取消IRP
- IRP的简单完成例程!
- IRP的传递与完成
- Irp的传递与完成
- Windows驱动开发WDM (16)- 完成例程 (重新获得IRP控制权)
- IRP的同步完成与异步完成
- IRP的同步完成与异步完成
- java游戏开发--简单的几行代码就完成了驱动小精灵的编程
- Linux netstat命令详解
- JSON字符串取值,不知道key时
- java hibernate SchemaExport 创建数据表
- 【开源夏令营第六周】IPv6的测试
- Mac修改host文件方法
- 驱动开发之 完成IRP的几种情况
- #define 乘除法可以不加括号?
- java基础内容(2)
- 基于KNN算法的文本分类研究
- hdu1248
- wait events
- 在Appdelegate.m中有 多个handleopenURL
- 累积式137学习法读经——赖国全先生
- 解决 vs2010问题 error MSB8008: 指定的平台工具集(v110)未安装或无效