获取Windows设备CPUID信息

CPUID

目录

简介


  1. CPUID 是一个 CPU(中央处理器)的指令,用于获取处理器的详细信息。它通常用于操作系统、虚拟机监控程序(如虚拟机管理程序或超级监视器)、调试程序和性能分析工具等,来获取关于处理器硬件特性和支持的指令集等信息。
  2. 作用:
    1. 识别处理器:CPUID 指令允许软件识别当前系统中的处理器类型和制造商。这对于操作系统在运行时动态地优化代码或选择最优路径非常重要。
    2. 检测处理器功能:CPUID 可以返回处理器支持的指令集、缓存层次结构、支持的扩展功能(如虚拟化技术)、性能计数器和其它处理器特性的信息。
    3. 配置程序:操作系统或应用程序可以根据 CPUID 指令的返回结果,来动态地选择实现适合当前处理器的最佳代码路径或调整系统设置
  3. 本人主要用于作为一个设备依据,采集这个信息做其他用途,比如结合其他信息验证设备的唯一性(此信息并不是唯一的,所以还需要结合设备的其他信息)

代码实现


基于C/C++的实现

#include <stdio.h>
#include <intrin.h> //获取CPUID的接口在这个头文件中
/// <summary>
/// 调用WIN接口获取CPUID
/// </summary>
/// <param name="info"></param>
/// <param name="id"></param>
static void get_cpuid(unsigned int info[4], unsigned int id) {
__cpuid((int*)info, id);
}
/// <summary>
/// 检查设备的CPUID和需要比较的ID是否一致
/// </summary>
/// <param name="i_cpuId"></param>
/// <returns></returns>
bool cmp_cpuid(char const* i_cpuId) {
bool result = false;
unsigned int info[4] = {0,};
char cpu_id[20] = { 0 ,};
//// Get CPU 制造商信息 比如AMD
//get_cpuid(info, 0);
//unsigned int vendor[4] = { info[1], info[3], info[2], 0 }; // EBX, EDX, ECX
//printf("CPU Vendor: %s\n", (char*)vendor);
// Get CPU ID
get_cpuid(info, 1);
snprintf(cpu_id, 19, "%08X%08X", info[3], info[0]); // EDX, EAX
if ( memcmp(cpu_id, i_cpuId, strlen(cpu_id)) == 0) {
result = true;
}
// printf("len : %d\tcpuid : %s\n",strlen(cpu_id), cpu_id);
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++版本)

posted @   peng010104  阅读(287)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示