GetSystemFirmwareTable-Funktion (sysinfoapi.h)

Ruft die angegebene Firmwaretabelle vom Firmwaretabellenanbieter ab.

Syntax

UINT GetSystemFirmwareTable(
  [in]  DWORD FirmwareTableProviderSignature,
  [in]  DWORD FirmwareTableID,
  [out] PVOID pFirmwareTableBuffer,
  [in]  DWORD BufferSize
);

Parameter

[in] FirmwareTableProviderSignature

Der Bezeichner des Firmwaretabellenanbieters, an den die Abfrage weitergeleitet werden soll. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
'ACPI' Der ACPI-Firmwaretabellenanbieter.
"FIRM" Der Rohware-Firmwaretabellenanbieter.
"RSMB" Der rohe SMBIOS-Firmwaretabellenanbieter.

[in] FirmwareTableID

Der Bezeichner der Firmwaretabelle. Dieser Bezeichner ist little endian. Sie müssen die Zeichen in der Zeichenfolge umkehren.

FACP ist beispielsweise ein ACPI-Anbieter, wie im Feld Signatur der DESCRIPTION_HEADER-Struktur in der ACPI-Spezifikation beschrieben (siehe Advanced Configuration and Power Interface (ACPI)-Spezifikation. Verwenden Sie daher "PCAF", um die FACP-Tabelle anzugeben, wie im folgenden Beispiel gezeigt:

retVal = GetSystemFirmwareTable('ACPI', 'PCAF', pBuffer, BUFSIZE);

Weitere Informationen finden Sie im Abschnitt Hinweise der Funktion EnumSystemFirmwareTables .

[out] pFirmwareTableBuffer

Ein Zeiger auf einen Puffer, der die angeforderte Firmwaretabelle empfängt. Wenn dieser Parameter NULL ist, ist der Rückgabewert die erforderliche Puffergröße.

Weitere Informationen zum Inhalt dieses Puffers finden Sie im Abschnitt Hinweise.

[in] BufferSize

Die Größe des pFirmwareTableBuffer-Puffers in Bytes.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert die Anzahl der Bytes, die in den Puffer geschrieben wurden. Dieser Wert ist immer kleiner oder gleich BufferSize.

Wenn die Funktion fehlschlägt, weil der Puffer nicht groß genug ist, ist der Rückgabewert die erforderliche Puffergröße in Bytes. Dieser Wert ist immer größer als BufferSize.

Wenn die Funktion aus einem anderen Grund fehlschlägt, ist der Rückgabewert 0. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Ab Windows 10 Version 1803 können universelle Windows-Apps auf die INFORMATIONEN des Systemverwaltungs-BIOS (SMBIOS) zugreifen, indem sie die eingeschränkte smbios-Funktion im App-Manifest deklarieren. Weitere Informationen finden Sie unter Zugreifen auf SMBIOS-Informationen aus einer universellen Windows-App . Über eine universelle Windows-App kann nur auf rohe SMBIOS-Firmwaretabellen (RSMB) zugegriffen werden.

Ab Windows Server 2003 mit Service Pack 1 (SP1) können Anwendungen nicht auf das Objekt \Device\PhysicalMemory zugreifen. Der Zugriff auf dieses Objekt ist auf Kernelmodustreiber beschränkt. Diese Änderung wirkt sich auf Anwendungen aus, die das Systemverwaltungs-BIOS (SMBIOS) oder andere BIOS-Daten lesen, die in der niedrigsten 1 MB des physischen Arbeitsspeichers gespeichert sind. Anwendungen verfügen über die folgenden Alternativen zum Lesen von Daten aus wenig physischem Arbeitsspeicher:

  • Rufen Sie die SMBIOS-Eigenschaften mithilfe von WMI ab. Viele einzelne Eigenschaften sind in den Win32-Klassen enthalten. Sie können auch die SMBIOS-Rohdaten mithilfe der MSSMBios_RawSMBiosTables-Klasse in einem einzelnen Puffer abrufen.
  • Verwenden Sie die GetSystemFirmwareTable-Funktion , um die unformatierte SMBIOS-Firmwaretabelle zu lesen.
Es gibt keine Möglichkeit für Anwendungen, in wenig physischen Arbeitsspeicher zu schreiben.

Der RAW-SMBIOS-Tabellenanbieter ("RSMB") ruft den Inhalt der unformatierten SMBIOS-Firmwaretabelle ab. Der pFirmwareTableBuffer-Puffer empfängt die folgenden Daten:

#include <windows.h>

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

Der Rohwaretabellenanbieter ("FIRM") ruft den Inhalt des angegebenen physischen Adressbereichs ab. Die Funktion gibt die Größe des Adressbereichs zurück.

Der ACPI-Tabellenanbieter ('ACPI') ruft den Inhalt der angegebenen ACPI-Tabelle ab. Da OEMs ACPI-Firmwaretabellen enthalten können, die nicht in der ACPI-Spezifikation aufgeführt sind, sollten Sie zuerst EnumSystemFirmwareTables aufrufen, um alle ACPI-Tabellen aufzulisten, die sich derzeit im System befinden.

Wenn das System für ACPI mehrere Tabellen mit demselben Namen enthält, werden diese alle mit EnumSystemFirmwareTables aufgelistet. GetSystemFirmwareTable ruft jedoch nur die erste Tabelle in der Liste mit diesem Namen ab.

Beispiele

Im folgenden Beispiel wird das Abrufen der SMBIOS-Tabelle veranschaulicht.

DWORD error = ERROR_SUCCESS;
DWORD smBiosDataSize = 0;
RawSMBIOSData* smBiosData = NULL; // Defined in this link
DWORD bytesWritten = 0;

// Query size of SMBIOS data.
smBiosDataSize = GetSystemFirmwareTable('RSMB', 0, NULL, 0);

// Allocate memory for SMBIOS data
smBiosData = (RawSMBIOSData*) HeapAlloc(GetProcessHeap(), 0, smBiosDataSize);
if (!smBiosData) {
    error = ERROR_OUTOFMEMORY;
    goto exit;
}

// Retrieve the SMBIOS table
bytesWritten = GetSystemFirmwareTable('RSMB', 0, smBiosData, smBiosDataSize);

if (bytesWritten != smBiosDataSize) {
    error = ERROR_INVALID_DATA;
    goto exit;
}

// Process the SMBIOS data and free the memory under an exit label

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista, Windows XP Professional x64 Edition [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008, Windows Server 2003 mit SP1 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile sysinfoapi.h (einschließlich Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Zugreifen auf SMBIOS-Informationen über eine universelle Windows-App

EnumSystemFirmwareTables

Systeminformationsfunktionen