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