错误检查 0xA:IRQL_NOT_LESS_OR_EQUAL

IRQL_NOT_LESS_OR_EQUAL 错误检查的值为 0x0000000A。 此错误检查表明在提高中断请求级别 (IRQL) 时,Microsoft Windows 或内核模式驱动程序访问了无效地址的分页内存。 原因通常是指针错误或分页性问题。

重要

这篇文章适合程序员阅读。 如果您是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答

IRQL_NOT_LESS_OR_EQUAL 参数

参数 说明
1 无法访问的虚拟内存地址。

使用此地址上的 !pool 查看它是否为分页池。 在收集有关失败的信息时,可能有用的其他命令是 !pte!addressln (列出最近符号)。
2 失败时的 IRQL。


2 - 发生故障时,IRQL 为 DISPATCH_LEVEL。
3 描述导致错误的操作的位域。 请注意,位 3 仅在支持此报告级别的芯片集上可用。

位 0 值
0 - 读取操作
1 - 写入操作

位 3 值
0 - 非执行操作
1 - 执行操作

位 0 和位 3 组合值
0x0 - 尝试从参数 1 中的地址读取时出错
0x1 - 尝试写入参数 1 中的地址时出错
0x8 - 尝试从参数 1 中的地址执行代码时出错

此值源于:
  • 调用在 DISPATCH_LEVEL 时无法在 DISPATCH_LEVEL 调用的函数。
  • 忘记释放自旋锁。
  • 在代码必须为不可分页时将其标记为可分页。 例如,如果代码获取了自旋锁,或在延迟过程调用中被调用。
4 发生故障时的指令指针。

使用此地址上的 ln(列出最近符号) 命令查看函数名称。

原因

此错误检查是由于使用不当地址的内核模式设备驱动程序引起的。

此错误检查表示在中断请求级别 (IRQL) 升高时尝试访问无效地址。 原因是内存指针错误或设备驱动程序代码的分页性问题。

可用于对导致错误检查的编码错误类型进行分类的一般准则如下所示:

  • 如果参数 1 小于0x1000,则问题可能是 NULL 指针的取消引用。

  • 如果 !pool 报告参数 1 是分页池(或其他类型的可分页内存),则 IRQL 太高,无法访问此数据。 在较低的 IRQL 上运行,或分配非分页池中的数据。

  • 如果参数 3 表明错误检查试图执行可分页代码,则 IRQL 太高,无法调用此函数。 在较低的 IRQL 上运行,或者不将代码标记为可分页。

  • 这可能是由于释放后使用或位翻转而导致的指针错误。 使用 !pte!addressln(列出最近符号)调查参数 1 的有效性。

解决方法

如果内核调试器可用,请获取堆栈跟踪。 首先运行 !analyze 调试器扩展以显示有关错误检查的信息。 !analyze 扩展有助于确定根本原因。 接下来,输入其中一个 k* (显示堆栈回溯) 命令以查看调用堆栈。

收集信息

检查驱动程序的名称是否列在蓝屏上。

在事件查看器中检查系统日志以获取其他错误消息,这可能有助于发现导致错误的设备或驱动程序。 在系统日志中查找与蓝屏同时出现的严重错误。

驱动程序验证程序

驱动程序验证程序是一个实时运行的工具,用于检查驱动程序的行为。 例如,驱动程序验证程序检查内存资源(如内存池)的使用。 如果在执行驱动程序代码时标识错误,它会主动创建一个异常,以允许进一步检查该部分驱动程序代码。 驱动程序验证程序管理器内置于 Windows 中,可在所有 Windows 电脑上使用。

若要启动驱动程序验证程序管理器,请在命令提示符下键入 verifier。 你可以配置要验证的驱动程序。 验证驱动程序的代码在运行时会增加开销,因此请尝试验证尽可能少的驱动程序。 有关详细信息,请参阅驱动程序验证程序

下方代码显示了一个调试示例:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

注解

在安装有故障的设备驱动程序、系统服务或 BIOS 后,通常会出现产生此错误检查的错误。

如果在升级到较新版本的 Windows 时遇到错误检查 0xA,该错误可能是由与新版本不兼容的设备驱动程序、系统服务、病毒扫描程序或备份工具引起的。

解决硬件故障问题:如果系统中最近添加了新硬件,请将其删除并查看错误是否再次出现。 如果现有硬件出现故障,请卸下或更换故障部件。 运行系统制造商提供的硬件诊断程序。 有关这些过程的详细信息,请参阅计算机的用户手册。

解决故障系统服务问题:禁用服务并确认该措施否可以解决错误。 如果可以,请联系系统服务的制造商以了解可能的更新。 如果在系统启动期间发生错误,请调查 Windows 修复选项。 有关详细信息,请参阅 Windows 10 中的恢复选项

解决防病毒软件问题:禁用程序并确认该措施是否可以解决错误。 如果是,请与程序制造商联系,了解可能的更新。

有关对错误检查进行故障排除的一般信息,请参阅分析错误检查蓝屏数据

另请参阅

错误检查代码参考