获取ACPI表格
void CgetSystemFirmwareTableDlg::OnBnClickedButton1()
{
//
UINT bufferSize = GetSystemFirmwareTable('ACPI', 0, NULL, 0);//获取系统固件表
/*
【参数3和参数4为NULL和0,只是为了返回真实大小】
这个函数可以用来获得系统中的各种固件信息,如ACPI(高级配置与电源接口)、SMBIOS(系统管理BIOS)、UEFI(统一固件接口)等。
每种固件都有其对应的表格,这些表格包含了硬件设备的描述信息、配置数据等
参数1:[in] DWORD FirmwareTableProviderSignature 表示要获取的固件表的提供者标识符。常见的标识符有:
ACPI:获取ACPI表格(高级配置和电源接口)
SMCI:获取SMBIOS表格
UEFI:获取UEFI表格
FIRM 原始固件表提供程序
RSMB 原始 SMBIOS 固件表提供程序
参数2:DWORD FirmwareTableID 表示要获取的固件表的唯一标识符
参数3:PVOID pFirmwareTableBuffer 指向存储固件表数据的缓冲区的指针
参数4:DWORD BufferSize 指定缓冲区的大小
返回值:为获取到的固件表的字节数。
如果函数调用失败或指定的固件表不存在,返回值为0
*/
if (bufferSize == 0) {
AfxMessageBox(_T("获取ACPI大小失败"));
//PostQuitMessage(0);
return;
}
BYTE* buffer = new BYTE[bufferSize];//申请空间
DWORD result = GetSystemFirmwareTable('ACPI', 0, buffer, bufferSize);
if (result == 0) {
AfxMessageBox(_T("获取ACPI固表失败"));
delete[] buffer;
return;
}
AfxMessageBox(_T("获取ACPI固表成功"));
delete[] buffer;
return;
}
获取主板信息
SMBIOS结构:
SMBIOS(System Management BIOS)是一种由系统管理委员会(DMTF)定义的标准,用于描述计算机硬件组件和配置信息的数据结构。SMBIOS提供了一种跨平台的方式,使操作系统和应用程序能够获取有关计算机硬件的详细信息
SMBIOS定义了一组数据结构,每个结构都包含了特定类型的硬件信息。这些结构被组织成一个层次结构,可以通过唯一的类型值进行识别和访问。以下是常见的SMBIOS结构类型:
1.BIOS信息(Type 0)
- 描述计算机的BIOS固件版本、制造商、发布日期等信息
2.系统信息(Type 1)
- 描述计算机的型号、制造商、序列号等基本信息
3.主板信息(Type 2)
- 描述主板的制造商、型号、版本等信息
4.处理器信息(Type 4)
- 描述计算机的处理器相关信息,如制造商、型号、核心数、时钟频率等
5.内存模块信息(Type 6、16、17)
- 描述计算机的内存模块相关信息,如制造商、型号、容量、速度等
6.硬盘信息(Type 9)
- 描述计算机的硬盘驱动器相关信息,如制造商、型号、容量、接口类型等
7.显示器信息(Type 13)
- 描述计算机的显示器相关信息,如制造商、型号、分辨率等
8.电池信息(Type 22)
- 描述计算机的电池相关信息,如制造商、设备ID、电池类型等
这只是SMBIOS结构的一小部分示例,实际上SMBIOS定义了更多的结构类型,每个类型都涵盖了不同硬件组件的信息。每个SMBIOS结构都包含固定的字段和可变长度的数据区域,用于存储具体的信息
SMBIOS结构通过一个叫做SMBIOS表的数据块来呈现,该表位于系统固化的固件中,例如系统的BIOS中。操作系统和应用程序可以通过访问SMBIOS表来获取硬件信息,以便进行系统管理、故障诊断、设备兼容性检查等操作
需要注意的是,SMBIOS是与x86架构的计算机系统关联度较高,不同架构的计算机可能采用其他的固件和硬件描述标准
type=2时结构:
当 SMBIOS 中的类型字段(Type)为 2 时,表示该结构是一个系统基本信息(System Information)结构。它提供了关于计算机系统的基本描述和属性信息。
SMBIOS Type 2 结构由多个字段组成,每个字段用于描述特定的系统属性。下面是 Type 2 结构中常见的字段及其含义:
- Manufacturer(制造商):表示制造商或品牌名称。长度不超过 64 个字节
- Product Name(产品名称):指定计算机系统的型号或名称。长度不超过 64 个字节
- Version(版本):标识计算机系统的版本号,通常是硬件或固件的版本信息。长度不超过 64 个字节
- Serial Number(序列号):唯一标识该计算机系统的序列号。长度不超过 20 个字节
- UUID(通用唯一识别码):一个 16 字节的唯一标识符,可用于在网络中唯一标识该系统。固定为 16 个字节
- SKU Number(SKU 编号):计算机系统的库存单位编号。长度不超过 64 个字节
- Family(系列):指定计算机系统所属的产品系列。长度不超过 64 个字节
这些字段中的大部分都是可选的,但通常至少会提供制造商、产品名称和版本号。
需要注意的是,SMBIOS 结构中的字段都是以 ASCII 码表示的,且长度有限制。例如,Manufacturer、Product Name 和 Version 字段的长度不能超过 64 个字符,Serial Number 字段的长度不能超过 20 个字符。
SMBIOS Type 2 结构提供了有关计算机系统的基本信息,可以通过解析该结构获取计算机的制造商、型号、序列号等重要属性,用于系统管理、故障排除和硬件识别等用途。