CPU 型号信息(如 12th Gen Intel(R) Core(TM) i5-12400)的唯一真实来源是 CPUID 指令,操作系统在启动时读取 CPUID 并将结果缓存到系统结构中,之后所有查询都从这份缓存中读取。
Windows:注册表路径
CPU 信息存放在:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
关键字段:
| 键名 | 示例值 |
|---|---|
ProcessorNameString | 12th Gen Intel(R) Core(TM) i5-12400 |
VendorIdentifier | GenuineIntel |
~MHz | 2500 |
命令行查询:
reg query "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0"
wmic 查询(更简洁):
wmic cpu get name
导出整个 CentralProcessor 分支:
reg export "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor" cpu.reg
regedit 图形界面: 导航到上述路径 → 右键 → 导出。
Python 读取注册表
import winreg
key_path = r"HARDWARE\DESCRIPTION\System\CentralProcessor\0"
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path)
cpu_name, _ = winreg.QueryValueEx(key, "ProcessorNameString")
vendor, _ = winreg.QueryValueEx(key, "VendorIdentifier")
mhz, _ = winreg.QueryValueEx(key, "~MHz")
print(cpu_name) # 12th Gen Intel(R) Core(TM) i5-12400
Linux:/proc/cpuinfo
cat /proc/cpuinfo | grep "model name" | head -1
# model name : 12th Gen Intel(R) Core(TM) i5-12400
lscpu | grep "Model name"
# Model name: 12th Gen Intel(R) Core(TM) i5-12400
/proc/cpuinfo 是内核动态生成的虚拟文件,每次读取都从内核的 cpu_info 结构体生成,本质是 CPUID 的解析结果。
Python 读取:
with open('/proc/cpuinfo') as f:
for line in f:
if line.startswith('model name'):
print(line.split(':')[1].strip())
break
注意:注册表信息可以被伪装
注册表里的 CPU 信息不是”唯一可信来源”:
- 虚拟机(VMware/VirtualBox/Hyper-V)可以在配置中修改 CPUID 返回值
- 驱动层可以拦截并修改 WMI 查询结果
因此注册表/WMI 读取的 CPU 型号可能与物理 CPU 不一致,这是虚拟化平台的常见行为。
各方法对比
| 方法 | 平台 | 特点 |
|---|---|---|
wmic cpu get name | Windows | 最简单 |
reg query | Windows | 可脚本化 |
winreg (Python) | Windows | 程序读取 |
lscpu | Linux | 格式化输出 |
/proc/cpuinfo | Linux | 原始详情 |
