EnumSystemFirmwareTables 函数 (sysinfoapi.h)

枚举指定类型的所有系统固件表。

语法

UINT EnumSystemFirmwareTables(
  [in]  DWORD FirmwareTableProviderSignature,
  [out] PVOID pFirmwareTableEnumBuffer,
  [in]  DWORD BufferSize
);

参数

[in] FirmwareTableProviderSignature

查询将定向到的固件表提供程序的标识符。 此参数的取值可为下列值之一:

含义
“ACPI” ACPI 固件表提供程序。
'FIRM' 原始固件表提供程序。 UEFI 系统不支持;请改用“RSMB”。
'RSMB' 原始 SMBIOS 固件表提供程序。

[out] pFirmwareTableEnumBuffer

指向接收固件表列表的缓冲区的指针。 如果此参数为 NULL,则返回值为所需的缓冲区大小。

有关此缓冲区内容的详细信息,请参阅“备注”部分。

[in] BufferSize

pFirmwareTableBuffer 缓冲区的大小(以字节为单位)。

返回值

如果函数成功,则返回值为写入缓冲区的字节数。 此值将始终小于或等于 BufferSize

如果函数因缓冲区不够大而失败,则返回值为所需的缓冲区大小(以字节为单位)。 此值始终大于 BufferSize

如果函数因任何其他原因而失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

从 Windows 10 版本 1803 开始,通用 Windows 应用可以通过在应用清单中声明 smbios 受限功能来访问系统管理 BIOS (SMBIOS) 信息。 有关详细信息 ,请参阅从通用 Windows 应用访问 SMBIOS 信息 。 只能从通用 Windows 应用访问原始 SMBIOS (RSMB) 固件表。

从 Windows Server 2003 Service Pack 1 (SP1) ,应用程序无法访问 \Device\PhysicalMemory 对象。 对此对象的访问仅限于内核模式驱动程序。 此更改会影响应用程序读取系统管理 BIOS (SMBIOS) 或其他存储在最低 1MB 物理内存中的 BIOS 数据。 应用程序使用以下替代方法从低物理内存中读取数据:

  • 使用 WMI 检索 SMBIOS 属性。 Win32 类中包含许多单独的属性。 还可以使用 MSSMBios_RawSMBiosTables 类检索单个缓冲区中的原始 SMBIOS 数据。
  • 使用 GetSystemFirmwareTable 函数读取原始 SMBIOS 固件表。
应用程序无法写入低物理内存。

原始 SMBIOS 表提供程序 ('RSMB') 当前返回单个表标识符,0x0000。 这对应于原始 SMBIOS 固件表。

原始固件表提供程序 ('FIRM') 返回 DWORD 表标识符的列表。 每个标识符对应于物理地址范围的开头。 目前,此提供程序返回“C0000”和“E0000”。 这些值分别对应于从0xC0000到0xDFFFF和0xE0000到0xFFFFF的物理内存。

ACPI 表提供程序 ('ACPI') 返回 DWORD 表标识符的列表。 返回的每个标识符对应于当前位于系统的 ACPI 命名空间中的 ACPI 表DESCRIPTION_HEADER结构的签名字段。

对于 ACPI,如果系统包含多个具有相同名称的表,则它们都使用 EnumSystemFirmwareTables 进行枚举。 但是, GetSystemFirmwareTable 仅检索列表中具有此名称的第一个表。

要求

要求
最低受支持的客户端 Windows Vista、Windows XP Professional x64 版本 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008、Windows Server 2003 SP1 [桌面应用 |UWP 应用]
目标平台 Windows
标头 sysinfoapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

从通用 Windows 应用访问 SMBIOS 信息

GetSystemFirmwareTable

系统信息函数