Home | History | Annotate | Download | only in ddk
      1 /*
      2  * ntpoapi.h
      3  *
      4  * APIs for power management.
      5  *
      6  * This file is part of the w32api package.
      7  *
      8  * Contributors:
      9  *   Created by Casper S. Hornstrup <chorns (at) users.sourceforge.net>
     10  *
     11  * THIS SOFTWARE IS NOT COPYRIGHTED
     12  *
     13  * This source code is offered for use in the public domain. You may
     14  * use, modify or distribute it freely.
     15  *
     16  * This code is distributed in the hope that it will be useful but
     17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     18  * DISCLAIMED. This includes but is not limited to warranties of
     19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     20  *
     21  */
     22 
     23 #ifndef __NTPOAPI_H
     24 #define __NTPOAPI_H
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 #ifndef _PO_DDK_
     31 #define _PO_DDK_
     32 
     33 /* Power States/Levels */
     34 typedef enum _SYSTEM_POWER_STATE {
     35     PowerSystemUnspecified,
     36     PowerSystemWorking,
     37     PowerSystemSleeping1,
     38     PowerSystemSleeping2,
     39     PowerSystemSleeping3,
     40     PowerSystemHibernate,
     41     PowerSystemShutdown,
     42     PowerSystemMaximum
     43 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
     44 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
     45 
     46 typedef enum _DEVICE_POWER_STATE {
     47     PowerDeviceUnspecified,
     48     PowerDeviceD0,
     49     PowerDeviceD1,
     50     PowerDeviceD2,
     51     PowerDeviceD3,
     52     PowerDeviceMaximum
     53 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
     54 
     55 typedef union _POWER_STATE {
     56   SYSTEM_POWER_STATE  SystemState;
     57   DEVICE_POWER_STATE  DeviceState;
     58 } POWER_STATE, *PPOWER_STATE;
     59 
     60 typedef enum _POWER_STATE_TYPE {
     61   SystemPowerState = 0,
     62   DevicePowerState
     63 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
     64 
     65 typedef enum _POWER_INFORMATION_LEVEL {
     66     SystemPowerPolicyAc,
     67     SystemPowerPolicyDc,
     68     VerifySystemPolicyAc,
     69     VerifySystemPolicyDc,
     70     SystemPowerCapabilities,
     71     SystemBatteryState,
     72     SystemPowerStateHandler,
     73     ProcessorStateHandler,
     74     SystemPowerPolicyCurrent,
     75     AdministratorPowerPolicy,
     76     SystemReserveHiberFile,
     77     ProcessorInformation,
     78     SystemPowerInformation,
     79     ProcessorStateHandler2,
     80     LastWakeTime,
     81     LastSleepTime,
     82     SystemExecutionState,
     83     SystemPowerStateNotifyHandler,
     84     ProcessorPowerPolicyAc,
     85     ProcessorPowerPolicyDc,
     86     VerifyProcessorPowerPolicyAc,
     87     VerifyProcessorPowerPolicyDc,
     88     ProcessorPowerPolicyCurrent,
     89     SystemPowerStateLogging,
     90     SystemPowerLoggingEntry,
     91     SetPowerSettingValue,
     92     NotifyUserPowerSetting,
     93     PowerInformationLevelUnused0,
     94     PowerInformationLevelUnused1,
     95     SystemVideoState,
     96     TraceApplicationPowerMessage,
     97     TraceApplicationPowerMessageEnd,
     98     ProcessorPerfStates,
     99     ProcessorIdleStates,
    100     ProcessorCap,
    101     SystemWakeSource,
    102     SystemHiberFileInformation,
    103     TraceServicePowerMessage,
    104     ProcessorLoad,
    105     PowerShutdownNotification,
    106     MonitorCapabilities,
    107     SessionPowerInit,
    108     SessionDisplayState,
    109     PowerRequestCreate,
    110     PowerRequestAction,
    111     GetPowerRequestList,
    112     ProcessorInformationEx,
    113     NotifyUserModeLegacyPowerEvent,
    114     GroupPark,
    115     ProcessorIdleDomains,
    116     WakeTimerList,
    117     SystemHiberFileSize,
    118     PowerInformationLevelMaximum
    119 } POWER_INFORMATION_LEVEL;
    120 
    121 typedef enum {
    122     PowerActionNone,
    123     PowerActionReserved,
    124     PowerActionSleep,
    125     PowerActionHibernate,
    126     PowerActionShutdown,
    127     PowerActionShutdownReset,
    128     PowerActionShutdownOff,
    129     PowerActionWarmEject
    130 } POWER_ACTION, *PPOWER_ACTION;
    131 
    132 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
    133 typedef struct {
    134     ULONG Granularity;
    135     ULONG Capacity;
    136 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
    137 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
    138 
    139 
    140 #endif /* _PO_DDK_ */
    141 
    142 
    143 #define POWER_PERF_SCALE                  100
    144 #define PERF_LEVEL_TO_PERCENT(x)          (((x) * 1000) / (POWER_PERF_SCALE * 10))
    145 #define PERCENT_TO_PERF_LEVEL(x)          (((x) * POWER_PERF_SCALE * 10) / 1000)
    146 
    147 typedef struct _PROCESSOR_IDLE_TIMES {
    148 	ULONGLONG  StartTime;
    149 	ULONGLONG  EndTime;
    150 	ULONG  IdleHandlerReserved[4];
    151 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
    152 
    153 typedef BOOLEAN
    154 (FASTCALL*PPROCESSOR_IDLE_HANDLER)(
    155   IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
    156 
    157 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
    158   ULONG  HardwareLatency;
    159   PPROCESSOR_IDLE_HANDLER  Handler;
    160 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
    161 
    162 typedef VOID
    163 (FASTCALL*PSET_PROCESSOR_THROTTLE)(
    164   IN UCHAR  Throttle);
    165 
    166 typedef NTSTATUS
    167 (FASTCALL*PSET_PROCESSOR_THROTTLE2)(
    168   IN UCHAR  Throttle);
    169 
    170 #define MAX_IDLE_HANDLERS                 3
    171 
    172 typedef struct _PROCESSOR_STATE_HANDLER {
    173 	UCHAR  ThrottleScale;
    174 	BOOLEAN  ThrottleOnIdle;
    175 	PSET_PROCESSOR_THROTTLE  SetThrottle;
    176 	ULONG  NumIdleHandlers;
    177 	PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
    178 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
    179 
    180 typedef enum _POWER_STATE_HANDLER_TYPE {
    181 	PowerStateSleeping1,
    182 	PowerStateSleeping2,
    183 	PowerStateSleeping3,
    184 	PowerStateSleeping4,
    185 	PowerStateSleeping4Firmware,
    186 	PowerStateShutdownReset,
    187 	PowerStateShutdownOff,
    188 	PowerStateMaximum
    189 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
    190 
    191 typedef NTSTATUS
    192 (NTAPI*PENTER_STATE_SYSTEM_HANDLER)(
    193   IN PVOID  SystemContext);
    194 
    195 typedef NTSTATUS
    196 (NTAPI*PENTER_STATE_HANDLER)(
    197   IN PVOID  Context,
    198   IN PENTER_STATE_SYSTEM_HANDLER  SystemHandler  OPTIONAL,
    199   IN PVOID  SystemContext,
    200   IN LONG  NumberProcessors,
    201   IN LONG volatile *Number);
    202 
    203 typedef struct _POWER_STATE_HANDLER {
    204 	POWER_STATE_HANDLER_TYPE  Type;
    205 	BOOLEAN  RtcWake;
    206 	UCHAR  Spare[3];
    207 	PENTER_STATE_HANDLER  Handler;
    208 	PVOID  Context;
    209 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
    210 
    211 typedef NTSTATUS
    212 (NTAPI*PENTER_STATE_NOTIFY_HANDLER)(
    213   IN POWER_STATE_HANDLER_TYPE  State,
    214   IN PVOID  Context,
    215   IN BOOLEAN  Entering);
    216 
    217 typedef struct _POWER_STATE_NOTIFY_HANDLER {
    218 	PENTER_STATE_NOTIFY_HANDLER  Handler;
    219 	PVOID  Context;
    220 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
    221 
    222 NTSYSCALLAPI
    223 NTSTATUS
    224 NTAPI
    225 NtPowerInformation(
    226   IN POWER_INFORMATION_LEVEL  InformationLevel,
    227   IN PVOID  InputBuffer OPTIONAL,
    228   IN ULONG  InputBufferLength,
    229   OUT PVOID  OutputBuffer OPTIONAL,
    230   IN ULONG  OutputBufferLength);
    231 
    232 #define PROCESSOR_STATE_TYPE_PERFORMANCE  1
    233 #define PROCESSOR_STATE_TYPE_THROTTLE     2
    234 
    235 typedef struct _PROCESSOR_PERF_LEVEL {
    236   UCHAR  PercentFrequency;
    237   UCHAR  Reserved;
    238   USHORT  Flags;
    239 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
    240 
    241 typedef struct _PROCESSOR_PERF_STATE {
    242   UCHAR  PercentFrequency;
    243   UCHAR  MinCapacity;
    244   USHORT  Power;
    245   UCHAR  IncreaseLevel;
    246   UCHAR  DecreaseLevel;
    247   USHORT  Flags;
    248   ULONG  IncreaseTime;
    249   ULONG  DecreaseTime;
    250   ULONG  IncreaseCount;
    251   ULONG  DecreaseCount;
    252   ULONGLONG  PerformanceTime;
    253 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
    254 
    255 typedef struct _PROCESSOR_STATE_HANDLER2 {
    256 	ULONG  NumIdleHandlers;
    257 	PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
    258 	PSET_PROCESSOR_THROTTLE2  SetPerfLevel;
    259 	ULONG  HardwareLatency;
    260 	UCHAR  NumPerfStates;
    261 	PROCESSOR_PERF_LEVEL  PerfLevel[1];
    262 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
    263 
    264 NTSYSCALLAPI
    265 NTSTATUS
    266 NTAPI
    267 NtSetThreadExecutionState(
    268   IN EXECUTION_STATE  esFlags,
    269   OUT EXECUTION_STATE  *PreviousFlags);
    270 
    271 NTSYSCALLAPI
    272 NTSTATUS
    273 NTAPI
    274 NtRequestWakeupLatency(
    275   IN LATENCY_TIME  latency);
    276 
    277 NTSYSCALLAPI
    278 NTSTATUS
    279 NTAPI
    280 NtInitiatePowerAction(
    281   IN POWER_ACTION  SystemAction,
    282   IN SYSTEM_POWER_STATE  MinSystemState,
    283   IN ULONG  Flags,
    284   IN BOOLEAN  Asynchronous);
    285 
    286 NTSYSCALLAPI
    287 NTSTATUS
    288 NTAPI
    289 NtSetSystemPowerState(
    290   IN POWER_ACTION SystemAction,
    291   IN SYSTEM_POWER_STATE MinSystemState,
    292   IN ULONG Flags);
    293 
    294 NTSYSCALLAPI
    295 NTSTATUS
    296 NTAPI
    297 NtGetDevicePowerState(
    298   IN HANDLE  Device,
    299   OUT DEVICE_POWER_STATE  *State);
    300 
    301 NTSYSCALLAPI
    302 NTSTATUS
    303 NTAPI
    304 NtCancelDeviceWakeupRequest(
    305   IN HANDLE  Device);
    306 
    307 NTSYSCALLAPI
    308 BOOLEAN
    309 NTAPI
    310 NtIsSystemResumeAutomatic(
    311   VOID);
    312 
    313 NTSYSCALLAPI
    314 NTSTATUS
    315 NTAPI
    316 NtRequestDeviceWakeup(
    317   IN HANDLE  Device);
    318 
    319 #define WINLOGON_LOCK_ON_SLEEP            0x00000001
    320 
    321 typedef struct {
    322     BOOLEAN             PowerButtonPresent;
    323     BOOLEAN             SleepButtonPresent;
    324     BOOLEAN             LidPresent;
    325     BOOLEAN             SystemS1;
    326     BOOLEAN             SystemS2;
    327     BOOLEAN             SystemS3;
    328     BOOLEAN             SystemS4;
    329     BOOLEAN             SystemS5;
    330     BOOLEAN             HiberFilePresent;
    331     BOOLEAN             FullWake;
    332     BOOLEAN             VideoDimPresent;
    333     BOOLEAN             ApmPresent;
    334     BOOLEAN             UpsPresent;
    335     BOOLEAN             ThermalControl;
    336     BOOLEAN             ProcessorThrottle;
    337     UCHAR               ProcessorMinThrottle;
    338 #if (NTDDI_VERSION < NTDDI_WINXP)
    339     UCHAR               ProcessorThrottleScale;
    340     UCHAR               spare2[4];
    341 #else
    342     UCHAR               ProcessorMaxThrottle;
    343     BOOLEAN             FastSystemS4;
    344     UCHAR               spare2[3];
    345 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
    346     BOOLEAN             DiskSpinDown;
    347     UCHAR               spare3[8];
    348     BOOLEAN             SystemBatteriesPresent;
    349     BOOLEAN             BatteriesAreShortTerm;
    350     BATTERY_REPORTING_SCALE BatteryScale[3];
    351     SYSTEM_POWER_STATE  AcOnLineWake;
    352     SYSTEM_POWER_STATE  SoftLidWake;
    353     SYSTEM_POWER_STATE  RtcWake;
    354     SYSTEM_POWER_STATE  MinDeviceWakeState;
    355     SYSTEM_POWER_STATE  DefaultLowLatencyWake;
    356 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
    357 
    358 typedef struct {
    359     BOOLEAN             AcOnLine;
    360     BOOLEAN             BatteryPresent;
    361     BOOLEAN             Charging;
    362     BOOLEAN             Discharging;
    363     BOOLEAN             Spare1[4];
    364     ULONG               MaxCapacity;
    365     ULONG               RemainingCapacity;
    366     ULONG               Rate;
    367     ULONG               EstimatedTime;
    368     ULONG               DefaultAlert1;
    369     ULONG               DefaultAlert2;
    370 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
    371 
    372 typedef struct _PROCESSOR_POWER_INFORMATION {
    373   ULONG  Number;
    374   ULONG  MaxMhz;
    375   ULONG  CurrentMhz;
    376   ULONG  MhzLimit;
    377   ULONG  MaxIdleState;
    378   ULONG  CurrentIdleState;
    379 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
    380 
    381 typedef struct _POWER_ACTION_POLICY {
    382     POWER_ACTION Action;
    383     ULONG Flags;
    384     ULONG EventCode;
    385 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
    386 
    387 /* POWER_ACTION_POLICY.Flags constants */
    388 #define POWER_ACTION_QUERY_ALLOWED        0x00000001
    389 #define POWER_ACTION_UI_ALLOWED           0x00000002
    390 #define POWER_ACTION_OVERRIDE_APPS        0x00000004
    391 #define POWER_ACTION_LIGHTEST_FIRST       0x10000000
    392 #define POWER_ACTION_LOCK_CONSOLE         0x20000000
    393 #define POWER_ACTION_DISABLE_WAKES        0x40000000
    394 #define POWER_ACTION_CRITICAL             0x80000000
    395 
    396 /* POWER_ACTION_POLICY.EventCode constants */
    397 #define POWER_LEVEL_USER_NOTIFY_TEXT      0x00000001
    398 #define POWER_LEVEL_USER_NOTIFY_SOUND     0x00000002
    399 #define POWER_LEVEL_USER_NOTIFY_EXEC      0x00000004
    400 #define POWER_USER_NOTIFY_BUTTON          0x00000008
    401 #define POWER_USER_NOTIFY_SHUTDOWN        0x00000010
    402 #define POWER_FORCE_TRIGGER_RESET         0x80000000
    403 
    404 #define DISCHARGE_POLICY_CRITICAL	0
    405 #define DISCHARGE_POLICY_LOW		1
    406 #define NUM_DISCHARGE_POLICIES		4
    407 
    408 #define PO_THROTTLE_NONE	0
    409 #define PO_THROTTLE_CONSTANT	1
    410 #define PO_THROTTLE_DEGRADE	2
    411 #define PO_THROTTLE_ADAPTIVE	3
    412 #define PO_THROTTLE_MAXIMUM	4
    413 
    414 #ifdef __cplusplus
    415 }
    416 #endif
    417 
    418 #endif /* __NTPOAPI_H */
    419 
    420