设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4107|回复: 1
打印 上一主题 下一主题

[API] 谁知道怎么获取CPU的96位序列号??

[复制链接]
跳转到指定楼层
1#
发表于 2014-1-26 17:16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sxb2007 于 2014-1-26 17:36 编辑

谁知道怎么获取CPU的96位序列号??
今天在网上看了一下关于CPU的序列号问题。才知道有96位。
CPU序列号是一个建立在处理器内部的、唯一的、不能被修改的编号。它由96位数字组成。高32位是CPU ID,用来识别CPU类型。低64位每个处理器都不同,唯一地代表了该处理器。CPU号可以用来识别每一个处理器。为了适应这一新特征,Intel在处理中增加了两条指令(“读取”和“禁止” )和一个寄存器位(模式指定寄存器位:Model Specific Register-“MSR”)。读取指令扩展了CPUID读取指令。当执行读取指令时可以得到96位的处理器序列号。禁止指令可以禁止对处理器序列号的读取。为了配合CPU序列号的读取和禁止,设置了MSR位。当MSR位为“0”时可以读取CPU序列号;当“MSR”位为“1”时只能读取高32位(即CPU ID),而低64位全为零。

CPU号的读取  硬盘的序列号只能采用对硬盘控制器直接操作的方式进行读取,也就是说只能采用CPU的I/O指令操作硬盘控制器,对于CPU号的读取采用了在DELPHI嵌入汇编的方法读取。其读取方法如下:  MOV EAX.01H  如果返回的EDX中,低18位为1,那么这个CPU就是支持序列号的。此时EAX就是序列号的高32位。这32位对同一型号的CPU是一样的。  再执行:  MOV EAX.03H  此时的EDX:ECX就是序列号的第64位。

不知道那位牛人能搞定这个问题

实现代码:
void CWaterSaveDlg::OnBnClickedButton6()
{
    // TODO: 在此添加控件通知处理程序代码
    unsigned long s1,s2;
    unsigned char vendor_id[]="------------";//CPU提供商ID
    CString str1,str2,str3;
    // 以下为获得CPU ID的汇编语言指令
    _asm    // 得到CPU提供商信息
    {  
        xor eax,eax   // 将eax清0
            cpuid         // 获取CPUID的指令
            mov dword ptr vendor_id,ebx
            mov dword ptr vendor_id[+4],edx
            mov dword ptr vendor_id[+8],ecx  
    }
    str1.Format("CPU提供商ID:%s",vendor_id);

    _asm    // 得到CPU ID的高32位
    {
        mov eax,01h   
            xor edx,edx
            cpuid
            mov s2,eax
    }
    str2.Format("%08X-",s2);

    _asm    // 得到CPU ID的低64位
    {
        mov eax,03h
            xor ecx,ecx
            xor edx,edx
            cpuid
            mov s1,edx
            mov s2,ecx
    }
    str3.Format("%08X-%08X\n",s1,s2);
    str2="CPU序列号:" + str2 + str3;
    MessageBox(str2);
}

代码已有了,谁能翻译成VB代码啊!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-1-27 14:56:30 | 只看该作者
期盼!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 05:36 , Processed in 0.091420 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表