符合 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 程序来测试。
|