本文共 999 字,大约阅读时间需要 3 分钟。
原谅转自:
首先说明,CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的,一帆风没有详细考证。
CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。好了,转入正题,闷头发源码:CString CGetCpuIDDlg::GetCPUID(){ CString CPUID; unsigned long s1,s2; unsigned char vendor_id[]="------------"; char sel; sel='1'; CString VernderID; CString MyCpuID,CPUID1,CPUID2; switch(sel) { case '1': __asm{ xor eax,eax //eax=0:取Vendor信息 cpuid //取cpu id指令,可在Ring3级使用 mov dword ptr vendor_id,ebx mov dword ptr vendor_id[+4],edx mov dword ptr vendor_id[+8],ecx } VernderID.Format("%s-",vendor_id); __asm{ mov eax,01h //eax=1:取CPU序列号 xor edx,edx cpuid mov s1,edx mov s2,eax } CPUID1.Format("%08X%08X",s1,s2); __asm{ mov eax,03h xor ecx,ecx xor edx,edx cpuid mov s1,edx mov s2,ecx } CPUID2.Format("%08X%08X",s1,s2); break; case '2': { __asm{ mov ecx,119h rdmsr or eax,00200000h wrmsr } } AfxMessageBox("CPU id is disabled."); break; } MyCpuID = CPUID1+CPUID2; CPUID = MyCpuID; return CPUID;}转载地址:http://rxgfl.baihongyu.com/