1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Interface for powrprof.dll, the power policy applicator
7 use shared::guiddef::GUID;
8 use shared::minwindef::{
9     BOOL, DWORD, HKEY, LPARAM, LPDWORD, PBYTE, PUCHAR, PUINT, PULONG, UCHAR, UINT, ULONG,
10 };
11 use 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 };
16 use um::winreg::REGSAM;
17 STRUCT!{struct GLOBAL_MACHINE_POWER_POLICY {
18     Revision: ULONG,
19     LidOpenWakeAc: SYSTEM_POWER_STATE,
20     LidOpenWakeDc: SYSTEM_POWER_STATE,
21     BroadcastCapacityResolution: ULONG,
22 }}
23 pub type PGLOBAL_MACHINE_POWER_POLICY = *mut GLOBAL_MACHINE_POWER_POLICY;
24 STRUCT!{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 }}
35 pub type PGLOBAL_USER_POWER_POLICY = *mut GLOBAL_USER_POWER_POLICY;
36 STRUCT!{struct GLOBAL_POWER_POLICY {
37     user: GLOBAL_USER_POWER_POLICY,
38     mach: GLOBAL_MACHINE_POWER_POLICY,
39 }}
40 pub type PGLOBAL_POWER_POLICY = *mut GLOBAL_POWER_POLICY;
41 STRUCT!{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 }}
57 pub type PMACHINE_POWER_POLICY = *mut MACHINE_POWER_POLICY;
58 STRUCT!{struct MACHINE_PROCESSOR_POWER_POLICY {
59     Revision: ULONG,
60     ProcessorPolicyAc: PROCESSOR_POWER_POLICY,
61     ProcessorPolicyDc: PROCESSOR_POWER_POLICY,
62 }}
63 pub type PMACHINE_PROCESSOR_POWER_POLICY = *mut MACHINE_PROCESSOR_POWER_POLICY;
64 STRUCT!{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 }}
88 pub type PUSER_POWER_POLICY = *mut USER_POWER_POLICY;
89 STRUCT!{struct POWER_POLICY {
90     user: USER_POWER_POLICY,
91     mach: MACHINE_POWER_POLICY,
92 }}
93 pub type PPOWER_POLICY = *mut POWER_POLICY;
94 pub const EnableSysTrayBatteryMeter: ULONG = 0x01;
95 pub const EnableMultiBatteryDisplay: ULONG = 0x02;
96 pub const EnablePasswordLogon: ULONG = 0x04;
97 pub const EnableWakeOnRing: ULONG = 0x08;
98 pub const EnableVideoDimDisplay: ULONG = 0x10;
99 pub const POWER_ATTRIBUTE_HIDE: ULONG = 0x00000001;
100 pub const POWER_ATTRIBUTE_SHOW_AOAC: ULONG = 0x00000002;
101 pub const NEWSCHEME: UINT = -1i32 as u32;
102 FN!{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}
111 FN!{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}
120 pub type PWRSCHEMESENUMPROC = *mut PWRSCHEMESENUMPROC_V2;
121 extern "system" {
GetPwrDiskSpindownRange( puiMax: PUINT, puiMin: PUINT, ) -> BOOLEAN122     pub fn GetPwrDiskSpindownRange(
123         puiMax: PUINT,
124         puiMin: PUINT,
125     ) -> BOOLEAN;
EnumPwrSchemes( lpfn: PWRSCHEMESENUMPROC, lParam: LPARAM, ) -> BOOLEAN126     pub fn EnumPwrSchemes(
127         lpfn: PWRSCHEMESENUMPROC,
128         lParam: LPARAM,
129     ) -> BOOLEAN;
ReadGlobalPwrPolicy( pGlobalPowerPolicy: PGLOBAL_POWER_POLICY, ) -> BOOLEAN130     pub fn ReadGlobalPwrPolicy(
131         pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
132     ) -> BOOLEAN;
ReadPwrScheme( uiID: UINT, pPowerPolicy: PPOWER_POLICY, ) -> BOOLEAN133     pub fn ReadPwrScheme(
134         uiID: UINT,
135         pPowerPolicy: PPOWER_POLICY,
136     ) -> BOOLEAN;
WritePwrScheme( puiID: PUINT, lpszSchemeName: LPCWSTR, lpszDescription: LPCWSTR, lpScheme: PPOWER_POLICY, ) -> BOOLEAN137     pub fn WritePwrScheme(
138         puiID: PUINT,
139         lpszSchemeName: LPCWSTR,
140         lpszDescription: LPCWSTR,
141         lpScheme: PPOWER_POLICY,
142     ) -> BOOLEAN;
WriteGlobalPwrPolicy( pGlobalPowerPolicy: PGLOBAL_POWER_POLICY, ) -> BOOLEAN143     pub fn WriteGlobalPwrPolicy(
144         pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
145     ) -> BOOLEAN;
DeletePwrScheme( uiID: UINT, ) -> BOOLEAN146     pub fn DeletePwrScheme(
147         uiID: UINT,
148     ) -> BOOLEAN;
GetActivePwrScheme( puiID: PUINT, ) -> BOOLEAN149     pub fn GetActivePwrScheme(
150         puiID: PUINT,
151     ) -> BOOLEAN;
SetActivePwrScheme( uiID: UINT, pGlobalPowerPolicy: PGLOBAL_POWER_POLICY, pPowerPolicy: PPOWER_POLICY, ) -> BOOLEAN152     pub fn SetActivePwrScheme(
153         uiID: UINT,
154         pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
155         pPowerPolicy: PPOWER_POLICY,
156     ) -> BOOLEAN;
IsPwrSuspendAllowed() -> BOOLEAN157     pub fn IsPwrSuspendAllowed() -> BOOLEAN;
IsPwrHibernateAllowed() -> BOOLEAN158     pub fn IsPwrHibernateAllowed() -> BOOLEAN;
IsPwrShutdownAllowed() -> BOOLEAN159     pub fn IsPwrShutdownAllowed() -> BOOLEAN;
IsAdminOverrideActive( papp: PADMINISTRATOR_POWER_POLICY, ) -> BOOLEAN160     pub fn IsAdminOverrideActive(
161         papp: PADMINISTRATOR_POWER_POLICY,
162     ) -> BOOLEAN;
SetSuspendState( bHibernate: BOOLEAN, bForce: BOOLEAN, bWakeupEventsDisabled: BOOLEAN, ) -> BOOLEAN163     pub fn SetSuspendState(
164         bHibernate: BOOLEAN,
165         bForce: BOOLEAN,
166         bWakeupEventsDisabled: BOOLEAN,
167     ) -> BOOLEAN;
GetCurrentPowerPolicies( pGlobalPowerPolicy: PGLOBAL_POWER_POLICY, pPowerPolicy: PPOWER_POLICY, ) -> BOOLEAN168     pub fn GetCurrentPowerPolicies(
169         pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
170         pPowerPolicy: PPOWER_POLICY,
171     ) -> BOOLEAN;
CanUserWritePwrScheme() -> BOOLEAN172     pub fn CanUserWritePwrScheme() -> BOOLEAN;
ReadProcessorPwrScheme( uiID: UINT, pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY, ) -> BOOLEAN173     pub fn ReadProcessorPwrScheme(
174         uiID: UINT,
175         pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
176     ) -> BOOLEAN;
WriteProcessorPwrScheme( uiID: UINT, pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY, ) -> BOOLEAN177     pub fn WriteProcessorPwrScheme(
178         uiID: UINT,
179         pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
180     ) -> BOOLEAN;
ValidatePowerPolicies( pGlobalPowerPolicy: PGLOBAL_POWER_POLICY, pPowerPolicy: PPOWER_POLICY, ) -> BOOLEAN181     pub fn ValidatePowerPolicies(
182         pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
183         pPowerPolicy: PPOWER_POLICY,
184     ) -> BOOLEAN;
185 }
186 ENUM!{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 }}
216 pub type PPOWER_DATA_ACCESSOR = *mut POWER_DATA_ACCESSOR;
217 pub const DEVICE_NOTIFY_CALLBACK: ULONG = 2;
218 FN!{stdcall DEVICE_NOTIFY_CALLBACK_ROUTINE(
219     Context: PVOID,
220     Type: ULONG,
221     Setting: PVOID,
222 ) -> ULONG}
223 pub type PDEVICE_NOTIFY_CALLBACK_ROUTINE = *mut DEVICE_NOTIFY_CALLBACK_ROUTINE;
224 STRUCT!{struct DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS {
225     Callback: PDEVICE_NOTIFY_CALLBACK_ROUTINE,
226     Context: PVOID,
227 }}
228 pub type PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS = *mut DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS;
229 extern "system" {
PowerIsSettingRangeDefined( SubKeyGuid: *const GUID, SettingGuid: *const GUID, ) -> BOOLEAN230     pub fn PowerIsSettingRangeDefined(
231         SubKeyGuid: *const GUID,
232         SettingGuid: *const GUID,
233     ) -> BOOLEAN;
PowerSettingAccessCheckEx( AccessFlags: POWER_DATA_ACCESSOR, PowerGuid: *const GUID, AccessType: REGSAM, ) -> DWORD234     pub fn PowerSettingAccessCheckEx(
235         AccessFlags: POWER_DATA_ACCESSOR,
236         PowerGuid: *const GUID,
237         AccessType: REGSAM,
238     ) -> DWORD;
PowerSettingAccessCheck( AccessFlags: POWER_DATA_ACCESSOR, PowerGuid: *const GUID, ) -> DWORD239     pub fn PowerSettingAccessCheck(
240         AccessFlags: POWER_DATA_ACCESSOR,
241         PowerGuid: *const GUID,
242     ) -> DWORD;
PowerReadACValueIndex( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, AcValueIndex: LPDWORD, ) -> DWORD243     pub fn PowerReadACValueIndex(
244         RootPowerKey: HKEY,
245         SchemeGuid: *const GUID,
246         SubGroupOfPowerSettingsGuid: *const GUID,
247         PowerSettingGuid: *const GUID,
248         AcValueIndex: LPDWORD,
249     ) -> DWORD;
PowerReadDCValueIndex( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, DcValueIndex: LPDWORD, ) -> DWORD250     pub fn PowerReadDCValueIndex(
251         RootPowerKey: HKEY,
252         SchemeGuid: *const GUID,
253         SubGroupOfPowerSettingsGuid: *const GUID,
254         PowerSettingGuid: *const GUID,
255         DcValueIndex: LPDWORD,
256     ) -> DWORD;
PowerReadFriendlyName( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD257     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;
PowerReadDescription( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD265     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;
PowerReadPossibleValue( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Type: PULONG, PossibleSettingIndex: ULONG, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD273     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;
PowerReadPossibleFriendlyName( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, PossibleSettingIndex: ULONG, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD282     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;
PowerReadPossibleDescription( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, PossibleSettingIndex: ULONG, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD290     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;
PowerReadValueMin( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueMinimum: LPDWORD, ) -> DWORD298     pub fn PowerReadValueMin(
299         RootPowerKey: HKEY,
300         SubGroupOfPowerSettingsGuid: *const GUID,
301         PowerSettingGuid: *const GUID,
302         ValueMinimum: LPDWORD,
303     ) -> DWORD;
PowerReadValueMax( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueMaximum: LPDWORD, ) -> DWORD304     pub fn PowerReadValueMax(
305         RootPowerKey: HKEY,
306         SubGroupOfPowerSettingsGuid: *const GUID,
307         PowerSettingGuid: *const GUID,
308         ValueMaximum: LPDWORD,
309     ) -> DWORD;
PowerReadValueIncrement( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueIncrement: LPDWORD, ) -> DWORD310     pub fn PowerReadValueIncrement(
311         RootPowerKey: HKEY,
312         SubGroupOfPowerSettingsGuid: *const GUID,
313         PowerSettingGuid: *const GUID,
314         ValueIncrement: LPDWORD,
315     ) -> DWORD;
PowerReadValueUnitsSpecifier( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: *mut UCHAR, BufferSize: LPDWORD, ) -> DWORD316     pub fn PowerReadValueUnitsSpecifier(
317         RootPowerKey: HKEY,
318         SubGroupOfPowerSettingsGuid: *const GUID,
319         PowerSettingGuid: *const GUID,
320         Buffer: *mut UCHAR,
321         BufferSize: LPDWORD,
322     ) -> DWORD;
PowerReadACDefaultIndex( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, AcDefaultIndex: LPDWORD, ) -> DWORD323     pub fn PowerReadACDefaultIndex(
324         RootPowerKey: HKEY,
325         SchemeGuid: *const GUID,
326         SubGroupOfPowerSettingsGuid: *const GUID,
327         PowerSettingGuid: *const GUID,
328         AcDefaultIndex: LPDWORD,
329     ) -> DWORD;
PowerReadDCDefaultIndex( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, DcDefaultIndex: LPDWORD, ) -> DWORD330     pub fn PowerReadDCDefaultIndex(
331         RootPowerKey: HKEY,
332         SchemeGuid: *const GUID,
333         SubGroupOfPowerSettingsGuid: *const GUID,
334         PowerSettingGuid: *const GUID,
335         DcDefaultIndex: LPDWORD,
336     ) -> DWORD;
PowerReadIconResourceSpecifier( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: PUCHAR, BufferSize: LPDWORD, ) -> DWORD337     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;
PowerReadSettingAttributes( SubGroupGuid: *const GUID, PowerSettingGuid: *const GUID, ) -> DWORD345     pub fn PowerReadSettingAttributes(
346         SubGroupGuid: *const GUID,
347         PowerSettingGuid: *const GUID,
348     ) -> DWORD;
PowerWriteFriendlyName( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD349     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;
PowerWriteDescription( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD357     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;
PowerWritePossibleValue( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Type: ULONG, PossibleSettingIndex: ULONG, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD365     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;
PowerWritePossibleFriendlyName( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, PossibleSettingIndex: ULONG, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD374     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;
PowerWritePossibleDescription( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, PossibleSettingIndex: ULONG, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD382     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;
PowerWriteValueMin( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueMinimum: DWORD, ) -> DWORD390     pub fn PowerWriteValueMin(
391         RootPowerKey: HKEY,
392         SubGroupOfPowerSettingsGuid: *const GUID,
393         PowerSettingGuid: *const GUID,
394         ValueMinimum: DWORD,
395     ) -> DWORD;
PowerWriteValueMax( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueMaximum: DWORD, ) -> DWORD396     pub fn PowerWriteValueMax(
397         RootPowerKey: HKEY,
398         SubGroupOfPowerSettingsGuid: *const GUID,
399         PowerSettingGuid: *const GUID,
400         ValueMaximum: DWORD,
401     ) -> DWORD;
PowerWriteValueIncrement( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ValueIncrement: DWORD, ) -> DWORD402     pub fn PowerWriteValueIncrement(
403         RootPowerKey: HKEY,
404         SubGroupOfPowerSettingsGuid: *const GUID,
405         PowerSettingGuid: *const GUID,
406         ValueIncrement: DWORD,
407     ) -> DWORD;
PowerWriteValueUnitsSpecifier( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD408     pub fn PowerWriteValueUnitsSpecifier(
409         RootPowerKey: HKEY,
410         SubGroupOfPowerSettingsGuid: *const GUID,
411         PowerSettingGuid: *const GUID,
412         Buffer: *mut UCHAR,
413         BufferSize: DWORD,
414     ) -> DWORD;
PowerWriteACDefaultIndex( RootSystemPowerKey: HKEY, SchemePersonalityGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, DefaultAcIndex: DWORD, ) -> DWORD415     pub fn PowerWriteACDefaultIndex(
416         RootSystemPowerKey: HKEY,
417         SchemePersonalityGuid: *const GUID,
418         SubGroupOfPowerSettingsGuid: *const GUID,
419         PowerSettingGuid: *const GUID,
420         DefaultAcIndex: DWORD,
421     ) -> DWORD;
PowerWriteDCDefaultIndex( RootSystemPowerKey: HKEY, SchemePersonalityGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, DefaultDcIndex: DWORD, ) -> DWORD422     pub fn PowerWriteDCDefaultIndex(
423         RootSystemPowerKey: HKEY,
424         SchemePersonalityGuid: *const GUID,
425         SubGroupOfPowerSettingsGuid: *const GUID,
426         PowerSettingGuid: *const GUID,
427         DefaultDcIndex: DWORD,
428     ) -> DWORD;
PowerWriteIconResourceSpecifier( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, Buffer: *mut UCHAR, BufferSize: DWORD, ) -> DWORD429     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;
PowerWriteSettingAttributes( SubGroupGuid: *const GUID, PowerSettingGuid: *const GUID, Attributes: DWORD, ) -> DWORD437     pub fn PowerWriteSettingAttributes(
438         SubGroupGuid: *const GUID,
439         PowerSettingGuid: *const GUID,
440         Attributes: DWORD,
441     ) -> DWORD;
PowerDuplicateScheme( RootPowerKey: HKEY, SourceSchemeGuid: *const GUID, DestinationSchemeGuid: *mut *mut GUID, ) -> DWORD442     pub fn PowerDuplicateScheme(
443         RootPowerKey: HKEY,
444         SourceSchemeGuid: *const GUID,
445         DestinationSchemeGuid: *mut *mut GUID,
446     ) -> DWORD;
PowerImportPowerScheme( RootPowerKey: HKEY, ImportFileNamePath: LPCWSTR, DestinationSchemeGuid: *mut *mut GUID, ) -> DWORD447     pub fn PowerImportPowerScheme(
448         RootPowerKey: HKEY,
449         ImportFileNamePath: LPCWSTR,
450         DestinationSchemeGuid: *mut *mut GUID,
451     ) -> DWORD;
PowerDeleteScheme( RootPowerKey: HKEY, SchemeGuid: *mut GUID, ) -> DWORD452     pub fn PowerDeleteScheme(
453         RootPowerKey: HKEY,
454         SchemeGuid: *mut GUID,
455     ) -> DWORD;
PowerRemovePowerSetting( PowerSettingSubKeyGuid: *const GUID, PowerSettingGuid: *const GUID, ) -> DWORD456     pub fn PowerRemovePowerSetting(
457         PowerSettingSubKeyGuid: *const GUID,
458         PowerSettingGuid: *const GUID,
459     ) -> DWORD;
PowerCreateSetting( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, ) -> DWORD460     pub fn PowerCreateSetting(
461         RootPowerKey: HKEY,
462         SubGroupOfPowerSettingsGuid: *const GUID,
463         PowerSettingGuid: *const GUID,
464     ) -> DWORD;
PowerCreatePossibleSetting( RootPowerKey: HKEY, SubGroupOfPowerSettingsGuid: *const GUID, PowerSettingGuid: *const GUID, PossibleSettingIndex: ULONG, ) -> DWORD465     pub fn PowerCreatePossibleSetting(
466         RootPowerKey: HKEY,
467         SubGroupOfPowerSettingsGuid: *const GUID,
468         PowerSettingGuid: *const GUID,
469         PossibleSettingIndex: ULONG,
470     ) -> DWORD;
PowerEnumerate( RootPowerKey: HKEY, SchemeGuid: *const GUID, SubGroupOfPowerSettingsGuid: *const GUID, AccessFlags: POWER_DATA_ACCESSOR, Index: ULONG, Buffer: *mut UCHAR, BufferSize: *mut DWORD, ) -> DWORD471     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;
PowerOpenUserPowerKey( phUserPowerKey: *mut HKEY, Access: REGSAM, OpenExisting: BOOL, ) -> DWORD480     pub fn PowerOpenUserPowerKey(
481         phUserPowerKey: *mut HKEY,
482         Access: REGSAM,
483         OpenExisting: BOOL,
484     ) -> DWORD;
PowerOpenSystemPowerKey( phSystemPowerKey: *mut HKEY, Access: REGSAM, OpenExisting: BOOL, ) -> DWORD485     pub fn PowerOpenSystemPowerKey(
486         phSystemPowerKey: *mut HKEY,
487         Access: REGSAM,
488         OpenExisting: BOOL,
489     ) -> DWORD;
PowerCanRestoreIndividualDefaultPowerScheme( SchemeGuid: *const GUID, ) -> DWORD490     pub fn PowerCanRestoreIndividualDefaultPowerScheme(
491         SchemeGuid: *const GUID,
492     ) -> DWORD;
PowerRestoreIndividualDefaultPowerScheme( SchemeGuid: *const GUID, ) -> DWORD493     pub fn PowerRestoreIndividualDefaultPowerScheme(
494         SchemeGuid: *const GUID,
495     ) -> DWORD;
PowerRestoreDefaultPowerSchemes() -> DWORD496     pub fn PowerRestoreDefaultPowerSchemes() -> DWORD;
PowerReplaceDefaultPowerSchemes() -> DWORD497     pub fn PowerReplaceDefaultPowerSchemes() -> DWORD;
PowerDeterminePlatformRole() -> POWER_PLATFORM_ROLE498     pub fn PowerDeterminePlatformRole() -> POWER_PLATFORM_ROLE;
499 }
500 pub const DEVICEPOWER_HARDWAREID: ULONG = 0x80000000;
501 pub const DEVICEPOWER_AND_OPERATION: ULONG = 0x40000000;
502 pub const DEVICEPOWER_FILTER_DEVICES_PRESENT: ULONG = 0x20000000;
503 pub const DEVICEPOWER_FILTER_HARDWARE: ULONG = 0x10000000;
504 pub const DEVICEPOWER_FILTER_WAKEENABLED: ULONG = 0x08000000;
505 pub const DEVICEPOWER_FILTER_WAKEPROGRAMMABLE: ULONG = 0x04000000;
506 pub const DEVICEPOWER_FILTER_ON_NAME: ULONG = 0x02000000;
507 pub const DEVICEPOWER_SET_WAKEENABLED: ULONG = 0x00000001;
508 pub const DEVICEPOWER_CLEAR_WAKEENABLED: ULONG = 0x00000002;
509 pub const PDCAP_S0_SUPPORTED: ULONG = 0x00010000;
510 pub const PDCAP_S1_SUPPORTED: ULONG = 0x00020000;
511 pub const PDCAP_S2_SUPPORTED: ULONG = 0x00040000;
512 pub const PDCAP_S3_SUPPORTED: ULONG = 0x00080000;
513 pub const PDCAP_WAKE_FROM_S0_SUPPORTED: ULONG = 0x00100000;
514 pub const PDCAP_WAKE_FROM_S1_SUPPORTED: ULONG = 0x00200000;
515 pub const PDCAP_WAKE_FROM_S2_SUPPORTED: ULONG = 0x00400000;
516 pub const PDCAP_WAKE_FROM_S3_SUPPORTED: ULONG = 0x00800000;
517 pub const PDCAP_S4_SUPPORTED: ULONG = 0x01000000;
518 pub const PDCAP_S5_SUPPORTED: ULONG = 0x02000000;
519 extern "system" {
DevicePowerEnumDevices( QueryIndex: ULONG, QueryInterpretationFlags: ULONG, QueryFlags: ULONG, pReturnBuffer: PBYTE, pBufferSize: PULONG, ) -> BOOLEAN520     pub fn DevicePowerEnumDevices(
521         QueryIndex: ULONG,
522         QueryInterpretationFlags: ULONG,
523         QueryFlags: ULONG,
524         pReturnBuffer: PBYTE,
525         pBufferSize: PULONG,
526     ) -> BOOLEAN;
DevicePowerSetDeviceState( DeviceDescription: LPCWSTR, SetFlags: ULONG, SetData: PVOID, ) -> DWORD527     pub fn DevicePowerSetDeviceState(
528         DeviceDescription: LPCWSTR,
529         SetFlags: ULONG,
530         SetData: PVOID,
531     ) -> DWORD;
DevicePowerOpen( DebugMask: ULONG, ) -> BOOLEAN532     pub fn DevicePowerOpen(
533         DebugMask: ULONG,
534     ) -> BOOLEAN;
DevicePowerClose() -> BOOLEAN535     pub fn DevicePowerClose() -> BOOLEAN;
536 }
537 STRUCT!{struct THERMAL_EVENT {
538     Version: ULONG,
539     Size: ULONG,
540     Type: ULONG,
541     Temperature: ULONG,
542     TripPointTemperature: ULONG,
543     Initiator: LPWSTR,
544 }}
545 pub type PTHERMAL_EVENT = *mut THERMAL_EVENT;
546 extern "system" {
PowerReportThermalEvent( Event: PTHERMAL_EVENT, ) -> DWORD547     pub fn PowerReportThermalEvent(
548         Event: PTHERMAL_EVENT,
549     ) -> DWORD;
550 }
551