zoukankan      html  css  js  c++  java
  • <转>VC之获取CPU序列号

    原谅转自:http://blog.sina.com.cn/s/blog_612b382d0100efe1.html

    首先说明,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;
    }

    以上代码在Windows XP sp2 +intel P4上测试通过,能否在AMD的CPU上测试通过有待验证。

    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    鱼眼相机畸变矫正资料
    异常值检测算法三:3sigma模型
    五:瑞芯微RV1109
    四:海思Hi3516CV500/Hi3516DV300
    三:瑞芯微OK3399-C开发板
    二:飞凌嵌入式FCU1201
    一:芯片概述
    六:大数据架构
    五:大数据架构回顾-LambdaPlus架构
    四:大数据架构回顾-IOTA架构
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/3068083.html
Copyright © 2011-2022 走看看