符合SMBIOS规范的计算机的系统信息获取方法
对于符合SMBIOS规范的计算机,可以通过访问SMBIOS的结构获得系统信息,共有两种办法可以访问:
1.通过即插即用功能接口访问SMBIOS结构,这个在SMBIOS2.0标准里定义了,从SMBIOS 2.1开始这个访问方法不再被推荐使用。
2.基于表结构的方法,表内容是table entry point的数据,这个访问方法从SMBIOS 2.1以后开始被使用,从2.1开始,以后的版本都推荐使用这种访问方式。在2.1版本中允许支持这两种方法中的任意一种和两种都支持,但在2.2已经以后的版本,必须支持方法2。
鉴于市场上计算机已经均支持SMBIOS2.3标准,所以只考虑方法2,基于表结构的访问方式。
基于表结构访问SMBIOS的过程是先找到Entry Point Structure(EPS)表,然后通过Entry Point Structure(EPS)表的数据找到SMBIOS数据表。
访问SMBIOS EPS表的操作过程如下:
1. 从物理内存0xF0000-0xFFFFF间寻找关键字“ _SM_”
2. 找到后再向后16个字节,看后面5个BYTE是否是关键字“_DMI_”,如果是,EPS表即找到。
注:按照SMBIOS规范说明,找到关键字”_SM_”后就可以确定此处就是EPS表结构,但我在实际操作中发现有为数不少的计算机的指定64K内存中有不只一个“_SM_”,所以不能仅用找到”_SM_”来确定,需要继续判断16个字节后是否是“_DMI_”。
SMBIOS EPS表结构如下:
位置 | 名称 | 长度 | 描述 |
00H | 关键字 | 4BYTE | 固定是”_SM_” |
04H | 校验和 | 1BYTE | 用于校验数据 |
05H | 表结构长度 | 1BYTE | Entry Point Structure表的长度 |
06H | Major版本号 | 1BYTE | 用于判断SMBIOS版本 |
07H | Minor版本号 | 1BYTE | 用于判断SMBIOS版本 |
08H | 表结构大小 | 2BYTE | 用于即插即用接口方法获得数据表结构长度 |
0AH | EPS修正 | 1BYTE |
|
0B-0FH | 格式区域 | 5BYTE | 存放解释EPS修正的信息 |
10H | 关键字 | 5BYTE | 固定为“_DMI_” |
15H | 校验和 | 1BYTE | Intermediate Entry Point Structure (IEPS)的校验和 |
16H | 数据表长度 | 2BYTE | SMBIOS数据表的长度 |
18H | 数据表地址 | 4BYTE | SMBIOS数据表的真实内存位置 |
1CH | 数据表结构数 | 2BYTE | SMBIOS数据表的结构数目 |
1EH | Smbios BCD修正 | 1BYTE |
|
通过EPS表结构中的12H以及14H处,得出数据表长度和数据表地址,即可通过地址访问结构表。从EPS表中的1CH处可得知结构表结构的总数,其中TYPE 0结构就是BIOS information,TYPE 1结构就是SYSTEM Information。
每个结构的头部是相同的,格式如下:
位置 | 名称 | 长度 | 描述 |
00H | TYPE号 | 1BYTE | 结构的TYPE号 |
01H | 长度 | 1BYTE | 本结构的长度,就此TYPE号的结构而言 |
02H | 句柄 | 2BYTE | 用于获得SMBIOS结构,使用方法未知 |
每个结构都分为格式区域和字符串区域,格式区域就是一些本结构的信息,字符串区域是紧随在格式区域后的一个区域。结构01H处标识的结构长度仅是格式区域的长度,字符串区域的长度是不固定的。
下面以TYPE 0(BIOS information)为例说明格式区域和字符串区域的关系
TYPE 0(BIOS information)格式区域如下:
位置 | 名称 | 长度 | 描述 |
00H | TYPE号 | 1BYTE | 结构的TYPE号,此处是0 |
01H | 长度 | 1BYTE | TYPE 0格式区域的长度,一般为14H,也有13H |
02H | 句柄 | 2BYTE | 一般为0000H |
04H | Bios厂商信息 | 1BYTE | 此处是bios卖方的信息,可能是OEM厂商名,一般为01H,代表紧随格式区域后的字符串区域的第一个字符串 |
05H | BIOS版本 | 1BYTE | BIOS版本号,一般为02H,代表字符串区域的第二个字符串 |
06H | Bios开始地址段 | 2BYTE | 用于计算常驻BIOS镜像大小的计算,方法为 (10000H-BIOS开始地址段)×16 |
08H | BIOS发布日期 | 1BYTE | 一般为04H,表示字符区第三个字符串 |
09H | BIOS rom size | 1BYTE | 计算方法为(n+1)×64K,n为此处读出数值 |
0AH | BIOS特征 | 8BYTE | Bios的功能支持特征,如PCI,PCMCIA,FLASH等 |
12H | Bios特征扩展 | 不定 |
|
紧随TYPE 0(BIOS information)结构区域之后的就是TYPE 0(BIOS information)字符串区域,如下所示:
db ‘System BIOS Vendor Name’,0 ; 字符串以零结尾,第一个字符串:卖方信息
db ‘ 4.04’ ,0 ; 第二个:BIOS版本
db ‘00/00/ 0000 ’ ,0 ; 第三个:发布日期
db 0 ; 以O为整个字符区域的结尾,所以要找下一个TYPE,只要在字符区域找到连续的OOOOH即可
注:当有EPS表中得到结构表的开始地址后,可以直接按结构来寻找相应的TYPE号,找到后直接读取就是该TYPE对应的结构的格式区域信息,然后向后移动结构区域长度(机构区域长度由该结构的O1H处读出)个BYTE,即是该TYPE机构的字符串区域。
由上面介绍可知,获得BIOS信息的办法就是:
1. 通过EPS表的12H和14H数据找到TYPE结构表,然后找到TYPE 0的内存地址。(不一定是首个)
2. 由TYPE 0结构区域中得出相应BIOS信息是否存在(存在则是上面所述的 01H,02H,03H依次排布,不存在则是相应的位置上为00H)。
3. 如存在信息,则从字符串区域中读取对应BIOS信息。
获得SYSTEM信息方法同上,只是TYPE结构区域有所不同,请参照SMBIOS Reference Specification
符合SMBIOS规范的计算机的系统信息获取方法
SMBIOS,DIM
在阅读SMBIOS spec之前先看看这两篇文章,有个感性认识,再去阅读规范文档,可以帮助理解.
================================
DMI是英文单词Desktop Management Interface的缩写,也就是桌面管理界面,它含有关于系统硬件的配置信息。计算机每次启动时都对DMI数据进行校验,如果该数据出错或硬件有所变动,就会对机器进行检测,并把测试的数据写入BIOS芯片保存。所以如果我们在BIOS设置中禁止了BIOS芯片的刷新功能或者在主板使用跳线禁止了 BIOS芯片的刷新功能,那这台机器的DMI数据将不能被更新。如果你更换了硬件配置,那么在进行WINDOWS系统时,机器仍旧按老系统的配置进行工作。这样就不能充分发挥新添加硬件的性能,有时还会出现这样或那样的故障。
在介绍什么是DMI之前,先说说SMBIOS (System Management BIOS,SMBIOS)的概念。 SMBIOS是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。 DMI (Desktop Management Interface, DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。 SMBIOS和DMI是由行业指导机构Desktop Management Task Force (DMTF)起草的开放性的技术标准,其中,DMI设计适用于任何的平台和操作系统。 DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是 Management Information Format (MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。为了提供更为友好的用户工作环境,AOpen开发了实用的WinDMI工具,它采用Windows界面,能够用于多款AOpen主板,完全兼容 Windows 98SE/98/2000/XP操作系统。 WinDMI分为几种功能,首先,默认的[Normal Mode]功能让用户可以获取包括BIOS、操作系统、主板、内存、扩展槽及扩展接口的所有详细系统信息。 第二种功能为[Dump Memory],它可以让用户转储内存数据,因为它显示了当前DMI的结构数据,所以可以帮助高级用户及软件设计人员处理内存数据。此外,对DMI结构有兴趣的用户也可以使用此项功能进行初步的问题诊断。第三,WinDMI还可以让用户以普通或raw模式保存DMI数据,如果用户需要保存DMI信息,只需按下[Save As]即可。此项功能会在用户指定的文件夹下创建一个 .txt文件,用户就可以在此文本文件中找到所有所需的系统信息
DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是 Management Information Format (MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。
浅谈DMI data数据区 |
| |
--作者:耗子 |
前此时间,网站公布了关于修改BIOS使用联想XP的文章,其中一种方法是使用DMICFG.exe文件修改,使用DMICFG修改,直接修改BIOS的DMI区域,不但修改方便,而且不用象修改BIOS文件那样,需要重新刷新;这样又降低了修改的风险。 |
DMI又称为(Desktop Management Interface)桌面管理接口,就是帮助收集电脑系统信息的管理系统,用来让系统保存自身及外围设备相关数据。通过DMI可以在操作系统级查询到包括CPU、内存、I/O扩展槽等在内的系统配置信息(不用进入BIOS)。DMI通常将上述信息存储在BIOS中一个4KB大小的DMI数据区中,这一数据区通常被称为MIFD(Management Information Format Database)。DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOS和DMI是由行业指导机构Desktop Management Task Force (DMTF)起草的开放性的技术标准,其中,DMI设计适用于任何的平台和操作系统。是由行业指导机构(Desktop Management Task Force[DMTF])起草的开放性技术标准, |
DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format (MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 |
DMI被设计为一个能够在任何平台和操作系统下实现的接口规范,它允许操作人员在该数据区中手工添加一些BIOS不能探测到的诸如使用者姓名、销售商和计算机编号等额外的控制信息,因此我们也可以在不需要对BIOS进行操作的情况下使用DMI对MIFD数据库中的系统配置情况进行修改以适应不同环境下的系统要求。
|
|
目前DMI有多个版本,大多为2.0、2.1、2.2,对于我们主板BIOS中所使用的DMI版本,可使用WINXX自带的DEBUG程序来测试。
|