[POWRPROF] Sync Powrprof to WINE-10.0 - Add some functions too (#7681)

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>

"Sync" to WINE-10.0, plus add some functions we need. Required for various apps going forward.
This commit is contained in:
Justin Miller 2025-02-11 17:33:45 -08:00 committed by GitHub
parent 28b802b229
commit 3368adc547
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 276 additions and 79 deletions

View file

@ -6,6 +6,11 @@ add_library(powrprof MODULE
powrprof.rc
${CMAKE_CURRENT_BINARY_DIR}/powrprof.def)
if(MSVC)
# Disable warning C4312: 'type cast': conversion from 'unsigned int' to 'HANDLE' of greater size
target_compile_options(powrprof PRIVATE /wd4312)
endif()
set_module_type(powrprof win32dll UNICODE)
target_link_libraries(powrprof wine)
add_importlibs(powrprof advapi32 user32 comctl32 msvcrt kernel32 ntdll)

View file

@ -510,6 +510,12 @@ PowerGetActiveScheme(HKEY UserRootPowerKey, GUID **polguid)
return ERROR_CALL_NOT_IMPLEMENTED;
}
DWORD WINAPI PowerSetActiveScheme(HKEY UserRootPowerKey, GUID *polguid)
{
FIXME("(%p,%s) stub!\n", UserRootPowerKey, wine_dbgstr_guid(polguid));
return ERROR_SUCCESS;
}
DWORD WINAPI
PowerReadDCValue(HKEY RootPowerKey, const GUID *Scheme, const GUID *SubGroup, const GUID *PowerSettings, PULONG Type, PUCHAR Buffer, DWORD *BufferSize)
{
@ -517,6 +523,111 @@ PowerReadDCValue(HKEY RootPowerKey, const GUID *Scheme, const GUID *SubGroup, co
return ERROR_CALL_NOT_IMPLEMENTED;
}
DWORD WINAPI PowerReadFriendlyName(HKEY RootPowerKey, const GUID *Scheme,
const GUID *SubGroup, const GUID *PowerSettings, UCHAR *Buffer,
DWORD *BufferSize)
{
FIXME("(%p,%s,%s,%s,%p,%p) stub!\n", RootPowerKey, debugstr_guid(Scheme), debugstr_guid(SubGroup), debugstr_guid(PowerSettings), Buffer, BufferSize);
return ERROR_CALL_NOT_IMPLEMENTED;
}
POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void)
{
FIXME("stub\n");
return PlatformRoleDesktop;
}
POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRoleEx(ULONG version)
{
FIXME("%lu stub.\n", version);
return PlatformRoleDesktop;
}
DWORD WINAPI PowerEnumerate(HKEY key, const GUID *scheme, const GUID *subgroup, POWER_DATA_ACCESSOR flags,
ULONG index, UCHAR *buffer, DWORD *buffer_size)
{
FIXME("(%p,%s,%s,%d,%ld,%p,%p) stub!\n", key, debugstr_guid(scheme), debugstr_guid(subgroup),
flags, index, buffer, buffer_size);
return ERROR_CALL_NOT_IMPLEMENTED;
}
DWORD WINAPI PowerRegisterSuspendResumeNotification(DWORD flags, HANDLE recipient, PHPOWERNOTIFY handle)
{
FIXME("(0x%08lx,%p,%p) stub!\n", flags, recipient, handle);
*handle = (HPOWERNOTIFY)0xdeadbeef;
return ERROR_SUCCESS;
}
DWORD WINAPI PowerUnregisterSuspendResumeNotification(HPOWERNOTIFY handle)
{
FIXME("(%p) stub!\n", handle);
return ERROR_SUCCESS;
}
DWORD WINAPI PowerSettingRegisterNotification(const GUID *setting, DWORD flags, HANDLE recipient, PHPOWERNOTIFY handle)
{
FIXME("(%s,0x%08lx,%p,%p) stub!\n", debugstr_guid(setting), flags, recipient, handle);
*handle = (PHPOWERNOTIFY)0xdeadbeef;
return ERROR_SUCCESS;
}
DWORD WINAPI PowerSettingUnregisterNotification(HPOWERNOTIFY handle)
{
FIXME("(%p) stub!\n", handle);
return ERROR_SUCCESS;
}
DWORD WINAPI PowerWriteACValueIndex(HKEY key, const GUID *scheme, const GUID *subgroup, const GUID *setting, DWORD index)
{
FIXME("(%p,%s,%s,%s,0x%08lx) stub!\n", key, debugstr_guid(scheme), debugstr_guid(subgroup), debugstr_guid(setting), index);
return ERROR_SUCCESS;
}
#ifdef __REACTOS__
DWORD WINAPI PowerWriteDCValueIndex(
HKEY key,
const GUID *scheme,
const GUID *subgroup,
const GUID *setting,
DWORD index
)
{
FIXME("(%p,%s,%s,%s,0x%08lx) stub!\n", key, debugstr_guid(scheme), debugstr_guid(subgroup), debugstr_guid(setting), index);
return ERROR_SUCCESS;
}
DWORD WINAPI PowerReadACValueIndex(
HKEY key,
const GUID *scheme,
const GUID *subgroup,
const GUID *setting,
LPDWORD AcValueIndex
)
{
FIXME("(%p,%s,%s,%s,0x%08lx) stub!\n", key, debugstr_guid(scheme), debugstr_guid(subgroup), debugstr_guid(setting));
return ERROR_SUCCESS;
}
DWORD WINAPI PowerReadDCValueIndex(
HKEY key,
const GUID *scheme,
const GUID *subgroup,
const GUID *setting,
LPDWORD DcValuetIndex
)
{
FIXME("(%p,%s,%s,%s,0x%08lx) stub!\n", key, debugstr_guid(scheme), debugstr_guid(subgroup), debugstr_guid(setting));
return ERROR_SUCCESS;
}
DWORD WINAPI
PowerReadACValue(HKEY RootPowerKey, const GUID *Scheme, const GUID *SubGroup, const GUID *PowerSettings, PULONG Type, PUCHAR Buffer, DWORD *BufferSize)
{
FIXME("(%p,%s,%s,%s,%p,%p,%p) stub!\n", RootPowerKey, debugstr_guid(Scheme), debugstr_guid(SubGroup), debugstr_guid(PowerSettings), Type, Buffer, BufferSize);
return ERROR_CALL_NOT_IMPLEMENTED;
}
#endif
BOOLEAN WINAPI
ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY pGlobalPowerPolicy)
{

View file

@ -10,8 +10,22 @@
@ stdcall IsPwrHibernateAllowed ()
@ stdcall IsPwrShutdownAllowed ()
@ stdcall IsPwrSuspendAllowed ()
@ stdcall PowerDeterminePlatformRole ()
@ stdcall PowerDeterminePlatformRoleEx(long)
@ stdcall PowerEnumerate(long ptr ptr long long ptr ptr)
@ stdcall PowerGetActiveScheme (ptr ptr)
@ stdcall PowerReadDCValue (ptr ptr ptr ptr ptr ptr ptr)
@ stdcall PowerSetActiveScheme (ptr ptr)
@ stdcall PowerReadACValue(ptr ptr ptr ptr ptr ptr ptr)
@ stdcall PowerReadACValueIndex(ptr ptr ptr ptr ptr)
@ stdcall PowerReadDCValue(ptr ptr ptr ptr ptr ptr ptr)
@ stdcall PowerReadDCValueIndex(ptr ptr ptr ptr ptr)
@ stdcall PowerReadFriendlyName (ptr ptr ptr ptr ptr ptr)
@ stdcall PowerRegisterSuspendResumeNotification(long ptr ptr)
@ stdcall PowerUnregisterSuspendResumeNotification(ptr)
@ stdcall PowerSettingRegisterNotification(ptr long ptr ptr)
@ stdcall PowerSettingUnregisterNotification(ptr)
@ stdcall PowerWriteACValueIndex(ptr ptr ptr ptr long)
@ stdcall PowerWriteDCValueIndex(ptr ptr ptr ptr long)
@ stdcall ReadGlobalPwrPolicy (ptr)
@ stdcall ReadProcessorPwrScheme (long ptr)
@ stdcall ReadPwrScheme (long ptr)
@ -20,4 +34,4 @@
@ stdcall WriteGlobalPwrPolicy (ptr)
@ stdcall WriteProcessorPwrScheme (long ptr)
@ stdcall WritePwrScheme (ptr str str ptr)
@ stdcall ValidatePowerPolicies (ptr ptr)
@ stdcall ValidatePowerPolicies (ptr ptr)

View file

@ -12,87 +12,147 @@
extern "C" {
#endif
#define EnableMultiBatteryDisplay 2
#define EnablePasswordLogon 4
#define EnableSysTrayBatteryMeter 1
#define EnableWakeOnRing 8
#define EnableVideoDimDisplay 16
#ifdef __REACTOS__
#define NEWSCHEME (UINT)-1
#ifndef RC_INVOKED
typedef enum _POWER_PLATFORM_ROLE {
PlatformRoleUnspecified,
PlatformRoleDesktop,
PlatformRoleMobile,
PlatformRoleWorkstation,
PlatformRoleEnterpriseServer,
PlatformRoleSOHOServer,
PlatformRoleAppliancePC,
PlatformRolePerformanceServer,
PlatformRoleSlate,
PlatformRoleMaximum
} POWER_PLATFORM_ROLE, *PPOWER_PLATFORM_ROLE;
#endif
#define EnableSysTrayBatteryMeter 0x01
#define EnableMultiBatteryDisplay 0x02
#define EnablePasswordLogon 0x04
#define EnableWakeOnRing 0x08
#define EnableVideoDimDisplay 0x10
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 _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;
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;
typedef enum _POWER_DATA_ACCESSOR {
ACCESS_AC_POWER_SETTING_INDEX,
ACCESS_DC_POWER_SETTING_INDEX,
ACCESS_FRIENDLY_NAME,
ACCESS_DESCRIPTION,
ACCESS_POSSIBLE_POWER_SETTING,
ACCESS_POSSIBLE_POWER_SETTING_FRIENDLY_NAME,
ACCESS_POSSIBLE_POWER_SETTING_DESCRIPTION,
ACCESS_DEFAULT_AC_POWER_SETTING,
ACCESS_DEFAULT_DC_POWER_SETTING,
ACCESS_POSSIBLE_VALUE_MIN,
ACCESS_POSSIBLE_VALUE_MAX,
ACCESS_POSSIBLE_VALUE_INCREMENT,
ACCESS_POSSIBLE_VALUE_UNITS,
ACCESS_ICON_RESOURCE,
ACCESS_DEFAULT_SECURITY_DESCRIPTOR,
ACCESS_ATTRIBUTES,
ACCESS_SCHEME,
ACCESS_SUBGROUP,
ACCESS_INDIVIDUAL_SETTING,
ACCESS_ACTIVE_SCHEME,
ACCESS_CREATE_SCHEME,
ACCESS_AC_POWER_SETTING_MAX,
ACCESS_DC_POWER_SETTING_MAX,
ACCESS_AC_POWER_SETTING_MIN,
ACCESS_DC_POWER_SETTING_MIN,
ACCESS_PROFILE,
ACCESS_OVERLAY_SCHEME,
ACCESS_ACTIVE_OVERLAY_SCHEME,
} POWER_DATA_ACCESSOR, *PPOWER_DATA_ACCESSOR;
typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM);
typedef BOOLEAN (CALLBACK* PFNNTINITIATEPWRACTION)(POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN);
typedef PVOID HPOWERNOTIFY, *PHPOWERNOTIFY;
NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);
BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
BOOLEAN WINAPI DeletePwrScheme(UINT);
@ -105,6 +165,12 @@ BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
DWORD WINAPI PowerEnumerate(HKEY, const GUID *, const GUID *, POWER_DATA_ACCESSOR, ULONG, UCHAR *, DWORD *);
DWORD WINAPI PowerRegisterSuspendResumeNotification(DWORD, HANDLE, PHPOWERNOTIFY);
DWORD WINAPI PowerUnregisterSuspendResumeNotification(HPOWERNOTIFY);
DWORD WINAPI PowerSettingRegisterNotification(const GUID *, DWORD, HANDLE, PHPOWERNOTIFY);
DWORD WINAPI PowerSettingUnregisterNotification(HPOWERNOTIFY);
DWORD WINAPI PowerWriteACValueIndex(HKEY, const GUID *, const GUID *, const GUID *, DWORD);
BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);
@ -115,7 +181,8 @@ BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
BOOLEAN WINAPI ValidatePowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
BOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY);
#endif /* RC_INVOKED */
/* Power scheme */
POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void);
#ifdef __cplusplus
}