首页 > Windows驱动开发 > 蓝屏MULTIPLE_IRP_COMPLETE_REQUESTS

蓝屏MULTIPLE_IRP_COMPLETE_REQUESTS

今天写了一会IRP的同步处理,结果就不停的蓝屏。用WinDbg调试尽然还停留在一个ExFreePool行上,其实错误久发生在上一行的IoCompleteRequest。从这个蓝屏代号来看,可以看出来是“有多个IRP完成请求”。可是我找了好久才发现原因,主要是WinDbg的错误提示,弄得我以为链表的哪里弄错了。

最后一行一行代码的看,问题还是找到了。先前的IRP本来是用IoMarkIrpPending进行了挂起操作,但是派遣函数仍然返回了STATUS_SUCCESS,结果在IRP_MJ_CLEANUP中,IoCompleteRequest的时候问题就出来了。

事实上从IRPTrace和自己的应用层程序也可以看出来,ReadFile正常返回了,理论上来说应该返回FALSE,并且GetLastError返回ERROR_IO_PENDING的。就在于最开始的IRP_MJ_READ派遣函数不应该返回STATUS_SUCCESS,而应该返回STATUS_PENDING。

而从IRPTrace中,对于PENDING也应该看到漏斗的形状,而蓝屏之前并没有看到漏斗,而是看到IRP被完成了。最终问题就是在返回值上了。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 蓝屏MULTIPLE_IRP_COMPLETE_REQUESTS
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 本文目前尚无任何评论.