GetSystemFirmwareTable, fonction (sysinfoapi.h)

Récupère la table de microprogramme spécifiée à partir du fournisseur de tables de microprogrammes.

Syntaxe

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

Paramètres

[in] FirmwareTableProviderSignature

Identificateur du fournisseur de table de microprogramme vers lequel la requête doit être dirigée. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
'ACPI' Fournisseur de table de microprogramme ACPI.
'FIRM' Fournisseur de table de microprogrammes brut.
'RSMB' Fournisseur de table de microprogrammes SMBIOS brut.

[in] FirmwareTableID

Identificateur de la table de microprogramme. Cet identificateur est little endian, vous devez inverser les caractères dans la chaîne.

Par exemple, FACP est un fournisseur ACPI, comme décrit dans le champ Signature de la structure DESCRIPTION_HEADER dans la spécification ACPI (voir la spécification ACPI (Advanced Configuration and Power Interface). Par conséquent, utilisez « PCAF » pour spécifier la table FACP, comme illustré dans l’exemple suivant :

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

Pour plus d’informations, consultez la section Notes de la fonction EnumSystemFirmwareTables .

[out] pFirmwareTableBuffer

Pointeur vers une mémoire tampon qui reçoit la table de microprogramme demandée. Si ce paramètre a la valeur NULL, la valeur de retour correspond à la taille de mémoire tampon requise.

Pour plus d’informations sur le contenu de cette mémoire tampon, consultez la section Remarques.

[in] BufferSize

Taille de la mémoire tampon pFirmwareTableBuffer , en octets.

Valeur retournée

Si la fonction réussit, la valeur de retour est le nombre d’octets écrits dans la mémoire tampon. Cette valeur sera toujours inférieure ou égale à BufferSize.

Si la fonction échoue parce que la mémoire tampon n’est pas suffisamment grande, la valeur de retour correspond à la taille de mémoire tampon requise, en octets. Cette valeur est toujours supérieure à BufferSize.

Si la fonction échoue pour une autre raison, la valeur de retour est zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

À compter de Windows 10 version 1803, les applications Windows universelles peuvent accéder aux informations du BIOS de gestion du système (SMBIOS) en déclarant la fonctionnalité restreinte smbios dans le manifeste de l’application. Pour plus d’informations, consultez Accéder aux informations SMBIOS à partir d’une application Windows universelle . Seules les tables de microprogrammeS BRUTES SMBIOS (RSMB) sont accessibles à partir d’une application Windows universelle.

Depuis Windows Server 2003 avec Service Pack 1 (SP1), les applications ne peuvent pas accéder à l’objet \Device\PhysicalMemory. L’accès à cet objet est limité aux pilotes en mode noyau. Cette modification affecte les applications lues dans le BIOS de gestion du système (SMBIOS) ou d’autres données BIOS stockées dans la mémoire physique la plus faible de 1 Mo. Les applications ont les alternatives suivantes pour lire les données à partir d’une mémoire physique faible :

  • Récupérez les propriétés SMBIOS à l’aide de WMI. De nombreuses propriétés individuelles sont contenues dans les classes Win32. Vous pouvez également récupérer les données BRUTEs SMBIOS dans une seule mémoire tampon à l’aide de la classe MSSMBios_RawSMBiosTables .
  • Utilisez la fonction GetSystemFirmwareTable pour lire la table de microprogrammes SMBIOS brute.
Il n’existe aucun moyen pour les applications d’écrire dans une mémoire physique faible.

Le fournisseur de table SMBIOS brute (« RSMB ») récupère le contenu de la table de microprogramme SMBIOS brute. La mémoire tampon pFirmwareTableBuffer reçoit les données suivantes :

#include <windows.h>

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

Le fournisseur de table de microprogrammes brute (« FIRM ») récupère le contenu de la plage d’adresses physiques spécifiée. La fonction retourne la taille de la plage d’adresses.

Le fournisseur de table ACPI (« ACPI ») récupère le contenu de la table ACPI spécifiée. Étant donné que les oem peuvent inclure des tables de microprogrammes ACPI qui ne sont pas répertoriées dans la spécification ACPI, vous devez d’abord appeler EnumSystemFirmwareTables pour énumérer toutes les tables ACPI actuellement sur le système.

Pour ACPI, si le système contient plusieurs tables portant le même nom, elles sont toutes énumérées avec EnumSystemFirmwareTables. Toutefois, GetSystemFirmwareTable récupère uniquement la première table de la liste portant ce nom.

Exemples

L’exemple suivant illustre la récupération de la table SMBIOS.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista, Windows XP Professionnel Édition x64 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008, Windows Server 2003 avec SP1 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête sysinfoapi.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

Accéder aux informations SMBIOS à partir d’une application Windows universelle

EnumSystemFirmwareTables

Fonctions d’information système