/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-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,
  PCVOID 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
