关于NT驱动irp pending的注意事项
2013-02-09 13:38
323 查看
关于NT驱动irp pending的注意事项 | 发布时间:2008-04-02 20:38:30 |
但总体而言,pending一个IRP时候,要遵守下面的几条规则:
1.如果你在分派例程中不pending irp,而是完成它,那么一定要设置irp的完成状态和information,然后一定要调用IoCompleteRequest完成该IRP,最后返回你刚刚设定的irp完成状态:
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = bytesTransfered;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(STATUS_SUCCESS);//这里一定返回STATUS_SUCCESS,因为你刚刚设定Irp->IoStatus.Status = STATUS_SUCCESS
2.如果你要在分派例程中pending它,则你一定要先调用IoMarkIrpPending(),再返回STATUS_PENDING,绝对不能不IoMarkIrpPending就return STATUS_PENDING
3.如果你想返回lower driver的状态给上层驱动,那么如果lower driver返回的是STATUS_PENDING,那么你一定要将它传递上去,除非你有充分的理由返回STATUS_MORE_ PROCESSING_REQUIRED,自己搞定这个IRP,而不需要I/O manager插手.上upper driver传递pending状态的正确方法是在你的完成例程中(注意是在你的完成例程,不是分派例程)这样做:
If(Irp->PendingReturned) {
IoMarkIrpPending(Irp);
return STATUS_PENDING;
}
4.如果你没有指定完成例程,则不必管上面第3条规则,I/O manager会自动帮你搞定这一切。
转自:http://bbs.ednchina.com/BLOG_ARTICLE_100536.HTM
.
相关文章推荐
- 关于NVIDIA驱动安装一些注意事项
- linux中关于i2c驱动编写的注意事项
- linux驱动基础及注意事项
- 关于block使用的5点注意事项
- 关于Vista局域网文件共享的注意事项
- 关于在使用babylon导入外部模型的时候要注意的事项
- ae arcgis engine 关于面转线的方法和注意事项
- 关于java多线程网络编程的注意事项!
- 关于gem5预取实验时的一些注意事项
- 关于带图片的TextView-代码更改图片位置注意事项
- (5)关于JDBC中rs.next()的注意事项
- 关于RESTful一些注意事项,和自己整理的接口开发规范
- 关于MySQL密码生成策略使用的注意事项(定期更新)
- WPF关于改变ListBoxItem的颜色的注意事项以及如何找到ListBox中的ItemsPanel
- 关于Ibatis 2.3使用的注意事项
- 关于BroadcastReceiver的学习和注意事项
- 关于CSS的一些注意事项
- 关于网站地图stiemap的一些注意事项
- 关于libjpeg或libjpeg-turbo使用中的一个注意事项
- 关于swap函数的使用注意事项