请问:怎么获取CPU序列号?

softgis 2003-10-31 11:53:35
请问:在VC++.net,用哪一个函数可以获取计算机的唯一序列号?
...全文
1058 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
spwnihao 2003-10-31
  • 打赏
  • 举报
回复
void CCPU_SerialNumberDlg::OnButton1()
{
// TODO: Add your control notification handler code here
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
cpuid
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
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
}
}
printf("CPU id is disabled.\n");
break;
}
MyCpuID = CPUID1+CPUID2;
AfxMessageBox(MyCpuID);
}
仅仅intel的cpu有序列号,AMD的没有,所以上面代码仅适用intel
softgis 2003-10-31
  • 打赏
  • 举报
回复
getserial()?
richie_cn 2003-10-31
  • 打赏
  • 举报
回复
主要可利用利用CPUID汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID指令,只有emit机器码了)该指令
可以被如下CPU 识别

Intel 486 以 上 的CPU,
Cyrix M1 以 上 的CPU,
AMD Am486 以 上 的CPU

(1) 取CPU OEM 字 符 串, 判 断CPU 厂商

先 让EAX=0, 再 调 用CPUID

Inel 的CPU 将 返 回:

EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 将 连 成"GenuineIntel", 真 正 的Intel。

Cyrix 的CPU 将 返 回:
EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 来 代 替"。

AMD 的CPU 将 返 回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可 信 的AMD。

在Windows98 中, 用 右 键 单 击" 我 的 电 脑", 选 择" 属 性- 常 规"
在 计 算 机描 述 处 就 可 看 见CPU OEM 字 符 串。

(2)CPU 到 底 是 几86, 是 否 支 持MMX

先 让EAX=1, 再 调 用CPUID

EAX 的 8 到11 位 就 表 明 是 几86

3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX 的 第0 位: 有 无FPU

EDX 的 第23 位:CPU 是 否 支 持IA MMX, 很 重 要 啊 ! 如 果 你 想 用
那57 条 新 增 的 指 令, 先 检查 这 一 位 吧, 否 则 就 等 着 看Windows
的" 该 程 序 执行 了 非 法 指 令, 将 被 关 闭" 吧。

(3) 专 门 检 测 是 否P6 架 构

先 让EAX=1, 再 调 用CPUID

如 果AL=1, 就 是Pentium Pro 或Pentium II

(4) 专 门 检 测AMD 的CPU 信 息

先 让EAX=80000001H, 再 调 用CPUID

如 果EAX=51H, 是AMD K5

如 果EAX=66H, 是K6

K7 是 什 么 标 志, 只 有 等 大 家拿 到K7 的 芯 再 说 了。

EDX 第0 位: 是 否 有FPU( 多 余 的 !谁 用 过 没FPU 的K5,K6?)

EDX 第23 位,CPU 是 否 支 持MMX,
michaelwan 2003-10-31
  • 打赏
  • 举报
回复
其实你要是知道CPUID命令的话, 就很简单了.
panzhaoping 2003-10-31
  • 打赏
  • 举报
回复
汇编功底很强,佩服
天外怪魔 2003-10-31
  • 打赏
  • 举报
回复
对 spwnihao(面鱼)佩服的五体投地!!
高手啊!能谈谈你学习的经验嘛?
我以前看到的代码都是要ring层特权什么的。
而且你处理CString, char[]的转换非常清晰。能告知你的联系方式吗?谢谢。
zachary7833 2003-10-31
  • 打赏
  • 举报
回复
优先级调到ring0
lzzqqq 2003-10-31
  • 打赏
  • 举报
回复
对 spwnihao(面鱼)佩服的五体投地!!
代码贴到程序中就能运行!!
这才是真正的程序员!!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧