-
-
未解决
[求助] Windows 内核 关于 IRQL DISPATCH_LEVEL 的疑问
-
发表于:
2019-10-28 19:15
4692
-
未解决 [求助] Windows 内核 关于 IRQL DISPATCH_LEVEL 的疑问
如何理解 DISPATCH_LEVEL ?
网上一些文献和资料对于 DISPATCH_LEVEL 都有一些类似的描述。
下图是 《Windows 内核原理与实现》节选
红色选中部分: 当前IRQL为 DISPATCH_LEVEL 时不能调用 KeWaitForSingleObjec 函数。对于这个描述,我自己写了代码做了验证,现象与书中的描述也不尽相同。
下面是我的测试代码和输出结果:
首先将当前IRQL提升到DISPATCH_LEVEL,然后等待2秒,最后还原IRQL.
下面是输出结果:
测试代码写在一个驱动的派遣函数中,函数结束后一切正常,没有出现系统奔溃或者蓝屏。
我也查阅了 《Windows Internals》(第7版) 中对于 DISPATCH_LEVEL 的描述:
翻译一下第二段:
他对于为什么 "处于 DISPATCH_LEVEL 时不能调用等待函数" 的解释更加抽象了,我不确定是不是翻译的原因。
已经被这个问题困扰了许久,还请看雪的各位大神不吝赐教。
1. 如何理解 "处于 DISPATCH_LEVEL 时不能进行线程切换" ?
2. Windows 是如何实现 高IRQL屏蔽低IRQL中断请求的?
主要是第一个问题,网上很多资料都有类似的解释,但是又解释的很浅显很抽象。
再次谢谢看雪的大神。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)