SYSTEM_POWER_INFORMATION

The SYSTEM_POWER_INFORMATION structure may be what a successful call to ZwQuerySystemInformation or NtQuerySystemInformation would produce in its output buffer when given the information class SystemPowerInformation (0x2A) in versions 3.51 to 5.0. Earlier versions reject this information class as invalid and so do these. Yet Microsoft is known to have defined the information class as SystemPowerInformation in versions 3.51 and 4.0 before version 5.1 redefined it as SystemProcessorIdleInformation.

Documentation Status

This SYSTEM_POWER_INFORMATION structure in this form for this presumed purpose is not documented. It is known only from type information in early import libraries: GDISRVL.LIB from the Device Driver Kit (DDK) for Windows NT 3.51 and SHELL32.LIB from the DDK for Windows NT 4.0.

The name was soon reused, however, for a documented structure that user mode software can get filled in by the CallNtPowerInformation function. Reusing the name may have caused some confusion at Microsoft for although a C-language definition was published almost immediately in the Device Driver Kit (DDK) for Windows XP, none was made available for user-mode programming. To this day, 26th October, 2019, Microsoft’s page on SYSTEM_POWER_INFORMATION still notes that “this structure definition was accidentally omitted from WinNT.h” which “error will be corrected in the future.”

Layout

The SYSTEM_POWER_INFORMATION is 0x18 bytes.

Offset Definition
0x00
BOOLEAN SystemSuspendSupported;
0x01
BOOLEAN SystemHibernateSupported;
0x02
BOOLEAN ResumeTimerSupportsSuspend;
0x03
BOOLEAN ResumeTimerSupportsHibernate;
0x04
BOOLEAN LidSupported;
0x05
BOOLEAN TurboSettingSupported;
0x06
BOOLEAN TurboMode;
0x07
BOOLEAN SystemAcOrDc;
0x08
BOOLEAN PowerDownDisabled;
0x10
LARGE_INTEGER SpindownDrives;