2014-02-08 3 views
3

Я хочу получить идентификатор CPU моего компьютера (windows) с помощью C++.Идентификатор CPU с использованием C++ - windows

Я использовал this code, чтобы получить его.

Он выводит информацию о что-то вроде:

For InfoType 0 
CPUInfo[0] = 0x5 
CPUInfo[1] = 0x756e6547 
CPUInfo[2] = 0x6c65746e 
CPUInfo[3] = 0x49656e69 

For InfoType 1 
CPUInfo[0] = 0xf31 
CPUInfo[1] = 0x20800 
CPUInfo[2] = 0x41d 
CPUInfo[3] = 0xbfebfbff 

For InfoType 2 
CPUInfo[0] = 0x605b5001 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x7c7040 

For InfoType 3 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 4 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 5 
CPUInfo[0] = 0x40 
CPUInfo[1] = 0x40 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 80000000 
CPUInfo[0] = 0x80000008 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 80000001 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 80000002 
CPUInfo[0] = 0x20202020 
CPUInfo[1] = 0x20202020 
CPUInfo[2] = 0x20202020 
CPUInfo[3] = 0x20202020 

For InfoType 80000003 
CPUInfo[0] = 0x47202020 
CPUInfo[1] = 0x69756e65 
CPUInfo[2] = 0x4920656e 
CPUInfo[3] = 0x6c65746e 

For InfoType 80000004 
CPUInfo[0] = 0x20295228 
CPUInfo[1] = 0x20555043 
CPUInfo[2] = 0x30382e32 
CPUInfo[3] = 0x7a4847 

For InfoType 80000005 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 80000006 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x4008040 
CPUInfo[3] = 0x0 

For InfoType 80000007 
CPUInfo[0] = 0x0 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

For InfoType 80000008 
CPUInfo[0] = 0x2028 
CPUInfo[1] = 0x0 
CPUInfo[2] = 0x0 
CPUInfo[3] = 0x0 

Я не мог понять, среди тех информации, которая является уникальной Id процессора моего компьютера.

Может ли кто-нибудь любезно помочь мне в этом.

ответ

4

Вы имеете в виду «серийный номер», «кто сделал процессор», или «строка, которая идентифицирует марку и модель процессора».

Серийный номер:

Если у вас есть Pentium III, не имеют «уникальный идентификатор», связанный с процессором.

Intel представила уникальный идентификатор (серийный номер) с P3. Но после огромного шума по поводу конфиденциальности они быстро отключили эту функцию в последующих выпусках ЦП.

Для записи, команда, которая выполняется эту функцию в сборке:

mov eax, 3 
cpuid 

процессор серийный номер был конкатенация EAX, EDX и ECX вместе

Вы можете достичь того же с __cpuid, передав «3» в качестве второго параметра. Но это не сработает или не вернет серийный номер, если у вас нет P3.

Производитель (который сделал процессор)

int regs[4] = {0}; 
char vendor[13]; 
__cpuid(regs, 0);    // mov eax,0; cpuid 
memcpy(vendor, &regs[1], 4); // copy EBX 
memcpy(vendor+4, &regs[2], 4); // copy ECX 
memcpy(vendor+8, &regs[3], 4); // copy EDX 
vendor[12] = '\0'; 
print("My CPU is a %s\n", vendor); 

В вашем случае, это должно напечатать "GenuineIntel".

Марка и модель (BRAND String)

Если вы хотите, чтобы все детали инструкции CPUID, в том числе о том, как получить марку, модель и степпинг вашего процессора, а также «Марка String ", например" Intel (R) Core i7-3770 CPU @ 3.4GHZ .... ", вы можете обратиться к руководству Intel по ссылке ниже. Прокрутите документ вниз, чтобы найти документы для CPUID. Я слишком ленив, чтобы напечатать его для вас.

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2a-manual.pdf

__cpuid() инструкция предусмотрено MSVC карт компилятор "InfoType" в EAX перед вызовом инструкции CPUID. После того, как эта команда вернется, EAX, EBX, ECX и EDX будут скопированы в массив CPUInfo [4], который вы передали в эту функцию.

+0

спасибо. могу ли я использовать InfoType 0 из __cpuid как уникальный идентификатор процессора – user1838343

+0

, поскольку он дает «Идентификационную строку CPU» – user1838343

+0

@duskwuff, есть ли способ генерировать UID из этих строк? может быть, используя весь InfoType? – user1838343

1

Проверить here. Вам нужно использовать __cpuid. Затем вы должны извлечь информацию на основе таблицы.

+0

спасибо. на самом деле, это мой вопрос. Я хочу знать, уникальный идентификатор моего CPU. как я понял из этих связанных страниц, InfoType 0 является уникальным идентификатором ЦП. однако, я хочу подтвердить. – user1838343

+0

Это то, что они утверждают, поэтому я предполагаю, что это то, что вы ищете. Если, конечно, веб-страница Microsoft неверна, что маловероятно! –

2

Значение, которое вы ищете, является идентификатором производителя.Это то же самое для всех процессоров Intel - это буквально говорит «GenuineIntel» при чтении в правильном порядке:

CPUInfo[1] = 0x756e6547 = 'Genu' 
CPUInfo[3] = 0x49656e69 = 'ineI' 
CPUInfo[2] = 0x6c65746e = 'ntel' 

Эквивалент для процессоров AMD является «AuthenticAMD».

Дополнительную информацию см. По адресу: http://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID - но, короче говоря, в CPUID нет ничего особо уникального.

Смежные вопросы