日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

<转>VC之获取CPU序列号

發布時間:2024/8/24 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 <转>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序列号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。