x264/common/cpu.c

本文介绍了一种在Visual C++中获取CPU序列号的方法。通过使用CPUID指令,可以读取到CPU的供应商信息和序列号等数据。这种方法有助于生成更安全的软件序列号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

转载:

VC之获取CPU序列号
首先说明,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);
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值