diff --git a/reactos/dll/cpl/cpl.rbuild b/reactos/dll/cpl/cpl.rbuild
index a02e9c6a5ab..90af08b7f8b 100644
--- a/reactos/dll/cpl/cpl.rbuild
+++ b/reactos/dll/cpl/cpl.rbuild
@@ -25,6 +25,9 @@
+
+
+
diff --git a/reactos/dll/cpl/sysdm/general.c b/reactos/dll/cpl/sysdm/general.c
index bbb3b25f120..7e2eb8632a3 100644
--- a/reactos/dll/cpl/sysdm/general.c
+++ b/reactos/dll/cpl/sysdm/general.c
@@ -205,24 +205,33 @@ SetProcSpeed(HWND hwnd,
{
TCHAR szBuf[64];
- DWORD dwBuf;
DWORD BufSize = sizeof(DWORD);
DWORD Type = REG_SZ;
+ PROCESSOR_POWER_INFORMATION ppi;
- if (RegQueryValueEx(hKey,
+ ZeroMemory(&ppi,
+ sizeof(ppi));
+
+ if ((CallNtPowerInformation(ProcessorInformation,
+ NULL,
+ 0,
+ (PVOID)&ppi,
+ sizeof(ppi)) == STATUS_SUCCESS &&
+ ppi.CurrentMhz != 0) ||
+ RegQueryValueEx(hKey,
Value,
NULL,
&Type,
- (PBYTE)&dwBuf,
+ (PBYTE)&ppi.CurrentMhz,
&BufSize) == ERROR_SUCCESS)
{
- if (dwBuf < 1000)
+ if (ppi.CurrentMhz < 1000)
{
- _stprintf(szBuf, _T("%.2f MHz"), dwBuf);
+ _stprintf(szBuf, _T("%lu MHz"), ppi.CurrentMhz);
}
else
{
- double flt = dwBuf / 1000.0;
+ double flt = ppi.CurrentMhz / 1000.0;
_stprintf(szBuf, _T("%.2f GHz"), flt);
}
diff --git a/reactos/dll/cpl/sysdm/precomp.h b/reactos/dll/cpl/sysdm/precomp.h
index ff8a12a04f9..13ca9c2c26e 100644
--- a/reactos/dll/cpl/sysdm/precomp.h
+++ b/reactos/dll/cpl/sysdm/precomp.h
@@ -1,8 +1,12 @@
#ifndef __CPL_PRECOMP_H
#define __CPL_PRECOMP_H
+#include
+#define WIN32_NO_STATUS
+#include
#include
#include
+#include
#include
#include
#include
diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h
index f0810ca1516..6bc1a7fcab0 100644
--- a/reactos/include/psdk/winnt.h
+++ b/reactos/include/psdk/winnt.h
@@ -3667,6 +3667,17 @@ typedef struct _SYSTEM_BATTERY_STATE {
ULONG DefaultAlert2;
} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
+#ifndef __NTDDK_H /* HACK!!! ntddk.h shouldn't include winnt.h! */
+typedef struct _PROCESSOR_POWER_INFORMATION {
+ ULONG Number;
+ ULONG MaxMhz;
+ ULONG CurrentMhz;
+ ULONG MhzLimit;
+ ULONG MaxIdleState;
+ ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
+#endif
+
typedef DWORD EXECUTION_STATE;
typedef enum _POWER_INFORMATION_LEVEL {
SystemPowerPolicyAc,