网上找到了相关代码,但是其中用了嵌入式汇编,只能在win32位下编译运行,根据其他网络资料进行了修改,可以在x64下编译运行。
原版资料见链接:
链接: link
修改后的代码为:
#include "stdafx.h"
#include "GetCPUId.h"
CGetCPUId::CGetCPUId()
{
}
CGetCPUId::~CGetCPUId()
{
}
std::string CGetCPUId::GetId()
{
std::string strCPUId;
unsigned long s1, s2;
char buf[32] = { 0 };
INT32 Infobuf[4];
#if defined(_WIN64)
// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
__cpuid(Infobuf, 1);
s1 = Infobuf[3];
s2 = Infobuf[0];
#else
__asm
{
mov eax, 01h
xor ecx, ecx
xor edx, edx
cpuid
mov s1, edx
mov s2, ecx
}
#endif
if (s1)
{
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s1);
strCPUId += buf;
}
if (s2)
{
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s2);
strCPUId += buf;
}
#if defined(_WIN64)
// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
__cpuid(Infobuf, 3);
s1 = Infobuf[3];
s2 = Infobuf[0];
#else
__asm
{
mov eax, 03h
xor ecx, ecx
xor edx, edx
cpuid
mov s1, edx
mov s2, ecx
}
#endif
if (s1)
{
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s1);
strCPUId += buf;
}
if (s2)
{
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s2);
strCPUId += buf;
}
return strCPUId;
}