从SMBIOS中获取硬件信息

      回家过国庆,闲来无事。今天就写点之前做的一些东西吧。我们需要获取什么硬件信息,这个主要和你要获取的设备信息的详细程度有关。对于像系统的设备管理器,如果只是想得到想设备管理器的信息,你完全可以参考ddk,或者从网上早点过于SetDi×××这里函数。使用这类函数,可以让你做出来的东西和设备管理器一样。代码部分,在这后的下载中提供。对于硬件相关信息,有很多方法。就说说cpu名称的获取吧。这个至少有5中方法,最简单的就是通过查询注册表了,其他的方法有使用CPUID指令,WMI(这种方法也很简单),还有通过smbios,还有你可以通过dxdiag接口(这个需要在安装了dx9之上的系统上),当然除了这几种方法外肯定还有其他的方式来获取。今天就说说smbios吧。

     smbios,这个是一个规范。如果用过everest的人一定有看到过dmi信息。这个就是通过smbios获取到的。我最感兴趣的是,通过这个可以知道你的内存型号,是ddr,ddr3等类型。通过这个可以获取到cpu,bios,board,slot等信息,获取的种类很多,具体的要看smbios规范了。机器在启动之初,设备会将相关写入dmi数据库中。那些个oem操作系统貌似就是通过修改这个进行的。

    其实ms的wmi中获取相关信息很大一部分是通过获取这部分数据了。就说传感器信息吧,原本以为是可以通过这种方式获取的到的,smbiso协议中是有提到的,ms,也原来以为硬件厂家会往其中写入数据,但是协议总归是协议,很多都没有按规定将传感器信息写到dmi中。所以你如果想通wmi方式获取cpu温度等信息,那你就白搭了。这个需要通过驱动进行获取cpu温度等信息。

   有 点扯远了,smbios,会在0xf000到0xffff中写入smbios头,这个头里面有具体的dmi信息位置,表的大小,个数。当然这些说的地址都是物理地址。在2k系统和一部分xp中,我们是可以通过ZwOpenSection将物理内存进行映射读取信息的。但是遗憾的是在2k3中已经不行了,返回给是access_denied。ms主要是出于安全上考虑进行的。不过ms将这部分信息写进了注册表中(controlset/services/mssmbios/data),但是我们最好还是不要直接读这部分信息,因为很简单,不知道ms之后的系统会将这部分信息写道那个注册表项中。ms在屏蔽了直接读取物理内存之后,给我们提供了使用wmi方式获取dmi表信息,在xp之后系统还可以进行。在2k3上,提供了相关api进行获取,这个api还真是忘记了。

    我们得到了dmi表信息块之后,后面的事情就简单了。只要按照协议进行解析就行了在每个类开始是一个tpye,这个使用来表示是bios信息,还cpu信息等。这里简单的说了说smbios。这篇文章完全是靠仅存的记忆,所以写的不完全,也难免有错误。具体的还是看smbios规范,还是这边标准吗。可以在这里下载smbios规范。写的不足的地方,敬请指出。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值