博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<转>VC之获取CPU序列号
阅读量:6880 次
发布时间:2019-06-26

本文共 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/

你可能感兴趣的文章
占据ChinaJoy半壁江山的VR体验,是虚火还是真火?
查看>>
进程线程
查看>>
生活感言
查看>>
什么是PDM系统?
查看>>
pptp 配置文件简析
查看>>
自己对DNS的理解
查看>>
六个免费的虚拟主机管理系统
查看>>
Linux中的日志分析及管理
查看>>
选择语句
查看>>
利用Acunetix WVS发动批量网站漏洞评估
查看>>
两种input组件:button和submit的区别
查看>>
Minilogon后Ctrl+Alt+Del无法使用的解决方案
查看>>
NAT方式下的TCP负载均衡
查看>>
为centos添加第三方源
查看>>
mysql单实例安装
查看>>
Centos6.2下fetion的安装
查看>>
使用Nero 8刻录CentOS启动盘
查看>>
主流压缩软件压缩率实测(图文详解,揭秘你不知道的)
查看>>
红楼梦的作者是谁
查看>>
Windows server 2003 WINS 全攻略
查看>>