0

CPUのPSNが必要です。私は次のようなコードを書きます

int info[4] = { -1 };
__cpuid(info, 1);
int family = info[0] & 0xf00;
int features = info[3] & 0xf000;

std::stringstream psn_id;

プロセッサーのシリアル番号を取得するにはどうすればよいですか? 誰でも私を助けてください。ありがとうございました。

4

2 に答える 2

0

何のOS?Windows の場合、CPU シリアルの代わりに、システム コールGetVolumeInformation()を使用して、ファイル システムに関連付けられたボリューム シリアル番号を使用して PC を一意に識別できます。

DWORD serial;
::GetVolumeInformation(_T("C:\\"), NULL, 0, &serial, NULL, NULL, NULL, 0);

次にserial、代わりに一意の識別子として使用します。

于 2012-08-09T16:09:54.523 に答える
-1
#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 '\0'
    getPSN(PSN);
    printf("%s\n", PSN); //compare with: lshw | grep serial:
    return 0;
}
于 2013-10-24T08:04:23.497 に答える