mirror of
https://github.com/bb107/MemoryModulePP
synced 2026-06-08 13:15:33 +00:00
591 lines
20 KiB
C
591 lines
20 KiB
C
/*
|
|
* Power Management support functions
|
|
*
|
|
* This file is part of System Informer.
|
|
*/
|
|
|
|
#ifndef _NTPOAPI_H
|
|
#define _NTPOAPI_H
|
|
|
|
#if (PHNT_MODE != PHNT_MODE_KERNEL)
|
|
// POWER_INFORMATION_LEVEL
|
|
// Note: We don't use an enum for these values to minimize conflicts with the Windows SDK. (dmex)
|
|
#define SystemPowerPolicyAc 0 // SYSTEM_POWER_POLICY // GET: InputBuffer NULL. SET: InputBuffer not NULL.
|
|
#define SystemPowerPolicyDc 1 // SYSTEM_POWER_POLICY
|
|
#define VerifySystemPolicyAc 2 // SYSTEM_POWER_POLICY
|
|
#define VerifySystemPolicyDc 3 // SYSTEM_POWER_POLICY
|
|
#define SystemPowerCapabilities 4 // SYSTEM_POWER_CAPABILITIES
|
|
#define SystemBatteryState 5 // SYSTEM_BATTERY_STATE
|
|
#define SystemPowerStateHandler 6 // POWER_STATE_HANDLER // (kernel-mode only)
|
|
#define ProcessorStateHandler 7 // PROCESSOR_STATE_HANDLER // (kernel-mode only)
|
|
#define SystemPowerPolicyCurrent 8 // SYSTEM_POWER_POLICY
|
|
#define AdministratorPowerPolicy 9 // ADMINISTRATOR_POWER_POLICY
|
|
#define SystemReserveHiberFile 10 // BOOLEAN // (requires SeCreatePagefilePrivilege) // TRUE: hibernation file created. FALSE: hibernation file deleted.
|
|
#define ProcessorInformation 11 // PROCESSOR_POWER_INFORMATION
|
|
#define SystemPowerInformation 12 // SYSTEM_POWER_INFORMATION
|
|
#define ProcessorStateHandler2 13 // PROCESSOR_STATE_HANDLER2 // not implemented
|
|
#define LastWakeTime 14 // ULONGLONG // InterruptTime
|
|
#define LastSleepTime 15 // ULONGLONG // InterruptTime
|
|
#define SystemExecutionState 16 // EXECUTION_STATE // NtSetThreadExecutionState
|
|
#define SystemPowerStateNotifyHandler 17 // POWER_STATE_NOTIFY_HANDLER // (kernel-mode only)
|
|
#define ProcessorPowerPolicyAc 18 // PROCESSOR_POWER_POLICY // not implemented
|
|
#define ProcessorPowerPolicyDc 19 // PROCESSOR_POWER_POLICY // not implemented
|
|
#define VerifyProcessorPowerPolicyAc 20 // PROCESSOR_POWER_POLICY // not implemented
|
|
#define VerifyProcessorPowerPolicyDc 21 // PROCESSOR_POWER_POLICY // not implemented
|
|
#define ProcessorPowerPolicyCurrent 22 // PROCESSOR_POWER_POLICY // not implemented
|
|
#define SystemPowerStateLogging 23 // SYSTEM_POWER_STATE_DISABLE_REASON[]
|
|
#define SystemPowerLoggingEntry 24 // SYSTEM_POWER_LOGGING_ENTRY[] // (kernel-mode only)
|
|
#define SetPowerSettingValue 25 // (kernel-mode only)
|
|
#define NotifyUserPowerSetting 26 // not implemented
|
|
#define PowerInformationLevelUnused0 27 // not implemented
|
|
#define SystemMonitorHiberBootPowerOff 28 // NULL (PowerMonitorOff)
|
|
#define SystemVideoState 29 // MONITOR_DISPLAY_STATE
|
|
#define TraceApplicationPowerMessage 30 // (kernel-mode only)
|
|
#define TraceApplicationPowerMessageEnd 31 // (kernel-mode only)
|
|
#define ProcessorPerfStates 32 // (kernel-mode only)
|
|
#define ProcessorIdleStates 33 // (kernel-mode only)
|
|
#define ProcessorCap 34 // (kernel-mode only)
|
|
#define SystemWakeSource 35
|
|
#define SystemHiberFileInformation 36 // q: SYSTEM_HIBERFILE_INFORMATION
|
|
#define TraceServicePowerMessage 37
|
|
#define ProcessorLoad 38
|
|
#define PowerShutdownNotification 39 // (kernel-mode only)
|
|
#define MonitorCapabilities 40 // (kernel-mode only)
|
|
#define SessionPowerInit 41 // (kernel-mode only)
|
|
#define SessionDisplayState 42 // (kernel-mode only)
|
|
#define PowerRequestCreate 43 // in: COUNTED_REASON_CONTEXT, out: HANDLE
|
|
#define PowerRequestAction 44 // in: POWER_REQUEST_ACTION
|
|
#define GetPowerRequestList 45 // out: POWER_REQUEST_LIST
|
|
#define ProcessorInformationEx 46 // in: USHORT ProcessorGroup, out: PROCESSOR_POWER_INFORMATION
|
|
#define NotifyUserModeLegacyPowerEvent 47 // (kernel-mode only)
|
|
#define GroupPark 48 // (debug-mode boot only)
|
|
#define ProcessorIdleDomains 49 // (kernel-mode only)
|
|
#define WakeTimerList 50 // powercfg.exe /waketimers
|
|
#define SystemHiberFileSize 51 // ULONG
|
|
#define ProcessorIdleStatesHv 52 // (kernel-mode only)
|
|
#define ProcessorPerfStatesHv 53 // (kernel-mode only)
|
|
#define ProcessorPerfCapHv 54 // (kernel-mode only)
|
|
#define ProcessorSetIdle 55 // (debug-mode boot only)
|
|
#define LogicalProcessorIdling 56 // (kernel-mode only)
|
|
#define UserPresence 57 // POWER_USER_PRESENCE // not implemented
|
|
#define PowerSettingNotificationName 58
|
|
#define GetPowerSettingValue 59 // GUID
|
|
#define IdleResiliency 60 // POWER_IDLE_RESILIENCY
|
|
#define SessionRITState 61 // POWER_SESSION_RIT_STATE
|
|
#define SessionConnectNotification 62 // POWER_SESSION_WINLOGON
|
|
#define SessionPowerCleanup 63
|
|
#define SessionLockState 64 // POWER_SESSION_WINLOGON
|
|
#define SystemHiberbootState 65 // BOOLEAN // fast startup supported
|
|
#define PlatformInformation 66 // BOOLEAN // connected standby supported
|
|
#define PdcInvocation 67 // (kernel-mode only)
|
|
#define MonitorInvocation 68 // (kernel-mode only)
|
|
#define FirmwareTableInformationRegistered 69 // (kernel-mode only)
|
|
#define SetShutdownSelectedTime 70 // NULL
|
|
#define SuspendResumeInvocation 71 // (kernel-mode only)
|
|
#define PlmPowerRequestCreate 72 // in: COUNTED_REASON_CONTEXT, out: HANDLE
|
|
#define ScreenOff 73 // NULL (PowerMonitorOff)
|
|
#define CsDeviceNotification 74 // (kernel-mode only)
|
|
#define PlatformRole 75 // POWER_PLATFORM_ROLE
|
|
#define LastResumePerformance 76 // RESUME_PERFORMANCE
|
|
#define DisplayBurst 77 // NULL (PowerMonitorOn)
|
|
#define ExitLatencySamplingPercentage 78
|
|
#define RegisterSpmPowerSettings 79 // (kernel-mode only)
|
|
#define PlatformIdleStates 80 // (kernel-mode only)
|
|
#define ProcessorIdleVeto 81 // (kernel-mode only) // deprecated
|
|
#define PlatformIdleVeto 82 // (kernel-mode only) // deprecated
|
|
#define SystemBatteryStatePrecise 83 // SYSTEM_BATTERY_STATE
|
|
#define ThermalEvent 84 // THERMAL_EVENT // PowerReportThermalEvent
|
|
#define PowerRequestActionInternal 85 // POWER_REQUEST_ACTION_INTERNAL
|
|
#define BatteryDeviceState 86
|
|
#define PowerInformationInternal 87 // POWER_INFORMATION_LEVEL_INTERNAL // PopPowerInformationInternal
|
|
#define ThermalStandby 88 // NULL // shutdown with thermal standby as reason.
|
|
#define SystemHiberFileType 89 // ULONG // zero ? reduced : full // powercfg.exe /h /type
|
|
#define PhysicalPowerButtonPress 90 // BOOLEAN
|
|
#define QueryPotentialDripsConstraint 91 // (kernel-mode only)
|
|
#define EnergyTrackerCreate 92
|
|
#define EnergyTrackerQuery 93
|
|
#define UpdateBlackBoxRecorder 94
|
|
#define SessionAllowExternalDmaDevices 95
|
|
#define SendSuspendResumeNotification 96 // since WIN11
|
|
#define PowerInformationLevelMaximum 97
|
|
#endif
|
|
|
|
typedef struct _PROCESSOR_POWER_INFORMATION
|
|
{
|
|
ULONG Number;
|
|
ULONG MaxMhz;
|
|
ULONG CurrentMhz;
|
|
ULONG MhzLimit;
|
|
ULONG MaxIdleState;
|
|
ULONG CurrentIdleState;
|
|
} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_POWER_INFORMATION
|
|
{
|
|
ULONG MaxIdlenessAllowed;
|
|
ULONG Idleness;
|
|
ULONG TimeRemaining;
|
|
UCHAR CoolingMode;
|
|
} SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_HIBERFILE_INFORMATION
|
|
{
|
|
ULONG NumberOfMcbPairs;
|
|
LARGE_INTEGER Mcb[1];
|
|
} SYSTEM_HIBERFILE_INFORMATION, *PSYSTEM_HIBERFILE_INFORMATION;
|
|
|
|
#define POWER_REQUEST_CONTEXT_NOT_SPECIFIED DIAGNOSTIC_REASON_NOT_SPECIFIED
|
|
|
|
// wdm
|
|
typedef struct _COUNTED_REASON_CONTEXT
|
|
{
|
|
ULONG Version;
|
|
ULONG Flags;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
UNICODE_STRING ResourceFileName;
|
|
USHORT ResourceReasonId;
|
|
ULONG StringCount;
|
|
_Field_size_(StringCount) PUNICODE_STRING ReasonStrings;
|
|
};
|
|
UNICODE_STRING SimpleString;
|
|
};
|
|
} COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
|
|
|
|
typedef enum _POWER_REQUEST_TYPE_INTERNAL // POWER_REQUEST_TYPE
|
|
{
|
|
PowerRequestDisplayRequiredInternal,
|
|
PowerRequestSystemRequiredInternal,
|
|
PowerRequestAwayModeRequiredInternal,
|
|
PowerRequestExecutionRequiredInternal, // Windows 8+
|
|
PowerRequestPerfBoostRequiredInternal, // Windows 8+
|
|
PowerRequestActiveLockScreenInternal, // Windows 10 RS1+ (reserved on Windows 8)
|
|
// Values 6 and 7 are reserved for Windows 8 only
|
|
PowerRequestInternalInvalid,
|
|
PowerRequestInternalUnknown,
|
|
PowerRequestFullScreenVideoRequired // Windows 8 only
|
|
} POWER_REQUEST_TYPE_INTERNAL;
|
|
|
|
typedef struct _POWER_REQUEST_ACTION
|
|
{
|
|
HANDLE PowerRequestHandle;
|
|
POWER_REQUEST_TYPE_INTERNAL RequestType;
|
|
BOOLEAN SetAction;
|
|
HANDLE ProcessHandle; // Windows 8+ and only for requests created via PlmPowerRequestCreate
|
|
} POWER_REQUEST_ACTION, *PPOWER_REQUEST_ACTION;
|
|
|
|
typedef union _POWER_STATE
|
|
{
|
|
SYSTEM_POWER_STATE SystemState;
|
|
DEVICE_POWER_STATE DeviceState;
|
|
} POWER_STATE, *PPOWER_STATE;
|
|
|
|
typedef enum _POWER_STATE_TYPE
|
|
{
|
|
SystemPowerState = 0,
|
|
DevicePowerState
|
|
} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
|
|
|
|
// wdm
|
|
typedef struct _SYSTEM_POWER_STATE_CONTEXT
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
ULONG Reserved1 : 8;
|
|
ULONG TargetSystemState : 4;
|
|
ULONG EffectiveSystemState : 4;
|
|
ULONG CurrentSystemState : 4;
|
|
ULONG IgnoreHibernationPath : 1;
|
|
ULONG PseudoTransition : 1;
|
|
ULONG Reserved2 : 10;
|
|
};
|
|
ULONG ContextAsUlong;
|
|
};
|
|
} SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
|
|
|
|
typedef enum _REQUESTER_TYPE
|
|
{
|
|
KernelRequester = 0,
|
|
UserProcessRequester = 1,
|
|
UserSharedServiceRequester = 2
|
|
} REQUESTER_TYPE;
|
|
|
|
typedef struct _COUNTED_REASON_CONTEXT_RELATIVE
|
|
{
|
|
ULONG Flags;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
ULONG_PTR ResourceFileNameOffset;
|
|
USHORT ResourceReasonId;
|
|
ULONG StringCount;
|
|
ULONG_PTR SubstitutionStringsOffset;
|
|
};
|
|
ULONG_PTR SimpleStringOffset;
|
|
};
|
|
} COUNTED_REASON_CONTEXT_RELATIVE, *PCOUNTED_REASON_CONTEXT_RELATIVE;
|
|
|
|
typedef struct _DIAGNOSTIC_BUFFER
|
|
{
|
|
SIZE_T Size;
|
|
REQUESTER_TYPE CallerType;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
ULONG_PTR ProcessImageNameOffset; // PWSTR
|
|
ULONG ProcessId;
|
|
ULONG ServiceTag;
|
|
};
|
|
struct
|
|
{
|
|
ULONG_PTR DeviceDescriptionOffset; // PWSTR
|
|
ULONG_PTR DevicePathOffset; // PWSTR
|
|
};
|
|
};
|
|
ULONG_PTR ReasonOffset; // PCOUNTED_REASON_CONTEXT_RELATIVE
|
|
} DIAGNOSTIC_BUFFER, *PDIAGNOSTIC_BUFFER;
|
|
|
|
// The number of supported request types per version
|
|
#define POWER_REQUEST_SUPPORTED_TYPES_V1 3 // Windows 7
|
|
#define POWER_REQUEST_SUPPORTED_TYPES_V2 9 // Windows 8
|
|
#define POWER_REQUEST_SUPPORTED_TYPES_V3 5 // Windows 8.1 and Windows 10 TH1-TH2
|
|
#define POWER_REQUEST_SUPPORTED_TYPES_V4 6 // Windows 10 RS1+
|
|
|
|
typedef struct _POWER_REQUEST
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
ULONG SupportedRequestMask;
|
|
ULONG PowerRequestCount[POWER_REQUEST_SUPPORTED_TYPES_V1];
|
|
DIAGNOSTIC_BUFFER DiagnosticBuffer;
|
|
} V1;
|
|
#if (PHNT_VERSION >= PHNT_WIN8)
|
|
struct
|
|
{
|
|
ULONG SupportedRequestMask;
|
|
ULONG PowerRequestCount[POWER_REQUEST_SUPPORTED_TYPES_V2];
|
|
DIAGNOSTIC_BUFFER DiagnosticBuffer;
|
|
} V2;
|
|
#endif
|
|
#if (PHNT_VERSION >= PHNT_WINBLUE)
|
|
struct
|
|
{
|
|
ULONG SupportedRequestMask;
|
|
ULONG PowerRequestCount[POWER_REQUEST_SUPPORTED_TYPES_V3];
|
|
DIAGNOSTIC_BUFFER DiagnosticBuffer;
|
|
} V3;
|
|
#endif
|
|
#if (PHNT_VERSION >= PHNT_REDSTONE)
|
|
struct
|
|
{
|
|
ULONG SupportedRequestMask;
|
|
ULONG PowerRequestCount[POWER_REQUEST_SUPPORTED_TYPES_V4];
|
|
DIAGNOSTIC_BUFFER DiagnosticBuffer;
|
|
} V4;
|
|
#endif
|
|
};
|
|
} POWER_REQUEST, *PPOWER_REQUEST;
|
|
|
|
typedef struct _POWER_REQUEST_LIST
|
|
{
|
|
ULONG_PTR Count;
|
|
ULONG_PTR PowerRequestOffsets[ANYSIZE_ARRAY]; // PPOWER_REQUEST
|
|
} POWER_REQUEST_LIST, *PPOWER_REQUEST_LIST;
|
|
|
|
typedef enum _POWER_STATE_HANDLER_TYPE
|
|
{
|
|
PowerStateSleeping1 = 0,
|
|
PowerStateSleeping2 = 1,
|
|
PowerStateSleeping3 = 2,
|
|
PowerStateSleeping4 = 3,
|
|
PowerStateShutdownOff = 4,
|
|
PowerStateShutdownReset = 5,
|
|
PowerStateSleeping4Firmware = 6,
|
|
PowerStateMaximum = 7
|
|
} POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
|
|
|
|
typedef NTSTATUS (NTAPI *PENTER_STATE_SYSTEM_HANDLER)(
|
|
_In_ PVOID SystemContext
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PENTER_STATE_HANDLER)(
|
|
_In_ PVOID Context,
|
|
_In_opt_ PENTER_STATE_SYSTEM_HANDLER SystemHandler,
|
|
_In_ PVOID SystemContext,
|
|
_In_ LONG NumberProcessors,
|
|
_In_ LONG volatile *Number
|
|
);
|
|
|
|
typedef struct _POWER_STATE_HANDLER
|
|
{
|
|
POWER_STATE_HANDLER_TYPE Type;
|
|
BOOLEAN RtcWake;
|
|
UCHAR Spare[3];
|
|
PENTER_STATE_HANDLER Handler;
|
|
PVOID Context;
|
|
} POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
|
|
|
|
typedef NTSTATUS (NTAPI *PENTER_STATE_NOTIFY_HANDLER)(
|
|
_In_ POWER_STATE_HANDLER_TYPE State,
|
|
_In_ PVOID Context,
|
|
_In_ BOOLEAN Entering
|
|
);
|
|
|
|
typedef struct _POWER_STATE_NOTIFY_HANDLER
|
|
{
|
|
PENTER_STATE_NOTIFY_HANDLER Handler;
|
|
PVOID Context;
|
|
} POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
|
|
|
|
typedef struct _POWER_REQUEST_ACTION_INTERNAL
|
|
{
|
|
PVOID PowerRequestPointer;
|
|
POWER_REQUEST_TYPE_INTERNAL RequestType;
|
|
BOOLEAN SetAction;
|
|
} POWER_REQUEST_ACTION_INTERNAL, *PPOWER_REQUEST_ACTION_INTERNAL;
|
|
|
|
typedef enum _POWER_INFORMATION_LEVEL_INTERNAL
|
|
{
|
|
PowerInternalAcpiInterfaceRegister,
|
|
PowerInternalS0LowPowerIdleInfo, // POWER_S0_LOW_POWER_IDLE_INFO
|
|
PowerInternalReapplyBrightnessSettings,
|
|
PowerInternalUserAbsencePrediction, // POWER_USER_ABSENCE_PREDICTION
|
|
PowerInternalUserAbsencePredictionCapability, // POWER_USER_ABSENCE_PREDICTION_CAPABILITY
|
|
PowerInternalPoProcessorLatencyHint, // POWER_PROCESSOR_LATENCY_HINT
|
|
PowerInternalStandbyNetworkRequest, // POWER_STANDBY_NETWORK_REQUEST
|
|
PowerInternalDirtyTransitionInformation,
|
|
PowerInternalSetBackgroundTaskState, // POWER_SET_BACKGROUND_TASK_STATE
|
|
PowerInternalTtmOpenTerminal,
|
|
PowerInternalTtmCreateTerminal, // 10
|
|
PowerInternalTtmEvacuateDevices,
|
|
PowerInternalTtmCreateTerminalEventQueue,
|
|
PowerInternalTtmGetTerminalEvent,
|
|
PowerInternalTtmSetDefaultDeviceAssignment,
|
|
PowerInternalTtmAssignDevice,
|
|
PowerInternalTtmSetDisplayState,
|
|
PowerInternalTtmSetDisplayTimeouts,
|
|
PowerInternalBootSessionStandbyActivationInformation,
|
|
PowerInternalSessionPowerState,
|
|
PowerInternalSessionTerminalInput, // 20
|
|
PowerInternalSetWatchdog,
|
|
PowerInternalPhysicalPowerButtonPressInfoAtBoot,
|
|
PowerInternalExternalMonitorConnected,
|
|
PowerInternalHighPrecisionBrightnessSettings,
|
|
PowerInternalWinrtScreenToggle,
|
|
PowerInternalPpmQosDisable,
|
|
PowerInternalTransitionCheckpoint,
|
|
PowerInternalInputControllerState,
|
|
PowerInternalFirmwareResetReason,
|
|
PowerInternalPpmSchedulerQosSupport, // 30
|
|
PowerInternalBootStatGet,
|
|
PowerInternalBootStatSet,
|
|
PowerInternalCallHasNotReturnedWatchdog,
|
|
PowerInternalBootStatCheckIntegrity,
|
|
PowerInternalBootStatRestoreDefaults, // in: void
|
|
PowerInternalHostEsStateUpdate,
|
|
PowerInternalGetPowerActionState,
|
|
PowerInternalBootStatUnlock,
|
|
PowerInternalWakeOnVoiceState,
|
|
PowerInternalDeepSleepBlock, // 40
|
|
PowerInternalIsPoFxDevice,
|
|
PowerInternalPowerTransitionExtensionAtBoot,
|
|
PowerInternalProcessorBrandedFrequency, // in: POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_INPUT, out: POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_OUTPUT
|
|
PowerInternalTimeBrokerExpirationReason,
|
|
PowerInternalNotifyUserShutdownStatus,
|
|
PowerInternalPowerRequestTerminalCoreWindow,
|
|
PowerInternalProcessorIdleVeto,
|
|
PowerInternalPlatformIdleVeto,
|
|
PowerInternalIsLongPowerButtonBugcheckEnabled,
|
|
PowerInternalAutoChkCausedReboot, // 50
|
|
PowerInternalSetWakeAlarmOverride,
|
|
|
|
PowerInternalDirectedFxAddTestDevice = 53,
|
|
PowerInternalDirectedFxRemoveTestDevice,
|
|
|
|
PowerInternalDirectedFxSetMode = 56,
|
|
PowerInternalRegisterPowerPlane,
|
|
PowerInternalSetDirectedDripsFlags,
|
|
PowerInternalClearDirectedDripsFlags,
|
|
PowerInternalRetrieveHiberFileResumeContext, // 60
|
|
PowerInternalReadHiberFilePage,
|
|
PowerInternalLastBootSucceeded, // out: BOOLEAN
|
|
PowerInternalQuerySleepStudyHelperRoutineBlock,
|
|
PowerInternalDirectedDripsQueryCapabilities,
|
|
PowerInternalClearConstraints,
|
|
PowerInternalSoftParkVelocityEnabled,
|
|
PowerInternalQueryIntelPepCapabilities,
|
|
PowerInternalGetSystemIdleLoopEnablement, // since WIN11
|
|
PowerInternalGetVmPerfControlSupport,
|
|
PowerInternalGetVmPerfControlConfig, // 70
|
|
PowerInternalSleepDetailedDiagUpdate,
|
|
PowerInternalProcessorClassFrequencyBandsStats,
|
|
PowerInternalHostGlobalUserPresenceStateUpdate,
|
|
PowerInternalCpuNodeIdleIntervalStats,
|
|
PowerInternalClassIdleIntervalStats,
|
|
PowerInternalCpuNodeConcurrencyStats,
|
|
PowerInternalClassConcurrencyStats,
|
|
PowerInternalQueryProcMeasurementCapabilities,
|
|
PowerInternalQueryProcMeasurementValues,
|
|
PowerInternalPrepareForSystemInitiatedReboot, // 80
|
|
PowerInternalGetAdaptiveSessionState,
|
|
PowerInternalSetConsoleLockedState,
|
|
PowerInternalOverrideSystemInitiatedRebootState,
|
|
PowerInternalFanImpactStats,
|
|
PowerInternalFanRpmBuckets,
|
|
PowerInternalPowerBootAppDiagInfo,
|
|
PowerInternalUnregisterShutdownNotification, // since 22H1
|
|
PowerInternalManageTransitionStateRecord,
|
|
PowerInformationInternalMaximum
|
|
} POWER_INFORMATION_LEVEL_INTERNAL;
|
|
|
|
typedef enum _POWER_S0_DISCONNECTED_REASON
|
|
{
|
|
PoS0DisconnectedReasonNone,
|
|
PoS0DisconnectedReasonNonCompliantNic,
|
|
PoS0DisconnectedReasonSettingPolicy,
|
|
PoS0DisconnectedReasonEnforceDsPolicy,
|
|
PoS0DisconnectedReasonCsChecksFailed,
|
|
PoS0DisconnectedReasonSmartStandby,
|
|
PoS0DisconnectedReasonMaximum
|
|
} POWER_S0_DISCONNECTED_REASON;
|
|
|
|
typedef struct _POWER_S0_LOW_POWER_IDLE_INFO
|
|
{
|
|
POWER_S0_DISCONNECTED_REASON DisconnectedReason;
|
|
union
|
|
{
|
|
BOOLEAN Storage : 1;
|
|
BOOLEAN WiFi : 1;
|
|
BOOLEAN Mbn : 1;
|
|
BOOLEAN Ethernet : 1;
|
|
BOOLEAN Reserved : 4;
|
|
UCHAR AsUCHAR;
|
|
} CsDeviceCompliance;
|
|
union
|
|
{
|
|
BOOLEAN DisconnectInStandby : 1;
|
|
BOOLEAN EnforceDs : 1;
|
|
BOOLEAN Reserved : 6;
|
|
UCHAR AsUCHAR;
|
|
} Policy;
|
|
} POWER_S0_LOW_POWER_IDLE_INFO, *PPOWER_S0_LOW_POWER_IDLE_INFO;
|
|
|
|
typedef struct _POWER_INFORMATION_INTERNAL_HEADER
|
|
{
|
|
POWER_INFORMATION_LEVEL_INTERNAL InternalType;
|
|
ULONG Version;
|
|
} POWER_INFORMATION_INTERNAL_HEADER, *PPOWER_INFORMATION_INTERNAL_HEADER;
|
|
|
|
typedef struct _POWER_USER_ABSENCE_PREDICTION
|
|
{
|
|
POWER_INFORMATION_INTERNAL_HEADER Header;
|
|
LARGE_INTEGER ReturnTime;
|
|
} POWER_USER_ABSENCE_PREDICTION, *PPOWER_USER_ABSENCE_PREDICTION;
|
|
|
|
typedef struct _POWER_USER_ABSENCE_PREDICTION_CAPABILITY
|
|
{
|
|
BOOLEAN AbsencePredictionCapability;
|
|
} POWER_USER_ABSENCE_PREDICTION_CAPABILITY, *PPOWER_USER_ABSENCE_PREDICTION_CAPABILITY;
|
|
|
|
typedef struct _POWER_PROCESSOR_LATENCY_HINT
|
|
{
|
|
POWER_INFORMATION_INTERNAL_HEADER PowerInformationInternalHeader;
|
|
ULONG Type;
|
|
} POWER_PROCESSOR_LATENCY_HINT, *PPO_PROCESSOR_LATENCY_HINT;
|
|
|
|
typedef struct _POWER_STANDBY_NETWORK_REQUEST
|
|
{
|
|
POWER_INFORMATION_INTERNAL_HEADER PowerInformationInternalHeader;
|
|
BOOLEAN Active;
|
|
} POWER_STANDBY_NETWORK_REQUEST, *PPOWER_STANDBY_NETWORK_REQUEST;
|
|
|
|
typedef struct _POWER_SET_BACKGROUND_TASK_STATE
|
|
{
|
|
POWER_INFORMATION_INTERNAL_HEADER PowerInformationInternalHeader;
|
|
BOOLEAN Engaged;
|
|
} POWER_SET_BACKGROUND_TASK_STATE, *PPOWER_SET_BACKGROUND_TASK_STATE;
|
|
|
|
typedef struct POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_INPUT
|
|
{
|
|
POWER_INFORMATION_LEVEL_INTERNAL InternalType;
|
|
PROCESSOR_NUMBER ProcessorNumber; // ULONG_MAX
|
|
} POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_INPUT, *PPOWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_INPUT;
|
|
|
|
typedef struct POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_OUTPUT
|
|
{
|
|
ULONG Version;
|
|
ULONG NominalFrequency; // if (Domain) Prcb->PowerState.CheckContext.Domain.NominalFrequency else Prcb->MHz
|
|
} POWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_OUTPUT, *PPOWER_INTERNAL_PROCESSOR_BRANDED_FREQENCY_OUTPUT;
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtPowerInformation(
|
|
_In_ POWER_INFORMATION_LEVEL InformationLevel,
|
|
_In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
|
|
_In_ ULONG InputBufferLength,
|
|
_Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
|
|
_In_ ULONG OutputBufferLength
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetThreadExecutionState(
|
|
_In_ EXECUTION_STATE NewFlags, // ES_* flags
|
|
_Out_ EXECUTION_STATE *PreviousFlags
|
|
);
|
|
|
|
#if (PHNT_VERSION < PHNT_WIN7)
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtRequestWakeupLatency(
|
|
_In_ LATENCY_TIME latency
|
|
);
|
|
#endif
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtInitiatePowerAction(
|
|
_In_ POWER_ACTION SystemAction,
|
|
_In_ SYSTEM_POWER_STATE LightestSystemState,
|
|
_In_ ULONG Flags, // POWER_ACTION_* flags
|
|
_In_ BOOLEAN Asynchronous
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtSetSystemPowerState(
|
|
_In_ POWER_ACTION SystemAction,
|
|
_In_ SYSTEM_POWER_STATE LightestSystemState,
|
|
_In_ ULONG Flags // POWER_ACTION_* flags
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
NtGetDevicePowerState(
|
|
_In_ HANDLE Device,
|
|
_Out_ PDEVICE_POWER_STATE State
|
|
);
|
|
|
|
NTSYSCALLAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
NtIsSystemResumeAutomatic(
|
|
VOID
|
|
);
|
|
|
|
#endif
|