约有 27 项符合查询结果, 以下是第 3 - 3项。
费时 < 1 秒。
但是 IRQL >= DPC 且页面无效,这就违背了 IRQL 的基本准则。
是啊,我也是这样认为的,但是系统是在什么地方判断出IRQL >= DPC 的呢?还是引用我前面问过的话:
“。。。好像PreviousIrql就没有和谁比较过。。。”,例如,是不是应该有类似这样的比较:
if ( PreviousIrql >= DISPATCH_LEVEL )
BugCheck...
谢谢
Posted in Windows内核调试
by
yushang
on 2009-08-17
不过好像PreviousIrql就没有和谁比较过,似乎当前IRQL大于等于DPC的事实隐含在
if ( #if (_MI_PAGING_LEVELS >= 4) (PointerPxe->u.Hard.Valid == 0) || #endif #if (_MI_PAGING_LEVELS >= 3) (PointerPpe->u.Hard.Valid == 0) || #endif (PointerPde->u.Hard.Valid == 0) || ((!MI_PDE_MAPS_LARGE_PAGE (PointerPde)) && (PointerPte->u.Hard.Valid == 0)))
。。。
中,可以这样理解吗?
Posted in Windows内核调试
by
yushang
on 2009-08-13
都说在DPC级别时,不能调用导致缺页中断的函数,我猜想是不是Windows会在某个地方检查当前的IRQL,如果在DPC上就BugCheck一个IRQL_NOT_LESS_OR_EQUAL错误。如果是这样,是在哪个地方检查的呢?我试着检查了一下TRAP0E的代码,发现只要MmAccessFault返回0D0000006的话,就会导致TRAP0E BugCheck这个错误,但是MmAccessFault太长了,有人能提供一点启发吗?
Posted in Windows内核调试
by
yushang
on 2009-08-12