ntpoapi.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. /*
  2. * ntpoapi.h
  3. *
  4. * APIs for power management.
  5. *
  6. * This file is part of the w32api package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. */
  22. #ifndef __NTPOAPI_H
  23. #define __NTPOAPI_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #ifndef _PO_DDK_
  28. #define _PO_DDK_
  29. /* Power States/Levels */
  30. typedef enum _SYSTEM_POWER_STATE {
  31. PowerSystemUnspecified,
  32. PowerSystemWorking,
  33. PowerSystemSleeping1,
  34. PowerSystemSleeping2,
  35. PowerSystemSleeping3,
  36. PowerSystemHibernate,
  37. PowerSystemShutdown,
  38. PowerSystemMaximum
  39. } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
  40. #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
  41. typedef enum _DEVICE_POWER_STATE {
  42. PowerDeviceUnspecified,
  43. PowerDeviceD0,
  44. PowerDeviceD1,
  45. PowerDeviceD2,
  46. PowerDeviceD3,
  47. PowerDeviceMaximum
  48. } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
  49. typedef union _POWER_STATE {
  50. SYSTEM_POWER_STATE SystemState;
  51. DEVICE_POWER_STATE DeviceState;
  52. } POWER_STATE, *PPOWER_STATE;
  53. typedef enum _POWER_STATE_TYPE {
  54. SystemPowerState = 0,
  55. DevicePowerState
  56. } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
  57. typedef enum _POWER_INFORMATION_LEVEL {
  58. SystemPowerPolicyAc,
  59. SystemPowerPolicyDc,
  60. VerifySystemPolicyAc,
  61. VerifySystemPolicyDc,
  62. SystemPowerCapabilities,
  63. SystemBatteryState,
  64. SystemPowerStateHandler,
  65. ProcessorStateHandler,
  66. SystemPowerPolicyCurrent,
  67. AdministratorPowerPolicy,
  68. SystemReserveHiberFile,
  69. ProcessorInformation,
  70. SystemPowerInformation,
  71. ProcessorStateHandler2,
  72. LastWakeTime,
  73. LastSleepTime,
  74. SystemExecutionState,
  75. SystemPowerStateNotifyHandler,
  76. ProcessorPowerPolicyAc,
  77. ProcessorPowerPolicyDc,
  78. VerifyProcessorPowerPolicyAc,
  79. VerifyProcessorPowerPolicyDc,
  80. ProcessorPowerPolicyCurrent,
  81. SystemPowerStateLogging,
  82. SystemPowerLoggingEntry,
  83. SetPowerSettingValue,
  84. NotifyUserPowerSetting,
  85. PowerInformationLevelUnused0,
  86. PowerInformationLevelUnused1,
  87. SystemVideoState,
  88. TraceApplicationPowerMessage,
  89. TraceApplicationPowerMessageEnd,
  90. ProcessorPerfStates,
  91. ProcessorIdleStates,
  92. ProcessorCap,
  93. SystemWakeSource,
  94. SystemHiberFileInformation,
  95. TraceServicePowerMessage,
  96. ProcessorLoad,
  97. PowerShutdownNotification,
  98. MonitorCapabilities,
  99. SessionPowerInit,
  100. SessionDisplayState,
  101. PowerRequestCreate,
  102. PowerRequestAction,
  103. GetPowerRequestList,
  104. ProcessorInformationEx,
  105. NotifyUserModeLegacyPowerEvent,
  106. GroupPark,
  107. ProcessorIdleDomains,
  108. WakeTimerList,
  109. SystemHiberFileSize,
  110. PowerInformationLevelMaximum
  111. } POWER_INFORMATION_LEVEL;
  112. typedef enum {
  113. PowerActionNone,
  114. PowerActionReserved,
  115. PowerActionSleep,
  116. PowerActionHibernate,
  117. PowerActionShutdown,
  118. PowerActionShutdownReset,
  119. PowerActionShutdownOff,
  120. PowerActionWarmEject
  121. } POWER_ACTION, *PPOWER_ACTION;
  122. #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
  123. typedef struct {
  124. ULONG Granularity;
  125. ULONG Capacity;
  126. } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
  127. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
  128. #endif /* _PO_DDK_ */
  129. #define POWER_PERF_SCALE 100
  130. #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
  131. #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
  132. typedef struct _PROCESSOR_IDLE_TIMES {
  133. ULONGLONG StartTime;
  134. ULONGLONG EndTime;
  135. ULONG IdleHandlerReserved[4];
  136. } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
  137. typedef BOOLEAN
  138. (FASTCALL*PPROCESSOR_IDLE_HANDLER)(
  139. IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
  140. typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
  141. ULONG HardwareLatency;
  142. PPROCESSOR_IDLE_HANDLER Handler;
  143. } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
  144. typedef VOID
  145. (FASTCALL*PSET_PROCESSOR_THROTTLE)(
  146. IN UCHAR Throttle);
  147. typedef NTSTATUS
  148. (FASTCALL*PSET_PROCESSOR_THROTTLE2)(
  149. IN UCHAR Throttle);
  150. #define MAX_IDLE_HANDLERS 3
  151. typedef struct _PROCESSOR_STATE_HANDLER {
  152. UCHAR ThrottleScale;
  153. BOOLEAN ThrottleOnIdle;
  154. PSET_PROCESSOR_THROTTLE SetThrottle;
  155. ULONG NumIdleHandlers;
  156. PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
  157. } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
  158. typedef enum _POWER_STATE_HANDLER_TYPE {
  159. PowerStateSleeping1,
  160. PowerStateSleeping2,
  161. PowerStateSleeping3,
  162. PowerStateSleeping4,
  163. PowerStateSleeping4Firmware,
  164. PowerStateShutdownReset,
  165. PowerStateShutdownOff,
  166. PowerStateMaximum
  167. } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
  168. typedef NTSTATUS
  169. (NTAPI*PENTER_STATE_SYSTEM_HANDLER)(
  170. IN PVOID SystemContext);
  171. typedef NTSTATUS
  172. (NTAPI*PENTER_STATE_HANDLER)(
  173. IN PVOID Context,
  174. IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
  175. IN PVOID SystemContext,
  176. IN LONG NumberProcessors,
  177. IN LONG volatile *Number);
  178. typedef struct _POWER_STATE_HANDLER {
  179. POWER_STATE_HANDLER_TYPE Type;
  180. BOOLEAN RtcWake;
  181. UCHAR Spare[3];
  182. PENTER_STATE_HANDLER Handler;
  183. PVOID Context;
  184. } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
  185. typedef NTSTATUS
  186. (NTAPI*PENTER_STATE_NOTIFY_HANDLER)(
  187. IN POWER_STATE_HANDLER_TYPE State,
  188. IN PVOID Context,
  189. IN BOOLEAN Entering);
  190. typedef struct _POWER_STATE_NOTIFY_HANDLER {
  191. PENTER_STATE_NOTIFY_HANDLER Handler;
  192. PVOID Context;
  193. } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
  194. NTSYSCALLAPI
  195. NTSTATUS
  196. NTAPI
  197. NtPowerInformation(
  198. IN POWER_INFORMATION_LEVEL InformationLevel,
  199. IN PVOID InputBuffer OPTIONAL,
  200. IN ULONG InputBufferLength,
  201. OUT PVOID OutputBuffer OPTIONAL,
  202. IN ULONG OutputBufferLength);
  203. #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
  204. #define PROCESSOR_STATE_TYPE_THROTTLE 2
  205. typedef struct _PROCESSOR_PERF_LEVEL {
  206. UCHAR PercentFrequency;
  207. UCHAR Reserved;
  208. USHORT Flags;
  209. } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
  210. typedef struct _PROCESSOR_PERF_STATE {
  211. UCHAR PercentFrequency;
  212. UCHAR MinCapacity;
  213. USHORT Power;
  214. UCHAR IncreaseLevel;
  215. UCHAR DecreaseLevel;
  216. USHORT Flags;
  217. ULONG IncreaseTime;
  218. ULONG DecreaseTime;
  219. ULONG IncreaseCount;
  220. ULONG DecreaseCount;
  221. ULONGLONG PerformanceTime;
  222. } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
  223. typedef struct _PROCESSOR_STATE_HANDLER2 {
  224. ULONG NumIdleHandlers;
  225. PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
  226. PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
  227. ULONG HardwareLatency;
  228. UCHAR NumPerfStates;
  229. PROCESSOR_PERF_LEVEL PerfLevel[1];
  230. } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
  231. NTSYSCALLAPI
  232. NTSTATUS
  233. NTAPI
  234. NtSetThreadExecutionState(
  235. IN EXECUTION_STATE esFlags,
  236. OUT EXECUTION_STATE *PreviousFlags);
  237. NTSYSCALLAPI
  238. NTSTATUS
  239. NTAPI
  240. NtRequestWakeupLatency(
  241. IN LATENCY_TIME latency);
  242. NTSYSCALLAPI
  243. NTSTATUS
  244. NTAPI
  245. NtInitiatePowerAction(
  246. IN POWER_ACTION SystemAction,
  247. IN SYSTEM_POWER_STATE MinSystemState,
  248. IN ULONG Flags,
  249. IN BOOLEAN Asynchronous);
  250. NTSYSCALLAPI
  251. NTSTATUS
  252. NTAPI
  253. NtSetSystemPowerState(
  254. IN POWER_ACTION SystemAction,
  255. IN SYSTEM_POWER_STATE MinSystemState,
  256. IN ULONG Flags);
  257. NTSYSCALLAPI
  258. NTSTATUS
  259. NTAPI
  260. NtGetDevicePowerState(
  261. IN HANDLE Device,
  262. OUT DEVICE_POWER_STATE *State);
  263. NTSYSCALLAPI
  264. NTSTATUS
  265. NTAPI
  266. NtCancelDeviceWakeupRequest(
  267. IN HANDLE Device);
  268. NTSYSCALLAPI
  269. BOOLEAN
  270. NTAPI
  271. NtIsSystemResumeAutomatic(
  272. VOID);
  273. NTSYSCALLAPI
  274. NTSTATUS
  275. NTAPI
  276. NtRequestDeviceWakeup(
  277. IN HANDLE Device);
  278. #define WINLOGON_LOCK_ON_SLEEP 0x00000001
  279. typedef struct {
  280. BOOLEAN PowerButtonPresent;
  281. BOOLEAN SleepButtonPresent;
  282. BOOLEAN LidPresent;
  283. BOOLEAN SystemS1;
  284. BOOLEAN SystemS2;
  285. BOOLEAN SystemS3;
  286. BOOLEAN SystemS4;
  287. BOOLEAN SystemS5;
  288. BOOLEAN HiberFilePresent;
  289. BOOLEAN FullWake;
  290. BOOLEAN VideoDimPresent;
  291. BOOLEAN ApmPresent;
  292. BOOLEAN UpsPresent;
  293. BOOLEAN ThermalControl;
  294. BOOLEAN ProcessorThrottle;
  295. UCHAR ProcessorMinThrottle;
  296. #if (NTDDI_VERSION < NTDDI_WINXP)
  297. UCHAR ProcessorThrottleScale;
  298. UCHAR spare2[4];
  299. #else
  300. UCHAR ProcessorMaxThrottle;
  301. BOOLEAN FastSystemS4;
  302. UCHAR spare2[3];
  303. #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
  304. BOOLEAN DiskSpinDown;
  305. UCHAR spare3[8];
  306. BOOLEAN SystemBatteriesPresent;
  307. BOOLEAN BatteriesAreShortTerm;
  308. BATTERY_REPORTING_SCALE BatteryScale[3];
  309. SYSTEM_POWER_STATE AcOnLineWake;
  310. SYSTEM_POWER_STATE SoftLidWake;
  311. SYSTEM_POWER_STATE RtcWake;
  312. SYSTEM_POWER_STATE MinDeviceWakeState;
  313. SYSTEM_POWER_STATE DefaultLowLatencyWake;
  314. } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
  315. typedef struct {
  316. BOOLEAN AcOnLine;
  317. BOOLEAN BatteryPresent;
  318. BOOLEAN Charging;
  319. BOOLEAN Discharging;
  320. BOOLEAN Spare1[4];
  321. ULONG MaxCapacity;
  322. ULONG RemainingCapacity;
  323. ULONG Rate;
  324. ULONG EstimatedTime;
  325. ULONG DefaultAlert1;
  326. ULONG DefaultAlert2;
  327. } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
  328. typedef struct _PROCESSOR_POWER_INFORMATION {
  329. ULONG Number;
  330. ULONG MaxMhz;
  331. ULONG CurrentMhz;
  332. ULONG MhzLimit;
  333. ULONG MaxIdleState;
  334. ULONG CurrentIdleState;
  335. } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
  336. typedef struct _POWER_ACTION_POLICY {
  337. POWER_ACTION Action;
  338. ULONG Flags;
  339. ULONG EventCode;
  340. } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
  341. /* POWER_ACTION_POLICY.Flags constants */
  342. #define POWER_ACTION_QUERY_ALLOWED 0x00000001
  343. #define POWER_ACTION_UI_ALLOWED 0x00000002
  344. #define POWER_ACTION_OVERRIDE_APPS 0x00000004
  345. #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
  346. #define POWER_ACTION_LOCK_CONSOLE 0x20000000
  347. #define POWER_ACTION_DISABLE_WAKES 0x40000000
  348. #define POWER_ACTION_CRITICAL 0x80000000
  349. /* POWER_ACTION_POLICY.EventCode constants */
  350. #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
  351. #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
  352. #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
  353. #define POWER_USER_NOTIFY_BUTTON 0x00000008
  354. #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
  355. #define POWER_FORCE_TRIGGER_RESET 0x80000000
  356. #define DISCHARGE_POLICY_CRITICAL 0
  357. #define DISCHARGE_POLICY_LOW 1
  358. #define NUM_DISCHARGE_POLICIES 4
  359. #define PO_THROTTLE_NONE 0
  360. #define PO_THROTTLE_CONSTANT 1
  361. #define PO_THROTTLE_DEGRADE 2
  362. #define PO_THROTTLE_ADAPTIVE 3
  363. #define PO_THROTTLE_MAXIMUM 4
  364. #ifdef __cplusplus
  365. }
  366. #endif
  367. #endif /* __NTPOAPI_H */