Sunday 16 October 2011

Retrieve CPU brand by C and Win32 API


In order to retrieve CPU brand, information in red square on above photo, please use following code:

string GetCPUBrand() {
 char pszCPUBrand[49];
 memset(pszCPUBrand, ' ', 49);

 _asm {
  mov eax, 80000002h
  cpuid

  // getting information from EAX

  mov pszCPUBrand[0], al
  mov pszCPUBrand[1], ah
  ror eax, 16
  mov pszCPUBrand[2], al
  mov pszCPUBrand[3], ah

  // getting information from EBX

  mov pszCPUBrand[4], bl
  mov pszCPUBrand[5], bh
  ror ebx, 16
  mov pszCPUBrand[6], bl
  mov pszCPUBrand[7], bh

  // getting information from ECX

  mov pszCPUBrand[8], cl
  mov pszCPUBrand[9], ch
  ror ecx, 16
  mov pszCPUBrand[10], cl
  mov pszCPUBrand[11], ch

  // getting information from EDX

  mov pszCPUBrand[12], dl
  mov pszCPUBrand[13], dh
  ror edx, 16
  mov pszCPUBrand[14], dl
  mov pszCPUBrand[15], dh

  mov eax, 80000003h
  cpuid

  // getting information from EAX

  mov pszCPUBrand[16], al
  mov pszCPUBrand[17], ah
  ror eax, 16
  mov pszCPUBrand[18], al
  mov pszCPUBrand[19], ah

  // getting information from EBX

  mov pszCPUBrand[20], bl
  mov pszCPUBrand[21], bh
  ror ebx, 16
  mov pszCPUBrand[22], bl
  mov pszCPUBrand[23], bh

  // getting information from ECX

  mov pszCPUBrand[24], cl
  mov pszCPUBrand[25], ch
  ror ecx, 16
  mov pszCPUBrand[26], cl
  mov pszCPUBrand[27], ch

  // getting information from EDX

  mov pszCPUBrand[28], dl
  mov pszCPUBrand[29], dh
  ror edx, 16
  mov pszCPUBrand[30], dl
  mov pszCPUBrand[31], dh

  mov eax, 80000004h
  cpuid

  // getting information from EAX

  mov pszCPUBrand[32], al
  mov pszCPUBrand[33], ah
  ror eax, 16
  mov pszCPUBrand[34], al
  mov pszCPUBrand[35], ah

  // getting information from EBX

  mov pszCPUBrand[36], bl
  mov pszCPUBrand[37], bh
  ror ebx, 16
  mov pszCPUBrand[38], bl
  mov pszCPUBrand[39], bh

  // getting information from ECX

  mov pszCPUBrand[40], cl
  mov pszCPUBrand[41], ch
  ror ecx, 16
  mov pszCPUBrand[42], cl
  mov pszCPUBrand[43], ch

  // getting information from EDX

  mov pszCPUBrand[44], dl
  mov pszCPUBrand[45], dh
  ror edx, 16
  mov pszCPUBrand[46], dl
  mov pszCPUBrand[47], dh

 }

 pszCPUBrand[48] = '\0';

 return string(pszCPUBrand);
}

No comments:

Post a Comment