Board logo

Subject: Cnpack组件包里面的取CPU序列号函数的问题 [Print This Page]

Author: mestars    Time: 2008-6-27 10:59     Subject: Cnpack组件包里面的取CPU序列号函数的问题

有没有人用过Cnpack组件包里面的取CPU序列号的函数,我在XP+D7下编译后使用正常,但是在Vista+D2007下编译后运行取不出CPU正确的序列号,取出的都是0000-0000-0000-0000-0000-0000
Author: f00l    Time: 2008-6-30 15:14

应该是Vista的关系吧0.0
权限问题?
Author: mestars    Time: 2008-7-7 09:14

和Vista的权限好像没有关系,因为相同的代码我在XP+D7下编译后的程序,在Vista下运行时可以取到的.有条件的可以测一下,Vista+D7是否有问题.

另外Vista+D2007下我也跟踪了,没有发现异常
Author: Passion    Time: 2008-7-7 13:49

跟进ASM里头看看,看看cpuid这个指令执行完后取出内容来了没?
如果有内容,而最后全0,说明是俺们代码的问题。
Author: tt031026    Time: 2008-7-18 15:12

CPU序列号是一个建立在处理器内部的、唯一的、不能被修改的编号。它由96位数字组成。高32位是CPU ID,用来识别CPU类型。低64位每个处理器都不同,唯一地代表了该处理器。CPU号可以用来识别每一个处理器。为了适应这一新特征,Intel在处理中增加了两条指令(“读取”和“禁止”)和一个寄存器位(模式指定寄存器位:Model Specific Register一“MSR”)。读取指令扩展了CPUID读取指令。当执行读取指令时可以得到96位的处理器序列号。禁止指令可以禁止对处理器序列号的读取。为了配合CPU序列号的读取和禁止,设置了MSR位。当MSR位为“0”时可以读取CPU序列号;当MSR为“1”时只能读取高32位(即CPU ID)而低64位全为零。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0