838 lines
27 KiB
C
838 lines
27 KiB
C
/*
|
|
* ntpoapi.h NT power functions
|
|
*
|
|
* =========================================================================
|
|
*
|
|
* Open Watcom Project
|
|
*
|
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
|
*
|
|
* This file is automatically generated. Do not edit directly.
|
|
*
|
|
* =========================================================================
|
|
*/
|
|
|
|
#ifndef _NTPOAPI_
|
|
#define _NTPOAPI_
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Power performance scale */
|
|
#define POWER_PERF_SCALE 100
|
|
|
|
/* Macros to convert between performance levels and percentages */
|
|
#define PERF_LEVEL_TO_PERCENT( x ) (((x) * 1000) / (POWER_PERF_SCALE * 10))
|
|
#define PERCENT_TO_PERF_LEVEL( x ) (((x) * POWER_PERF_SCALE * 10) / 1000)
|
|
|
|
/* Maximum power state handler type */
|
|
#define POWER_STATE_HANDLER_TYPE_MAX 8
|
|
|
|
/* Idle handler flags */
|
|
#define IDLE_HANDLER_USING_HYPERVISOR 0x00000001L
|
|
|
|
/* Idle state flags */
|
|
#define IDLE_STATE_FLAGS_C1_HLT 0x00000001L
|
|
#define IDLE_STATE_FLAGS_C1_IO_HLT 0x00000002L
|
|
#define IDLE_STATE_FLAGS_IO 0x00000004L
|
|
#define IDLE_STATE_FLAGS_MWAIT 0x00000008L
|
|
|
|
/* Processor state types */
|
|
#define PROCESSOR_STATE_TYPE_PERFORMANCE 0x01
|
|
#define PROCESSOR_STATE_TYPE_THROTTLE 0x02
|
|
|
|
/* Number of idle buckets */
|
|
#define PROC_IDLE_BUCKET_COUNT 6
|
|
#define PROC_IDLE_BUCKET_COUNT_EX 16
|
|
|
|
/* Coordination types */
|
|
#define ACPI_PPM_SOFTWARE_ALL 0xFC
|
|
#define ACPI_PPM_SOFTWARE_ANY 0xFD
|
|
#define ACPI_PPM_HARDWARE_ALL 0xFE
|
|
#define MS_PPM_SOFTWARE_ALL 0x01
|
|
|
|
/* Power action policy flags */
|
|
#define POWER_ACTION_QUERY_ALLOWED 0x00000001L
|
|
#define POWER_ACTION_UI_ALLOWED 0x00000002L
|
|
#define POWER_ACTION_OVERRIDE_APPS 0x00000004L
|
|
#define POWER_ACTION_PSEUDO_TRANSITION 0x08000000L
|
|
#define POWER_ACTION_LIGHTEST_FIRST 0x10000000L
|
|
#define POWER_ACTION_LOCK_CONSOLE 0x20000000L
|
|
#define POWER_ACTION_DISABLE_WAKES 0x40000000L
|
|
#define POWER_ACTION_CRITICAL 0x80000000L
|
|
|
|
/* Power action policy event code flags */
|
|
#define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001L
|
|
#define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002L
|
|
#define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004L
|
|
#define POWER_USER_NOTIFY_BUTTON 0x00000008L
|
|
#define POWER_USER_NOTIFY_SHUTDOWN 0x00000010L
|
|
#define POWER_USER_NOTIFY_FORCED_SHUTDOWN 0x00000020L
|
|
#define POWER_FORCE_TRIGGER_RESET 0x80000000L
|
|
|
|
/* Battery discharge flags */
|
|
#define BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK 0x00000007
|
|
#define BATTERY_DISCHARGE_FLAGS_ENABLE 0x80000000
|
|
|
|
/* Maximum number of discharge policies */
|
|
#define NUM_DISCHARGE_POLICIES 4
|
|
|
|
/* Discharge policy indices */
|
|
#define DISCHARGE_POLICY_CRITICAL 0
|
|
#define DISCHARGE_POLICY_LOW 1
|
|
|
|
/* Maximum number of processor idle state policies */
|
|
#define PROCESSOR_IDLESTATE_POLICY_COUNT 3
|
|
|
|
/* Throttling policies */
|
|
#define PO_THROTTLE_NONE 0
|
|
#define PO_THROTTLE_CONSTANT 1
|
|
#define PO_THROTTLE_DEGRADE 2
|
|
#define PO_THROTTLE_ADAPTIVE 3
|
|
#define PO_THROTTLE_MAXIMUM 4
|
|
|
|
/* Processor performance state policy flags */
|
|
#define PERFSTATE_POLICY_CHANGE_IDEAL 0
|
|
#define PERFSTATE_POLICY_CHANGE_SINGLE 1
|
|
#define PERFSTATE_POLICY_CHANGE_ROCKET 2
|
|
#define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
|
|
|
|
/* Winlogon flags */
|
|
#define WINLOGON_LOCK_ON_SLEEP 0x00000001L
|
|
|
|
/* Power reason codes */
|
|
#define SPSD_REASON_NONE 0x00000000L
|
|
#define SPSD_REASON_NOBIOSSUPPORT 0x00000001L
|
|
#define SPSD_REASON_BIOSINCOMPATIBLE 0x00000002L
|
|
#define SPSD_REASON_NOOSPM 0x00000003L
|
|
#define SPSD_REASON_LEGACYDRIVER 0x00000004L
|
|
#define SPSD_REASON_HIBERSTACK 0x00000005L
|
|
#define SPSD_REASON_HIBERFILE 0x00000006L
|
|
#define SPSD_REASON_POINTERNAL 0x00000007L
|
|
#define SPSD_REASON_MEMORYLIMIT 0x00000008L
|
|
#define SPSD_REASON_MPOVERRIDE 0x00000009L
|
|
#define SPSD_REASON_DRIVERDOWNGRADE 0x0000000AL
|
|
#define SPSD_REASON_PREVIOUSATTEMPTFAILED 0x0000000BL
|
|
#define SPSD_REASON_UNKNOWN 0x0000000CL
|
|
#define SPSD_REASON_INTERNALLYDISABLED 0x0000000DL
|
|
#define SPSD_REASON_DISABLEDBYPOLICY 0x0000000EL
|
|
#define SPSD_REASON_UPGRADEINPROGRESS 0x0000000FL
|
|
|
|
/* Logging types */
|
|
#define LOGGING_TYPE_SPSD 0x00000001L
|
|
#define LOGGING_TYPE_POWERTRANSITION 0x00000002L
|
|
|
|
/* Power state handler types */
|
|
typedef enum {
|
|
PowerStateSleeping1 = 0,
|
|
PowerStateSleeping2 = 1,
|
|
PowerStateSleeping3 = 2,
|
|
PowerStateSleeping4 = 3,
|
|
PowerStateShutdownOff = 4,
|
|
PowerStateShutdownReset = 5,
|
|
PowerStateSleeping4Firmware = 6,
|
|
PowerStateMaximum = 7
|
|
} POWER_STATE_HANDLER_TYPE;
|
|
typedef POWER_STATE_HANDLER_TYPE *PPOWER_STATE_HANDLER_TYPE;
|
|
|
|
/* Enter state handlers */
|
|
typedef NTSTATUS (NTAPI ENTER_STATE_SYSTEM_HANDLER)( PVOID );
|
|
typedef ENTER_STATE_SYSTEM_HANDLER *PENTER_STATE_SYSTEM_HANDLER;
|
|
typedef NTSTATUS (NTAPI ENTER_STATE_HANDLER)( PVOID, PENTER_STATE_SYSTEM_HANDLER, PVOID, LONG, LONG volatile * );
|
|
typedef ENTER_STATE_HANDLER *PENTER_STATE_HANDLER;
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef NTSTATUS (NTAPI ENTER_STATE_NOTIFY_HANDLER)( POWER_STATE_HANDLER_TYPE, PVOID, BOOLEAN );
|
|
typedef ENTER_STATE_NOTIFY_HANDLER *PENTER_STATE_NOTIFY_HANDLER;
|
|
#endif
|
|
|
|
/* Power state handler */
|
|
typedef struct {
|
|
POWER_STATE_HANDLER_TYPE Type;
|
|
BOOLEAN RtcWake;
|
|
UCHAR Spare[3];
|
|
PENTER_STATE_HANDLER Handler;
|
|
PVOID Context;
|
|
} POWER_STATE_HANDLER;
|
|
typedef POWER_STATE_HANDLER *PPOWER_STATE_HANDLER;
|
|
|
|
/* Power state notify handler */
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct {
|
|
PENTER_STATE_NOTIFY_HANDLER Handler;
|
|
PVOID Context;
|
|
} POWER_STATE_NOTIFY_HANDLER;
|
|
typedef POWER_STATE_NOTIFY_HANDLER *PPOWER_STATE_NOTIFY_HANDLER;
|
|
#endif
|
|
|
|
/* Processor idle times */
|
|
typedef struct {
|
|
ULONG64 StartTime;
|
|
ULONG64 EndTime;
|
|
ULONG Reserved[4];
|
|
} PROCESSOR_IDLE_TIMES;
|
|
typedef PROCESSOR_IDLE_TIMES *PPROCESSOR_IDLE_TIMES;
|
|
|
|
/* Processor idle handler */
|
|
typedef NTSTATUS (FASTCALL PROCESSOR_IDLE_HANDLER)( ULONG_PTR, PPROCESSOR_IDLE_TIMES );
|
|
typedef NTSTATUS (FASTCALL *PPROCESSOR_IDLE_HANDLER_EX)( PVOID, ULONG );
|
|
typedef PROCESSOR_IDLE_HANDLER *PPROCESSOR_IDLE_HANDLER;
|
|
|
|
/* Processor idle state */
|
|
typedef struct _PROCESSOR_IDLE_STATE {
|
|
UCHAR StateType;
|
|
ULONG StateFlags;
|
|
ULONG HardwareLatency;
|
|
ULONG Power;
|
|
ULONG_PTR Context;
|
|
PPROCESSOR_IDLE_HANDLER Handler;
|
|
} PROCESSOR_IDLE_STATE;
|
|
typedef PROCESSOR_IDLE_STATE *PPROCESSOR_IDLE_STATE;
|
|
|
|
/* Processor idle state (extended version) */
|
|
typedef struct _PROCESSOR_IDLE_STATE_EX {
|
|
UCHAR StateType;
|
|
ULONG StateFlags;
|
|
ULONG HardwareLatency;
|
|
ULONG Power;
|
|
PVOID Context;
|
|
PPROCESSOR_IDLE_HANDLER_EX Handler;
|
|
} PROCESSOR_IDLE_STATE_EX;
|
|
typedef PROCESSOR_IDLE_STATE_EX *PPROCESSOR_IDLE_STATE_EX;
|
|
|
|
/* Processor idle states */
|
|
typedef struct _PROCESSOR_IDLE_STATES {
|
|
ULONG Size;
|
|
ULONG Revision;
|
|
ULONG Count;
|
|
ULONG Type;
|
|
KAFFINITY TargetProcessors;
|
|
PROCESSOR_IDLE_STATE State[ANYSIZE_ARRAY];
|
|
} PROCESSOR_IDLE_STATES;
|
|
typedef PROCESSOR_IDLE_STATES *PPROCESSOR_IDLE_STATES;
|
|
|
|
/* Processor idle states (extended version) */
|
|
typedef struct _PROCESSOR_IDLE_STATES_EX {
|
|
ULONG Size;
|
|
ULONG Revision;
|
|
ULONG Count;
|
|
ULONG Type;
|
|
KAFFINITY TargetProcessors;
|
|
PROCESSOR_IDLE_STATE_EX State[ANYSIZE_ARRAY];
|
|
} PROCESSOR_IDLE_STATES_EX;
|
|
typedef PROCESSOR_IDLE_STATES_EX *PPROCESSOR_IDLE_STATES_EX;
|
|
|
|
/* WMI legacy performance state */
|
|
typedef struct {
|
|
ULONG Frequency;
|
|
ULONG Flags;
|
|
ULONG PercentFrequency;
|
|
} PPM_WMI_LEGACY_PERFSTATE;
|
|
typedef PPM_WMI_LEGACY_PERFSTATE *PPPM_WMI_LEGACY_PERFSTATE;
|
|
|
|
/* WMI idle state */
|
|
typedef struct {
|
|
ULONG Latency;
|
|
ULONG Power;
|
|
ULONG TimeCheck;
|
|
UCHAR PromotePercent;
|
|
UCHAR DemotePercent;
|
|
UCHAR StateType;
|
|
UCHAR Reserved;
|
|
ULONG StateFlags;
|
|
ULONG Context;
|
|
ULONG IdleHandler;
|
|
ULONG Reserved1;
|
|
} PPM_WMI_IDLE_STATE;
|
|
typedef PPM_WMI_IDLE_STATE *PPPM_WMI_IDLE_STATE;
|
|
|
|
/* WMI idle state array */
|
|
typedef struct {
|
|
ULONG Type;
|
|
ULONG Count;
|
|
ULONG TargetState;
|
|
ULONG OldState;
|
|
ULONG64 TargetProcessors;
|
|
PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
|
|
} PPM_WMI_IDLE_STATES;
|
|
typedef PPM_WMI_IDLE_STATES *PPPM_WMI_IDLE_STATES;
|
|
|
|
/* WMI idle state array (extended version) */
|
|
typedef struct {
|
|
ULONG Type;
|
|
ULONG Count;
|
|
ULONG TargetState;
|
|
ULONG OldState;
|
|
PVOID TargetProcessors;
|
|
PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
|
|
} PPM_WMI_IDLE_STATES_EX;
|
|
typedef PPM_WMI_IDLE_STATES_EX *PPPM_WMI_IDLE_STATES_EX;
|
|
|
|
/* WMI performance state */
|
|
typedef struct {
|
|
ULONG Frequency;
|
|
ULONG Power;
|
|
UCHAR PercentFrequency;
|
|
UCHAR IncreaseLevel;
|
|
UCHAR DecreaseLevel;
|
|
UCHAR Type;
|
|
ULONG IncreaseTime;
|
|
ULONG DecreaseTime;
|
|
ULONG64 Control;
|
|
ULONG64 Status;
|
|
ULONG HitCount;
|
|
ULONG Reserved1;
|
|
ULONG64 Reserved2;
|
|
ULONG64 Reserved3;
|
|
} PPM_WMI_PERF_STATE;
|
|
typedef PPM_WMI_PERF_STATE *PPPM_WMI_PERF_STATE;
|
|
|
|
/* WMI performance state array */
|
|
typedef struct {
|
|
ULONG Count;
|
|
ULONG MaxFrequency;
|
|
ULONG CurrentState;
|
|
ULONG MaxPerfState;
|
|
ULONG MinPerfState;
|
|
ULONG LowestPerfState;
|
|
ULONG ThermalConstraint;
|
|
UCHAR BusyAdjThreshold;
|
|
UCHAR PolicyType;
|
|
UCHAR Type;
|
|
UCHAR Reserved;
|
|
ULONG TimerInterval;
|
|
ULONG64 TargetProcessors;
|
|
ULONG PStateHandler;
|
|
ULONG PStateContext;
|
|
ULONG TStateHandler;
|
|
ULONG TStateContext;
|
|
ULONG FeedbackHandler;
|
|
ULONG Reserved1;
|
|
ULONG64 Reserved2;
|
|
PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
|
|
} PPM_WMI_PERF_STATES;
|
|
typedef PPM_WMI_PERF_STATES *PPPM_WMI_PERF_STATES;
|
|
|
|
/* WMI performance state array (extended version) */
|
|
typedef struct {
|
|
ULONG Count;
|
|
ULONG MaxFrequency;
|
|
ULONG CurrentState;
|
|
ULONG MaxPerfState;
|
|
ULONG MinPerfState;
|
|
ULONG LowestPerfState;
|
|
ULONG ThermalConstraint;
|
|
UCHAR BusyAdjThreshold;
|
|
UCHAR PolicyType;
|
|
UCHAR Type;
|
|
UCHAR Reserved;
|
|
ULONG TimerInterval;
|
|
PVOID TargetProcessors;
|
|
ULONG PStateHandler;
|
|
ULONG PStateContext;
|
|
ULONG TStateHandler;
|
|
ULONG TStateContext;
|
|
ULONG FeedbackHandler;
|
|
ULONG Reserved1;
|
|
ULONG64 Reserved2;
|
|
PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
|
|
} PPM_WMI_PERF_STATES_EX;
|
|
typedef PPM_WMI_PERF_STATES_EX *PPPM_WMI_PERF_STATES_EX;
|
|
|
|
/* Idle state accounting information */
|
|
typedef struct {
|
|
ULONG IdleTransitions;
|
|
ULONG FailedTransitions;
|
|
ULONG InvalidBucketIndex;
|
|
ULONG64 TotalTime;
|
|
ULONG IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT];
|
|
} PPM_IDLE_STATE_ACCOUNTING;
|
|
typedef PPM_IDLE_STATE_ACCOUNTING *PPPM_IDLE_STATE_ACCOUNTING;
|
|
|
|
/* Idle accounting information */
|
|
typedef struct {
|
|
ULONG StateCount;
|
|
ULONG TotalTransitions;
|
|
ULONG ResetCount;
|
|
ULONG64 StartTime;
|
|
PPM_IDLE_STATE_ACCOUNTING State[ANYSIZE_ARRAY];
|
|
} PPM_IDLE_ACCOUNTING;
|
|
typedef PPM_IDLE_ACCOUNTING *PPPM_IDLE_ACCOUNTING;
|
|
|
|
/* Idle state bucket (extended version) */
|
|
typedef struct {
|
|
ULONG64 TotalTimeUs;
|
|
ULONG MinTimeUs;
|
|
ULONG MaxTimeUs;
|
|
ULONG Count;
|
|
} PPM_IDLE_STATE_BUCKET_EX;
|
|
typedef PPM_IDLE_STATE_BUCKET_EX *PPPM_IDLE_STATE_BUCKET_EX;
|
|
|
|
/* Idle state accounting information (extended version) */
|
|
typedef struct {
|
|
ULONG64 TotalTime;
|
|
ULONG IdleTransitions;
|
|
ULONG FailedTransitions;
|
|
ULONG InvalidBucketIndex;
|
|
ULONG MinTimeUs;
|
|
ULONG MaxTimeUs;
|
|
PPM_IDLE_STATE_BUCKET_EX IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT_EX];
|
|
} PPM_IDLE_STATE_ACCOUNTING_EX;
|
|
typedef PPM_IDLE_STATE_ACCOUNTING_EX *PPPM_IDLE_STATE_ACCOUNTING_EX;
|
|
|
|
/* Idle accounting information (extended version) */
|
|
typedef struct {
|
|
ULONG StateCount;
|
|
ULONG TotalTransitions;
|
|
ULONG ResetCount;
|
|
ULONG64 StartTime;
|
|
PPM_IDLE_STATE_ACCOUNTING_EX State[ANYSIZE_ARRAY];
|
|
} PPM_IDLE_ACCOUNTING_EX;
|
|
typedef PPM_IDLE_ACCOUNTING_EX *PPPM_IDLE_ACCOUNTING_EX;
|
|
|
|
/* Performance state event */
|
|
typedef struct {
|
|
ULONG State;
|
|
ULONG Status;
|
|
ULONG Latency;
|
|
ULONG Speed;
|
|
ULONG Processor;
|
|
} PPM_PERFSTATE_EVENT;
|
|
typedef PPM_PERFSTATE_EVENT *PPPM_PERFSTATE_EVENT;
|
|
|
|
/* Performance state domain event */
|
|
typedef struct {
|
|
ULONG State;
|
|
ULONG Latency;
|
|
ULONG Speed;
|
|
ULONG64 Processors;
|
|
} PPM_PERFSTATE_DOMAIN_EVENT;
|
|
typedef PPM_PERFSTATE_DOMAIN_EVENT *PPPM_PERFSTATE_DOMAIN_EVENT;
|
|
|
|
/* Idle state event */
|
|
typedef struct {
|
|
ULONG NewState;
|
|
ULONG OldState;
|
|
ULONG64 Processors;
|
|
} PPM_IDLESTATE_EVENT;
|
|
typedef PPM_IDLESTATE_EVENT *PPPM_IDLESTATE_EVENT;
|
|
|
|
/* Thermal change event */
|
|
typedef struct {
|
|
ULONG ThermalConstraint;
|
|
ULONG64 Processors;
|
|
} PPM_THERMALCHANGE_EVENT;
|
|
typedef PPM_THERMALCHANGE_EVENT *PPPM_THERMALCHANGE_EVENT;
|
|
|
|
/* Thermal policy event */
|
|
typedef struct {
|
|
UCHAR Mode;
|
|
ULONG64 Processors;
|
|
} PPM_THERMAL_POLICY_EVENT;
|
|
typedef PPM_THERMAL_POLICY_EVENT *PPPM_THERMAL_POLICY_EVENT;
|
|
|
|
/* Power action policy */
|
|
typedef struct {
|
|
POWER_ACTION Action;
|
|
ULONG Flags;
|
|
ULONG EventCode;
|
|
} POWER_ACTION_POLICY;
|
|
typedef POWER_ACTION_POLICY *PPOWER_ACTION_POLICY;
|
|
|
|
/* System power level */
|
|
typedef struct {
|
|
BOOLEAN Enable;
|
|
UCHAR Spare[3];
|
|
ULONG BatteryLevel;
|
|
POWER_ACTION_POLICY PowerPolicy;
|
|
SYSTEM_POWER_STATE MinSystemState;
|
|
} SYSTEM_POWER_LEVEL;
|
|
typedef SYSTEM_POWER_LEVEL *PSYSTEM_POWER_LEVEL;
|
|
|
|
/* System power policy */
|
|
typedef struct _SYSTEM_POWER_POLICY {
|
|
ULONG Revision;
|
|
POWER_ACTION_POLICY PowerButton;
|
|
POWER_ACTION_POLICY SleepButton;
|
|
POWER_ACTION_POLICY LidClose;
|
|
SYSTEM_POWER_STATE LidOpenWake;
|
|
ULONG Reserved;
|
|
POWER_ACTION_POLICY Idle;
|
|
ULONG IdleTimeout;
|
|
UCHAR IdleSensitivity;
|
|
UCHAR DynamicThrottle;
|
|
UCHAR Spare2[2];
|
|
SYSTEM_POWER_STATE MinSleep;
|
|
SYSTEM_POWER_STATE MaxSleep;
|
|
SYSTEM_POWER_STATE ReducedLatencySleep;
|
|
ULONG WinLogonFlags;
|
|
ULONG Spare3;
|
|
ULONG DozeS4Timeout;
|
|
ULONG BroadcastCapacityResolution;
|
|
SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
|
|
ULONG VideoTimeout;
|
|
BOOLEAN VideoDimDisplay;
|
|
ULONG VideoReserved[3];
|
|
ULONG SpindownTimeout;
|
|
BOOLEAN OptimizeForPower;
|
|
UCHAR FanThrottleTolerance;
|
|
UCHAR ForcedThrottle;
|
|
UCHAR MinThrottle;
|
|
POWER_ACTION_POLICY OverThrottled;
|
|
} SYSTEM_POWER_POLICY;
|
|
typedef SYSTEM_POWER_POLICY *PSYSTEM_POWER_POLICY;
|
|
|
|
/* Processor idle state information */
|
|
typedef struct {
|
|
ULONG TimeCheck;
|
|
UCHAR DemotePercent;
|
|
UCHAR PromotePercent;
|
|
UCHAR Spare[2];
|
|
} PROCESSOR_IDLESTATE_INFO;
|
|
typedef PROCESSOR_IDLESTATE_INFO *PPROCESSOR_IDLESTATE_INFO;
|
|
|
|
/* Processor idle state policy */
|
|
typedef struct {
|
|
USHORT Revision;
|
|
union {
|
|
USHORT AsUSHORT;
|
|
struct {
|
|
USHORT AllowScaling : 1;
|
|
USHORT Disabled : 1;
|
|
USHORT Reserved : 14;
|
|
};
|
|
} Flags;
|
|
ULONG PolicyCount;
|
|
PROCESSOR_IDLESTATE_INFO Policy[PROCESSOR_IDLESTATE_POLICY_COUNT];
|
|
} PROCESSOR_IDLESTATE_POLICY;
|
|
typedef PROCESSOR_IDLESTATE_POLICY *PPROCESSOR_IDLESTATE_POLICY;
|
|
|
|
/* Processor power policy information */
|
|
typedef struct _PROCESSOR_POWER_POLICY_INFO {
|
|
ULONG TimeCheck;
|
|
ULONG DemoteLimit;
|
|
ULONG PromoteLimit;
|
|
UCHAR DemotePercent;
|
|
UCHAR PromotePercent;
|
|
UCHAR Spare[2];
|
|
ULONG AllowDemotion : 1;
|
|
ULONG AllowPromotion : 1;
|
|
ULONG Reserved : 30;
|
|
} PROCESSOR_POWER_POLICY_INFO;
|
|
typedef PROCESSOR_POWER_POLICY_INFO *PPROCESSOR_POWER_POLICY_INFO;
|
|
|
|
/* Processor power policy */
|
|
typedef struct _PROCESSOR_POWER_POLICY {
|
|
ULONG Revision;
|
|
UCHAR DynamicThrottle;
|
|
UCHAR Spare[3];
|
|
ULONG DisableCStates : 1;
|
|
ULONG Reserved : 31;
|
|
ULONG PolicyCount;
|
|
PROCESSOR_POWER_POLICY_INFO Policy[3];
|
|
} PROCESSOR_POWER_POLICY;
|
|
typedef PROCESSOR_POWER_POLICY *PPROCESSOR_POWER_POLICY;
|
|
|
|
/* Processor performance state policy */
|
|
typedef struct {
|
|
ULONG Revision;
|
|
UCHAR MaxThrottle;
|
|
UCHAR MinThrottle;
|
|
UCHAR BusyAdjThreshold;
|
|
union {
|
|
UCHAR Spare;
|
|
union {
|
|
UCHAR AsUCHAR;
|
|
struct {
|
|
UCHAR NoDomainAccounting : 1;
|
|
UCHAR IncreasePolicy : 2;
|
|
UCHAR DecreasePolicy : 2;
|
|
UCHAR Reserved : 3;
|
|
} DUMMYSTRUCTNAME;
|
|
} Flags;
|
|
} DUMMYUNIONNAME;
|
|
ULONG TimeCheck;
|
|
ULONG IncreaseTime;
|
|
ULONG DecreaseTime;
|
|
ULONG IncreasePercent;
|
|
ULONG DecreasePercent;
|
|
} PROCESSOR_PERFSTATE_POLICY;
|
|
typedef PROCESSOR_PERFSTATE_POLICY *PPROCESSOR_PERFSTATE_POLICY;
|
|
|
|
/* Administrator power policy */
|
|
typedef struct _ADMINISTRATOR_POWER_POLICY {
|
|
SYSTEM_POWER_STATE MinSleep;
|
|
SYSTEM_POWER_STATE MaxSleep;
|
|
ULONG MinVideoTimeout;
|
|
ULONG MaxVideoTimeout;
|
|
ULONG MinSpindownTimeout;
|
|
ULONG MaxSpindownTimeout;
|
|
} ADMINISTRATOR_POWER_POLICY;
|
|
typedef ADMINISTRATOR_POWER_POLICY *PADMINISTRATOR_POWER_POLICY;
|
|
|
|
/* System power capabilities */
|
|
typedef struct {
|
|
BOOLEAN PowerButtonPresent;
|
|
BOOLEAN SleepButtonPresent;
|
|
BOOLEAN LidPresent;
|
|
BOOLEAN SystemS1;
|
|
BOOLEAN SystemS2;
|
|
BOOLEAN SystemS3;
|
|
BOOLEAN SystemS4;
|
|
BOOLEAN SystemS5;
|
|
BOOLEAN HiberFilePresent;
|
|
BOOLEAN FullWake;
|
|
BOOLEAN VideoDimPresent;
|
|
BOOLEAN ApmPresent;
|
|
BOOLEAN UpsPresent;
|
|
BOOLEAN ThermalControl;
|
|
BOOLEAN ProcessorThrottle;
|
|
UCHAR ProcessorMinThrottle;
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
UCHAR ProcessorMaxThrottle;
|
|
BOOLEAN FastSystemS4;
|
|
UCHAR spare2[3];
|
|
#else
|
|
UCHAR ProcessorThrottleScale;
|
|
UCHAR spare2[4];
|
|
#endif
|
|
BOOLEAN DiskSpinDown;
|
|
UCHAR spare3[8];
|
|
BOOLEAN SystemBatteriesPresent;
|
|
BOOLEAN BatteriesAreShortTerm;
|
|
BATTERY_REPORTING_SCALE BatteryScale[3];
|
|
SYSTEM_POWER_STATE AcOnLineWake;
|
|
SYSTEM_POWER_STATE SoftLidWake;
|
|
SYSTEM_POWER_STATE RtcWake;
|
|
SYSTEM_POWER_STATE MinDeviceWakeState;
|
|
SYSTEM_POWER_STATE DefaultLowLatencyWake;
|
|
} SYSTEM_POWER_CAPABILITIES;
|
|
typedef SYSTEM_POWER_CAPABILITIES *PSYSTEM_POWER_CAPABILITIES;
|
|
|
|
/* System battery state */
|
|
typedef struct {
|
|
BOOLEAN AcOnLine;
|
|
BOOLEAN BatteryPresent;
|
|
BOOLEAN Charging;
|
|
BOOLEAN Discharging;
|
|
BOOLEAN Spare1[4];
|
|
ULONG MaxCapacity;
|
|
ULONG RemainingCapacity;
|
|
ULONG Rate;
|
|
ULONG EstimatedTime;
|
|
ULONG DefaultAlert1;
|
|
ULONG DefaultAlert2;
|
|
} SYSTEM_BATTERY_STATE;
|
|
typedef SYSTEM_BATTERY_STATE *PSYSTEM_BATTERY_STATE;
|
|
|
|
/* System power state disable reason */
|
|
typedef struct _SYSTEM_POWER_STATE_DISABLE_REASON {
|
|
BOOLEAN AffectedState[POWER_STATE_HANDLER_TYPE_MAX];
|
|
ULONG PowerReasonCode;
|
|
ULONG PowerReasonLength;
|
|
} SYSTEM_POWER_STATE_DISABLE_REASON;
|
|
typedef SYSTEM_POWER_STATE_DISABLE_REASON *PSYSTEM_POWER_STATE_DISABLE_REASON;
|
|
|
|
/* System power logging entry */
|
|
typedef struct _SYSTEM_POWER_LOGGING_ENTRY {
|
|
ULONG LoggingType;
|
|
PVOID LoggingEntry;
|
|
} SYSTEM_POWER_LOGGING_ENTRY;
|
|
typedef SYSTEM_POWER_LOGGING_ENTRY *PSYSTEM_POWER_LOGGING_ENTRY;
|
|
|
|
/* Processor idle function */
|
|
#if (NTDDI_VERSION < 0x05010000)
|
|
typedef VOID (FASTCALL PROCESSOR_IDLE_FUNCTION)( struct _PROCESSOR_POWER_STATE * );
|
|
typedef PROCESSOR_IDLE_FUNCTION *PPROCESSOR_IDLE_FUNCTION;
|
|
#endif
|
|
|
|
/* Processor power state */
|
|
#if (NTDDI_VERSION < 0x05010000)
|
|
typedef struct _PROCESSOR_POWER_STATE {
|
|
PPROCESSOR_IDLE_FUNCTION IdleFunction;
|
|
ULONG Idle0KernelTimeLimit;
|
|
ULONG Idle0LastTime;
|
|
PVOID IdleState;
|
|
ULONGLONG LastCheck;
|
|
PROCESSOR_IDLE_TIMES IdleTimes;
|
|
ULONG IdleTime1;
|
|
ULONG PromotionCheck;
|
|
ULONG IdleTime2;
|
|
UCHAR CurrentThrottle;
|
|
UCHAR ThrottleLimit;
|
|
UCHAR Spare1[2];
|
|
ULONG SetMember;
|
|
PVOID AbortThrottle;
|
|
ULONGLONG DebugDelta;
|
|
ULONG DebugCount;
|
|
ULONG LastSysTime;
|
|
ULONG Spare2[10];
|
|
} PROCESSOR_POWER_STATE;
|
|
typedef PROCESSOR_POWER_STATE *PPROCESSOR_POWER_STATE;
|
|
#endif
|
|
|
|
/* Processor power information */
|
|
typedef struct _PROCESSOR_POWER_INFORMATION {
|
|
ULONG Number;
|
|
ULONG MaxMhz;
|
|
ULONG CurrentMhz;
|
|
ULONG MhzLimit;
|
|
ULONG MaxIdleState;
|
|
ULONG CurrentIdleState;
|
|
} PROCESSOR_POWER_INFORMATION;
|
|
typedef PROCESSOR_POWER_INFORMATION *PPROCESSOR_POWER_INFORMATION;
|
|
|
|
/* System power information */
|
|
typedef struct _SYSTEM_POWER_INFORMATION {
|
|
ULONG MaxIdlenessAllowed;
|
|
ULONG Idleness;
|
|
ULONG TimeRemaining;
|
|
UCHAR CoolingMode;
|
|
} SYSTEM_POWER_INFORMATION;
|
|
typedef SYSTEM_POWER_INFORMATION *PSYSTEM_POWER_INFORMATION;
|
|
|
|
/* System hibernation file information */
|
|
typedef struct _SYSTEM_HIBERFILE_INFORMATION {
|
|
ULONG NumberOfMcbPairs;
|
|
LARGE_INTEGER Mcb[1];
|
|
} SYSTEM_HIBERFILE_INFORMATION;
|
|
typedef SYSTEM_HIBERFILE_INFORMATION *PSYSTEM_HIBERFILE_INFORMATION;
|
|
|
|
/* Requester types */
|
|
#if (NTDDI_VERSION >= 0x06010000)
|
|
typedef enum _REQUESTER_TYPE {
|
|
KernelRequester = 0,
|
|
UserProcessRequester = 1,
|
|
UserSharedServiceRequester = 2
|
|
} REQUESTER_TYPE;
|
|
typedef REQUESTER_TYPE *PREQUESTER_TYPE;
|
|
#endif
|
|
|
|
/* Reason buffer */
|
|
#if (NTDDI_VERSION >= 0x06010000)
|
|
typedef struct _REASON_BUFFER {
|
|
ULONG Flags;
|
|
union {
|
|
struct {
|
|
SIZE_T ResourceFileNameOffset;
|
|
USHORT ResourceReasonId;
|
|
ULONG StringCount;
|
|
SIZE_T SubstitutionStringsOffset;
|
|
};
|
|
SIZE_T SimpleStringOffset;
|
|
};
|
|
} REASON_BUFFER;
|
|
typedef REASON_BUFFER *PREASON_BUFFER;
|
|
#endif
|
|
|
|
/* Diagnostic buffer */
|
|
#if (NTDDI_VERSION >= 0x06010000)
|
|
typedef struct _DIAGNOSTIC_BUFFER {
|
|
SIZE_T Size;
|
|
REQUESTER_TYPE CallerType;
|
|
union {
|
|
struct {
|
|
SIZE_T ProcessImageNameOffset;
|
|
ULONG ProcessId;
|
|
ULONG ServiceTag;
|
|
};
|
|
struct {
|
|
SIZE_T DeviceDescriptionOffset;
|
|
SIZE_T DevicePathOffset;
|
|
};
|
|
};
|
|
SIZE_T ReasonOffset;
|
|
} DIAGNOSTIC_BUFFER;
|
|
typedef DIAGNOSTIC_BUFFER *PDIAGNOSTIC_BUFFER;
|
|
#endif
|
|
|
|
/* Wake timer information */
|
|
#if (NTDDI_VERSION >= 0x06010000)
|
|
typedef struct _WAKE_TIMER_INFO {
|
|
SIZE_T OffsetToNext;
|
|
ULARGE_INTEGER DueTime;
|
|
ULONG Period;
|
|
DIAGNOSTIC_BUFFER ReasonContext;
|
|
} WAKE_TIMER_INFO;
|
|
typedef WAKE_TIMER_INFO *PWAKE_TIMER_INFO;
|
|
#endif
|
|
|
|
/* Power wake source types */
|
|
typedef enum {
|
|
DeviceWakeSourceType = 0,
|
|
FixedWakeSourceType = 1,
|
|
TimerWakeSourceType = 2
|
|
} PO_WAKE_SOURCE_TYPE;
|
|
typedef PO_WAKE_SOURCE_TYPE *PPO_WAKE_SOURCE_TYPE;
|
|
|
|
/* Power fixed wake source types */
|
|
typedef enum {
|
|
FixedWakeSourcePowerButton = 0,
|
|
FixedWakeSourceSleepButton = 1,
|
|
FixedWakeSourceRtc = 2,
|
|
FixedWakeSourceDozeToHibernate = 3
|
|
} PO_FIXED_WAKE_SOURCE_TYPE;
|
|
typedef PO_FIXED_WAKE_SOURCE_TYPE *PPO_FIXED_WAKE_SOURCE_TYPE;
|
|
|
|
/* Power wake source handler */
|
|
typedef struct _PO_WAKE_SOURCE_HEADER {
|
|
PO_WAKE_SOURCE_TYPE Type;
|
|
ULONG Size;
|
|
} PO_WAKE_SOURCE_HEADER;
|
|
typedef PO_WAKE_SOURCE_HEADER *PPO_WAKE_SOURCE_HEADER;
|
|
|
|
/* Power wake source device */
|
|
typedef struct _PO_WAKE_SOURCE_DEVICE {
|
|
PO_WAKE_SOURCE_HEADER Header;
|
|
WCHAR InstancePath[ANYSIZE_ARRAY];
|
|
} PO_WAKE_SOURCE_DEVICE;
|
|
typedef PO_WAKE_SOURCE_DEVICE *PPO_WAKE_SOURCE_DEVICE;
|
|
|
|
/* Power wake source fixed */
|
|
typedef struct _PO_WAKE_SOURCE_FIXED {
|
|
PO_WAKE_SOURCE_HEADER Header;
|
|
PO_FIXED_WAKE_SOURCE_TYPE FixedWakeSourceType;
|
|
} PO_WAKE_SOURCE_FIXED;
|
|
typedef PO_WAKE_SOURCE_FIXED *PPO_WAKE_SOURCE_FIXED;
|
|
|
|
/* Power wake source timer */
|
|
#if (NTDDI_VERSION >= 0x06010000)
|
|
typedef struct _PO_WAKE_SOURCE_TIMER {
|
|
PO_WAKE_SOURCE_HEADER Header;
|
|
DIAGNOSTIC_BUFFER Reason;
|
|
} PO_WAKE_SOURCE_TIMER;
|
|
typedef PO_WAKE_SOURCE_TIMER *PPO_WAKE_SOURCE_TIMER;
|
|
#endif
|
|
|
|
/* Power wake source information */
|
|
typedef struct _PO_WAKE_SOURCE_INFO {
|
|
ULONG Count;
|
|
ULONG Offsets[ANYSIZE_ARRAY];
|
|
} PO_WAKE_SOURCE_INFO;
|
|
typedef PO_WAKE_SOURCE_INFO *PPO_WAKE_SOURCE_INFO;
|
|
|
|
/* Power wake source history */
|
|
typedef struct _PO_WAKE_SOURCE_HISTORY {
|
|
ULONG Count;
|
|
ULONG Offsets[ANYSIZE_ARRAY];
|
|
} PO_WAKE_SOURCE_HISTORY;
|
|
typedef PO_WAKE_SOURCE_HISTORY *PPO_WAKE_SOURCE_HISTORY;
|
|
|
|
/* System call functions in NTDLL.DLL */
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtGetDevicePowerState( HANDLE, DEVICE_POWER_STATE * );
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtInitiatePowerAction( POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN );
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtIsSystemResumeAutomatic( VOID );
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtPowerInformation( POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG );
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetSystemPowerState( POWER_ACTION, SYSTEM_POWER_STATE, ULONG );
|
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetThreadExecutionState( EXECUTION_STATE, PEXECUTION_STATE );
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* _NTPOAPI_ */
|