[Windows] Access SMBIOS
SMBIOS architecture
System Management BIOS (SMBIOS) is the premier standard for delivering management information via system firmware. Since its release in 1995, the widely implemented SMBIOS standard has simplified the management of more than two billion client and server systems.
For OS-present, OS-absent, and pre-OS environments, SMBIOS offers motherboard and system vendors a standard format to present management information about their products.
SMBIOS Entry Point Structure
- The only access method defined for the SMBIOS structures is a table-based method, defined in version 2.1 of SMBIOS spec
- It provides the SMBIOS structures as a packed list of data referenced by a table entry point.
- How to recognized SMBIOS Entry Point structure
- Anchor String and Intermediate Anchor String
- BYTE[0x00] — '_SM_'(5F 53 4D 5F)
- BYTE[0x10] — '_DMI_'(5F 44 4D 49 5F)
- Anchor String and Intermediate Anchor String
- Other information in Entry Point Structure (detail defined in spec)
- include SMBIOS version, structure table address, number of SMBIOS Structures, etc.
SMBIOS structures
Each SMBIOS structure has a formatted section and an optional unformed section. The formatted section of each structure begins with a 4-byte header.
And SMBIOS structures contains many information about the hardware platform, such as the system manufacturer or the the system BIOS version.
Structure usage guidelines (Incomplete):
- If a new field is added to an existing structure, that field is added at the end of the formatted area of that structure and the structure’s Length field is increased by the new field’s size.
- Any software that interprets a structure shall use the structure’s Length field to determine the formatted area size for the structure rather than hard-coding or deriving the Length from a structure field.
- Each structure shall be terminated by a double-null (0000h), either directly following the formatted area (if no strings are present) or directly following the last string. This includes system- and OEM-specific structures and allows upper-level software to easily traverse the structure table.
The unformed section of the structure is used for passing variable data such as text strings
Header format of each structure

Samples of some structures
BIOS information with string

BIOS information without string

SMBIOS in Windows
Microsoft SMBIOS Driver
- Support by windows XP SP2 and later OS
- collects information and stores this information in the registry at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data
Access SMBIOS
Different ways of access SMBIOS
- Access registry (no guarantee)
- System APIs for Reading SMBIOS Data (for applications)
- Using WMI (for drivers)
Key structure for Driver access SMBIOS
struct RawSMBIOSData
{
BYTE Used20CallingMethod;
BYTE SMBIOSMajorVersion;
BYTE SMBIOSMinorVersion;
BYTE DmiRevision;
DWORD Length; // length of SMBIOSTableData
BYTE SMBIOSTableData[]; // all smbios structures
};
The SMBIOSTableData property contains the entire SMBIOS data table, except for the SMBIOS structure table entry point.
Key APIs:
- Application: "EnumSystemFirmwareTables()" and "GetSystemFirmwareTable()"
- Driver:
- Windows XP and later: "IoWmiOpenBlock()" and the "IoWMIQueryAllData()"
- Windows Vista and later: "AuxKlibGetSystemFirmwareTable()"
How to check SMBIOS data correct
SMBIOS Viewer — A good tool for viewing SMBIOS in windows platform.
Reference:
SMBIOS Reference Specification: https://www.dmtf.org/standards/smbios
[Windows] Access SMBIOS的更多相关文章
- Windows Access Token
security descriptor A structure and associated data that contains the security information for a sec ...
- Windows access Linux / Ubuntu via Remote Desktop via xrdp
Windows 多用户远程桌面连接到 Ubuntu / Linux Access Ubuntu from Windows remotely Follow these steps : Step 1 ...
- wordcount在本地运行报错解决:Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.native.NativeID$Windows.access
在windows中的intellij中运行wordcount程序,控制台输出以下报错 在Intellij编辑器中解决办法:本地重新创建NativeIO类,修改一个方法返回值,然后用新建的NativeI ...
- atorg.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:557)
错误原因: 你当前开发环境中{Hadoop_HOME}\bin\hadoop.dll 文件和你当前的hadoop版本不匹配. 解决方案: 网络下载相应版本的hadoop.dll,并将该文件放入c:\ ...
- Windows下Eclipse连接hadoop
2015-3-27 参考: http://www.cnblogs.com/baixl/p/4154429.html http://blog.csdn.net/u010911997/article/de ...
- 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解
一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...
- SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)
SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...
- java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
在 windows 上运行 MapReduce 时报如下异常 Exception in thread "main" java.lang.UnsatisfiedLinkError: ...
- Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
1.window操作系统的eclipse运行wordcount程序出现如下所示的错误: Exception in thread "main" java.lang.Unsatisfi ...
随机推荐
- SQL基础教程(第2版)第1章 数据库和SQL
● 数据库有很多种类,本书将介绍如何使用专门的 SQL语言来操作关系数据库.● 关系数据库通过关系数据库管理系统(RDBMS)进行管理. 根据 SQL 语句的内容返回的数据同样必须是二维表的形式,这也 ...
- Thread--生产者消费者
2个生产者,2个消费者,库存容量2 package p_c_allWait.copy; import java.util.LinkedList; import java.util.List; publ ...
- Windows环境下spyder调用Arcpy
用python写代码还是喜欢spyder,所以在网上找了通过spyder调用arcpy的方法. 这篇帖子总结的方法非常详细,且通过本人实践,切实可行https://blog.csdn.net/qq_2 ...
- Django框架(七):模型(三) 关联、模型类的属性
1. 关联 1.1 模型类关系 关系型数据库的关系包括三种类型: ForeignKey:一对多,将字段定义在多的一端中. ManyToManyField:多对多,将字段定义在任意一端中. OneToO ...
- Linux不进入网卡配置文件更改静态ip
1.找到网卡配置文件名ls /etc/sysconfig/network-scripts/ 2.备份并查看原始配置文件(若原先有配置IP的,则按照第五点方式修改) 3.修改随机自启和IP地址echo ...
- PAT A1133 Splitting A Linked List (25) [链表]
题目 Given a singly linked list, you are supposed to rearrange its elements so that all the negative v ...
- PAT Basic 反转链表 (25) [链表]
题目 给定⼀个常数K以及⼀个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6, ...
- py02_03:py的数据类型
数据类型初识 1. 整数(int) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- 【C#并发】00概述
摘自<C#并发编程经典实例>[美]Stephen Cleary 并发:同时做多件事情.终端用户利用并发功能,在输入数据库的同时相应用户输入.服务器应用并发,在处理第一个请求的同时响应第二个 ...
- Idea创建Spring项目
环境 win7 + Idea2018 Classpath commons-logging-1.2 + spring-framework-4.1.6.RELEASE Step1 创建工程 File -& ...