解析SMBIOS信息详解Word格式.docx

上传人:b****8 文档编号:22451407 上传时间:2023-02-04 格式:DOCX 页数:12 大小:22.22KB
下载 相关 举报
解析SMBIOS信息详解Word格式.docx_第1页
第1页 / 共12页
解析SMBIOS信息详解Word格式.docx_第2页
第2页 / 共12页
解析SMBIOS信息详解Word格式.docx_第3页
第3页 / 共12页
解析SMBIOS信息详解Word格式.docx_第4页
第4页 / 共12页
解析SMBIOS信息详解Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

解析SMBIOS信息详解Word格式.docx

《解析SMBIOS信息详解Word格式.docx》由会员分享,可在线阅读,更多相关《解析SMBIOS信息详解Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

解析SMBIOS信息详解Word格式.docx

TYPE号

1BYTE

结构的TYPE号,此处是0

01h

TYPE0格式区域的长度,一般为14h,也有13h

02h

句柄

2BYTE

指向本结构的句柄

04h

Bios厂商信息

此处是bios卖方的信息,可能是OEM厂商名,一般为01h,代表紧随格式区域后的字符串区域的第一个字符串

05h

BIOS版本

BIOS版本号,一般为02h,代表字符串区域的第二个字符串

06h

Bios开始地址段

用于计算常驻BIOS镜像大小的计算,方法为

(10000h-BIOS开始地址段)×

16

08h

BIOS发布日期

一般为03h,表示字符区第三个字符串

09h

BIOSROMsize

计算方法为(n+1)×

64K,n为此处读出数值

0Ah

BIOS特征

8BYTE

Bios的功能支持特征,如PCI,PCMCIA,FLASH等

12h

BIOS特征扩展

不定

从2.4版开始包含两个扩展字节(12h-13h),以及字节14h-17h

14h

BIOS版本主号

若系统不支持此域,则值设为ffh

15h

BIOS版本从号

16h

置控制器固件的版主号

17h

置控制器固件的版从号

BIOS特征域表示BIOS对一些特性的支持情况,Bit1和Bit1保留,Bit2未知,Bit3表示本BIOS特征域是否被支持。

Bit4-Bit19分别表示是否支持ISA、MCA、EISA、PCI、PCMCIA、PnP、APM、BIOS刷新、BIOS影像(把BIOS的只读容拷贝到快一些的存中)、VL-VESA、ESCD、从CD引导、可选择的引导、BIOSROM是否被插装、从PCMCIA引导、EDD规。

Bit20-Bit25表示对各种型号的软盘支持情况(均为中断Int13h),包括NEC98001.2MB软盘、Toshiba1.2MB软盘、5.25”/360KB软盘、5.25”/1.2MB软盘、3.5”/720KB软盘、3.5”/2.88MB软盘。

Bit26-Bit29表示是否支持中断Int5h(PrintScreen屏幕截取服务)、Int9h(8042键盘服务)、Int14h(串口服务)、Int17h(打印机服务)、Int10h(CGA/Mono视频服务)、NECPC-98。

Bit32:

47保留给BIOS厂商使用。

Bit48:

63保留给计算机系统厂商使用。

BIOS特征扩展字节1(偏移12h处)表示对另外一些设备的支持情况,Bit0-Bit1分别表示是否支持ACPI、USB遗留、AGP、I2O引导、LS-120SuperDisk引导、ATAPIZIP驱动器引导、1394引导、智能电池。

BIOS特征扩展字节2(偏移13h处)表示对一些高级特性的支持情况。

Bit1-Bit3表示是否支持功能键初始化网络服务引导、激活目标容分发、UEFI规。

Bit4表示SMBIOS表描述的是一台虚拟机,Bit5:

7保留。

2、系统信息(Type1):

SMBIOS实现只关联一个单一的系统实例,并且包含且只包含一个系统信息结构。

结构的TYPE号,此处是1

格式区域总长度,2.0版为08h,2.1-2.3.4版为19h,从2.4版开始为1Bh

电脑制造商

一般为01h,表示在字符串区域中的编号

产品名称

在字符串区域中的编号

版本号

07h

序列号

UUID

16BYTE

通用唯一标识符

18h

唤醒类型

BYTE

用来标识导致系统开电启动的事件

19h

SKU号

在字符串区域中的编号,SKU号通常为产品ID或采购订单号

1Ah

产品家族

UUID为128bit长,是一个穿越时间和空间的唯一标识符,不需要集中的注册过程。

它的格式在RFC4122有详细的描述,容比较繁锁,但SMBIOS并不关注这个,它只关注字节序。

UUID的字节顺序以及在RFC4122中对应域的名字如下:

time_low:

偏移00h处,4BYTEs,为时间戳的低位域部分。

time_mid:

04h处,2BYTEs,为时间戳的中间域部分。

time_hi_and_version:

06h处,2BYTEs,为时间戳的高位域,同时还包含版本号。

clock_seq_hi_and_reserved:

08h处,1BYTE,时钟序列的高位域部分,同时还包含保留部分。

clock_seq_low:

09h处,1BYTE,时钟序列的低位域部分。

Node:

0Ah处,6BYTEs,唯一结点标识符。

虽然RFC4122建议对所有域都使用网络字节序(为大端字节序),但PC工业界(包括ACPI,UEFI和微软的规)都对前面的三个域time_low,time_mid,time_hi_and_version使用小端字节序。

同样地,电报格式的编码也被用来描述SMBIOS规中的UUID。

因此,UUID{00112233-4455-6677-8899-AABBCCDDEEFF}被表示为33221100554477668899AABBCCDDEEFF。

如果ID的所有字节都为FFh,表示当前ID在系统中不存在但可以被设置。

如果所有字节都为00h,表示ID在系统中不存在。

对于唤醒类型域,00h保留,01h为其他,02h未知,03h为APM定时器,04h调制解调器拨响,05h为LAN远程,06h电源开关,07h为PCIPME#,08h为AC电源恢复。

基板或模块单元信息(Type2):

制造商、产品名、版本、序列号、资产标签、特征标志、基板在底架上的位置、底架句柄、基板类型、包含的对象句柄个数、包含的个各对象句柄。

系统外围或底架(Type3):

制造商、类型、版本、序列号、资产标签号、启动状态、供电电源状态、热量状态、安全状态、OEM定义信息、高度、电源线个数、包含的单元个数、包含的单元记录长度、包含的各个单元、SKU号。

处理器信息(Type4):

插座指示、处理器类型、处理器家族、制造商、ID、版本、电压伏特数、外部时钟频率(MHz)、最大速率(MHz)、当前速率、状态、处理器升级、L1级缓存信息结构的句柄、L2级缓存信息结构的句柄、L3级缓存信息结构的句柄、序列号、资产标签、部件、核个数、激活的核个数、线程个数、处理器特征、处理器家族2。

高速缓存信息(Type7):

插座指示、缓存配置、最大缓存容量、已安装的容量、支持的SRAM类型、当前SRAM类型、缓存速率、纠错类型、系统缓存类型、关联性。

端口连接器信息(Type8):

例如并口、串口、键盘、鼠标器端口等都属于端口连接器。

包含的信息有部引用指示符、部连接器类型、外部引用指示符、外部引用类型、端口类型。

系统插槽(Type9):

插槽指示符、插槽类型、插槽数据总线宽度、当前是否在使用、插槽长度、插槽ID、插槽特征1、插槽牲2、段组编号、总线编号、设备/函数编号。

OEM字符串(Type11):

由OEM指定的描述字符串。

系统配置选项(Type12):

用来配置基板跳线和开关的信息字符串。

BIOS语言信息(Type13):

可安装的语言、标志位字节、保留的15字节、当前语言。

这里的语言是指英语、法语、汉语等国家语言,而不是计算机编程语言。

组相联(Type14):

组名、本项的类型、本结构的句柄。

级相联用于指明某些部件的布局或层次,例如指明两个CPU共享一个外部缓存系统。

系统事件日志(Type15):

事件日志存放在非易失性的存储单元中,占据固定长度的区域,以一个固定长度(和特定于厂商)的头部开始,后跟一个或多个可变长度的日志记录。

应用程序可以通过周期性地读取系统事件日志结构(通过它的句柄)并在日志改变标记中搜索日志的更新,以实现事件日志改变通知。

这里日志改变标记唯一地标识事件日志最后一次更新的时间。

本结构包含的信息有日志区域长度、日志头部起始偏移、日志数据起始偏移、存取方法(如索引I/O,存映射物理地址,通知目的非易失性数据函数等)、日志状态、日志改变标记、存取方法地址、日志头部格式、支持的日志类型描述符、每个日志类型描述符的长度、日志类型描述符列表。

这里存取方法地址可用以下联合类型来表示:

每个日志记录的格式都包含8字节的记录头部(事件类型、长度、日期时间域),后跟不定长的日志数据。

物理存储器阵列(Type16):

位置(系统板卡或附加板卡上)、存储功能、存纠错、最大容量、存储错误信息句柄、存储设备数目、已扩展的最大容量。

存储设备(Type17):

用于描述物理存储器阵列中的单个存储设备。

在物理存储器阵列中的句柄、存储错误信息句柄、存储总宽度、数据宽度、存储容量、形体尺寸、设备集、设备定位器、记忆槽定位器、存储器类型、类型额外细节、速率、制造商、序列号、资产标签、部件、属性标志、已扩展的容量、已配置的存储时钟速率。

32-bit错误信息(Type18):

错误类型、错误粒度、错误操作、特定于制造商的错误表现、存储阵列错误地址、设备错误地址、错误解析。

存储阵列映射地址(Type19):

起始地址、结束地址、存储阵列句柄、分区宽度、已扩展的起始地址、已扩展的结束地址。

存储设备映射地址(Type20):

起始地址、结束地址、存储设备句柄、存储阵列映射地址句柄、分区行位置、交叉位置、交叉的数据深度、已扩展的起始地址、已扩展的结束地址。

置指针设备(Type21):

指针设备类型、接口类型、按钮个数。

智能电池(Type22):

位置、制造商、制造日期、序列号、设备名、设备化学属性、设计容量、设计电压伏特数、SBDS版本号、电池数据的最大错误百分比、SBDS序列号、SBDS制造日期、SBDS设备化学属性、设计容量倍增因子、特定于OEM的信息。

系统引导信息(Type32):

保留域(00h)、引导状态描述(10字节)。

引导状态描述主要有“没有检测到错误”、“没有可引导的媒介”、“操作系统载入失败”、“BIOS硬件检测失败”、“操作系统硬件检测失败”、“用户请求引导(通过一个按键)”、“违反系统安全”、“预先请求映像(通过PXE引导)”、“系统监控记时器激活,导致系统重启”,特定于厂商引导状态描述等。

IPMI设备信息(Type38):

BMC接口类型、IPMI规修改版本、I2C从地址、NV存储设备地址、基地址、基地址修饰符/中断信息、中断号。

不活动指示(Type126):

用来表明某个SMBIOS结构当前不活动,因此不应用被上层的软件使用。

它没有字符串区域,只有结构头部(即三个头部域类型、长度、句柄)。

表格结束指示(Type127):

表示整个SMBIOS结构表的结束。

它也只有结构头部,没有字符串区域。

可以看出,很多设备都包含一些类似的信息域,比如制造商、产品ID(SKU号)、产品名称、版本、出厂日期、序列号、资产标签号、设备类型等。

应用软件可以使用下面的方法来解析基于表格的SMBIOS结构。

FindStructure函数用于查找指定类型的第一个结构(注意同一个类型的结构可能会多个),返回这个结构的句柄,如果没找到,则返回0xFFFF。

TableAddress和StructureCount的值可以通过在存中定位EPS表来获得,EPS中偏移18h处即为TableAddress的值,偏移1Ch处即为StructureCount的值。

3.WindowsAPI获取SMBIOS流程

Windows提供了直接APIGetSystemFirmwareTable来获取SMBIOS信息。

该函数从firmwaretableprovider中检索特定的firmwaretable信息。

3.1调用GetSystemFirmwareTable获取信息buffer大小

DWORDiSignature='

R'

;

iSignature=iSignature<

<

8|'

S'

M'

B'

intiBufferSizeNeeded=GetSystemFirmwareTable(iSignature,0,0,0);

参数只有FirmwareTableProviderSignature,其余都是NULL即可。

iSignature=RSMB,代表是SMBIOSfirmwaretableprovider,将是获取该部分容。

其中,FirmwareTableProviderSignature参数列表:

Value

Meaning

'

ACPI'

TheACPIfirmwaretableprovider.

FIRM'

Therawfirmwaretableprovider.

RSMB'

TherawSMBIOSfirmwaretableprovider.

3.2再次调用GetSystemFirmwareTable获取RawSMBIOSData容

charbuff[1024*2]={0};

GetSystemFirmwareTable(iSignature,0,buff,iBufferSizeNeeded);

这里的buff容就是RawSMBIOSData容

3.3解析RawSMBIOSData容

首先我们要先了解该结构体才能去解析容,在windows.h定义如下:

structRawSMBIOSData

{

BYTEUsed20CallingMethod;

BYTESMBIOSMajorVersion;

BYTESMBIOSMinorVersion;

BYTEDmiRevision;

DWORDLength;

BYTESMBIOSTableData[];

};

从结构体中,我们可以获取SMBIOS的版本信息和长度以及SMBIOSTableData的信息,

RawSMBIOSData*p;

p=(RawSMBIOSData*)buff;

获取SMBIOSTableDatabuffer的首地址:

p->

SMBIOSTableData=(BYTE*)(buff+8);

//跳过前面8个字节

SMBIOSTableData可以理解为格式区+数据容两部分,而格式区有一个头,类似:

structSMBios_Thunk

{

BYTEflag;

BYTEdata_offset;

flag是硬件类型,data_offset是表示该格式区长度。

所有typeSMBIOS结构表都有这个头存在。

后面我们就可以通过移动p->

SMBIOSTableData指针以及SMBIOS某type的结构表来获取具体的硬件信息了。

详细参考下面SMBIOS数据解析示例。

4.SMBIOS数据解析示例

如上面所讲,SMBIOSTableData可以理解为格式区+数据容两部分组成,可以直接获取前两个字节分析出type类型(本例type=0)和格式区长度(本例length=18)。

另外可以通过下面通俗解释确认信息段,该段数据以0000结尾(因为字符串以00结尾,类型块结尾也是00,所以可以理解为遇到0000为一个类型段结束),

根据上述信息,获取type0字段,分析结构区以找出需要读取容,注意标记部分的查找方式,结构区字符如下

根据SMBIOS结构表分析(举例字节见红色线,格式区长度数据见黄色线标注):

第1个字节offset0,为0x00,代表结构的TYPE号为0;

第2个字节offset1,0x18,代表格式区长度为18,即图中蓝色段;

第3-4(2bytes)字节offset2,3,0x010x00,本结构的句柄,

第5字节offset4,0x01,为厂商信息,位置在格式区后紧跟的第1个字符串

......

格式区后面紧跟的为字符串容:

根据格式区指定index查找。

每个字符串以00结尾,

第01个字符串:

..A...DellInc.

第02个字符串:

A11

.......

依次获取SMBIOS息

同样,以对应SMBIOS方式分析其他类型段的容。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1