急:如何通过API函数得到CPU的序列号? 不知对于现在的CPU是否可以通过API函数得到CPU的序列号?如果不可以,则用什么东西可以唯一标识某个机器(硬盘序列号不可以,因为硬盘序列号能够通过软件修改)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以取得ID号。这里有一个示例程序://取得IntelCPU的ID号:void IntelCPUIDDlg::OnButtonCPUID(){ unsigned long s1,s2; unsigned char vendor_id[]="------------------"; CString str1,str2,str3; __asm{ xor eax,eax cpuid mov dword ptr vendor_id,ebx mov dword ptr vendor_id[+4],edx mov dword ptr vendor_id[+8],ecx} str1.Format("%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+=str3;m_editVendor.SetWindowText(str1);m_editCPUID.SetWindowText(str2);} CPU ID号是不变的,除非换CPU,因此应该可以唯一确定一台机器了。 只知道在Intel的CPU有效,不知道AMD的cpu是否支持cpuid这个命令。UP 还有一些资料:Intel CPU序列号是一个建立在处理器内部的、唯一的、不能被修改的编号。它由96位数字组成。高32位是CPU ID,用来识别CPU类型,同种类型的CPU都一样;低64位每个处理器都不同,唯一地代表了该处理器。就像身份证编码一样,可以用来识别每一个处理器。位了适应这一新特性,Intel在处理器中增加了两条指令(读取和禁止)和一个寄存器位(模式指定寄存器位:Model Specific Register-"MSR")。读取指令扩展了CPUID读取指令。当执行读取指令地时候,可以得到96位地处理器序列号。禁止指令怾禁止对处理器序列号的读取。位了配合CPU序列号的读取和禁止,设置了MSR位。当MSR位为“0”时可以读取CPU序列号;当为“1”的时候,只能读取高32为(即CPU ID),而低64位全部为零。 对于Intel奔腾III处理器,当其序列号未被禁止时,可以读取它,对于Intel系列其他CPU,只能读出CPU ID的高32位,即表明CPU的类型。 AMD的也支持,不过有点不同,可以查一下 vs2008 字体 关于BHO,大家进来看看! 关于dllimport的问题! 两个工具栏如何放在同一行上 关于Updatewindow的疑惑 问一个很菜的问题 请问哪里有工具栏图标可供下载? 请问:是GetRecordCount函数有问题,还是我有问题?? 求经验(100分) 送分!急!!!有一功能不知,请见多识广者帮忙! com操作 求救,在ListCtrl排序问题
这里有一个示例程序://取得IntelCPU的ID号:void IntelCPUIDDlg::OnButtonCPUID()
{
unsigned long s1,s2;
unsigned char vendor_id[]="------------------";
CString str1,str2,str3;
__asm
{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
str1.Format("%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+=str3;
m_editVendor.SetWindowText(str1);
m_editCPUID.SetWindowText(str2);
}
UP
对于Intel奔腾III处理器,当其序列号未被禁止时,可以读取它,对于Intel系列其他CPU,只能读出CPU ID的高32位,即表明CPU的类型。