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.
Important Info If You Have Received a STOP Code
If you received a blue screen error, or stop code, the computer has shut down abruptly to protect itself from data loss. A hardware device, its driver, or related software might have caused this error. If your copy of Windows came with your computer, call the manufacturer of your computer. If you purchased Windows separately from your computer, Microsoft provides support. To find contact info for Microsoft or your computer manufacturer, Contact Support.
If you have experience with computers and want to try to recover from this error, follow the steps provided in the Microsoft article Resolving STOP (Blue Screen) Errors in Windows.
These actions might prevent an error like this from happening again:
- Download and install updates and device drivers for your computer from Windows Update.
- Scan your computer for computer viruses.
- Check your hard disk for errors.
INTERNAL_POWER_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, Windows XP, and Windows 2000 only) Too many inrush power IRPs have been queued. 5: (Windows Server 2003, Windows XP, and Windows 2000 only) The power IRP has been sent to a passive level device object. 6: The system has failed to allocate a necessary power IRP. |
If Parameter 2 has a value of 1, the maximum number of references allowed. If Parameter 2 has a value of 2, 3, or 4, the maximum number of pending IRPs allowed. If Parameter 2 has a value of 6, the target device object. | If Parameter 2 has value of 6, indicates whether this is a system (0x0) or device (0x1) power IRP. |
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. For more information, see Debugging bug check 0xA0 when parameter 1 equals 0x2. |
|
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. For more information, see Debugging bug check 0xA0 when parameter 1 equals 0x7. |
|
0x8 |
This parameter is always set to 0x100. |
The device object |
POWER_CHANNEL_SUMMARY |
A fatal error occurred while processing a system power event. |
|
0x9 |
Status code |
Mirroring phase |
Reserved |
A fatal error occured while preparing the hibernate file. |
|
0xA |
0: A bug check was requested immediately upon resuming. 1: A bug check was requested during resume after all non-pageable devices had been powered on. 2: A bug check was requested during resume after all devices had been powered on. |
Reserved |
Reserved |
A bug check was requested when waking for debugging purposes. |
|
0xB |
Size of the hibernation file. |
Hibernation progress before running out of space 0: HIBERFILE_PROGRESS_FREE_MAP 1: HIBERFILE_PROGRESS_RESUME_CONTEXT 2: HIBERFILE_PROGRESS_PROCESSOR_STATEE 3: HIBERFILE_PROGRESS_MEMORY_RANGES 4: HIBERFILE_PROGRESS_TABLE_PAGES 5: HIBERFILE_PROGRESS_MEMORY_IMAGE |
Size of the remaining memory ranges. |
The hibernation file is too small. |
|
0xC |
Status code |
Dump stack context |
Reserved |
The dump stack failed to initialize. |
|
0x101 |
Reserved |
Exception pointer. |
Reserved |
An unhandled exception occured while processing a system power event. For more information, see Debugging bug check 0xA0 when parameter 1 equals 0x101. |
|
0x102 |
Reserved |
DUMP_INITIALIZATION_CONTEXT |
POP_HIBER_CONTEXT |
The hibernation working buffer size is not page aligned. |
|
0x103 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
All working pages have failed to be accounted for during the hibernation process. |
|
0x104 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
An attempt was made to map internal hibernation memory while the internal memory structures were locked. |
|
0x105 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
An attempt was made to map internal hibernation memory with an unsupported memory type flag. |
|
0x106 |
Reserved |
The memory descriptor list (MDL) |
Reserved |
A memory descriptor list was created during the hibernation process which describes memory that is not paged-aligned. |
|
0x107 |
Reserved |
POP_HIBER_CONTEXT |
PO_MEMORY_RANGE_ARRAY |
A data mismatch has occurred in the internal hibernation data structures. |
|
0x108 |
Reserved |
POP_HIBER_CONTEXT |
Reserved |
The disk subsystem failed to properly write part of the hibernation file. |
|
0x109 |
Reserved |
Expected checksum |
Actual checksum |
The checksum for the processor state data does not match its expected checksum. |
|
0x10A |
Reserved |
POP_HIBER_CONTEXT |
NTSTATUS |
The disk subsystem failed to properly read or write part of the hibernation file. |
|
0x10B |
Reserved |
Current hibernation progress |
Reserved |
An attempt was made to mark pages for the boot phase of hibernation at the wrong time using the PoSetHiberRange API. |
|
0x10C |
Reserved |
Flags provided to the API |
Length to mark |
The PoSetHiberRange API was called with invalid parameters. |
|
0x200 |
Reserved |
DEVICE_OBJECT |
DEVICE_OBJECT_POWER_EXTENSION |
An unknown device type is being checked for an idle state. |
|
0x300 |
Reserved |
DEVICE_OBJECT |
IRP |
An unknown status was returned from a battery power IRP. |
|
0x301 |
Reserved |
DEVICE_OBJECT |
IRP |
The battery has entered an unknown state. |
|
0x400 |
Reserved |
IO_STACK_LOCATION |
DEVICE_OBJECT |
A device has overrun its maximum number of reference counts. |
|
0x401 |
Reserved |
Pending IRP list |
DEVICE_OBJECT |
Too many inrush power IRPs have been queued. |
|
0x402 |
Reserved |
Pending IRP list |
DEVICE_OBJECT |
Too many inrush power IRPs have been queued. |
|
0x403 |
Reserved |
Pending IRP list |
DEVICE_OBJECT |
Too many inrush power IRPs have been queued. |
|
0x404 |
Reserved |
IO_STACK_LOCATION |
DEVICE_OBJECT |
A power IRP has been sent to a passive-level device object. |
|
0x500 |
Reserved |
IRP |
DEVICE_OBJECT |
An unknown status was returned from a thermal power IRP. |
|
0x600 |
DEVICE_OBJECT PDO |
Reserved |
Reserved |
A driver has attempted a duplicate registration with the Power Runtime Framework. |
|
0x601 |
POP_FX_DEVICE device |
PEP_DEVICE_REGISTER PEP |
Reserved |
No Power Engine Plugins accepted device registration. |
|
0x602 |
DEVICE_NODE device node |
Sleep count |
Reserved |
Device node sleep count does not match its activation count. |
|
0x603 |
POP_FX_PLUGIN |
Work request type |
Reserved |
A Power Engine Plugin made an invalid work request. |
|
0x605 |
Notification ID |
POP_FX_PLUGIN |
Reserved |
A Power Engine Plugin failed to accept mandatory device power management notification. |
|
0x606 |
POP_FX_COMPONENT |
POP_FX_COMPONENT_FLAGS |
New condition for the component |
A Power Engine Plugin attempted to transition a critical system resource component to an Active (or Idle) condition when the resource was already Active (or Idle). |
|
0x607 |
POP_FX_DEVICE |
NTSTATUS |
Reserved |
The acquisition of a runtime power management framework device-removal lock failed when it was required to succeed. |
|
0x608 |
POP_FX_COMPONENT |
POP_FX_COMPONENT_FLAGS |
Reserved |
A driver has attempted to transition a component to idle without a preceding active request. |
|
0x609 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
Duplicate Request Type 0: DevicePowerRequired 1: DevicePowerNotRequired |
A Power Engine Plugin has requested either device power required or device power not required without an intervening request of the opposite type. |
|
0x610 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
Reserved |
A Power Engine Plugin has requested device power not required while a previous device power required request is outstanding. |
|
0x611 |
POP_FX_PLUGIN |
POP_FX_DEVICE |
Invalid component index |
A Power Engine Plugin has requested an operation on an invalid component. |
|
0x612 |
POP_FX_PLUGIN PowerEnginePlugin |
Reserved |
Reserved |
A Power Engine Plugin has requested additional work to be done in the context of a device notification where no buffer was supplied by PO for the request. |
|
0x613 |
POP_FX_DEVICE |
Component index |
Operation 0: Complete device power not required 1: Report device powered on 2: Complete idle condition |
A driver has attempted to complete a request when no such outstanding request is pending. |
|
0x614 |
POP_FX_DEVICE |
Component index |
Illegal parameter 0: PO_FX_FLAG_BLOCKING used at IRQL >= DISPATCH_LEVEL 1: PO_FX_FLAG_BLOCKING and PO_FX_FLAG_ASYNC_ONLY both specified 2: Invalid component index |
A driver has requested an active/idle transition on a component with an illegal parameter. |
|
0x615 |
POP_FX_PLUGIN |
POP_FX_COMPONENT |
Illegal Action 0: Component not in idle state 0 1:Component is already active 2: No outstanding activation request 3: Outstanding idle state transition |
A Power Engine Plugin has illegally indicated the completion of a component activation. |
|
0x616 |
POP_FX_PLUGIN |
POP_FX_COMPONENT |
Illegal Action 0: Invalid idle state 1: Component is already in the requested state 2: Requested a non-zero idle state without passing through idle state 0 |
A Power Engine Plugin has illegally requested a component idle state transition. |
|
0x666 |
PPOP_PEP_ACTIVITY |
New activity type 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
Conflicting activity type 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
The default Power Engine Plugin has attempted to trigger a new activity that conflicts with another activity. |
|
0x667 |
POP_PEP_ACTIVITY |
Activity type 0: DevicePowerOn 1: ComponentIdleStateChange 2: ComponentActivating 3: ComponentActive 4: DevicePowerOff 5: DeviceSuspend |
POP_PEP_ACTIVITY_STATUS |
Default Power Engine Plugin has attempted to complete an activity that is not running. |
|
0x700 |
PEPHANDLE |
PEP_PPM_IDLE_SELECT |
Reserved |
A Power Engine Plugin has specified invalid processor idle dependencies. |
|
0x701 |
The index of the selected idle state of the hung processor |
The PRCB address of the hung processor |
The index of the hung processor |
A processor was not able to complete an idle transition within the allocated interval. This indicates the specified processor is hung. |
|
0x702 |
The index of the selected idle state of the processor |
The idle synchronization state of the processor |
The PRCB address of the hung processor |
A processor woke up from a non-interruptible state without the the OS initiating an explicit wake through the PEP (using the necessary PPM idle synchronization). |
Resolution
General Notes
In the preceding table, several of the parameters are pointers to structures. For example, if Parameter 2 is listed as DEVICE_OBJECT, then Parameter 2 is a pointer to a DEVICE_OBJECT structure. Some of the structures are defined in wdm.h, which is included in the Windows Driver Kit. For example, the following structures are defined in wdm.h.
- EXCEPTION_POINTERS
- DEVICE_OBJECT
- IO_STACK_LOCATION
- PEP_DEVICE_REGISTER
Some of the structures that appear in the preceding table are not defined in any public header file. You can see the definitions of those structures by using the dt debugger command. The following example shows how to use the dt command to see the DEVICE_OBJECT_POWER_EXTENSION structure.
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>
The following procedures will help you debug certain instances of this bug check.
Debugging bug check 0xA0 when Parameter 1 equals 0x2
- 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.
- 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.
- 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.
-
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
-
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.
- 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.
- 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.
-
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 0x101
- 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.
- 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.
-
Use a variety of commands to analyze the source of the error. Start with kb (Display Stack Backtrace) .
Send comments about this topic to Microsoft
Build date: 4/9/2013