Windows SDK: How to get the processor frequency?
Q: How to get the processor(s) frequency?
A: One simple method is by using CallNtPowerInformation.
Example
Code:
#include <NTstatus.h>
#define WIN32_NO_STATUS
#include <windows.h>
#include <Powrprof.h>
#include <iostream>
typedef struct _PROCESSOR_POWER_INFORMATION {
ULONG Number;
ULONG MaxMhz;
ULONG CurrentMhz;
ULONG MhzLimit;
ULONG MaxIdleState;
ULONG CurrentIdleState;
} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
#pragma comment(lib, "Powrprof.lib")
int main()
{
// get the number or processors
SYSTEM_INFO si = {0};
::GetSystemInfo(&si);
// allocate buffer to get info for each processor
const int size = si.dwNumberOfProcessors * sizeof(PROCESSOR_POWER_INFORMATION);
LPBYTE pBuffer = new BYTE[size];
NTSTATUS status = ::CallNtPowerInformation(ProcessorInformation, NULL, 0, pBuffer, size);
if(STATUS_SUCCESS == status)
{
// list each processor frequency
PPROCESSOR_POWER_INFORMATION ppi = (PPROCESSOR_POWER_INFORMATION)pBuffer;
for(DWORD nIndex = 0; nIndex < si.dwNumberOfProcessors; nIndex++)
{
std::cout << "Processor #" << ppi->Number << " frequency: "
<< ppi->CurrentMhz << " MHz" << std::endl;
ppi++;
}
}
else
{
std::cout << "CallNtPowerInformation failed. Status: " << status << std::endl;
}
delete []pBuffer;
system("pause");
return status;
}
Resources