可能是Handle的问题
之前一篇文章:http://blog.sinzy.net/lamb/entry/19024 得出的结论说RX的驱动存在内存泄露,这个说法可能不准确。这里给平反一下。
因为仅从windbg中的内容看,只能说明RX的驱动有bug,不能说明它泄露内存池。
f96c7acc 80994673 000000c4 0000003c cdefb104 nt!KeBugCheckEx+0x1b
f96c7aec b9945698 cdefb104 000f0000 82317040 nt!VerifierReferenceObjectByHandle+0x6c
WARNING: Stack unwind information not available. Following frames may be wrong.
f96c7b14 b9945715 00000000 f96c7b24 00000000 HookNtos+0x2698
f96c7d48 808077ec cdefb104 7c94da87 000d8b58 HookNtos+0x2715
f96c7d48 7c92eb94 cdefb104 7c94da87 000d8b58 nt!KiFastCallEntry+0xf8
018efe40 00000000 00000000 00000000 00000000 0x7c92eb94
HookNtos即将调用ObReferenceObjectByHandle,传入的handle是一个有问题的值,DriverVerifier在传递前先进行了handle检查,发现handle有问题,所以让系统崩溃了
有问题的Handle:
kd> dd cdefb104 L1
cdefb104 ????????
驱动应该在向下传递参数前判断一下,比如 IF (pHandle=Null)。
当时用Poolmon查看实时运行时占用池最多的是360Safebox的驱动,因为我选中了11个驱动程序,也许还没有轮到真正的Leaker泄露内存的时候,蓝屏已经发生了,有人不幸被抓了出来。
只是,我不明白的是Pool Tracking 选项为什么抓到了一个看似和内存没有关系的bug。。查了些资料,暂时还无解。。