Bug 检查 0xA0:INTERNAL_POWER_ERROR
INTERNAL_POWER_ERROR Bug 检查的值为 0x000000A0。 此 Bug 检查表明电源策略管理器遇到致命错误。
重要
这篇文章适合程序员阅读。 如果你是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答。
INTERNAL_POWER_ERROR 参数
参数 1 表示违规类型。 其他参数的含义取决于参数 1 的值。
参数 1 | 参数 2 | 参数 3 | 参数 4 | 原因 |
---|---|---|---|---|
0x1 |
1:设备已超过其最大引用计数数量。 2、3 或 4:排队等候的浪涌电源 IRP 过多。 5:电源 IRP 已发送到被动级别设备对象。 6:系统未能分配必要的电源 IRP。 |
如果参数 2 的值为 1,则为允许的最大引用数。 如果参数 2 的值为 2、3 或 4,则为允许的最大挂起 IRP 数。 如果参数 2 的值为 6,则为目标设备对象。 |
如果参数 2 的值为 6,则表明这是系统 (0x0) 或设备 (0x1) 电源 IRP。 | 处理电源 I/O 请求数据包 (IRP) 时出错。 |
0x2 |
Reserved |
预留 |
保留 |
尝试处理电源事件时发生内部故障。 有关详细信息,请参阅参数 1 等于 0x2 时调试 Bug 检查 0xA0。 |
0x3 |
预期校验和 |
实际校验和 |
失败的行号 |
休眠上下文页的校验和与其预期的校验和不匹配。 |
0x4 |
预期校验和 |
实际校验和 |
失败的行号 |
即将写入休眠文件的页面的校验和与预期校验和不匹配。 |
0x5 |
Reserved |
预留 |
保留 |
未知的关闭代码已发送到系统关闭处理程序。 |
0x7 |
Reserved |
预留 |
保留 |
发生了未经处理的异常。 有关详细信息,请参阅参数 1 等于 0x7 时调试 Bug 检查 0xA0。 |
0x8 |
此参数始终设置为 0x100。 |
设备对象 |
POWER_CHANNEL_SUMMARY |
处理系统电源事件时发生致命错误。 |
0x9 |
状态代码 |
镜像阶段 |
Reserved |
准备休眠文件时发生致命错误。 |
0xA |
0:恢复后立即请求进行 Bug 检查。 1:在启用所有不可分页的设备后,在恢复期间请求了一个 Bug 检查。 2:在启用所有设备后,在恢复期间请求了一个 Bug 检查。 |
Reserved |
保留 |
出于调试目的唤醒时,请求进行 Bug 检查。 |
0xB |
休眠文件的大小。 |
空间耗尽前的休眠进度 0: HIBERFILE_PROGRESS_FREE_MAP 1: HIBERFILE_PROGRESS_RESUME_CONTEXT 2: HIBERFILE_PROGRESS_PROCESSOR_STATE 3: HIBERFILE_PROGRESS_SECURE_RANGES 4: HIBERFILE_PROGRESS_MEMORY_RANGES 5: HIBERFILE_PROGRESS_TABLE_PAGES 6: HIBERFILE_PROGRESS_MEMORY_IMAGE |
参数 2 为 4 时,剩余内存范围的大小。 |
休眠文件太小。 |
0xC |
状态代码 |
转储堆栈上下文 |
Reserved |
转储堆栈未能初始化。 |
0xD |
正在转换的系统电源状态。 |
最近到达的睡眠检查点。 |
指向 POP_POWER_ACTION 结构的指针。 |
系统未能及时完成电源转换。 |
0xF |
正在转换的系统电源状态。 |
最近到达的睡眠检查点。 |
指向当前处理请求的线程的指针。 |
系统未能及时完成电源转换。 |
0xF0 |
正在转换的系统电源状态。 |
最近到达的睡眠检查点。 |
指向当前处理请求的线程的指针。 |
系统未能及时完成(暂停)电源转换。 |
0xF1 |
正在转换的系统电源状态。 |
最近到达的睡眠检查点。 |
指向当前处理请求的线程的指针。 |
系统未能及时完成(恢复)电源转换。 |
参数 1 | 参数 2 | 参数 3 | 参数 4 | 原因 |
---|---|---|---|---|
0x101 |
Reserved |
异常指针。 |
Reserved |
处理系统电源事件时发生未经处理的异常。 有关详细信息,请参阅参数 1 等于 0x101 时调试 Bug 检查 0xA0。 |
0x102 |
Reserved |
DUMP_INITIALIZATION_CONTEXT |
POP_HIBER_CONTEXT |
休眠工作缓冲区大小未进行页面对齐。 |
0x103 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
在休眠过程中,所有工作页都未能被考虑在内。 |
0x104 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
在内部内存结构被锁定时,尝试映射内部休眠内存。 |
0x105 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
尝试使用不受支持的内存类型标志映射内部休眠内存。 |
0x106 |
Reserved |
内存描述符列表 (MDL) |
Reserved |
在休眠过程中创建了内存描述符列表,描述了未分页对齐的内存。 |
0x107 |
Reserved |
POP_HIBER_CONTEXT |
PO_MEMORY_RANGE_ARRAY |
内部休眠数据结构中出现数据不匹配。 |
0x108 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
磁盘子系统未能正确写入部分休眠文件。 |
0x109 |
Reserved |
预期校验和 |
实际校验和 |
处理器状态数据的校验和与其预期校验和不匹配。 |
0x10A |
Reserved |
POP_HIBER_CONTEXT |
NTSTATUS 失败代码 |
磁盘子系统未能正确读取或写入部分休眠文件。 |
0x10B |
Reserved |
当前休眠进度 |
Reserved |
试图使用 PoSetHiberRange API 在错误的时间标记休眠启动阶段的页面。 |
0x10C |
Reserved |
提供给 API 的标志 |
要标记的长度 |
使用无效参数调用了 PoSetHiberRange API。 |
0x10D |
Reserved |
POP_HIBER_CONTEXT |
NTSTATUS 失败代码 |
提供恢复数据时,安全内核子系统失败。 |
0x10E |
Reserved |
校验和不正确 |
以前的磁盘读取校验和 |
从休眠文件读取时,磁盘子系统返回损坏数据。 |
0x10F |
当前系统睡眠检查点。 |
内部错误的类型。 0:在分页禁用时但在 Po 禁用所有处理器上的中断之前写入检查点。 1:非 0 的 CPU 尝试在系统睡眠的中断禁用阶段写入检查点。 2:系统中的另一段代码正在执行 EFI 运行时服务。 |
Reserved |
在检查指向系统睡眠进度时发生内部错误。 |
0x110 |
Reserved |
预留 |
保留 |
系统未能禁用系统睡眠状态,但为确保数据完整性必须这样做。 |
0x111 |
Reserved |
预留 |
保留 |
驱动程序已表明用户存在,并且用户已启用调试选项来捕获调用堆栈。 |
0x200 |
Reserved |
DEVICE_OBJECT |
DEVICE_OBJECT_POWER_EXTENSION |
正在检查未知设备类型的空闲状态。 |
0x300 |
Reserved |
DEVICE_OBJECT |
IRP |
从电池电源 IRP 返回未知状态。 |
0x301 |
Reserved |
DEVICE_OBJECT |
IRP |
电池已进入未知状态。 |
0x400 |
Reserved |
IO_STACK_LOCATION |
DEVICE_OBJECT |
设备已超过其最大引用计数数量。 |
0x401 |
Reserved |
挂起的 IRP 列表 |
DEVICE_OBJECT |
排队等候的浪涌电源 IRP 过多。 |
0x402 |
Reserved |
挂起的 IRP 列表 |
DEVICE_OBJECT |
排队等候的浪涌电源 IRP 过多。 |
0x403 |
Reserved |
挂起的 IRP 列表 |
DEVICE_OBJECT |
排队等候的浪涌电源 IRP 过多。 |
0x404 |
Reserved |
IO_STACK_LOCATION |
DEVICE_OBJECT |
电源 IRP 已发送到被动级别设备对象。 |
0x500 |
Reserved |
IRP |
DEVICE_OBJECT |
从热电 IRP 返回未知状态。 |
参数 1 | 参数 2 | 参数 3 | 参数 4 | 原因 |
---|---|---|---|---|
0x600 |
DEVICE_OBJECT PDO |
Reserved |
保留 |
驱动程序试图使用 Power Runtime Framework 进行重复注册。 |
0x601 |
POP_FX_DEVICE 设备 |
PEP_DEVICE_REGISTER PEP |
Reserved |
没有 Power Engine 插件接受设备注册。 |
0x602 |
DEVICE_NODE 设备节点 |
睡眠计数 |
Reserved |
设备节点睡眠计数与其激活计数不匹配。 |
0x603 |
POP_FX_PLUGIN |
工作请求类型 |
Reserved |
Power Engine 插件发出了无效的工作请求。 |
0x605 |
通知 ID |
POP_FX_PLUGIN |
Reserved |
Power Engine 插件未能接受强制性设备电源管理通知。 |
0x606 |
POP_FX_COMPONENT |
POP_FX_COMPONENT_FLAGS |
组件的新条件 |
当资源已处于活动状态(或空闲)状态时,Power Engine 插件尝试将关键系统资源组件转换为活动(或空闲)条件。 |
0x607 |
POP_FX_DEVICE |
NTSTATUS |
Reserved |
当要求成功时,获取运行时电源管理框架设备删除锁定失败。 |
0x608 |
POP_FX_COMPONENT |
POP_FX_COMPONENT_FLAGS |
Reserved |
驱动程序试图在没有先前的活动请求的情况下将组件转换为空闲状态。 |
0x609 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
重复的请求类型 0: DevicePowerRequired 1: DevicePowerNotRequired |
Power Engine 插件已请求“需要设备电源”或“不需要设备电源”,没有提出相反类型的干预请求。 |
0x610 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
Reserved |
Power Engine 插件已请求“不需要设备电源”,而以前的“需要设备电源”请求尚未处理完成。 |
0x611 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
组件索引无效 |
Power Engine 插件已请求对无效组件执行操作。 |
0x612 |
POP_FX_PLUGIN PowerEnginePlugin |
Reserved |
保留 |
Power Engine 插件已请求在设备通知的上下文中执行其他工作,其中 PO 未为该请求提供任何缓冲区。 |
0x613 |
POP_FX_DEVICE |
组件索引 |
操作 0:无需完整的设备电源 1:报告设备已打开 2:完全空闲条件 |
当没有此类未完成的请求挂起时,驱动程序试图完成请求。 |
0x614 |
POP_FX_DEVICE |
组件索引 |
非法参数 0: IRQL 中使用的PO_FX_FLAG_BLOCKING >= DISPATCH_LEVEL 1:指定了PO_FX_FLAG_BLOCKING 和 PO_FX_FLAG_ASYNC_ONLY 2:组件索引无效 |
驱动程序请求对具有非法参数的组件执行活动/空闲转换。 |
0x615 |
POP_FX_PLUGIN |
POP_FX_COMPONENT |
非法操作 0:组件未处于空闲状态 0 1:组件已处于活动状态 2:没有未完成的激活请求 3:未完成的空闲状态转换 |
Power Engine 插件非法指示组件激活完成。 |
0x616 |
POP_FX_PLUGIN |
POP_FX_COMPONENT |
非法操作 0:无效的空闲状态 1:组件已处于请求状态 2:请求了非零空闲状态,未通过空闲状态 0 |
Power Engine 插件已非法请求组件空闲状态转换。 |
0x617 |
POP_FX_PLUGIN PowerEnginePlugin |
UNICODE_STRING DeviceId |
PEP_DEVICE_REGISTER PEP 注册 |
处理设备注册通知时,Power Engine 插件已返回无效的接受类型。 |
0x618 |
POP_FX_WORK_ORDER_WATCHDOG_INFO WorkOrder |
Reserved |
保留 |
运行时电源工作线程已阻塞太久。 |
0x619 |
POP_FX_DEVICE 设备 |
组件索引 |
实际负责的子设备的 NULL 或 DEVICE_NODE |
设备长时间阻止进入最深的运行时空闲电源状态。 |
0x61A |
POP_FX_PLUGIN Power Engine Plugin |
POP_FX_DEVICE 设备 |
Reserved |
Power Engine 插件提供了有关组件性能状态信息的无效信息。 |
0x61B |
POP_FX_DEVICE 设备 |
组件索引 |
Reserved |
驱动程序在注册设备性能状态之前已发出性能状态请求。 |
0x61C |
POP_FX_DEVICE 设备 |
组件索引 |
无效参数 值: 0:PerfChangesCount 超过为此组件注册的性能状态集数 |
驱动程序已发出具有无效参数的性能状态请求。 |
0x61D |
POP_FX_DEVICE 设备 |
组件索引 |
未完成的请求上下文 |
驱动程序在以前的请求未完成时发出了性能状态请求。 |
0x61E |
Reserved |
预留 |
保留 |
启用自动转换时,Power Engine 插件试图在调试器设备上执行关键转换。 |
0x61F |
POP_FX_DEVICE 设备 |
协调空闲状态索引 |
Reserved |
Power Engine 插件试图为非平台范围状态的协调空闲状态启用自动调试器转换。 |
0x620 |
POP_FX_DEVICE 设备 |
协调空闲状态索引 |
Reserved |
Power Engine 插件尝试为非平台范围状态的协调空闲状态注册 D 状态依赖项。 |
0x621 |
POP_FX_DEVICE 设备 |
组件索引 |
协调空闲状态索引 |
Power Engine 插件尝试为非平台范围状态的协调空闲状态注册 F 状态依赖项。 |
0x622 |
父 POP_FX_COMPONENT |
子 POP_FX_COMPONENT |
Reserved |
驱动程序尝试从具有未完成依赖项的 PoFx 取消注册。 |
0x666 |
PPOP_PEP_ACTIVITY |
新活动类型 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
冲突的活动类型 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
默认 Power Engine 插件试图触发与另一个活动冲突的新活动。 |
0x667 |
POP_PEP_ACTIVITY |
活动类型 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
POP_PEP_ACTIVITY_STATUS |
默认 Power Engine 插件试图完成未运行的活动。 |
0x668 |
正在更新引用计数的 PPPM_COORDINATED_STATE。 |
此函数观察到的无效引用计数值。 |
正在更新的平台空闲状态的掩码。 |
默认 Power Engine 插件试图删除以前未受约束的平台空闲状态约束。 |
0x669 |
正在更新引用计数的 PPPM_COORDINATED_STATE。 |
此函数观察到的无效引用计数值。 |
Reserved |
默认 Power Engine 插件在尝试以独占方式通知 PoFx 平台空闲状态的可用性时,遇到内部一致性错误。 |
参数 1 | 参数 2 | 参数 3 | 参数 4 | 原因 |
---|---|---|---|---|
0x680 |
NTSTATUS 失败代码。 |
Reserved |
保留 |
运行时 Power Framework 无法分析所需的 ACPI 表,因为该表缺失或格式错误。 这通常是因为 BIOS 错误。 |
0x700 |
PEPHANDLE |
PEP_PPM_IDLE_SELECT |
Reserved |
Power Engine 插件指定了无效的处理器空闲依赖项。 |
0x701 |
挂起处理器的所选空闲状态的索引 |
挂起处理器的 PRCB 地址 |
挂起处理器的索引 |
处理器无法在分配的间隔内完成空闲转换。 这表示指定的处理器已挂起。 |
0x702 |
处理器的所选空闲状态的索引 |
处理器的空闲同步状态 |
挂起处理器的 PRCB 地址 |
处理器从不可中断的状态唤醒,无需操作系统通过 PEP 发起显式唤醒(使用必要的 PPM 空闲同步)。 |
0x703 |
PEPHANDLE |
PEP_PPM_QUERY_PLATFORM_STATE |
Reserved |
Power Engine 插件在查询平台状态通知期间指定了无效的处理器空闲依赖项。 |
0x704 |
Reserved |
预留 |
保留 |
协调的空闲状态转换没有及时完成。 |
0x705 |
PEPHANDLE |
通知 |
标识非法更改字段的四个字符标记。 内核调试器中的解码标记,其中包含:.formats 标记,标记包含在< >中。 |
Power Engine 插件已更改传入通知的缓冲区中的只读字段。 |
0x706 |
通知 |
标识包含非法值的字段的四个字符标记。 内核调试器中的解码标记,其中包含:.formats 标记,标记包含在< >中。 |
非法值或存在非法值的数组索引 |
Power Engine 插件在传递到通知的缓冲区的某个字段中返回了非法值。 |
0x800 |
CS 当前状态 |
Reserved |
保留 |
当系统处于连接待机状态时,监视器意外打开。 |
0x801 |
显示状态更改原因 |
更新显示状态的会话 ID |
Reserved |
发生了无效的显示状态转换。 |
0x802 |
导致显示关闭的 POWER_MONITOR_REQUEST_REASON |
如果启用了 Power Event Processor,则为 1,否则为 0。 |
指向 POP_PDC_IDLE_PHA标准版_WATCHDOG_CONTEXT 全局的指针。 |
PDC 系统空闲阶段 (NoCsPhase) 阻止转换到新式待机的时间超过预期。 |
0x900 |
指向负责任\的电源设置回调的指针 |
调用电源设置回调之前的 IRQL |
从电源设置回调返回后的 IRQL |
注册的电源设置回调返回了修改后的 IRQL。 这表示回调更改了 IRQL,但在返回之前未还原原始 IRQL。 |
0x901 |
DEVICE_OBJECT |
IRP |
线程的 APC 禁用计数 |
处理电源 IRP 时,驱动程序已启用/禁用内核 APC。 |
0x4001 |
KE 错误子代码。 值: 0x100:(INTERNAL_POWER_ERROR_KE_PROCESSOR_ON_TIMED_OUT) 固件启动处理器的时间过长。 0x101:(INTERNAL_POWER_ERROR_KE_INVALID_INTERRUPT_TARGET) 指定的中断目标无效。 0x102:(INTERNAL_POWER_ERROR_KE_标准版TDESTINATION_FAILED) 未能更改中断线的目标位置。 0x103:(INTERNAL_POWER_ERROR_KE_IPI_REQUEST_FAILED) 在重定向中断时未能发出 PI。 0x104:(INTERNAL_POWER_ERROR_KE_ARCH_NOT_SUPPORTED) 不受支持的处理器体系结构。 |
Reserved |
保留 |
(INTERNAL_POWER_ERROR_KE_SUBCODE) 在电源操作过程中,内核执行器出现内部故障。 |
0xAA64 |
错误代码 |
PSCI 函数 ID 正在进行中 |
可选的内部上下文相关数据 |
AArm64 Power State Coordination Interface (PSCI) 函数遇到不可恢复的严重错误。 |
解决方法
一般说明
在上表中,多个参数是指向结构的指针。 例如,如果参数 2 被列为 DEVICE_OBJECT,则参数 2 是指向 DEVICE_OBJECT 结构的指针。 某些结构在 wdm.h 中定义,该结构包含在 Windows 驱动程序工具包中。 例如,以下结构在 wdm.h 中定义。
- EXCEPTION_POINTERS
- DEVICE_OBJECT
- IO_STACK_LOCATION
- PEP_DEVICE_REGISTER
上表中显示的某些结构未在任何公共头文件中定义。 可以使用 dt 调试程序命令查看这些结构的定义。 以下示例演示如何使用 dt 命令查看 DEVICE_OBJECT_POWER_EXTENSION 结构。
3: kd> dt nt!DEVICE_OBJECT_POWER_EXTENSION
+0x000 IdleCount : Uint4B
+0x004 BusyCount : Uint4B
+0x008 BusyReference : Uint4B
+0x00c TotalBusyCount : Uint4B
+0x010 ConservationIdleTime : Uint4B
+0x014 PerformanceIdleTime : Uint4B
+0x018 DeviceObject : Ptr64 _DEVICE_OBJECT
+0x020 IdleList : _LIST_ENTRY
+0x030 IdleType : _POP_DEVICE_IDLE_TYPE
+0x034 IdleState : _DEVICE_POWER_STATE
+0x038 CurrentState : _DEVICE_POWER_STATE
+0x040 Volume : _LIST_ENTRY
+0x050 Specific : <unnamed-tag>
以下过程将帮助你调试此 Bug 检查的某些实例。
参数 1 等于 0x2 时调试 Bug 检查 0xA0
检查调用堆栈。 查找 ntoskrnl!PopExceptionFilter 函数。 此函数的第一个参数包含以下代码。
(error_code << 16) | _LINE_
如果调用方为 PopExceptionFilter,则此函数的第一个参数的类型为 PEXCEPTION_POINTERS。 请注意此参数的值。
使用 dt (显示类型) 命令并指定在上一步中找到的值作为参数。
dt nt!_EXCEPTION_POINTERS argument
此命令显示结构。 请注意上下文记录的地址。
使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录。
.cxr record
此命令将寄存器上下文设置为正确的值。
使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。
参数 1 等于 0x7 时调试 Bug 检查 0xA0
检查调用堆栈。 查找 ntoskrnl!PopExceptionFilter 函数。 此函数的第一个参数的类型为 PEXCEPTION_POINTERS。 请注意此参数的值。
使用 dt (显示类型) 命令并指定在上一步中找到的值作为参数。
dt nt!_EXCEPTION_POINTERS argument
此命令显示结构。 请注意上下文记录的地址。
使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录。
.cxr record
此命令将寄存器上下文设置为正确的值。
使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。
参数 1 等于 0x101 时调试 Bug 检查 0xA0
使用 dt (显示类型) 命令并将参数 3 的值指定为参数。
dt nt!_EXCEPTION_POINTERS argument
此命令显示结构。 请注意上下文记录的地址。
使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录。
.cxr record
此命令将寄存器上下文设置为正确的值。
使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。