快乐小胖兔的一窟

用自己的方式过一生 --- zyq654321

VC知识库BLOG 首页 新随笔 联系 聚合 登录
  23 Posts :: 0 Stories :: 95 Comments :: 2 Trackbacks

公告

Welcome you

留言簿(4)

随笔分类

随笔档案

文章档案

相册

网站联接

BLOG友情链接

搜索

最新评论

阅读排行榜

评论排行榜

        有时候VCKBASE常有人问到怎么去获一些细节系统信息。其实从BIOS中是可以获得大量系统的信息的。SMBios,即System Management BIOS以结构的方式保存了用于管理的系统信息。对于OS,BIOS的研究是须要先掌握大量相关知识的,不过方法也很重要。下面是我写的一个例子,在windows下(我用的XP)对物理内存进行访问,通过找到SMBIOS Structure Table Entry Point这一结构来定位BIOS结构表的位置,从而获得所须的系统信息。关于信息的细节可以去看SMBios的相关规范。
        我的例子代码主要是两个文件组成:SMStdFun.cpp中为用户提供函数用于获取所需要信息;PhyMemFu.cpp则是用来在物理内存中进行操作,实现具体的功能。
        可以用下面的语句测试这个例子代码,
if(0 != GetSMTableEntryPoint(&g_TableEntry, g_dwEntryPhyAddress))
  return FALSE;
if(0 != GetAllType(g_TableEntry.dStructTableAddress))
  return FALSE; 
        它取出结构信息的Type0~Type6,当然代码中给出了其后面的类型信息的格式,自已根据须可以去使用.
         Type0:BIOS Information
         Type1:System Information
         Type2:Base Board Information
         Type3:System Enclosure or Chassis
         Type4:Processor Information
         Type5:Memory Controller Information
         Type6:Memory Module Information
         ......
    例子代码见:
http://blog.vckbase.com/Files/zyq654321/SMViewer.rar
posted on 2005-06-04 15:18 HERCULES BLOG 阅读(8480) 评论(20)  编辑 收藏

Feedback

# re: 系统信息获取的一种方法(SMBios) 2005-06-04 20:57 freedk
俺永远顶小胖兔!

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-06-07 10:33 touchlin
不知道说什么好,牛!!!顶!!!谢!!!

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-06-17 19:13 richard
太好了﹐非常感謝﹗我頂﹗﹗﹗可以怎么少了個General.h

# to richard 2005-06-18 00:34 快乐小胖兔
因为是随手写的代码,所以没注意这个,其实general.h中只是:
typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef unsigned long  DWORD;

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-06-18 11:02 Richard_Chen
謝謝你的回報﹐但我是一個初學者﹐能否請你把ntdll.lib發給我﹐因為我的這個是2000DDK中的﹐Link時出錯﹕LIBCD.LIB(chkstk.obj) : error LNK2005: __chkstk already defined in ntdll.lib(ntdll.dll),小弟在這里先行謝過了﹗﹗﹗我的Mail:cym119@tom.com,謝謝﹗﹗﹗

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-07-09 15:34 jack
你好!
我通过该程序获得System Information,老是失败,请问如何获得,谢谢!!

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-07-09 15:36 jack
还有GetSMTableEntryPoint,GetAllType函数到底该如何使用,请指点!

# To Jack 2005-07-12 08:47 zyq654321
其实这个代码也是我临时写给朋友的,只是写了大概的流程.如果有问题,你可以:
1. Debug跟踪,看具体情况.
2. SMBios的规范最好看一下.好对照
至于GetAllType,我是指可以对所有SMBios的信息进行枚举.


# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-07-27 07:34 阿羽
求NTDLL谢谢
zoulei207@qq.com


# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-07-27 19:49 阿羽
非常感谢您提供这么宝贵的资料

如果要获得Type2  主函数应该怎么写,谢谢~~~
zoulei207@qq.com 


# to 阿羽 2005-07-27 22:01 zyq654321
代码虽然并不完善,但用下面的语句可以基本取出type0~type6的信息.
if(0 != GetAllType(g_TableEntry.dStructTableAddress))
  return FALSE; 


# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-08-02 16:55 jack
我想获得Type1,可是怎么获取呢,用了
if(0 != GetAllType(g_TableEntry.dStructTableAddress)) 
  return FALSE;
总是不可以,请指点!

谢谢

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2005-10-27 20:56 leon
牛人 我是要頂一下


# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2006-09-13 12:31 wupeng
兄弟,好多头文件和lib库没有啊,能发全一点吗

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2006-09-13 12:31 wupeng
哦,忘了我的邮箱了logan-wu@163.com

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2007-03-02 14:31 一板
求ntdll,谢了,先
Mail:chenyi_kuki@sohu.com


# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2007-04-15 18:07 shyyha
顺便给我一份,谢谢。
shyha@sohu.com

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2008-01-29 10:03 andrew_prc
楼主果然牛人!
偶曾经用过其他2种办法取得SMBIOS。
今天又多了一条途径,谢谢啊!

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2008-04-12 03:08 inzaghi
求ntdll, 相当感谢,谢了
Mail:  inzaghi.duan@163.com

# re: 系统硬件信息获取的一种方法(SMBios) : 演示如何在物理内存中如何获得所须的BIOS信息 2008-04-26 20:30 jerry
楼主谢谢你了,ntdll 能也给我一个拷贝吗?

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]