-
-
[求助]在kbdclass里面如何取得等待中的IRP?
-
发表于:
2009-4-11 10:28
7163
-
[求助]在kbdclass里面如何取得等待中的IRP?
上接http://bbs.pediy.com/showthread.php?t=85883
按照大侠指点的方法,我在虚拟机上确实可以从ReadQueue里面得到等待中的IRP了,并且也能成功Cancel。
但是我在真实的机器中测试,得到的IRP::Cancel不是0,如果调用IoCancelIrp就会蓝屏,调试信息如下:
WaitWakeIrp = 89AF90E0
Irp Address = 89AF6018, Cancel = 188, CancelRoutine = 8A5BE4F8
READQUEUE IRP = 89AF6018
Irp Address = 89AF90E0, Cancel = 76, CancelRoutine = 00000000
DRIVERUNLOAD
Irp Address = 85F05008, Cancel = 0, CancelRoutine = BABD0306
第一个就不用说了;
第二个我试过遍历ListEntry::Flink,第二、三个是Axxxxxxx的地址,第四个是Exxxxxxx的地址,之后就蓝屏了。
第三个是我在IRP_MJ_READ里面保存的IRP地址,把这个保存的地址进行Cancel,可以成功取消,也就是说驱动卸载是没问题的。
我用的虚拟机和真实机器都是XP-SP3,都是PS/2键盘,虚拟机下面成功了,是否意味着还有希望可以在真实机器里面得到等待中的IRP呢?我还可以做哪些尝试呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课