4 * APIs for power management.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
33 /* Power States/Levels */
34 typedef enum _SYSTEM_POWER_STATE
{
35 PowerSystemUnspecified
,
43 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
45 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
47 typedef enum _DEVICE_POWER_STATE
{
48 PowerDeviceUnspecified
,
54 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
56 typedef union _POWER_STATE
{
57 SYSTEM_POWER_STATE SystemState
;
58 DEVICE_POWER_STATE DeviceState
;
59 } POWER_STATE
, *PPOWER_STATE
;
61 typedef enum _POWER_STATE_TYPE
{
64 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
66 typedef enum _POWER_INFORMATION_LEVEL
{
71 SystemPowerCapabilities
,
73 SystemPowerStateHandler
,
74 ProcessorStateHandler
,
75 SystemPowerPolicyCurrent
,
76 AdministratorPowerPolicy
,
77 SystemReserveHiberFile
,
79 SystemPowerInformation
,
80 ProcessorStateHandler2
,
84 SystemPowerStateNotifyHandler
,
85 ProcessorPowerPolicyAc
,
86 ProcessorPowerPolicyDc
,
87 VerifyProcessorPowerPolicyAc
,
88 VerifyProcessorPowerPolicyDc
,
89 ProcessorPowerPolicyCurrent
,
90 SystemPowerStateLogging
,
91 SystemPowerLoggingEntry
,
93 NotifyUserPowerSetting
,
94 PowerInformationLevelUnused0
,
95 PowerInformationLevelUnused1
,
97 TraceApplicationPowerMessage
,
98 TraceApplicationPowerMessageEnd
,
103 SystemHiberFileInformation
,
104 TraceServicePowerMessage
,
106 PowerShutdownNotification
,
113 ProcessorInformationEx
,
114 NotifyUserModeLegacyPowerEvent
,
116 ProcessorIdleDomains
,
119 PowerInformationLevelMaximum
120 } POWER_INFORMATION_LEVEL
;
126 PowerActionHibernate
,
128 PowerActionShutdownReset
,
129 PowerActionShutdownOff
,
131 } POWER_ACTION
, *PPOWER_ACTION
;
133 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
137 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
138 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
141 #endif /* _PO_DDK_ */
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)
147 typedef struct _PROCESSOR_IDLE_TIMES
{
150 ULONG IdleHandlerReserved
[4];
151 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
153 _Function_class_(PROCESSOR_IDLE_HANDLER
)
155 (FASTCALL
*PPROCESSOR_IDLE_HANDLER
)(
156 _In_ ULONG_PTR Context
,
157 _Inout_ PPROCESSOR_IDLE_TIMES IdleTimes
);
159 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
160 ULONG HardwareLatency
;
161 PPROCESSOR_IDLE_HANDLER Handler
;
162 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
165 (FASTCALL
*PSET_PROCESSOR_THROTTLE
)(
169 (FASTCALL
*PSET_PROCESSOR_THROTTLE2
)(
172 #define MAX_IDLE_HANDLERS 3
174 typedef struct _PROCESSOR_STATE_HANDLER
{
176 BOOLEAN ThrottleOnIdle
;
177 PSET_PROCESSOR_THROTTLE SetThrottle
;
178 ULONG NumIdleHandlers
;
179 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
180 } PROCESSOR_STATE_HANDLER
, *PPROCESSOR_STATE_HANDLER
;
182 typedef enum _POWER_STATE_HANDLER_TYPE
{
187 PowerStateSleeping4Firmware
,
188 PowerStateShutdownReset
,
189 PowerStateShutdownOff
,
191 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
193 _Function_class_(ENTER_STATE_SYSTEM_HANDLER
)
196 (NTAPI
*PENTER_STATE_SYSTEM_HANDLER
)(
197 _In_ PVOID SystemContext
);
199 _Function_class_(ENTER_STATE_HANDLER
)
202 (NTAPI
*PENTER_STATE_HANDLER
)(
203 _In_opt_ PVOID Context
,
204 _In_opt_ PENTER_STATE_SYSTEM_HANDLER SystemHandler
,
205 _In_opt_ PVOID SystemContext
,
206 _In_ LONG NumberProcessors
,
207 _In_opt_ LONG
volatile *Number
);
209 typedef struct _POWER_STATE_HANDLER
{
210 POWER_STATE_HANDLER_TYPE Type
;
213 PENTER_STATE_HANDLER Handler
;
215 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
217 _Function_class_(ENTER_STATE_NOTIFY_HANDLER
)
220 (NTAPI
*PENTER_STATE_NOTIFY_HANDLER
)(
221 _In_ POWER_STATE_HANDLER_TYPE State
,
223 _In_ BOOLEAN Entering
);
225 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
226 PENTER_STATE_NOTIFY_HANDLER Handler
;
228 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
230 _IRQL_requires_max_(APC_LEVEL
)
236 _In_ POWER_INFORMATION_LEVEL InformationLevel
,
237 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
238 _In_ ULONG InputBufferLength
,
239 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
240 _In_ ULONG OutputBufferLength
);
242 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
243 #define PROCESSOR_STATE_TYPE_THROTTLE 2
245 typedef struct _PROCESSOR_PERF_LEVEL
{
246 UCHAR PercentFrequency
;
249 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
251 typedef struct _PROCESSOR_PERF_STATE
{
252 UCHAR PercentFrequency
;
262 ULONGLONG PerformanceTime
;
263 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
265 typedef struct _PROCESSOR_STATE_HANDLER2
{
266 ULONG NumIdleHandlers
;
267 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
268 PSET_PROCESSOR_THROTTLE2 SetPerfLevel
;
269 ULONG HardwareLatency
;
271 PROCESSOR_PERF_LEVEL PerfLevel
[1];
272 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
274 typedef struct _SYSTEM_POWER_INFORMATION
{
275 ULONG MaxIdlenessAllowed
;
279 } SYSTEM_POWER_INFORMATION
, *PSYSTEM_POWER_INFORMATION
;
281 _IRQL_requires_max_(PASSIVE_LEVEL
)
286 NtSetThreadExecutionState(
287 _In_ EXECUTION_STATE esFlags
,
288 _Out_ EXECUTION_STATE
*PreviousFlags
);
293 NtRequestWakeupLatency(
294 _In_ LATENCY_TIME latency
);
296 _IRQL_requires_max_(APC_LEVEL
)
301 NtInitiatePowerAction(
302 _In_ POWER_ACTION SystemAction
,
303 _In_ SYSTEM_POWER_STATE MinSystemState
,
305 _In_ BOOLEAN Asynchronous
);
307 _IRQL_requires_max_(APC_LEVEL
)
312 NtSetSystemPowerState(
313 _In_ POWER_ACTION SystemAction
,
314 _In_ SYSTEM_POWER_STATE MinSystemState
,
317 _IRQL_requires_max_(APC_LEVEL
)
322 NtGetDevicePowerState(
324 _Out_ DEVICE_POWER_STATE
*State
);
329 NtCancelDeviceWakeupRequest(
332 _IRQL_requires_max_(APC_LEVEL
)
337 NtIsSystemResumeAutomatic(VOID
);
342 NtRequestDeviceWakeup(
345 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
348 BOOLEAN PowerButtonPresent
;
349 BOOLEAN SleepButtonPresent
;
356 BOOLEAN HiberFilePresent
;
358 BOOLEAN VideoDimPresent
;
361 BOOLEAN ThermalControl
;
362 BOOLEAN ProcessorThrottle
;
363 UCHAR ProcessorMinThrottle
;
364 #if (NTDDI_VERSION < NTDDI_WINXP)
365 UCHAR ProcessorThrottleScale
;
368 UCHAR ProcessorMaxThrottle
;
369 BOOLEAN FastSystemS4
;
371 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
372 BOOLEAN DiskSpinDown
;
374 BOOLEAN SystemBatteriesPresent
;
375 BOOLEAN BatteriesAreShortTerm
;
376 BATTERY_REPORTING_SCALE BatteryScale
[3];
377 SYSTEM_POWER_STATE AcOnLineWake
;
378 SYSTEM_POWER_STATE SoftLidWake
;
379 SYSTEM_POWER_STATE RtcWake
;
380 SYSTEM_POWER_STATE MinDeviceWakeState
;
381 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
382 } SYSTEM_POWER_CAPABILITIES
, *PSYSTEM_POWER_CAPABILITIES
;
386 BOOLEAN BatteryPresent
;
391 ULONG RemainingCapacity
;
396 } SYSTEM_BATTERY_STATE
, *PSYSTEM_BATTERY_STATE
;
398 typedef struct _PROCESSOR_POWER_INFORMATION
{
404 ULONG CurrentIdleState
;
405 } PROCESSOR_POWER_INFORMATION
, *PPROCESSOR_POWER_INFORMATION
;
407 typedef struct _POWER_ACTION_POLICY
{
411 } POWER_ACTION_POLICY
, *PPOWER_ACTION_POLICY
;
413 /* POWER_ACTION_POLICY.Flags constants */
414 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
415 #define POWER_ACTION_UI_ALLOWED 0x00000002
416 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
417 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
418 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
419 #define POWER_ACTION_DISABLE_WAKES 0x40000000
420 #define POWER_ACTION_CRITICAL 0x80000000
422 /* POWER_ACTION_POLICY.EventCode constants */
423 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
424 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
425 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
426 #define POWER_USER_NOTIFY_BUTTON 0x00000008
427 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
428 #define POWER_FORCE_TRIGGER_RESET 0x80000000
430 #define DISCHARGE_POLICY_CRITICAL 0
431 #define DISCHARGE_POLICY_LOW 1
432 #define NUM_DISCHARGE_POLICIES 4
434 #define PO_THROTTLE_NONE 0
435 #define PO_THROTTLE_CONSTANT 1
436 #define PO_THROTTLE_DEGRADE 2
437 #define PO_THROTTLE_ADAPTIVE 3
438 #define PO_THROTTLE_MAXIMUM 4
444 #endif /* __NTPOAPI_H */