<转>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
作者:張東升 技術交流群:69148232
本博客注有“轉”字樣的為轉載文章,其余為本人原創文章,轉載請務必注明出處或保存此段。c++/lua/windows逆向交流群:69148232
總結
以上是生活随笔為你收集整理的<转>VC之获取CPU序列号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 格尔底寺活佛是谁景区简介
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?