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