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