| 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@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 | |