说明
产生此错误检查的错误通常发生在安装有故障的设备驱动程序、系统服务或者 BIOS 之后。
如果我们在升级到较新版本的 Windows 时遇到错误检查 0xA,则该错误可能是由设备驱动程序、系统服务、病毒扫描程序或者与新版本不兼容的备份工具引起的。
解决硬件故障问题:如果最近系统中添加了硬件,请将其移除以查看错误是否再次出现。
如果现有硬件出现故障,请移除或者更换故障组件。
运行系统制造商提供的硬件诊断程序。
有关这些步骤的详细信息,请参阅计算机的用户手册。
解决故障系统服务问题:禁用服务并确认这样做是否可以解决错误。
如果是这样,请联系系统服务的制造商以了解可能的更新。
如果在系统启动期间出现错误,请调查 Windows 修复选项。
有关详细信息,请参阅 Windows 10 中的恢复选项。
解决防病毒软件问题:禁用该程序并确认这样做是否可以解决错误。
如果是,请联系程序制造商以了解可能的更新。
有关故障排除错误检查的一般信息,请参阅蓝屏数据。
原因
此错误检查通常是由使用不正确地址的内核模式设备驱动程序引起的。
此错误检查表明在引发中断请求级别 (IRQL) 时尝试访问无效地址。
这是错误的内存指针或者设备驱动程序代码的可分页问题。
以下是一些可用于对导致错误检查的编码错误类型进行分类的一般准则:
- 如果参数 1 小于 0x1000,则问题可能是 NULL 指针取消引用。
- 如果 !pool 报告参数 1 是分页池(或者其他类型的可分页内存),则 IRQL 太高而无法访问此数据。
以较低的 IRQL 运行,或者在非分页池中分配数据。
- 如果参数 3 表明这是尝试执行可分页代码,则 IRQL 太高而无法调用此函数。以较低的 IRQL 运行,或者不要将代码标记为可分页。
- 否则,这可能是一个错误的指针,可能是由释放后使用或者位翻转引起的。使用 !pte、!address 和 ln(列出最近的符号)调查参数 1 的有效性。
IRQL_NOT_LESS_OR_EQUAL 参数
参数 | 描述 |
---|---|
1 | 无法访问的虚拟内存地址。 在这个地址上使用 !pool 来查看它是否是分页池。 这些命令也可用于收集有关失败的信息:!pte、!address 和 ln(列出最近的符号)。 |
2 | 发生故障时的 IRQL。 值:2:发生故障时 IRQL 为 DISPATCH_LEVEL。 |
3 | 描述导致故障的操作的位字段。请注意,位 3 仅在支持此级别报告的芯片组上可用。 位 0 值: 0 - 读操作 |
4 | 1 - 写操作 |
解决方法
如果内核调试器可用,请获取堆栈跟踪。
首先运行 !analyze 调试器扩展以显示有关错误检查的信息。
(!analyze 扩展有助于确定根本原因。
详细步骤查看我们的教程 在windows 中使用WinDBG 调试dmp文件
)接下来,输入 k*(显示堆栈回溯)命令之一以查看调用堆栈。
收集信息
检查驱动程序的名称(如果该名称列在蓝屏上)。
检查事件查看器中的系统日志以获取可能有助于查明导致错误的设备或者驱动程序的其他错误消息。
在系统日志中查找与蓝屏在同一时间窗口中发生的严重错误。
Driver Verifier
Driver Verifier 是一种实时运行以检查驱动程序行为的工具。
例如,Driver Verifier 检查内存资源的使用,例如内存池。
如果它在驱动程序代码的执行中发现错误,它会主动创建一个异常,以允许进一步检查该部分驱动程序代码。
Driver Verifier Manager 内置于 Windows 中,可在所有 Windows PC 上使用。
要启动 Driver Verifier Manager,请在命令提示符下键入 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
IRQL_NOT_LESS_OR_EQUAL 错误检查的值为 0x0000000A。
这表明 Microsoft Windows 或者内核模式驱动程序在引发中断请求级别 (IRQL) 时访问了无效地址的分页内存。
这通常是错误指针或者可分页问题的结果。