get cpuid

 Mon, 04-Sep-2023 22:51:10

wmic cpu get processorid

 

std::string 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, 01hxor ecx, ecxxor edx, edxcpuidmov s1, edxmov 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, 03hxor ecx, ecxxor edx, edxcpuidmov s1, edxmov 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;
}