处理器序列号
Processor serial number
本文关键字:处理器序列号 更新时间:2023-10-16
我需要CPU的PSN。我写的代码像
int info[4] = { -1 };
__cpuid(info, 1);
int family = info[0] & 0xf00;
int features = info[3] & 0xf000;
std::stringstream psn_id;
如何获取处理器序列号?谁能帮帮我。谢谢。
什么操作系统?如果是Windows,那么而不是CPU串行,你可以使用与文件系统关联的卷序列号唯一地标识PC,使用系统调用GetVolumeInformation()
DWORD serial;
::GetVolumeInformation(_T("C:\"), NULL, 0, &serial, NULL, NULL, NULL, 0);
然后改用serial
作为唯一标识符。
#include <stdio.h>
void getPSN(char *PSN)
{int varEAX, varEBX, varECX, varEDX;
char str[9];
//%eax=1 gives most significant 32 bits in eax
__asm__ __volatile__ ("cpuid": "=a" (varEAX), "=b" (varEBX), "=c" (varECX), "=d" (varEDX) : "a" (1));
sprintf(str, "%08X", varEAX); //i.e. XXXX-XXXX-xxxx-xxxx-xxxx-xxxx
sprintf(PSN, "%C%C%C%C-%C%C%C%C", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
//%eax=3 gives least significant 64 bits in edx and ecx [if PN is enabled]
__asm__ __volatile__ ("cpuid": "=a" (varEAX), "=b" (varEBX), "=c" (varECX), "=d" (varEDX) : "a" (3));
sprintf(str, "%08X", varEDX); //i.e. xxxx-xxxx-XXXX-XXXX-xxxx-xxxx
sprintf(PSN, "%s-%C%C%C%C-%C%C%C%C", PSN, str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
sprintf(str, "%08X", varECX); //i.e. xxxx-xxxx-xxxx-xxxx-XXXX-XXXX
sprintf(PSN, "%s-%C%C%C%C-%C%C%C%C", PSN, str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
}
int main()
{
char PSN[30]; //24 Hex digits, 5 '-' separators, and a ' '
getPSN(PSN);
printf("%sn", PSN); //compare with: lshw | grep serial:
return 0;
}
相关文章:
- 输入扑克牌的序列号(从0到35),并确定扑克牌的花色和尊严
- 如何在C++中动态生成带有序列号的文件名
- 需要忽略日期/序列号,但匹配字符串其余部分的正则表达式
- 来自本机的安卓 O 设备序列号
- USB序列号显示特殊字符
- 如何使用 /dev/xxx 路径中的C++获取 Ubuntu 中设备的 USB VID、PID 和序列号
- 如何在 Windows 上从 C++11 统计信息对象的文件序列号中查找文件名
- 获取主板的序列号
- 获取X509代码签名证书的序列号,以不受管理的C/C 签名
- 使用增强预处理器序列时,请避免扩展宏
- 如何压缩多个提升预处理器序列
- 如何同时迭代两个提升预处理器序列
- 我正在尝试检索硬盘驱动器的序列号或电池标签
- C++ - 视窗 - BIOS 序列号 - 如何获取
- 如何在C或C 中获取主板地址或处理器ID /序列号
- c程序的Linux程序,以获取非根源用户的设备序列号
- 使用 WinRT 检索设备的序列号
- rand() 即使在我的 Mac 上播种时也会给出序列号
- 获取tcp数据包的序列号
- 处理器序列号