https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3368adc547f4595c0b23a…
commit 3368adc547f4595c0b23a8f55077404ba5954f95
Author: Justin Miller <justin.miller(a)reactos.org>
AuthorDate: Tue Feb 11 17:33:45 2025 -0800
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Feb 11 17:33:45 2025 -0800
[POWRPROF] Sync Powrprof to WINE-10.0 - Add some functions too (#7681)
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito(a)reactos.org>
"Sync" to WINE-10.0, plus add some functions we need. Required for various
apps going forward.
---
dll/win32/powrprof/CMakeLists.txt | 5 +
dll/win32/powrprof/powrprof.c | 111 +++++++++++++++++++
dll/win32/powrprof/powrprof.spec | 18 ++-
sdk/include/psdk/powrprof.h | 223 +++++++++++++++++++++++++-------------
4 files changed, 277 insertions(+), 80 deletions(-)
diff --git a/dll/win32/powrprof/CMakeLists.txt b/dll/win32/powrprof/CMakeLists.txt
index cf6a2199a9b..a2b3ca0c056 100644
--- a/dll/win32/powrprof/CMakeLists.txt
+++ b/dll/win32/powrprof/CMakeLists.txt
@@ -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)
diff --git a/dll/win32/powrprof/powrprof.c b/dll/win32/powrprof/powrprof.c
index 7172bb43646..fa19aec0868 100644
--- a/dll/win32/powrprof/powrprof.c
+++ b/dll/win32/powrprof/powrprof.c
@@ -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)
{
diff --git a/dll/win32/powrprof/powrprof.spec b/dll/win32/powrprof/powrprof.spec
index 43a9723f793..37f2b02c84d 100644
--- a/dll/win32/powrprof/powrprof.spec
+++ b/dll/win32/powrprof/powrprof.spec
@@ -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)
\ No newline at end of file
+@ stdcall ValidatePowerPolicies (ptr ptr)
diff --git a/sdk/include/psdk/powrprof.h b/sdk/include/psdk/powrprof.h
index 50e54cd6ad9..4c5f0c69f3c 100644
--- a/sdk/include/psdk/powrprof.h
+++ b/sdk/include/psdk/powrprof.h
@@ -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 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 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 _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
}