我想使用c ++获取计算机(windows)的CPU Id。
我用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
我无法理解这些信息是我计算机唯一的CPU ID。
任何人都可以帮助我。
答案 0 :(得分:4)
您的意思是"序列号","谁制作了处理器",或者#34;字符串,用于标识处理器的品牌和型号"。
序列号:
除非您拥有Pentium III,否则您没有"唯一ID"与您的CPU相关联。
英特尔在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, ®s[1], 4); // copy EBX
memcpy(vendor+4, ®s[3], 4); // copy EDX
memcpy(vendor+8, ®s[2], 4); // copy ECX
vendor[12] = '\0';
print("My CPU is a %s\n", vendor);
在您的情况下,这应该打印" GenuineIntel"。
制作和模型(品牌字符串)
如果您需要CPUID指令的所有详细信息,包括如何获取CPU的品牌,型号和步进,以及"品牌字符串"例如"英特尔(R)Core(TM)i7-3770 CPU @ 3.4GHZ ...."您可以通过以下链接参考英特尔手册。向下滚动文档以查找CPUID的文档。我懒得为你打字。
MSVC编译器提供的__cpuid()指令映射" InfoType"在调用cpuid指令之前调用EAX。在该指令返回后,EAX,EBX,ECX和EDX被复制到您传递给该函数的CPUInfo [4]数组中。
答案 1 :(得分:2)
您正在查看的值是制造商标识符。对于所有英特尔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中没有什么特别独特的。
答案 2 :(得分:1)
检查here。你需要使用__cpuid。然后你应该根据表格提取信息。