vc获取CPU ID

最近要用CPU序列号,MAC地址和硬盘ID来为软件加密,在网上找了下高手写的,有很多版本,但很多不能正常运行或者达不到预期效果,这里整理下自

己采用并测试通过的

CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的

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://blog.163.com/baansss0624@126/blog/static/55578661200972603848259/

你可能感兴趣的:(c/c++)