Debugging Tools for Windows

Bug Check 0xA0: INTERNAL_POWER_ERROR

The INTERNAL_POWER_ERROR bug check has a value of 0x000000A0. This bug check indicates that the power policy manager experienced a fatal error.

Parameters

The following parameters appear on the blue screen. Parameter 1 indicates the type of violation. The meaning of the other parameters depends on the value of Parameter 1.

Parameter 1 Parameter 2 Parameter 3 Parameter 4 Cause
0x1 1: A device has overrun its maximum number of reference counts.

2, 3, or 4: (Windows Server 2003 and earlier only) Too many inrush power IRPs have been queued.

5: (Windows Server 2003 and earlier only) The power IRP has been sent to a passive level device object.

Except when Parameter 2 is equal to 5, this parameter indicates the maximum number of pending IRPs that are allowed.

If Parameter 2 is equal to 5, this parameter is reserved.

Reserved An error occurred during the handling of the power I/O request packet (IRP).
0x2 Reserved Reserved Reserved An internal failure has occurred while attempting to process a power event.
0x3 The expected checksum The actual checksum The line number of the failure The checksum for a hibernation context page does not match its expected checksum.
0x4 The expected checksum The actual checksum The line number of the failure The checksum for a page about to be written to the hibernation file does not match its expected checksum.
0x5 Reserved Reserved Reserved An unknown shutdown code has been sent to the system shutdown handler.
0x7 Reserved Reserved Reserved An unhandled exception has occurred.
0x8 A fatal error occurred while processing a system power event.

(See the following table for more details.)

When Parameter 1 is0x8, a fatal error occurred while processing a system power event. In this situation, Parameter 2 indicates the cause of the error. The meaning of the other parameters depends on the value of Parameter 2.

Parameter 2 Parameter 3 Parameter 4 Cause
0x100 The device object The address of the POWER_CHANNEL_SUMMARY structure (a record of device object states) An unknown device type is being processed.
0x101 Exception pointer Reserved An unhandled exception occurred.
0x102 The address of the DUMP_INITIALIZATION_CONTEXT structure, which contains the information that is passed from the system to the disk dump driver during the driver's initialization The address of the POP_HIBER_CONTEXT structure, which contains information about the state of the computer before hibernation The hibernation working buffer size is not page-aligned.
0x103 The address of the POP_HIBER_CONTEXT structure Reserved Some working pages were not accounted for during the hibernation process.
0x104 The address of the POP_HIBER_CONTEXT structure Reserved An attempt was made to map internal hibernation memory while the internal memory structures were locked.
0x105 The address of the POP_HIBER_CONTEXT structure Reserved An attempt was made to map internal hibernation memory with an unsupported memory type flag.
0x106 The MDL Reserved A memory descriptor list (MDL) was created during the hibernation process that describes memory that is not paged-aligned.
0x107 The address of the POP_HIBER_CONTEXT structure The address of the PO_MEMORY_RANGE_ARRAY structure A data mismatch occurred in the internal hibernation data structures.
0x108 The address of the POP_HIBER_CONTEXT structure Reserved The disk subsystem failed to properly write part of the hibernation file.
0x109 The expected checksum The actual checksum The checksum for the processor state data does not match its expected checksum.
0x10A The address of the POP_HIBER_CONTEXT structure The NTSTATUS failure code The disk subsystem failed to properly write part of the hibernation file.
0x200 The device object The address of the DEVICE_OBJECT_POWER_EXTENSION notification structure An unknown device type is being checked for an idle state.
0x300 The device object The IRP An unknown status was returned from a battery power IRP.
0x301 The device object The IRP The battery has entered an unknown state.
0x400 The IRP stack location The device object A device has overrun its maximum number of reference counts.
0x401,
0x402,
or
0x403
The pending IRP list The device object (Windows Server 2003 and earlier only) Too many inrush power IRPs have been queued.
0x404 The IRP stack location The device object (Windows Server 2003 and earlier only) A power IRP has been sent to a passive level device object.
0x500 The IRP The device object An unknown status was returned from a thermal power IRP.

Cause

For more information about the exact cause for the INTERNAL_POWER_ERROR bug check, see the tables in the Parameters section above.

Resolving the Problem

The following procedures will help you debug certain instances of this bug check.

Debugging bug check 0xA0 when Parameter 1 equals 0x2
  1. Examine the stack. Look for the ntoskrnl!PopExceptionFilter function. This function contains the following code as its first argument.

     (error_code << 16) | _LINE_

    If the caller is PopExceptionFilter, the first argument to this function is of type PEXCEPTION_POINTERS. Note the value of this argument.

  2. Use the dt (Display Type) command and specify the value that you found in the previous step as argument.

    dt nt!_EXCEPTION_POINTERS argument 

    . This command displays the structure. Note the address of the context record.

  3. Use the .cxr (Display Context Record) command and specify the context record that you found in the previous step as record.

    .cxr record 

    . This command sets the register context to the proper value.

  4. Use a variety of commands to analyze the source of the error. Start with kb (Display Stack Backtrace) .

Debugging bug check 0xA0 when Parameter 1 equals 0x7
  1. Examine the stack. Look for the ntoskrnl!PopExceptionFilter function. The first argument to this function is of type PEXCEPTION_POINTERS. Note the value of this argument.
  2. Use the dt (Display Type) command and specify the value that you found in the previous step as argument.

    dt nt!_EXCEPTION_POINTERS argument 

    This command displays the structure. Note the address of the context record.

  3. Use the .cxr (Display Context Record) command and specify the context record that you found in the previous step as record.

    .cxr record 

    This command sets the register context to the proper value.

  4. Use a variety of commands to analyze the source of the error. Start with kb (Display Stack Backtrace) .

Debugging bug check 0xA0 when Parameter 1 equals 0x8 and Parameter 2 equals 0x101
  1. Use the dt (Display Type) command and specify the value of Parameter 3 as argument.

    dt nt!_EXCEPTION_POINTERS argument 

    This command displays the structure. Note the address of the context record.

  2. Use the .cxr (Display Context Record) command and specify the context record that you found the previous step as record.

    .cxr record 

    This command sets the register context to the proper value.

  3. Use a variety of commands to analyze the source of the error. Start with kb (Display Stack Backtrace) .

Build machine: CAPEBUILD