/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _GLOBAL_MACHINE_POWER_POLICY{
ULONG Revision;
SYSTEM_POWER_STATE LidOpenWakeAc;
SYSTEM_POWER_STATE LidOpenWakeDc;
ULONG BroadcastCapacityResolution;
} GLOBAL_MACHINE_POWER_POLICY,*PGLOBAL_MACHINE_POWER_POLICY;
typedef struct _GLOBAL_USER_POWER_POLICY{
ULONG Revision;
POWER_ACTION_POLICY PowerButtonAc;
POWER_ACTION_POLICY PowerButtonDc;
POWER_ACTION_POLICY SleepButtonAc;
POWER_ACTION_POLICY SleepButtonDc;
POWER_ACTION_POLICY LidCloseAc;
POWER_ACTION_POLICY LidCloseDc;
SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
ULONG GlobalFlags;
} GLOBAL_USER_POWER_POLICY,*PGLOBAL_USER_POWER_POLICY;
typedef struct _GLOBAL_POWER_POLICY{
GLOBAL_USER_POWER_POLICY user;
GLOBAL_MACHINE_POWER_POLICY mach;
} GLOBAL_POWER_POLICY,*PGLOBAL_POWER_POLICY;
typedef struct _MACHINE_POWER_POLICY{
ULONG Revision;
SYSTEM_POWER_STATE MinSleepAc;
SYSTEM_POWER_STATE MinSleepDc;
SYSTEM_POWER_STATE ReducedLatencySleepAc;
SYSTEM_POWER_STATE ReducedLatencySleepDc;
ULONG DozeTimeoutAc;
ULONG DozeTimeoutDc;
ULONG DozeS4TimeoutAc;
ULONG DozeS4TimeoutDc;
UCHAR MinThrottleAc;
UCHAR MinThrottleDc;
UCHAR pad1[2];
POWER_ACTION_POLICY OverThrottledAc;
POWER_ACTION_POLICY OverThrottledDc;
} MACHINE_POWER_POLICY,*PMACHINE_POWER_POLICY;
typedef struct _MACHINE_PROCESSOR_POWER_POLICY {
ULONG Revision;
PROCESSOR_POWER_POLICY ProcessorPolicyAc;
PROCESSOR_POWER_POLICY ProcessorPolicyDc;
} MACHINE_PROCESSOR_POWER_POLICY,*PMACHINE_PROCESSOR_POWER_POLICY;
typedef struct _USER_POWER_POLICY{
ULONG Revision;
POWER_ACTION_POLICY IdleAc;
POWER_ACTION_POLICY IdleDc;
ULONG IdleTimeoutAc;
ULONG IdleTimeoutDc;
UCHAR IdleSensitivityAc;
UCHAR IdleSensitivityDc;
UCHAR ThrottlePolicyAc;
UCHAR ThrottlePolicyDc;
SYSTEM_POWER_STATE MaxSleepAc;
SYSTEM_POWER_STATE MaxSleepDc;
ULONG Reserved[2];
ULONG VideoTimeoutAc;
ULONG VideoTimeoutDc;
ULONG SpindownTimeoutAc;
ULONG SpindownTimeoutDc;
BOOLEAN OptimizeForPowerAc;
BOOLEAN OptimizeForPowerDc;
UCHAR FanThrottleToleranceAc;
UCHAR FanThrottleToleranceDc;
UCHAR ForcedThrottleAc;
UCHAR ForcedThrottleDc;
} USER_POWER_POLICY,*PUSER_POWER_POLICY;
typedef struct _POWER_POLICY{
USER_POWER_POLICY user;
MACHINE_POWER_POLICY mach;
} POWER_POLICY,*PPOWER_POLICY;
#define EnableSysTrayBatteryMeter 0x01
#define EnableMultiBatteryDisplay 0x02
#define EnablePasswordLogon 0x04
#define EnableWakeOnRing 0x08
#define EnableVideoDimDisplay 0x10
#define NEWSCHEME (UINT)-1
typedef BOOLEAN (CALLBACK *PWRSCHEMESENUMPROC)(UINT,DWORD,LPTSTR,DWORD,LPTSTR,PPOWER_POLICY,LPARAM);
typedef BOOLEAN (CALLBACK *PFNNTINITIATEPWRACTION)(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT,PUINT);
BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC,LPARAM);
BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
BOOLEAN WINAPI ReadPwrScheme(UINT,PPOWER_POLICY);
BOOLEAN WINAPI WritePwrScheme(PUINT,LPTSTR,LPTSTR,PPOWER_POLICY);
BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
BOOLEAN WINAPI DeletePwrScheme(UINT);
BOOLEAN WINAPI GetActivePwrScheme(PUINT);
BOOLEAN WINAPI SetActivePwrScheme(UINT,PGLOBAL_POWER_POLICY,PPOWER_POLICY);
BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
BOOLEAN WINAPI SetSuspendState(BOOLEAN,BOOLEAN,BOOLEAN);
BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY,PPOWER_POLICY);
BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
BOOLEAN WINAPI ReadProcessorPwrScheme(UINT,PMACHINE_PROCESSOR_POWER_POLICY);
BOOLEAN WINAPI WriteProcessorPwrScheme(UINT,PMACHINE_PROCESSOR_POWER_POLICY);
BOOLEAN WINAPI ValidatePowerPolicies(PGLOBAL_POWER_POLICY,PPOWER_POLICY);
#if (_WIN32_WINNT >= 0x0600)
#define DEVICEPOWER_HARDWAREID 0x80000000
#define DEVICEPOWER_FILTER_DEVICES_PRESENT 0x20000000
#define DEVICEPOWER_AND_OPERATION 0x40000000
#define DEVICEPOWER_FILTER_WAKEENABLED 0x08000000
#define DEVICEPOWER_FILTER_ON_NAME 0x02000000
#define PDCAP_D0_SUPPORTED 0x00000001
#define PDCAP_D1_SUPPORTED 0x00000002
#define PDCAP_D2_SUPPORTED 0x00000004
#define PDCAP_D3_SUPPORTED 0x00000008
#define PDCAP_S0_SUPPORTED 0x00010000
#define PDCAP_S1_SUPPORTED 0x00020000
#define PDCAP_S2_SUPPORTED 0x00040000
#define PDCAP_S3_SUPPORTED 0x00080000
#define PDCAP_S4_SUPPORTED 0x01000000
#define PDCAP_S5_SUPPORTED 0x02000000
#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
#define PDCAP_WAKE_FROM_S0_SUPPORTED 0x00100000
#define PDCAP_WAKE_FROM_S1_SUPPORTED 0x00200000
#define PDCAP_WAKE_FROM_S2_SUPPORTED 0x00400000
#define PDCAP_WAKE_FROM_S3_SUPPORTED 0x00800000
#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
#define DEVICEPOWER_SET_WAKEENABLED 0x00000001
#define DEVICEPOWER_CLEAR_WAKEENABLED 0x00000002
typedef enum _POWER_DATA_ACCESSOR {
ACCESS_AC_POWER_SETTING_INDEX = 0, // 0x0
ACCESS_DC_POWER_SETTING_INDEX = 1, // 0x1
ACCESS_SCHEME = 16, // 0x10
ACCESS_SUBGROUP = 17, // 0x11
ACCESS_INDIVIDUAL_SETTING = 18, // 0x12
ACCESS_ACTIVE_SCHEME = 19, // 0x13
ACCESS_CREATE_SCHEME = 20 // 0x14
} POWER_DATA_ACCESSOR, *PPOWER_DATA_ACCESSOR;
BOOLEAN WINAPI DevicePowerClose(void);
BOOLEAN WINAPI DevicePowerEnumDevices(
ULONG QueryIndex,
ULONG QueryInterpretationFlags,
ULONG QueryFlags,
PBYTE pReturnBuffer,
PULONG pBufferSize
);
BOOLEAN WINAPI DevicePowerOpen(
ULONG Flags
);
DWORD WINAPI DevicePowerSetDeviceState(
LPCWSTR DeviceDescription,
ULONG SetFlags,
LPCVOID SetData
);
DWORD WINAPI PowerCanRestoreIndividualDefaultPowerScheme(
const GUID *SchemeGuid
);
DWORD WINAPI PowerCreatePossibleSetting(
HKEY RootSystemPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG PossibleSettingIndex
);
DWORD WINAPI PowerCreateSetting(
HKEY RootSystemPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid
);
DWORD WINAPI PowerDeleteScheme(
HKEY RootPowerKey,
const GUID *SchemeGuid
);
POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void);
DWORD WINAPI PowerDuplicateScheme(
HKEY RootPowerKey,
const GUID *SourceSchemeGuid,
GUID **DestinationSchemeGuid
);
DWORD WINAPI PowerEnumerate(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
POWER_DATA_ACCESSOR AccessFlags,
ULONG Index,
UCHAR *Buffer,
DWORD *BufferSize
);
DWORD WINAPI PowerGetActiveScheme(
HKEY UserRootPowerKey,
GUID **ActivePolicyGuid
);
DWORD WINAPI PowerImportPowerScheme(
HKEY RootPowerKey,
LPCWSTR ImportFileNamePath,
GUID **DestinationSchemeGuid
);
DWORD WINAPI PowerReadACDefaultIndex(
HKEY RootPowerKey,
const GUID *SchemePersonalityGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD AcDefaultIndex
);
DWORD WINAPI PowerReadACValue(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PULONG Type,
LPBYTE Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadACValueIndex(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD AcValueIndex
);
DWORD WINAPI PowerReadDCDefaultIndex(
HKEY RootPowerKey,
const GUID *SchemePersonalityGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD DcDefaultIndex
);
DWORD WINAPI PowerReadDCValue(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PULONG Type,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadDCValueIndex(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD DcValueIndex
);
DWORD WINAPI PowerReadDescription(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadFriendlyName(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadIconResourceSpecifier(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadPossibleDescription(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG PossibleSettingIndex,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadPossibleFriendlyName(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG PossibleSettingIndex,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadPossibleValue(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
PULONG Type,
ULONG PossibleSettingIndex,
PUCHAR Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerReadSettingAttributes(
const GUID *SubGroupGuid,
const GUID *PowerSettingGuid
);
DWORD WINAPI PowerReadValueIncrement(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD ValueIncrement
);
DWORD WINAPI PowerReadValueMax(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD ValueMaximum
);
DWORD WINAPI PowerReadValueMin(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
LPDWORD ValueMinimum
);
DWORD WINAPI PowerReadValueUnitsSpecifier(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
UCHAR *Buffer,
LPDWORD BufferSize
);
DWORD WINAPI PowerRemovePowerSetting(
const GUID *PowerSettingSubKeyGuid,
const GUID *PowerSettingGuid
);
DWORD WINAPI PowerReplaceDefaultPowerSchemes(void);
DWORD WINAPI PowerRestoreDefaultPowerSchemes(void);
DWORD WINAPI PowerRestoreIndividualDefaultPowerScheme(
const GUID *SchemeGuid
);
DWORD WINAPI PowerSetActiveScheme(
HKEY UserRootPowerKey,
const GUID *SchemeGuid
);
DWORD WINAPI PowerSettingAccessCheck(
POWER_DATA_ACCESSOR AccessFlags,
const GUID *PowerGuid
);
DWORD WINAPI PowerWriteACDefaultIndex(
HKEY RootSystemPowerKey,
const GUID *SchemePersonalityGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD DefaultAcIndex
);
DWORD WINAPI PowerWriteACValueIndex(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD AcValueIndex
);
DWORD WINAPI PowerWriteDCDefaultIndex(
HKEY RootSystemPowerKey,
const GUID *SchemePersonalityGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD DefaultDcIndex
);
DWORD WINAPI PowerWriteDCValueIndex(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD DcValueIndex
);
DWORD WINAPI PowerWriteDescription(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
UCHAR *Buffer,
DWORD BufferSize
);
DWORD WINAPI PowerWriteFriendlyName(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
UCHAR *Buffer,
DWORD BufferSize
);
DWORD WINAPI PowerWriteIconResourceSpecifier(
HKEY RootPowerKey,
const GUID *SchemeGuid,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
UCHAR *Buffer,
DWORD BufferSize
);
DWORD WINAPI PowerWritePossibleDescription(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG PossibleSettingIndex,
UCHAR *Buffer,
DWORD BufferSize
);
DWORD WINAPI PowerWritePossibleFriendlyName(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG PossibleSettingIndex,
UCHAR *Buffer,
DWORD BufferSize
);
DWORD WINAPI PowerWritePossibleValue(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
ULONG Type,
ULONG PossibleSettingIndex,
UCHAR *Buffer,
DWORD BufferSize
);
#define POWER_ATTRIBUTE_HIDE 1
DWORD WINAPI PowerWriteSettingAttributes(
const GUID *SubGroupGuid,
const GUID *PowerSettingGuid,
DWORD Attributes
);
DWORD WINAPI PowerWriteValueIncrement(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD ValueIncrement
);
DWORD WINAPI PowerWriteValueMax(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD ValueMaximum
);
DWORD WINAPI PowerWriteValueMin(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
DWORD ValueMinimum
);
DWORD WINAPI PowerWriteValueUnitsSpecifier(
HKEY RootPowerKey,
const GUID *SubGroupOfPowerSettingsGuid,
const GUID *PowerSettingGuid,
UCHAR *Buffer,
DWORD BufferSize
);
#endif /*(_WIN32_WINNT >= 0x0600)*/
#ifndef NT_SUCCESS
#define NTSTATUS LONG
#define _OVERRIDE_NTSTATUS_
#endif
NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
#ifdef _OVERRIDE_NTSTATUS_
#undef NTSTATUS
#endif
#ifdef __cplusplus
}
#endif