CPU ID使用C + + – 窗口

我想使用c ++获取我的电脑(Windows)的CPU ID。

我用这个代码来得到它。

它输出的信息如下所示:

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 

我无法理解这些信息是我的电脑唯一的CPU ID。

任何人都可以帮助我这个。

Solutions Collecting From Web of "CPU ID使用C + + – 窗口"

你的意思是“序列号”,“制造处理器的人”,还是“识别处理器的品牌和型号的字符串”。

序列号:

除非你有Pentium III,否则你没有与你的CPU相关的“唯一ID”。

英特尔在P3上引入了唯一的ID(序列号)指令。 但是,在隐私之后,他们在随后的CPU版本中迅速禁用了该功能。

为了记录,汇编中执行此功能的指令:

 mov eax, 3 cpuid 

处理器的序列号是eax,edx和ecx的拼接

您可以通过传递“3”作为第二个参数来实现与__cpuid函数相同的功能。 但它不会工作或返回一个序列号,除非你有一个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”。

品牌和型号(品牌字符串)

如果您想了解CPUID指令的所有细节,包括如何获得CPU的制造,型号和步进以及“品牌字符串”(例如“Intel(R)Core™i7-3770 CPU @ 3.4GHZ ….“你可以参考下面的链接英特尔手册。 向下滚动文档以查找CPUID的文档。 我懒得为你打字。

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

MSVC编译器提供的__cpuid()指令在调用cpuid指令之前将“InfoType”映射到EAX。 在该指令返回之后,EAX,EBX,ECX和EDX被复制到您传递给此函数的CPUInfo [4]数组中。

您正在查看的值是制造商标识符。 所有英特尔CPU都是一样的 – 当按照正确的顺序阅读时,它实际上只是说“GenuineIntel”:

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

AMD CPU的等价物是“AuthenticAMD”。

有关更多信息,请参阅: http : //en.wikipedia.org/wiki/CPUID#EAX.3D0 : _Get_vendor_ID – 但简而言之,在CPUID中没有特别的独特之处。

在这里检查。 你需要使用__cpuid。 那么你应该提取基于表格的信息。