!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]