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 app 可以宣告應用程式指令清單中的 smbios 受限制功能,以存取系統管理 BIOS (SMBIOS) 資訊。 如需詳細資訊,請參閱 從通用 Windows App 存取 SMBIOS 資訊 。 只有原始SMBIOS (RSMB) 韌體資料表才能從通用 Windows 應用程式存取。
自 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的實體記憶體,以及分別對應至0xFFFFF 0xE0000。
ACPI 資料表提供者 (『ACPI』) 會傳回 DWORD 資料表標識碼的清單。 每個傳回的標識碼都會對應至目前位於系統 ACPI 命名空間中 ACPI 數據表之DESCRIPTION_HEADER結構的 [簽章] 字段。
針對 ACPI,如果系統包含多個具有相同名稱的數據表,則會以 EnumSystemFirmwareTables 列舉它們。 不過, GetSystemFirmwareTable 只會擷取清單中具有此名稱的第一個數據表。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista、Windows XP Professional x64 Edition [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008、Windows Server 2003 SP1 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | sysinfoapi.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |