00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __NTPOAPI_H
00024 #define __NTPOAPI_H
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 #ifndef _PO_DDK_
00031 #define _PO_DDK_
00032
00033
00034 typedef enum _SYSTEM_POWER_STATE {
00035 PowerSystemUnspecified,
00036 PowerSystemWorking,
00037 PowerSystemSleeping1,
00038 PowerSystemSleeping2,
00039 PowerSystemSleeping3,
00040 PowerSystemHibernate,
00041 PowerSystemShutdown,
00042 PowerSystemMaximum
00043 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
00044
00045 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
00046
00047 typedef enum _DEVICE_POWER_STATE {
00048 PowerDeviceUnspecified,
00049 PowerDeviceD0,
00050 PowerDeviceD1,
00051 PowerDeviceD2,
00052 PowerDeviceD3,
00053 PowerDeviceMaximum
00054 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
00055
00056 typedef union _POWER_STATE {
00057 SYSTEM_POWER_STATE SystemState;
00058 DEVICE_POWER_STATE DeviceState;
00059 } POWER_STATE, *PPOWER_STATE;
00060
00061 typedef enum _POWER_STATE_TYPE {
00062 SystemPowerState = 0,
00063 DevicePowerState
00064 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
00065
00066 typedef enum _POWER_INFORMATION_LEVEL {
00067 SystemPowerPolicyAc,
00068 SystemPowerPolicyDc,
00069 VerifySystemPolicyAc,
00070 VerifySystemPolicyDc,
00071 SystemPowerCapabilities,
00072 SystemBatteryState,
00073 SystemPowerStateHandler,
00074 ProcessorStateHandler,
00075 SystemPowerPolicyCurrent,
00076 AdministratorPowerPolicy,
00077 SystemReserveHiberFile,
00078 ProcessorInformation,
00079 SystemPowerInformation,
00080 ProcessorStateHandler2,
00081 LastWakeTime,
00082 LastSleepTime,
00083 SystemExecutionState,
00084 SystemPowerStateNotifyHandler,
00085 ProcessorPowerPolicyAc,
00086 ProcessorPowerPolicyDc,
00087 VerifyProcessorPowerPolicyAc,
00088 VerifyProcessorPowerPolicyDc,
00089 ProcessorPowerPolicyCurrent,
00090 SystemPowerStateLogging,
00091 SystemPowerLoggingEntry,
00092 SetPowerSettingValue,
00093 NotifyUserPowerSetting,
00094 PowerInformationLevelUnused0,
00095 PowerInformationLevelUnused1,
00096 SystemVideoState,
00097 TraceApplicationPowerMessage,
00098 TraceApplicationPowerMessageEnd,
00099 ProcessorPerfStates,
00100 ProcessorIdleStates,
00101 ProcessorCap,
00102 SystemWakeSource,
00103 SystemHiberFileInformation,
00104 TraceServicePowerMessage,
00105 ProcessorLoad,
00106 PowerShutdownNotification,
00107 MonitorCapabilities,
00108 SessionPowerInit,
00109 SessionDisplayState,
00110 PowerRequestCreate,
00111 PowerRequestAction,
00112 GetPowerRequestList,
00113 ProcessorInformationEx,
00114 NotifyUserModeLegacyPowerEvent,
00115 GroupPark,
00116 ProcessorIdleDomains,
00117 WakeTimerList,
00118 SystemHiberFileSize,
00119 PowerInformationLevelMaximum
00120 } POWER_INFORMATION_LEVEL;
00121
00122 typedef enum {
00123 PowerActionNone,
00124 PowerActionReserved,
00125 PowerActionSleep,
00126 PowerActionHibernate,
00127 PowerActionShutdown,
00128 PowerActionShutdownReset,
00129 PowerActionShutdownOff,
00130 PowerActionWarmEject
00131 } POWER_ACTION, *PPOWER_ACTION;
00132
00133 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
00134 typedef struct {
00135 ULONG Granularity;
00136 ULONG Capacity;
00137 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
00138 #endif
00139
00140
00141 #endif
00142
00143 #define POWER_PERF_SCALE 100
00144 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
00145 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
00146
00147 typedef struct _PROCESSOR_IDLE_TIMES {
00148 ULONGLONG StartTime;
00149 ULONGLONG EndTime;
00150 ULONG IdleHandlerReserved[4];
00151 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
00152
00153 typedef BOOLEAN
00154 (FASTCALL*PPROCESSOR_IDLE_HANDLER)(
00155 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
00156
00157 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
00158 ULONG HardwareLatency;
00159 PPROCESSOR_IDLE_HANDLER Handler;
00160 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
00161
00162 typedef VOID
00163 (FASTCALL*PSET_PROCESSOR_THROTTLE)(
00164 IN UCHAR Throttle);
00165
00166 typedef NTSTATUS
00167 (FASTCALL*PSET_PROCESSOR_THROTTLE2)(
00168 IN UCHAR Throttle);
00169
00170 #define MAX_IDLE_HANDLERS 3
00171
00172 typedef struct _PROCESSOR_STATE_HANDLER {
00173 UCHAR ThrottleScale;
00174 BOOLEAN ThrottleOnIdle;
00175 PSET_PROCESSOR_THROTTLE SetThrottle;
00176 ULONG NumIdleHandlers;
00177 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
00178 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
00179
00180 typedef enum _POWER_STATE_HANDLER_TYPE {
00181 PowerStateSleeping1,
00182 PowerStateSleeping2,
00183 PowerStateSleeping3,
00184 PowerStateSleeping4,
00185 PowerStateSleeping4Firmware,
00186 PowerStateShutdownReset,
00187 PowerStateShutdownOff,
00188 PowerStateMaximum
00189 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
00190
00191 typedef NTSTATUS
00192 (NTAPI*PENTER_STATE_SYSTEM_HANDLER)(
00193 IN PVOID SystemContext);
00194
00195 typedef NTSTATUS
00196 (NTAPI*PENTER_STATE_HANDLER)(
00197 IN PVOID Context,
00198 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
00199 IN PVOID SystemContext,
00200 IN LONG NumberProcessors,
00201 IN LONG volatile *Number);
00202
00203 typedef struct _POWER_STATE_HANDLER {
00204 POWER_STATE_HANDLER_TYPE Type;
00205 BOOLEAN RtcWake;
00206 UCHAR Spare[3];
00207 PENTER_STATE_HANDLER Handler;
00208 PVOID Context;
00209 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
00210
00211 typedef NTSTATUS
00212 (NTAPI*PENTER_STATE_NOTIFY_HANDLER)(
00213 IN POWER_STATE_HANDLER_TYPE State,
00214 IN PVOID Context,
00215 IN BOOLEAN Entering);
00216
00217 typedef struct _POWER_STATE_NOTIFY_HANDLER {
00218 PENTER_STATE_NOTIFY_HANDLER Handler;
00219 PVOID Context;
00220 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
00221
00222 NTSYSCALLAPI
00223 NTSTATUS
00224 NTAPI
00225 NtPowerInformation(
00226 IN POWER_INFORMATION_LEVEL InformationLevel,
00227 IN PVOID InputBuffer OPTIONAL,
00228 IN ULONG InputBufferLength,
00229 OUT PVOID OutputBuffer OPTIONAL,
00230 IN ULONG OutputBufferLength);
00231
00232 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
00233 #define PROCESSOR_STATE_TYPE_THROTTLE 2
00234
00235 typedef struct _PROCESSOR_PERF_LEVEL {
00236 UCHAR PercentFrequency;
00237 UCHAR Reserved;
00238 USHORT Flags;
00239 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
00240
00241 typedef struct _PROCESSOR_PERF_STATE {
00242 UCHAR PercentFrequency;
00243 UCHAR MinCapacity;
00244 USHORT Power;
00245 UCHAR IncreaseLevel;
00246 UCHAR DecreaseLevel;
00247 USHORT Flags;
00248 ULONG IncreaseTime;
00249 ULONG DecreaseTime;
00250 ULONG IncreaseCount;
00251 ULONG DecreaseCount;
00252 ULONGLONG PerformanceTime;
00253 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
00254
00255 typedef struct _PROCESSOR_STATE_HANDLER2 {
00256 ULONG NumIdleHandlers;
00257 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
00258 PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
00259 ULONG HardwareLatency;
00260 UCHAR NumPerfStates;
00261 PROCESSOR_PERF_LEVEL PerfLevel[1];
00262 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
00263
00264 NTSYSCALLAPI
00265 NTSTATUS
00266 NTAPI
00267 NtSetThreadExecutionState(
00268 IN EXECUTION_STATE esFlags,
00269 OUT EXECUTION_STATE *PreviousFlags);
00270
00271 NTSYSCALLAPI
00272 NTSTATUS
00273 NTAPI
00274 NtRequestWakeupLatency(
00275 IN LATENCY_TIME latency);
00276
00277 NTSYSCALLAPI
00278 NTSTATUS
00279 NTAPI
00280 NtInitiatePowerAction(
00281 IN POWER_ACTION SystemAction,
00282 IN SYSTEM_POWER_STATE MinSystemState,
00283 IN ULONG Flags,
00284 IN BOOLEAN Asynchronous);
00285
00286 NTSYSCALLAPI
00287 NTSTATUS
00288 NTAPI
00289 NtSetSystemPowerState(
00290 IN POWER_ACTION SystemAction,
00291 IN SYSTEM_POWER_STATE MinSystemState,
00292 IN ULONG Flags);
00293
00294 NTSYSCALLAPI
00295 NTSTATUS
00296 NTAPI
00297 NtGetDevicePowerState(
00298 IN HANDLE Device,
00299 OUT DEVICE_POWER_STATE *State);
00300
00301 NTSYSCALLAPI
00302 NTSTATUS
00303 NTAPI
00304 NtCancelDeviceWakeupRequest(
00305 IN HANDLE Device);
00306
00307 NTSYSCALLAPI
00308 BOOLEAN
00309 NTAPI
00310 NtIsSystemResumeAutomatic(VOID);
00311
00312 NTSYSCALLAPI
00313 NTSTATUS
00314 NTAPI
00315 NtRequestDeviceWakeup(
00316 IN HANDLE Device);
00317
00318 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
00319
00320 typedef struct {
00321 BOOLEAN PowerButtonPresent;
00322 BOOLEAN SleepButtonPresent;
00323 BOOLEAN LidPresent;
00324 BOOLEAN SystemS1;
00325 BOOLEAN SystemS2;
00326 BOOLEAN SystemS3;
00327 BOOLEAN SystemS4;
00328 BOOLEAN SystemS5;
00329 BOOLEAN HiberFilePresent;
00330 BOOLEAN FullWake;
00331 BOOLEAN VideoDimPresent;
00332 BOOLEAN ApmPresent;
00333 BOOLEAN UpsPresent;
00334 BOOLEAN ThermalControl;
00335 BOOLEAN ProcessorThrottle;
00336 UCHAR ProcessorMinThrottle;
00337 #if (NTDDI_VERSION < NTDDI_WINXP)
00338 UCHAR ProcessorThrottleScale;
00339 UCHAR spare2[4];
00340 #else
00341 UCHAR ProcessorMaxThrottle;
00342 BOOLEAN FastSystemS4;
00343 UCHAR spare2[3];
00344 #endif
00345 BOOLEAN DiskSpinDown;
00346 UCHAR spare3[8];
00347 BOOLEAN SystemBatteriesPresent;
00348 BOOLEAN BatteriesAreShortTerm;
00349 BATTERY_REPORTING_SCALE BatteryScale[3];
00350 SYSTEM_POWER_STATE AcOnLineWake;
00351 SYSTEM_POWER_STATE SoftLidWake;
00352 SYSTEM_POWER_STATE RtcWake;
00353 SYSTEM_POWER_STATE MinDeviceWakeState;
00354 SYSTEM_POWER_STATE DefaultLowLatencyWake;
00355 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
00356
00357 typedef struct {
00358 BOOLEAN AcOnLine;
00359 BOOLEAN BatteryPresent;
00360 BOOLEAN Charging;
00361 BOOLEAN Discharging;
00362 BOOLEAN Spare1[4];
00363 ULONG MaxCapacity;
00364 ULONG RemainingCapacity;
00365 ULONG Rate;
00366 ULONG EstimatedTime;
00367 ULONG DefaultAlert1;
00368 ULONG DefaultAlert2;
00369 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
00370
00371 typedef struct _PROCESSOR_POWER_INFORMATION {
00372 ULONG Number;
00373 ULONG MaxMhz;
00374 ULONG CurrentMhz;
00375 ULONG MhzLimit;
00376 ULONG MaxIdleState;
00377 ULONG CurrentIdleState;
00378 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
00379
00380 typedef struct _POWER_ACTION_POLICY {
00381 POWER_ACTION Action;
00382 ULONG Flags;
00383 ULONG EventCode;
00384 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
00385
00386
00387 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
00388 #define POWER_ACTION_UI_ALLOWED 0x00000002
00389 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
00390 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
00391 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
00392 #define POWER_ACTION_DISABLE_WAKES 0x40000000
00393 #define POWER_ACTION_CRITICAL 0x80000000
00394
00395
00396 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
00397 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
00398 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
00399 #define POWER_USER_NOTIFY_BUTTON 0x00000008
00400 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
00401 #define POWER_FORCE_TRIGGER_RESET 0x80000000
00402
00403 #define DISCHARGE_POLICY_CRITICAL 0
00404 #define DISCHARGE_POLICY_LOW 1
00405 #define NUM_DISCHARGE_POLICIES 4
00406
00407 #define PO_THROTTLE_NONE 0
00408 #define PO_THROTTLE_CONSTANT 1
00409 #define PO_THROTTLE_DEGRADE 2
00410 #define PO_THROTTLE_ADAPTIVE 3
00411 #define PO_THROTTLE_MAXIMUM 4
00412
00413 #ifdef __cplusplus
00414 }
00415 #endif
00416
00417 #endif