text: #ifndef _NTPOAPI_H
  #define _NTPOAPI_H
  
  typedef union _POWER_STATE
  {
      SYSTEM_POWER_STATE SystemState;
      DEVICE_POWER_STATE DeviceState;
  } POWER_STATE, *PPOWER_STATE;
  
  typedef enum _POWER_STATE_TYPE
  {
      SystemPowerState = 0,
      DevicePowerState
  } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
  
  #if (NTDLL_VERSION >= NTDLL_VISTA)
  // wdm
  typedef struct _SYSTEM_POWER_STATE_CONTEXT
  {
      union
      {
          struct
          {
              ULONG Reserved1 : 8;
              ULONG TargetSystemState : 4;
              ULONG EffectiveSystemState : 4;
              ULONG CurrentSystemState : 4;
              ULONG IgnoreHibernationPath : 1;
              ULONG PseudoTransition : 1;
              ULONG Reserved2 : 10;
          };
          ULONG ContextAsUlong;
      };
  } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
  #endif
  
  #if (NTDLL_VERSION >= NTDLL_WIN7)
  /** \cond NEVER */ // disable doxygen warning
  // wdm
  typedef struct _COUNTED_REASON_CONTEXT
  {
      ULONG Version;
      ULONG Flags;
      union
      {
          struct
          {
              UNICODE_STRING ResourceFileName;
              USHORT ResourceReasonId;
              ULONG StringCount;
              PUNICODE_STRING _Field_size_(StringCount) ReasonStrings;
          };
          UNICODE_STRING SimpleString;
      };
  } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
  /** \endcond */
  #endif
  
  typedef enum
  {
      PowerStateSleeping1 = 0,
      PowerStateSleeping2 = 1,
      PowerStateSleeping3 = 2,
      PowerStateSleeping4 = 3,
      PowerStateShutdownOff = 4,
      PowerStateShutdownReset = 5,
      PowerStateSleeping4Firmware = 6,
      PowerStateMaximum = 7
  } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
  
  typedef NTSTATUS (NTAPI *PENTER_STATE_SYSTEM_HANDLER)(
      _In_ PVOID SystemContext
      );
  
  typedef NTSTATUS (NTAPI *PENTER_STATE_HANDLER)(
      _In_ PVOID Context,
      _In_opt_ PENTER_STATE_SYSTEM_HANDLER SystemHandler,
      _In_ PVOID SystemContext,
      _In_ LONG NumberProcessors,
      _In_ volatile PLONG Number
      );
  
  typedef struct _POWER_STATE_HANDLER
  {
      POWER_STATE_HANDLER_TYPE Type;
      BOOLEAN RtcWake;
      UCHAR Spare[3];
      PENTER_STATE_HANDLER Handler;
      PVOID Context;
  } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
  
  typedef NTSTATUS (NTAPI *PENTER_STATE_NOTIFY_HANDLER)(
      _In_ POWER_STATE_HANDLER_TYPE State,
      _In_ PVOID Context,
      _In_ BOOLEAN Entering
      );
  
  typedef struct _POWER_STATE_NOTIFY_HANDLER
  {
      PENTER_STATE_NOTIFY_HANDLER Handler;
      PVOID Context;
  } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
  
  typedef struct _PROCESSOR_POWER_INFORMATION
  {
      ULONG Number;
      ULONG MaxMhz;
      ULONG CurrentMhz;
      ULONG MhzLimit;
      ULONG MaxIdleState;
      ULONG CurrentIdleState;
  } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
  
  typedef struct _SYSTEM_POWER_INFORMATION
  {
      ULONG MaxIdlenessAllowed;
      ULONG Idleness;
      ULONG TimeRemaining;
      UCHAR CoolingMode;
  } SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtPowerInformation(
      _In_ POWER_INFORMATION_LEVEL InformationLevel,
      _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
      _In_ ULONG InputBufferLength,
      _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
      _In_ ULONG OutputBufferLength
      );
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtSetThreadExecutionState(
      _In_ EXECUTION_STATE NewFlags, // ES_* flags
      _Out_ EXECUTION_STATE *PreviousFlags
      );
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtRequestWakeupLatency(
      _In_ LATENCY_TIME latency
      );
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtInitiatePowerAction(
      _In_ POWER_ACTION SystemAction,
      _In_ SYSTEM_POWER_STATE LightestSystemState,
      _In_ ULONG Flags, // POWER_ACTION_* flags
      _In_ BOOLEAN Asynchronous
      );
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtSetSystemPowerState(
      _In_ POWER_ACTION SystemAction,
      _In_ SYSTEM_POWER_STATE LightestSystemState,
      _In_ ULONG Flags // POWER_ACTION_* flags
      );
  
  NTSYSCALLAPI
  NTSTATUS
  NTAPI
  NtGetDevicePowerState(
      _In_ HANDLE Device,
      _Out_ PDEVICE_POWER_STATE State
      );
  
  NTSYSCALLAPI
  BOOLEAN
  NTAPI
  NtIsSystemResumeAutomatic(
      VOID
      );
  
  #endif
  