Geoff Chappell - Software Analyst
The POP_POWER_ACTION structure (formally _POP_POWER_ACTION) is the type of the kernel’s internal variable PopAction. This can be helpful to know when debugging problems with power management.
As merely the type of an internal variable, the POP_POWER_ACTION is not documented.
Also because the POP_POWER_ACTION is used only as the type of a variable that the kernel does not expose even to other kernel-mode software, it is highly susceptible to changing between builds:
Version | Size (x86) | Size (x64) |
---|---|---|
5.0 | 0x38 | |
5.1 to 5.2 | 0x40 | 0x50 |
6.0 | 0xA0 | 0xB0 |
6.1 | 0xB0 | 0xC0 |
6.2 to 6.3 | 0xD8 | 0xE0 |
10.0 | 0x0100 | 0x0108 |
1511 to 1703 | 0x0108 | 0x0110 |
1709 to 1809 | 0x0110 | 0x0118 |
1903 | 0x0178 | 0x01C0 |
2004 | 0x0178 | 0x01C8 |
The sizes in the preceding table and the offsets, names and types in the next are from type information in public symbol files for the kernel, starting with Windows XP. What’s known of it for Windows 2000 is inferred from comparing this version’s use of the PopAction variable with that of later versions.
Offset (x86) | Offset (x64) | Definition | Versions |
---|---|---|---|
0x00 | 0x00 |
UCHAR Updates; |
5.0 and higher |
0x01 | 0x01 |
UCHAR State; |
5.0 and higher |
0x02 | 0x02 |
UCHAR Shutdown; |
5.0 and higher |
0x04 | 0x04 |
POWER_ACTION Action; |
5.0 and higher |
0x08 | 0x08 |
SYSTEM_POWER_STATE LightestState; |
5.0 and higher |
0x0C | 0x0C |
ULONG Flags; |
5.0 and higher |
0x10 | 0x10 |
NTSTATUS Status; |
5.0 and higher |
0x14 | 0x14 |
POWER_POLICY_DEVICE_TYPE DeviceType; |
6.0 and higher |
0x18 | 0x18 |
ULONG DeviceTypeFlags; |
6.0 and higher |
0x14 (5.1 to 5.2); 0x1C |
0x14 (5.1 to 5.2); 0x1C |
UCHAR IrpMinor; |
5.0 and higher |
0x1D | 0x1D |
UCHAR Waking; |
6.0 and higher |
0x18 (5.1 to 5.2); 0x20 |
0x18 (5.2); 0x20 |
SYSTEM_POWER_STATE SystemState; |
5.0 and higher |
0x1C (5.1 to 5.2); 0x24 |
0x1C (5.2); 0x24 |
SYSTEM_POWER_STATE NextSystemState; |
5.0 and higher |
0x28 | 0x28 |
SYSTEM_POWER_STATE EffectiveSystemState; |
6.0 and higher |
0x2C | 0x2C |
SYSTEM_POWER_STATE CurrentSystemState; |
6.0 and higher |
0x20 (5.1 to 5.2); 0x30 |
0x20 (5.2); 0x30 |
POP_SHUTDOWN_BUG_CHECK *ShutdownBugCode; |
5.0 and higher |
0x24 (5.1 to 5.2); 0x34 |
0x28 (5.2); 0x38 |
POP_DEVICE_SYS_STATE *DevState; |
5.0 and higher |
0x38 (6.0) | 0x40 (6.0) |
POP_DISPLAY_RESUME_CONTEXT *DisplayResumeContext; |
6.0 only |
0x28 (5.1 to 5.2); 0x3C (6.0); 0x38 |
0x30 (5.2); 0x48 (6.0); 0x40 |
POP_HIBER_CONTEXT *HiberContext; |
5.0 and higher |
0x2C (5.1 to 5.2) | 0x38 (5.2) |
SYSTEM_POWER_STATE LastWakeState; |
5.0 to 5.2 |
0x30 (5.1 to 5.2); 0x40 |
0x40 (5.2); 0x50 (6.0); 0x48 |
ULONGLONG WakeTime; |
5.0 and higher |
0x38 (5.1 to 5.2); 0x48 |
0x48 (5.2); 0x58 (6.0); 0x50 |
ULONGLONG SleepTime; |
5.1 and higher |
0x50 (6.1) | 0x58 (6.1) |
ULONGLONG ProgrammedRTCTime; |
6.1 only |
0x50 | 0x58 |
ULONGLONG WakeFirstUnattendedTime; |
1511 and higher |
0x58 (6.1); 0x50 (6.2 to 10.0); 0x58 |
0x60 (6.1); 0x58 (6.2 to 10.0); 0x60 |
UCHAR WakeOnRTC; |
6.1 only |
SYSTEM_POWER_CONDITION WakeAlarmSignaled; |
6.2 and higher | ||
0x5C (6.1); 0x58 (6.2 to 10.0); 0x60 |
0x68 (6.1); 0x60 (6.2 to 10.0); 0x68 |
DIAGNOSTIC_BUFFER *WakeTimerInfo; |
6.1 only |
struct { ULONGLONG ProgrammedTime; DIAGNOSTIC_BUFFER *TimerInfo; } WakeAlarm [3]; |
6.2 to 6.3 | ||
struct { ULONGLONG RequestedTime; ULONGLONG ProgrammedTime; DIAGNOSTIC_BUFFER *TimerInfo; } WakeAlarm [3]; |
10.0 and higher | ||
0xA0 (10.0); 0xA8 |
0xA8 (10.0); 0xB0 |
UCHAR WakeAlarmPaused; |
10.0 and higher |
0xA8 (10.0); 0xB0 |
0xB0 (10.0); 0xB8 |
ULONGLONG WakeAlarmLastTime; |
10.0 and higher |
0xB8 | 0xC0 |
ULONGLONG DozeDeferralStartTime; |
1709 and higher |
0x50 (6.0) | 0x60 (6.0) |
SYSTEM_POWER_STATE_CONTEXT SystemContext; |
6.0 only |
0x54 (6.0); 0x60 (6.1); 0x88 (6.2 to 6.3); 0xB0 (10.0); 0xB8 (1511 to 1703); 0xC0 |
0x64 (6.0); 0x70 (6.1); 0x90 (6.2 to 6.3); 0xB8 (10.0); 0xC0 (1511 to 1703); 0xC8 |
SYSTEM_POWER_CAPABILITIES FilteredCapabilities; |
6.0 and higher |
0x010C | 0x0118 |
KSPIN_LOCK WatchdogLock; |
2004 and higher |
0x010C (1903); 0x0110 |
0x0118 (1903); 0x0120 |
KDPC WatchdogDpc; |
1903 and higher |
0x0130 | 0x0158 (1903); 0x0160 |
KTIMER WatchdogTimer; |
1903 and higher |
0x0158 | 0x0198 (1903); 0x01A0 |
UCHAR WatchdogInitialized; |
1903 and higher |
0x015C | 0x019C (1903); 0x01A4 |
POP_POWER_ACTION_WATCHDOG_STATE WatchdogState; |
1903 and higher |
0x0160 | 0x01A0 (1903); 0x01A8 |
ULONGLONG WatchdogStartTime; |
1903 and higher |
0x0168 | 0x01A8 (1903); 0x01B0 |
KTHREAD *ActionWorkerThread; |
1903 and higher |
0x016C | 0x01B0 (1903); 0x01B8 |
KTHREAD *PromoteActionWorkerThread; |
1903 and higher |
0x0170 | 0x01B8 (1903); 0x01C0 |
KTHREAD *UnlockAfterSleepWorkerThread; |
1903 and higher |