1 /***********************************************************************\
2 *                               powrprof.d                              *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.powrprof;
12 version(Windows):
13 pragma(lib, "powrprof");
14 
15 private import win32.windef;
16 private import win32.ntdef;
17 
18 // FIXME: look up Windows version support
19 
20 const ULONG
21 	EnableSysTrayBatteryMeter =  1,
22 	EnableMultiBatteryDisplay =  2,
23 	EnablePasswordLogon       =  4,
24 	EnableWakeOnRing          =  8,
25 	EnableVideoDimDisplay     = 16;
26 
27 const 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 }