1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_powrprof.d)
9  */
10 /// Automatically imported and edited from the druntime module
11 /// core.sys.windows.powrprof for the auto-generated win32 package.
12 module win32.powrprof;
13 //version (Windows):
14 @system:
15 version (Win32_UseLib) pragma(lib, "powrprof");
16 
17 import win32.windef;
18 import win32.ntdef;
19 
20 // FIXME: look up Windows version support
21 
22 enum ULONG
23     EnableSysTrayBatteryMeter =  1,
24     EnableMultiBatteryDisplay =  2,
25     EnablePasswordLogon       =  4,
26     EnableWakeOnRing          =  8,
27     EnableVideoDimDisplay     = 16;
28 
29 enum UINT NEWSCHEME = -1;
30 
31 struct GLOBAL_MACHINE_POWER_POLICY {
32     ULONG              Revision;
33     SYSTEM_POWER_STATE LidOpenWakeAc;
34     SYSTEM_POWER_STATE LidOpenWakeDc;
35     ULONG              BroadcastCapacityResolution;
36 }
37 alias GLOBAL_MACHINE_POWER_POLICY* PGLOBAL_MACHINE_POWER_POLICY;
38 
39 struct GLOBAL_USER_POWER_POLICY {
40     ULONG               Revision;
41     POWER_ACTION_POLICY PowerButtonAc;
42     POWER_ACTION_POLICY PowerButtonDc;
43     POWER_ACTION_POLICY SleepButtonAc;
44     POWER_ACTION_POLICY SleepButtonDc;
45     POWER_ACTION_POLICY LidCloseAc;
46     POWER_ACTION_POLICY LidCloseDc;
47     SYSTEM_POWER_LEVEL[NUM_DISCHARGE_POLICIES] DischargePolicy;
48     ULONG GlobalFlags;
49 }
50 alias GLOBAL_USER_POWER_POLICY* PGLOBAL_USER_POWER_POLICY;
51 
52 struct GLOBAL_POWER_POLICY {
53     GLOBAL_USER_POWER_POLICY    user;
54     GLOBAL_MACHINE_POWER_POLICY mach;
55 }
56 alias GLOBAL_POWER_POLICY* PGLOBAL_POWER_POLICY;
57 
58 struct MACHINE_POWER_POLICY {
59     ULONG               Revision;
60     SYSTEM_POWER_STATE  MinSleepAc;
61     SYSTEM_POWER_STATE  MinSleepDc;
62     SYSTEM_POWER_STATE  ReducedLatencySleepAc;
63     SYSTEM_POWER_STATE  ReducedLatencySleepDc;
64     ULONG               DozeTimeoutAc;
65     ULONG               DozeTimeoutDc;
66     ULONG               DozeS4TimeoutAc;
67     ULONG               DozeS4TimeoutDc;
68     UCHAR               MinThrottleAc;
69     UCHAR               MinThrottleDc;
70     UCHAR[2]            pad1;
71     POWER_ACTION_POLICY OverThrottledAc;
72     POWER_ACTION_POLICY OverThrottledDc;
73 }
74 alias MACHINE_POWER_POLICY* PMACHINE_POWER_POLICY;
75 
76 struct MACHINE_PROCESSOR_POWER_POLICY {
77     ULONG Revision;
78     PROCESSOR_POWER_POLICY ProcessorPolicyAc;
79     PROCESSOR_POWER_POLICY ProcessorPolicyDc;
80 }
81 alias MACHINE_PROCESSOR_POWER_POLICY* PMACHINE_PROCESSOR_POWER_POLICY;
82 
83 struct USER_POWER_POLICY {
84    ULONG               Revision;
85    POWER_ACTION_POLICY IdleAc;
86    POWER_ACTION_POLICY IdleDc;
87    ULONG               IdleTimeoutAc;
88    ULONG               IdleTimeoutDc;
89    UCHAR               IdleSensitivityAc;
90    UCHAR               IdleSensitivityDc;
91    UCHAR               ThrottlePolicyAc;
92    UCHAR               ThrottlePolicyDc;
93    SYSTEM_POWER_STATE  MaxSleepAc;
94    SYSTEM_POWER_STATE  MaxSleepDc;
95    ULONG[2]            Reserved;
96    ULONG               VideoTimeoutAc;
97    ULONG               VideoTimeoutDc;
98    ULONG               SpindownTimeoutAc;
99    ULONG               SpindownTimeoutDc;
100    BOOLEAN             OptimizeForPowerAc;
101    BOOLEAN             OptimizeForPowerDc;
102    UCHAR               FanThrottleToleranceAc;
103    UCHAR               FanThrottleToleranceDc;
104    UCHAR               ForcedThrottleAc;
105    UCHAR               ForcedThrottleDc;
106 }
107 alias USER_POWER_POLICY* PUSER_POWER_POLICY;
108 
109 struct POWER_POLICY {
110     USER_POWER_POLICY    user;
111     MACHINE_POWER_POLICY mach;
112 }
113 alias POWER_POLICY* PPOWER_POLICY;
114 
115 extern (Windows) {
116     alias BOOLEAN function(UINT, DWORD, LPTSTR, DWORD, LPTSTR, PPOWER_POLICY,
117       LPARAM) PWRSCHEMESENUMPROC;
118     alias BOOLEAN function(POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN)
119       PFNNTINITIATEPWRACTION;
120 
121     NTSTATUS CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG,
122       PVOID, ULONG);
123     BOOLEAN CanUserWritePwrScheme();
124     BOOLEAN DeletePwrScheme(UINT);
125     BOOLEAN EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
126     BOOLEAN GetActivePwrScheme(PUINT);
127     BOOLEAN GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
128     BOOLEAN GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
129     BOOLEAN GetPwrDiskSpindownRange(PUINT, PUINT);
130     BOOLEAN IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
131     BOOLEAN IsPwrHibernateAllowed();
132     BOOLEAN IsPwrShutdownAllowed();
133     BOOLEAN IsPwrSuspendAllowed();
134     BOOLEAN ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
135     BOOLEAN ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
136     BOOLEAN ReadPwrScheme(UINT, PPOWER_POLICY);
137     BOOLEAN SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
138     BOOLEAN SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
139     BOOLEAN WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
140     BOOLEAN WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
141     BOOLEAN ValidatePowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
142     BOOLEAN WritePwrScheme(PUINT, LPTSTR, LPTSTR, PPOWER_POLICY);
143 }