首页
社区
课程
招聘
[求助]驱动中IoCompletion函数疑惑
2013-9-30 13:37 3718

[求助]驱动中IoCompletion函数疑惑

2013-9-30 13:37
3718
具体问题如下所述,诚心求教!
msdn上关于IoCompletion有如下一段说明:


从这段说明上,我个人得到的信息是Context参数指向的内存要存储在非分页空间,确保DISPATCH_LEVEL下也能使用;但是实际看到开源代码或者MSDN自己的示例代码,好像又不是这么用的;

如MSDN(http://technet.microsoft.com/zh-cn/library/hh450899):



以下代码摘自于Libusb:


上面二份代码完成例程中的Context参数Kevent指向的内存都在栈中,不是ExAllocatePool等函数分配的非分页内存,这样的代码安全吗?当然通过实际测试此完成例程的IRQL发现为0,但是还有其他更加充分的理由能表明其安全性吗?(或者说USB相关的都是IRQL为0?)

通过阅读wrk中的IopfCompleteRequest:



发现完成例程被调用时,内部的IRQL没有做过调整,那么MSDN中担心的DISPATCH_LEVEL难道是在IopfCompleteRequest外部调整的,也就是特定驱动的才会在外部调整IRQL?

还有我发现在MSDN的示例代码中会判断PendingReturned为true时再调用KeSetEvent?但是在libusb中又没有这么做,同时IopfCompleteRequest中不是已经表明了调用IoComplete就表明已经执行完成了?那MSDN跟LIBUSB中的参考代码究竟哪一份才更靠谱?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回