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

预留

预留

预留

尝试处理电源事件时发生内部故障。 有关详细信息,请参阅参数 1 等于 0x2 时调试 Bug 检查 0xA0

0x3

预期校验和

实际校验和

失败的行号

休眠上下文页的校验和与其预期的校验和不匹配。

0x4

预期校验和

实际校验和

失败的行号

即将写入休眠文件的页面的校验和与预期校验和不匹配。

0x5

预留

预留

预留

未知的关闭代码已发送到系统关闭处理程序。

0x7

预留

预留

预留

发生了未经处理的异常。 有关详细信息,请参阅参数 1 等于 0x7 时调试 Bug 检查 0xA0

0x8

此参数始终设置为 0x100。

设备对象

POWER_CHANNEL_SUMMARY

处理系统电源事件时发生致命错误。

0x9

状态代码

镜像阶段

Reserved

准备休眠文件时发生致命错误。

0xA

0:恢复后立即请求进行 Bug 检查。

1:在启用所有不可分页的设备后,在恢复期间请求了一个 Bug 检查。

2:在启用所有设备后,在恢复期间请求了一个 Bug 检查。

预留

预留

出于调试目的唤醒时,请求进行 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

预留

预留

预留

系统未能禁用系统睡眠状态,但为确保数据完整性必须这样做。

0x111

预留

预留

预留

驱动程序已表明用户存在,并且用户已启用调试选项来捕获调用堆栈。

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

预留

预留

驱动程序试图使用 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

预留

预留

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

预留

预留

运行时电源工作线程已阻塞太久。

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

预留

预留

预留

启用自动转换时,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 失败代码。

预留

预留

运行时 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

预留

预留

预留

协调的空闲状态转换没有及时完成。

0x705

PEPHANDLE

通知

标识非法更改字段的四个字符标记。 内核调试器中的解码标记,其中包含:.formats 标记,标记包含在< >中。

Power Engine 插件已更改传入通知的缓冲区中的只读字段。

0x706

通知

标识包含非法值的字段的四个字符标记。 内核调试器中的解码标记,其中包含:.formats 标记,标记包含在< >中。

非法值或存在非法值的数组索引

Power Engine 插件在传递到通知的缓冲区的某个字段中返回了非法值。

0x800

CS 当前状态

预留

预留

当系统处于连接待机状态时,监视器意外打开。

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) 不受支持的处理器体系结构。

预留

预留

(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

  1. 检查调用堆栈。 查找 ntoskrnl!PopExceptionFilter 函数。 此函数的第一个参数包含以下代码。

     (error_code << 16) | _LINE_
    

    如果调用方为 PopExceptionFilter,则此函数的第一个参数的类型为 PEXCEPTION_POINTERS。 请注意此参数的值。

  2. 使用 dt (显示类型) 命令并指定在上一步中找到的值作为参数

    dt nt!_EXCEPTION_POINTERS argument 
    

    此命令显示结构。 请注意上下文记录的地址。

  3. 使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录

    .cxr record 
    

    此命令将寄存器上下文设置为正确的值。

  4. 使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。

参数 1 等于 0x7 时调试 Bug 检查 0xA0

  1. 检查调用堆栈。 查找 ntoskrnl!PopExceptionFilter 函数。 此函数的第一个参数的类型为 PEXCEPTION_POINTERS。 请注意此参数的值。

  2. 使用 dt (显示类型) 命令并指定在上一步中找到的值作为参数

    dt nt!_EXCEPTION_POINTERS argument 
    

    此命令显示结构。 请注意上下文记录的地址。

  3. 使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录

    .cxr record 
    

    此命令将寄存器上下文设置为正确的值。

  4. 使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。

参数 1 等于 0x101 时调试 Bug 检查 0xA0

  1. 使用 dt (显示类型) 命令并将参数 3 的值指定为参数

    dt nt!_EXCEPTION_POINTERS argument 
    

    此命令显示结构。 请注意上下文记录的地址。

  2. 使用 .cxr(显示上下文记录)命令并指定在上一步中找到的上下文记录作为记录

    .cxr record 
    

    此命令将寄存器上下文设置为正确的值。

  3. 使用各种命令分析错误的来源。 以 kb 开头(显示堆栈回溯)。

另请参阅

Bug 检查代码参考