POP_POWER_ACTION

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.

Documentation Status

As merely the type of an internal variable, the POP_POWER_ACTION is not documented.

Variability

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

Layout

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