如何获取多核、多cpu系统中指定cpu的序列号

如何获取多核、多cpu系统中指定cpu的序列号
作者:SkyJacker
(转贴请保持完整并注明作者和出处)
http://www.cnpack.org
CnPack IV  QQ Group: 130970
2007-01-23

感谢:Passion,Bahamut,早安,空气,SkyJacker...
没有Bahamut的奇思妙点,就没有这片文章。

在多cpu、多核中,会随机的获得不同的序列号.这就为我们根据cpu序列号来制作注册机带来了很大的麻烦。
Windows 2000/xp允许设置进程和线程的亲缘性。换句话说,可以控制哪个 CPU 能够运行某些线程。这称为硬亲缘性。Windows提供了设置亲缘性的函数SetProcessAffinityMask 。使用它可控制获取指定cpu的序列号。

本文分为2部分:

1、如何获得cpu的序列号。
2、如何获取指定cpu或指定cpu核的序列号。

1、如何获得cpu的序列号。

使用cpuid指令来获取。
在调用CPUID之前,EAX中存放的是功能代码。在调用CPUID之后,EAX,EBX,ECX,EDX存放的是CPU的各种特征信息。这些信息也就是我们通常所说的CPU序列号。

  mov  eax, 0  //获取制造商信息
  cpuid
   
  mov  eax,  1 //获得CPU的序列号
  cpuid   
   
以下三个函数,可供参考:

2、如何获取指定cpu或指定cpu核的序列号。

根据Windows可以设置进程和线程的亲缘性的特点,使用SetProcessAffinityMask函数,来控制哪个cpu来运行获取序列号的进程,因此也就获取了指定的cpu的序列号。为了和单cpu兼容,建议总是获取第一个cpu的序列号。

使用方法:

SetCPU(GetCurrentProcess,1); //第一个cpu的第一个cpu内核
ShowMessage(GetCnCPUID);


后记:这片文章源于CnPack 群里关于获取多核CPU的ID的问题讨论。
感谢CnPack 群里的所有成员。

BS下'早安空气',竟然说“你在你短暂的生命里花大量的时间去做这个没有价值的事情”-_-!!超级BS、BS、BS……^_^
for I:=0 to 10000000000000000000000000000 do
   BS;

附录“早安空气”语录:
'放弃吧,API不适合你'
'你在你短暂的生命里花大量的时间去做这个没有价值的事情'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值