1use shared::guiddef::GUID;
8use shared::minwindef::{
9 BOOL, DWORD, HKEY, LPARAM, LPDWORD, PBYTE, PUCHAR, PUINT, PULONG, UCHAR, UINT, ULONG,
10};
11use um::winnt::{
12 BOOLEAN, LPCWSTR, LPWSTR, NUM_DISCHARGE_POLICIES, PADMINISTRATOR_POWER_POLICY,
13 POWER_ACTION_POLICY, POWER_PLATFORM_ROLE, PROCESSOR_POWER_POLICY, PVOID, SYSTEM_POWER_LEVEL,
14 SYSTEM_POWER_STATE,
15};
16use um::winreg::REGSAM;
17STRUCT!{struct GLOBAL_MACHINE_POWER_POLICY {
18 Revision: ULONG,
19 LidOpenWakeAc: SYSTEM_POWER_STATE,
20 LidOpenWakeDc: SYSTEM_POWER_STATE,
21 BroadcastCapacityResolution: ULONG,
22}}
23pub type PGLOBAL_MACHINE_POWER_POLICY = *mut GLOBAL_MACHINE_POWER_POLICY;
24STRUCT!{struct GLOBAL_USER_POWER_POLICY {
25 Revision: ULONG,
26 PowerButtonAc: POWER_ACTION_POLICY,
27 PowerButtonDc: POWER_ACTION_POLICY,
28 SleepButtonAc: POWER_ACTION_POLICY,
29 SleepButtonDc: POWER_ACTION_POLICY,
30 LidCloseAc: POWER_ACTION_POLICY,
31 LidCloseDc: POWER_ACTION_POLICY,
32 DischargePolicy: [SYSTEM_POWER_LEVEL; NUM_DISCHARGE_POLICIES],
33 GlobalFlags: ULONG,
34}}
35pub type PGLOBAL_USER_POWER_POLICY = *mut GLOBAL_USER_POWER_POLICY;
36STRUCT!{struct GLOBAL_POWER_POLICY {
37 user: GLOBAL_USER_POWER_POLICY,
38 mach: GLOBAL_MACHINE_POWER_POLICY,
39}}
40pub type PGLOBAL_POWER_POLICY = *mut GLOBAL_POWER_POLICY;
41STRUCT!{struct MACHINE_POWER_POLICY {
42 Revision: ULONG,
43 MinSleepAc: SYSTEM_POWER_STATE,
44 MinSleepDc: SYSTEM_POWER_STATE,
45 ReducedLatencySleepAc: SYSTEM_POWER_STATE,
46 ReducedLatencySleepDc: SYSTEM_POWER_STATE,
47 DozeTimeoutAc: ULONG,
48 DozeTimeoutDc: ULONG,
49 DozeS4TimeoutAc: ULONG,
50 DozeS4TimeoutDc: ULONG,
51 MinThrottleAc: UCHAR,
52 MinThrottleDc: UCHAR,
53 pad1: [UCHAR; 2],
54 OverThrottledAc: POWER_ACTION_POLICY,
55 OverThrottledDc: POWER_ACTION_POLICY,
56}}
57pub type PMACHINE_POWER_POLICY = *mut MACHINE_POWER_POLICY;
58STRUCT!{struct MACHINE_PROCESSOR_POWER_POLICY {
59 Revision: ULONG,
60 ProcessorPolicyAc: PROCESSOR_POWER_POLICY,
61 ProcessorPolicyDc: PROCESSOR_POWER_POLICY,
62}}
63pub type PMACHINE_PROCESSOR_POWER_POLICY = *mut MACHINE_PROCESSOR_POWER_POLICY;
64STRUCT!{struct USER_POWER_POLICY {
65 Revision: ULONG,
66 IdleAc: POWER_ACTION_POLICY,
67 IdleDc: POWER_ACTION_POLICY,
68 IdleTimeoutAc: ULONG,
69 IdleTimeoutDc: ULONG,
70 IdleSensitivityAc: UCHAR,
71 IdleSensitivityDc: UCHAR,
72 ThrottlePolicyAc: UCHAR,
73 ThrottlePolicyDc: UCHAR,
74 MaxSleepAc: SYSTEM_POWER_STATE,
75 MaxSleepDc: SYSTEM_POWER_STATE,
76 Reserved: [ULONG; 2],
77 VideoTimeoutAc: ULONG,
78 VideoTimeoutDc: ULONG,
79 SpindownTimeoutAc: ULONG,
80 SpindownTimeoutDc: ULONG,
81 OptimizeForPowerAc: BOOLEAN,
82 OptimizeForPowerDc: BOOLEAN,
83 FanThrottleToleranceAc: UCHAR,
84 FanThrottleToleranceDc: UCHAR,
85 ForcedThrottleAc: UCHAR,
86 ForcedThrottleDc: UCHAR,
87}}
88pub type PUSER_POWER_POLICY = *mut USER_POWER_POLICY;
89STRUCT!{struct POWER_POLICY {
90 user: USER_POWER_POLICY,
91 mach: MACHINE_POWER_POLICY,
92}}
93pub type PPOWER_POLICY = *mut POWER_POLICY;
94pub const EnableSysTrayBatteryMeter: ULONG = 0x01;
95pub const EnableMultiBatteryDisplay: ULONG = 0x02;
96pub const EnablePasswordLogon: ULONG = 0x04;
97pub const EnableWakeOnRing: ULONG = 0x08;
98pub const EnableVideoDimDisplay: ULONG = 0x10;
99pub const POWER_ATTRIBUTE_HIDE: ULONG = 0x00000001;
100pub const POWER_ATTRIBUTE_SHOW_AOAC: ULONG = 0x00000002;
101pub const NEWSCHEME: UINT = -1i32 as u32;
102FN!{stdcall PWRSCHEMESENUMPROC_V1(
103 Index: UINT,
104 NameSize: DWORD,
105 Name: LPWSTR,
106 DescriptionSize: DWORD,
107 Description: LPWSTR,
108 Policy: PPOWER_POLICY,
109 Context: LPARAM,
110) -> BOOLEAN}
111FN!{stdcall PWRSCHEMESENUMPROC_V2(
112 Index: UINT,
113 NameSize: DWORD,
114 Name: LPWSTR,
115 DescriptionSize: DWORD,
116 Description: LPWSTR,
117 Policy: PPOWER_POLICY,
118 Context: LPARAM,
119) -> BOOLEAN}
120pub type PWRSCHEMESENUMPROC = *mut PWRSCHEMESENUMPROC_V2;
121extern "system" {
122 pub fn GetPwrDiskSpindownRange(
123 puiMax: PUINT,
124 puiMin: PUINT,
125 ) -> BOOLEAN;
126 pub fn EnumPwrSchemes(
127 lpfn: PWRSCHEMESENUMPROC,
128 lParam: LPARAM,
129 ) -> BOOLEAN;
130 pub fn ReadGlobalPwrPolicy(
131 pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
132 ) -> BOOLEAN;
133 pub fn ReadPwrScheme(
134 uiID: UINT,
135 pPowerPolicy: PPOWER_POLICY,
136 ) -> BOOLEAN;
137 pub fn WritePwrScheme(
138 puiID: PUINT,
139 lpszSchemeName: LPCWSTR,
140 lpszDescription: LPCWSTR,
141 lpScheme: PPOWER_POLICY,
142 ) -> BOOLEAN;
143 pub fn WriteGlobalPwrPolicy(
144 pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
145 ) -> BOOLEAN;
146 pub fn DeletePwrScheme(
147 uiID: UINT,
148 ) -> BOOLEAN;
149 pub fn GetActivePwrScheme(
150 puiID: PUINT,
151 ) -> BOOLEAN;
152 pub fn SetActivePwrScheme(
153 uiID: UINT,
154 pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
155 pPowerPolicy: PPOWER_POLICY,
156 ) -> BOOLEAN;
157 pub fn IsPwrSuspendAllowed() -> BOOLEAN;
158 pub fn IsPwrHibernateAllowed() -> BOOLEAN;
159 pub fn IsPwrShutdownAllowed() -> BOOLEAN;
160 pub fn IsAdminOverrideActive(
161 papp: PADMINISTRATOR_POWER_POLICY,
162 ) -> BOOLEAN;
163 pub fn SetSuspendState(
164 bHibernate: BOOLEAN,
165 bForce: BOOLEAN,
166 bWakeupEventsDisabled: BOOLEAN,
167 ) -> BOOLEAN;
168 pub fn GetCurrentPowerPolicies(
169 pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
170 pPowerPolicy: PPOWER_POLICY,
171 ) -> BOOLEAN;
172 pub fn CanUserWritePwrScheme() -> BOOLEAN;
173 pub fn ReadProcessorPwrScheme(
174 uiID: UINT,
175 pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
176 ) -> BOOLEAN;
177 pub fn WriteProcessorPwrScheme(
178 uiID: UINT,
179 pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
180 ) -> BOOLEAN;
181 pub fn ValidatePowerPolicies(
182 pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
183 pPowerPolicy: PPOWER_POLICY,
184 ) -> BOOLEAN;
185}
186ENUM!{enum POWER_DATA_ACCESSOR {
187 ACCESS_AC_POWER_SETTING_INDEX = 0,
188 ACCESS_DC_POWER_SETTING_INDEX,
189 ACCESS_FRIENDLY_NAME,
190 ACCESS_DESCRIPTION,
191 ACCESS_POSSIBLE_POWER_SETTING,
192 ACCESS_POSSIBLE_POWER_SETTING_FRIENDLY_NAME,
193 ACCESS_POSSIBLE_POWER_SETTING_DESCRIPTION,
194 ACCESS_DEFAULT_AC_POWER_SETTING,
195 ACCESS_DEFAULT_DC_POWER_SETTING,
196 ACCESS_POSSIBLE_VALUE_MIN,
197 ACCESS_POSSIBLE_VALUE_MAX,
198 ACCESS_POSSIBLE_VALUE_INCREMENT,
199 ACCESS_POSSIBLE_VALUE_UNITS,
200 ACCESS_ICON_RESOURCE,
201 ACCESS_DEFAULT_SECURITY_DESCRIPTOR,
202 ACCESS_ATTRIBUTES,
203 ACCESS_SCHEME,
204 ACCESS_SUBGROUP,
205 ACCESS_INDIVIDUAL_SETTING,
206 ACCESS_ACTIVE_SCHEME,
207 ACCESS_CREATE_SCHEME,
208 ACCESS_AC_POWER_SETTING_MAX,
209 ACCESS_DC_POWER_SETTING_MAX,
210 ACCESS_AC_POWER_SETTING_MIN,
211 ACCESS_DC_POWER_SETTING_MIN,
212 ACCESS_PROFILE,
213 ACCESS_OVERLAY_SCHEME,
214 ACCESS_ACTIVE_OVERLAY_SCHEME,
215}}
216pub type PPOWER_DATA_ACCESSOR = *mut POWER_DATA_ACCESSOR;
217pub const DEVICE_NOTIFY_CALLBACK: ULONG = 2;
218FN!{stdcall DEVICE_NOTIFY_CALLBACK_ROUTINE(
219 Context: PVOID,
220 Type: ULONG,
221 Setting: PVOID,
222) -> ULONG}
223pub type PDEVICE_NOTIFY_CALLBACK_ROUTINE = *mut DEVICE_NOTIFY_CALLBACK_ROUTINE;
224STRUCT!{struct DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS {
225 Callback: PDEVICE_NOTIFY_CALLBACK_ROUTINE,
226 Context: PVOID,
227}}
228pub type PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS = *mut DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS;
229extern "system" {
230 pub fn PowerIsSettingRangeDefined(
231 SubKeyGuid: *const GUID,
232 SettingGuid: *const GUID,
233 ) -> BOOLEAN;
234 pub fn PowerSettingAccessCheckEx(
235 AccessFlags: POWER_DATA_ACCESSOR,
236 PowerGuid: *const GUID,
237 AccessType: REGSAM,
238 ) -> DWORD;
239 pub fn PowerSettingAccessCheck(
240 AccessFlags: POWER_DATA_ACCESSOR,
241 PowerGuid: *const GUID,
242 ) -> DWORD;
243 pub fn PowerReadACValueIndex(
244 RootPowerKey: HKEY,
245 SchemeGuid: *const GUID,
246 SubGroupOfPowerSettingsGuid: *const GUID,
247 PowerSettingGuid: *const GUID,
248 AcValueIndex: LPDWORD,
249 ) -> DWORD;
250 pub fn PowerReadDCValueIndex(
251 RootPowerKey: HKEY,
252 SchemeGuid: *const GUID,
253 SubGroupOfPowerSettingsGuid: *const GUID,
254 PowerSettingGuid: *const GUID,
255 DcValueIndex: LPDWORD,
256 ) -> DWORD;
257 pub fn PowerReadFriendlyName(
258 RootPowerKey: HKEY,
259 SchemeGuid: *const GUID,
260 SubGroupOfPowerSettingsGuid: *const GUID,
261 PowerSettingGuid: *const GUID,
262 Buffer: PUCHAR,
263 BufferSize: LPDWORD,
264 ) -> DWORD;
265 pub fn PowerReadDescription(
266 RootPowerKey: HKEY,
267 SchemeGuid: *const GUID,
268 SubGroupOfPowerSettingsGuid: *const GUID,
269 PowerSettingGuid: *const GUID,
270 Buffer: PUCHAR,
271 BufferSize: LPDWORD,
272 ) -> DWORD;
273 pub fn PowerReadPossibleValue(
274 RootPowerKey: HKEY,
275 SubGroupOfPowerSettingsGuid: *const GUID,
276 PowerSettingGuid: *const GUID,
277 Type: PULONG,
278 PossibleSettingIndex: ULONG,
279 Buffer: PUCHAR,
280 BufferSize: LPDWORD,
281 ) -> DWORD;
282 pub fn PowerReadPossibleFriendlyName(
283 RootPowerKey: HKEY,
284 SubGroupOfPowerSettingsGuid: *const GUID,
285 PowerSettingGuid: *const GUID,
286 PossibleSettingIndex: ULONG,
287 Buffer: PUCHAR,
288 BufferSize: LPDWORD,
289 ) -> DWORD;
290 pub fn PowerReadPossibleDescription(
291 RootPowerKey: HKEY,
292 SubGroupOfPowerSettingsGuid: *const GUID,
293 PowerSettingGuid: *const GUID,
294 PossibleSettingIndex: ULONG,
295 Buffer: PUCHAR,
296 BufferSize: LPDWORD,
297 ) -> DWORD;
298 pub fn PowerReadValueMin(
299 RootPowerKey: HKEY,
300 SubGroupOfPowerSettingsGuid: *const GUID,
301 PowerSettingGuid: *const GUID,
302 ValueMinimum: LPDWORD,
303 ) -> DWORD;
304 pub fn PowerReadValueMax(
305 RootPowerKey: HKEY,
306 SubGroupOfPowerSettingsGuid: *const GUID,
307 PowerSettingGuid: *const GUID,
308 ValueMaximum: LPDWORD,
309 ) -> DWORD;
310 pub fn PowerReadValueIncrement(
311 RootPowerKey: HKEY,
312 SubGroupOfPowerSettingsGuid: *const GUID,
313 PowerSettingGuid: *const GUID,
314 ValueIncrement: LPDWORD,
315 ) -> DWORD;
316 pub fn PowerReadValueUnitsSpecifier(
317 RootPowerKey: HKEY,
318 SubGroupOfPowerSettingsGuid: *const GUID,
319 PowerSettingGuid: *const GUID,
320 Buffer: *mut UCHAR,
321 BufferSize: LPDWORD,
322 ) -> DWORD;
323 pub fn PowerReadACDefaultIndex(
324 RootPowerKey: HKEY,
325 SchemeGuid: *const GUID,
326 SubGroupOfPowerSettingsGuid: *const GUID,
327 PowerSettingGuid: *const GUID,
328 AcDefaultIndex: LPDWORD,
329 ) -> DWORD;
330 pub fn PowerReadDCDefaultIndex(
331 RootPowerKey: HKEY,
332 SchemeGuid: *const GUID,
333 SubGroupOfPowerSettingsGuid: *const GUID,
334 PowerSettingGuid: *const GUID,
335 DcDefaultIndex: LPDWORD,
336 ) -> DWORD;
337 pub fn PowerReadIconResourceSpecifier(
338 RootPowerKey: HKEY,
339 SchemeGuid: *const GUID,
340 SubGroupOfPowerSettingsGuid: *const GUID,
341 PowerSettingGuid: *const GUID,
342 Buffer: PUCHAR,
343 BufferSize: LPDWORD,
344 ) -> DWORD;
345 pub fn PowerReadSettingAttributes(
346 SubGroupGuid: *const GUID,
347 PowerSettingGuid: *const GUID,
348 ) -> DWORD;
349 pub fn PowerWriteFriendlyName(
350 RootPowerKey: HKEY,
351 SchemeGuid: *const GUID,
352 SubGroupOfPowerSettingsGuid: *const GUID,
353 PowerSettingGuid: *const GUID,
354 Buffer: *mut UCHAR,
355 BufferSize: DWORD,
356 ) -> DWORD;
357 pub fn PowerWriteDescription(
358 RootPowerKey: HKEY,
359 SchemeGuid: *const GUID,
360 SubGroupOfPowerSettingsGuid: *const GUID,
361 PowerSettingGuid: *const GUID,
362 Buffer: *mut UCHAR,
363 BufferSize: DWORD,
364 ) -> DWORD;
365 pub fn PowerWritePossibleValue(
366 RootPowerKey: HKEY,
367 SubGroupOfPowerSettingsGuid: *const GUID,
368 PowerSettingGuid: *const GUID,
369 Type: ULONG,
370 PossibleSettingIndex: ULONG,
371 Buffer: *mut UCHAR,
372 BufferSize: DWORD,
373 ) -> DWORD;
374 pub fn PowerWritePossibleFriendlyName(
375 RootPowerKey: HKEY,
376 SubGroupOfPowerSettingsGuid: *const GUID,
377 PowerSettingGuid: *const GUID,
378 PossibleSettingIndex: ULONG,
379 Buffer: *mut UCHAR,
380 BufferSize: DWORD,
381 ) -> DWORD;
382 pub fn PowerWritePossibleDescription(
383 RootPowerKey: HKEY,
384 SubGroupOfPowerSettingsGuid: *const GUID,
385 PowerSettingGuid: *const GUID,
386 PossibleSettingIndex: ULONG,
387 Buffer: *mut UCHAR,
388 BufferSize: DWORD,
389 ) -> DWORD;
390 pub fn PowerWriteValueMin(
391 RootPowerKey: HKEY,
392 SubGroupOfPowerSettingsGuid: *const GUID,
393 PowerSettingGuid: *const GUID,
394 ValueMinimum: DWORD,
395 ) -> DWORD;
396 pub fn PowerWriteValueMax(
397 RootPowerKey: HKEY,
398 SubGroupOfPowerSettingsGuid: *const GUID,
399 PowerSettingGuid: *const GUID,
400 ValueMaximum: DWORD,
401 ) -> DWORD;
402 pub fn PowerWriteValueIncrement(
403 RootPowerKey: HKEY,
404 SubGroupOfPowerSettingsGuid: *const GUID,
405 PowerSettingGuid: *const GUID,
406 ValueIncrement: DWORD,
407 ) -> DWORD;
408 pub fn PowerWriteValueUnitsSpecifier(
409 RootPowerKey: HKEY,
410 SubGroupOfPowerSettingsGuid: *const GUID,
411 PowerSettingGuid: *const GUID,
412 Buffer: *mut UCHAR,
413 BufferSize: DWORD,
414 ) -> DWORD;
415 pub fn PowerWriteACDefaultIndex(
416 RootSystemPowerKey: HKEY,
417 SchemePersonalityGuid: *const GUID,
418 SubGroupOfPowerSettingsGuid: *const GUID,
419 PowerSettingGuid: *const GUID,
420 DefaultAcIndex: DWORD,
421 ) -> DWORD;
422 pub fn PowerWriteDCDefaultIndex(
423 RootSystemPowerKey: HKEY,
424 SchemePersonalityGuid: *const GUID,
425 SubGroupOfPowerSettingsGuid: *const GUID,
426 PowerSettingGuid: *const GUID,
427 DefaultDcIndex: DWORD,
428 ) -> DWORD;
429 pub fn PowerWriteIconResourceSpecifier(
430 RootPowerKey: HKEY,
431 SchemeGuid: *const GUID,
432 SubGroupOfPowerSettingsGuid: *const GUID,
433 PowerSettingGuid: *const GUID,
434 Buffer: *mut UCHAR,
435 BufferSize: DWORD,
436 ) -> DWORD;
437 pub fn PowerWriteSettingAttributes(
438 SubGroupGuid: *const GUID,
439 PowerSettingGuid: *const GUID,
440 Attributes: DWORD,
441 ) -> DWORD;
442 pub fn PowerDuplicateScheme(
443 RootPowerKey: HKEY,
444 SourceSchemeGuid: *const GUID,
445 DestinationSchemeGuid: *mut *mut GUID,
446 ) -> DWORD;
447 pub fn PowerImportPowerScheme(
448 RootPowerKey: HKEY,
449 ImportFileNamePath: LPCWSTR,
450 DestinationSchemeGuid: *mut *mut GUID,
451 ) -> DWORD;
452 pub fn PowerDeleteScheme(
453 RootPowerKey: HKEY,
454 SchemeGuid: *mut GUID,
455 ) -> DWORD;
456 pub fn PowerRemovePowerSetting(
457 PowerSettingSubKeyGuid: *const GUID,
458 PowerSettingGuid: *const GUID,
459 ) -> DWORD;
460 pub fn PowerCreateSetting(
461 RootPowerKey: HKEY,
462 SubGroupOfPowerSettingsGuid: *const GUID,
463 PowerSettingGuid: *const GUID,
464 ) -> DWORD;
465 pub fn PowerCreatePossibleSetting(
466 RootPowerKey: HKEY,
467 SubGroupOfPowerSettingsGuid: *const GUID,
468 PowerSettingGuid: *const GUID,
469 PossibleSettingIndex: ULONG,
470 ) -> DWORD;
471 pub fn PowerEnumerate(
472 RootPowerKey: HKEY,
473 SchemeGuid: *const GUID,
474 SubGroupOfPowerSettingsGuid: *const GUID,
475 AccessFlags: POWER_DATA_ACCESSOR,
476 Index: ULONG,
477 Buffer: *mut UCHAR,
478 BufferSize: *mut DWORD,
479 ) -> DWORD;
480 pub fn PowerOpenUserPowerKey(
481 phUserPowerKey: *mut HKEY,
482 Access: REGSAM,
483 OpenExisting: BOOL,
484 ) -> DWORD;
485 pub fn PowerOpenSystemPowerKey(
486 phSystemPowerKey: *mut HKEY,
487 Access: REGSAM,
488 OpenExisting: BOOL,
489 ) -> DWORD;
490 pub fn PowerCanRestoreIndividualDefaultPowerScheme(
491 SchemeGuid: *const GUID,
492 ) -> DWORD;
493 pub fn PowerRestoreIndividualDefaultPowerScheme(
494 SchemeGuid: *const GUID,
495 ) -> DWORD;
496 pub fn PowerRestoreDefaultPowerSchemes() -> DWORD;
497 pub fn PowerReplaceDefaultPowerSchemes() -> DWORD;
498 pub fn PowerDeterminePlatformRole() -> POWER_PLATFORM_ROLE;
499}
500pub const DEVICEPOWER_HARDWAREID: ULONG = 0x80000000;
501pub const DEVICEPOWER_AND_OPERATION: ULONG = 0x40000000;
502pub const DEVICEPOWER_FILTER_DEVICES_PRESENT: ULONG = 0x20000000;
503pub const DEVICEPOWER_FILTER_HARDWARE: ULONG = 0x10000000;
504pub const DEVICEPOWER_FILTER_WAKEENABLED: ULONG = 0x08000000;
505pub const DEVICEPOWER_FILTER_WAKEPROGRAMMABLE: ULONG = 0x04000000;
506pub const DEVICEPOWER_FILTER_ON_NAME: ULONG = 0x02000000;
507pub const DEVICEPOWER_SET_WAKEENABLED: ULONG = 0x00000001;
508pub const DEVICEPOWER_CLEAR_WAKEENABLED: ULONG = 0x00000002;
509pub const PDCAP_S0_SUPPORTED: ULONG = 0x00010000;
510pub const PDCAP_S1_SUPPORTED: ULONG = 0x00020000;
511pub const PDCAP_S2_SUPPORTED: ULONG = 0x00040000;
512pub const PDCAP_S3_SUPPORTED: ULONG = 0x00080000;
513pub const PDCAP_WAKE_FROM_S0_SUPPORTED: ULONG = 0x00100000;
514pub const PDCAP_WAKE_FROM_S1_SUPPORTED: ULONG = 0x00200000;
515pub const PDCAP_WAKE_FROM_S2_SUPPORTED: ULONG = 0x00400000;
516pub const PDCAP_WAKE_FROM_S3_SUPPORTED: ULONG = 0x00800000;
517pub const PDCAP_S4_SUPPORTED: ULONG = 0x01000000;
518pub const PDCAP_S5_SUPPORTED: ULONG = 0x02000000;
519extern "system" {
520 pub fn DevicePowerEnumDevices(
521 QueryIndex: ULONG,
522 QueryInterpretationFlags: ULONG,
523 QueryFlags: ULONG,
524 pReturnBuffer: PBYTE,
525 pBufferSize: PULONG,
526 ) -> BOOLEAN;
527 pub fn DevicePowerSetDeviceState(
528 DeviceDescription: LPCWSTR,
529 SetFlags: ULONG,
530 SetData: PVOID,
531 ) -> DWORD;
532 pub fn DevicePowerOpen(
533 DebugMask: ULONG,
534 ) -> BOOLEAN;
535 pub fn DevicePowerClose() -> BOOLEAN;
536}
537STRUCT!{struct THERMAL_EVENT {
538 Version: ULONG,
539 Size: ULONG,
540 Type: ULONG,
541 Temperature: ULONG,
542 TripPointTemperature: ULONG,
543 Initiator: LPWSTR,
544}}
545pub type PTHERMAL_EVENT = *mut THERMAL_EVENT;
546extern "system" {
547 pub fn PowerReportThermalEvent(
548 Event: PTHERMAL_EVENT,
549 ) -> DWORD;
550}