!irql
!irql 扩展显示调试器中断之前目标计算机上处理器的中断请求级别 (IRQL)。
!irql [Processor]
参数
处理器
指定处理器。 输入处理器编号。 如果省略此参数,调试器将显示当前处理器的 IRQL。
DLL
!irql 扩展仅在 Windows Server 2003 及更高版本的 Windows 中可用。
Windows 2000 |
不可用 |
Windows XP |
不可用 |
Windows Server 2003 和更高版本 |
Kdexts.dll |
其他信息
有关 IRQL 的信息,请参阅 Windows 驱动程序工具包(WDK)文档和 Mark Russinovich 和 David Solomon 编写的 Microsoft Windows 内部资料。
注解
当目标计算机中断调试器时,IRQL 会更改,但会保存在调试器中断之前有效的 IRQL。 !irql 扩展显示保存的 IRQL。
同样,当发生 bug 检查并创建故障转储文件时,故障转储文件中保存的 IRQL 是紧接在 bug 检查之前的 IRQL,而不是执行 KeBugCheckEx 例程的 IRQL。
在这两种情况下,当前 IRQL 被提升到 DISPATCH_LEVEL(x86 体系结构除外)。 因此,如果发生多个这样的事件,那么显示的 IRQL 也将是 DISPATCH_LEVEL,这使得它对调试毫无用处。
!pcr 扩展在所有版本的 Windows 上显示当前的 IRQL,但当前 IRQL 通常没有用处。 在 bug 检查或调试器连接之前存在的 IRQL 更有趣,并且仅随 !irql 一起显示。
如果提供的处理器编号无效,或者存在内核损坏,调试器将显示一条消息“无法获取 PRCB 地址”。
下面是此扩展在双处理器 x86 计算机上的输出示例:
kd> !irql 0
Debugger saved IRQL for processor 0x0 -- 28 (CLOCK2_LEVEL)
kd> !irql 1
Debugger saved IRQL for processor 0x1 -- 0 (LOW_LEVEL)
如果调试器处于详细模式,则包含对 IRQL 本身的说明。
IRQL 编号的含义通常取决于处理器。 下面是 x64 处理器中的一个示例。 请注意,IRQL 编号与前面的示例相同,但 IRQL 的含义不同:
kd> !irql
Debugger saved IRQL for processor 0x0 -- 12 (SYNCH_LEVEL) [Synchronization level]