AuxKlibGetSystemFirmwareTable 函数 (aux_klib.h)

AuxKlibGetSystemFirmwareTable 例程从固件表提供程序检索指定的固件表。

语法

NTSTATUS AuxKlibGetSystemFirmwareTable(
  [in]            ULONG  FirmwareTableProviderSignature,
  [in]            ULONG  FirmwareTableID,
  [out, optional] PVOID  FirmwareTableBuffer,
  [in]            ULONG  BufferLength,
  [out, optional] PULONG ReturnLength
);

参数

[in] FirmwareTableProviderSignature

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

含义
“ACPI” ACPI 固件表提供程序。
'FIRM' 原始固件表提供程序。
'RSMB' 原始 SMBIOS 固件表提供程序。

[in] FirmwareTableID

固件表的标识符。 标识符中的字符按 little-endian 顺序排列。

例如,FACP 是由 ACPI 提供的表的名称。 FACP 表由表开头DESCRIPTION_HEADER结构的 签名 字段中的 4 字节值“PCAF” (0x50434146) 标识。 下面的代码示例演示如何在 AuxKlibGetSystemFirmwareTable 调用中指定 FACP:

status = AuxKlibGetSystemFirmwareTable('ACPI', 'PCAF', pBuffer, BUFSIZE, &dataSize);

在此示例中, pBuffer 指向调用方分配的缓冲区, BUFSIZE 是此缓冲区的大小(以字节为单位),是 dataSize 一个变量,例程将写入缓冲区的字节数写入其中。 有关 DESCRIPTION_HEADER 结构的详细信息,请参阅高级配置和电源接口网站上的 高级配置和电源接口 规范。

[out, optional] FirmwareTableBuffer

指向调用方分配的缓冲区的指针,该缓冲区接收固件表的列表。 如果此参数为 NULL,则写入到 *ReturnLength 的值是所需的缓冲区大小。 有关此缓冲区内容的详细信息,请参阅“备注”部分。

[in] BufferLength

FirmwareTableBuffer 指向的缓冲区的大小(以字节为单位)。

[out, optional] ReturnLength

指向例程写入 FirmwareTableBuffer 指向的缓冲区的数据字节数的位置的指针。

返回值

如果调用成功,AuxKlibGetSystemFirmwareTable 将返回STATUS_SUCCESS。 可能的返回值包括以下错误代码。

返回代码 说明
STATUS_INVALID_PARAMETER
向例程提供的参数无效。
STATUS_BUFFER_TOO_SMALL
调用方分配的缓冲区太小,但所需的缓冲区大小已写入 ReturnLength 输出参数。

注解

原始 SMBIOS 表提供程序 ('RSMB') 检索原始 SMBIOS 固件表的内容。 写入 FirmwareTableBuffer 缓冲区的数据从以下结构开始:

struct RawSMBIOSData
{
  BYTE  Used20CallingMethod;
  BYTE  SMBIOSMajorVersion;
  BYTE  SMBIOSMinorVersion;
  BYTE  DmiRevision;
  DWORD  Length;
  BYTE  SMBIOSTableData[];
};

原始固件表提供程序 ('FIRM') 检索指定物理地址范围的内容。 写入到 *ReturnLength 的值是地址范围的大小。

ACPI 表提供程序 ('ACPI') 检索指定 ACPI 表的内容。 由于 OEM 可以包含 ACPI 规范中未列出的 ACPI 固件表,因此应首先调用 AuxKlibEnumerateSystemFirmwareTables 来枚举系统固件中当前可用的所有 ACPI 表。

对于 ACPI,如果系统固件包含多个具有相同名称的表, 则 AuxKlibEnumerateSystemFirmwareTables 将全部枚举它们。 但是, AuxKlibGetSystemFirmwareTable 仅检索列表中具有此名称的第一个表。

AuxKlibGetSystemFirmwareTable 是 Win32 GetSystemFirmwareTable 函数的内核模式等效项。

在调用 AuxKlibGetSystemFirmwareTable 之前,驱动程序必须调用 AuxKlibInitialize。

AuxKlibGetSystemFirmwareTable 在 Aux_klib.h 头文件中定义,该文件包含在 WDK for Windows 8 及更高版本的 Windows 中。 若要使用此例程,驱动程序应链接到 WDK for Windows 8 及更高版本的 Windows 中包含的 Aux_klib.lib 版本。 在这些版本的 WDK 中实现 AuxKlibGetSystemFirmwareTable 可以在从 Windows Vista 开始的 Windows 版本中使用。

要求

要求
最低受支持的客户端 从 Windows Vista 开始受支持。
目标平台 通用
标头 aux_klib.h (包括 Aux_klib.h)
Library Aux_Klib.lib
IRQL PASSIVE_LEVEL

另请参阅

AuxKlibEnumerateSystemFirmwareTables

AuxKlibInitialize

GetSystemFirmwareTable