CPUID
目录
简介
- CPUID 是一个 CPU(中央处理器)的指令,用于获取处理器的详细信息。它通常用于操作系统、虚拟机监控程序(如虚拟机管理程序或超级监视器)、调试程序和性能分析工具等,来获取关于处理器硬件特性和支持的指令集等信息。
- 作用:
- 识别处理器:CPUID 指令允许软件识别当前系统中的处理器类型和制造商。这对于操作系统在运行时动态地优化代码或选择最优路径非常重要。
- 检测处理器功能:CPUID 可以返回处理器支持的指令集、缓存层次结构、支持的扩展功能(如虚拟化技术)、性能计数器和其它处理器特性的信息。
- 配置程序:操作系统或应用程序可以根据 CPUID 指令的返回结果,来动态地选择实现适合当前处理器的最佳代码路径或调整系统设置
- 本人主要用于作为一个设备依据,采集这个信息做其他用途,比如结合其他信息验证设备的唯一性(此信息并不是唯一的,所以还需要结合设备的其他信息)
代码实现
基于C/C++的实现
| #include <stdio.h> |
| #include <intrin.h> |
| |
| |
| |
| |
| |
| |
| static void get_cpuid(unsigned int info[4], unsigned int id) { |
| __cpuid((int*)info, id); |
| } |
| |
| |
| |
| |
| |
| |
| bool cmp_cpuid(char const* i_cpuId) { |
| bool result = false; |
| unsigned int info[4] = {0,}; |
| char cpu_id[20] = { 0 ,}; |
| |
| |
| |
| |
| |
| |
| get_cpuid(info, 1); |
| snprintf(cpu_id, 19, "%08X%08X", info[3], info[0]); |
| if ( memcmp(cpu_id, i_cpuId, strlen(cpu_id)) == 0) { |
| result = true; |
| } |
| |
| return result; |
| } |
| |
基于C#的代码实现
| using System; |
| using System.Management; |
| public void GetCpuInfos() |
| { |
| ManagementClass mc = new ManagementClass("win32_processor"); |
| ManagementObjectCollection moc = mc.GetInstances(); |
| |
| foreach (ManagementObject mo in moc) |
| { |
| string cpuId = mo.Properties["processorID"].Value.ToString(); |
| Console.WriteLine("CPUID :" + cpuId); |
| } |
| } |
基于Python的代码实现
需要源代码请私信我获取(基于V2022的C++版本)