Share via


Tbsi_Get_TCG_Log, fonction (tbs.h)

Récupère le journal de configuration de démarrage (WBCL) Windows le plus récent, également appelé journal TCG.

Syntaxe

TBS_RESULT Tbsi_Get_TCG_Log(
  [in]      TBS_HCONTEXT hContext,
  [out]     PBYTE        pOutputBuf,
  [in, out] PUINT32      pOutputBufLen
);

Paramètres

[in] hContext

Handle TBS du contexte qui récupère le journal. Vous obtenez ce paramètre à partir d’un appel précédent à la fonction Tbsi_Context_Create .

[out] pOutputBuf

Pointeur vers une mémoire tampon pour recevoir et stocker la liste WBCL. Ce paramètre peut être NULL pour estimer la mémoire tampon requise lorsque l’emplacement pointé par pcbOutput est également 0 en entrée.

[in, out] pOutputBufLen

Pointeur vers un entier long non signé qui, à l’entrée, spécifie la taille, en octets, de la mémoire tampon de sortie. Si la fonction réussit, ce paramètre, sur la sortie, reçoit la taille, en octets, des données pointées par pOutputBuf. Si la fonction échoue, ce paramètre ne reçoit pas de valeur.

L’appel de la fonction Tbsi_Get_TCG_Log avec une mémoire tampon de longueur nulle retourne la taille de la mémoire tampon requise. Windows Vista avec SP1 et Windows Server 2008 : Cette fonctionnalité n’est pas disponible.

Valeur retournée

Code/valeur de retour Description
TBS_SUCCESS
0 (0x0)
La fonction a réussi.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Une erreur interne du logiciel s'est produite.
Note Si TBS_E_INTERNAL_ERROR est retourné, le journal des événements système peut contenir l’ID d’événement 16385 de la source d’événements TBS avec le code d’erreur 0x80070032. Cela peut indiquer que la plateforme matérielle ne fournit pas de journal des événements TCG au système d’exploitation. Parfois, vous pouvez résoudre ce problème en installant une mise à niveau du BIOS à partir du fabricant de la plateforme.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Un pointeur de sortie spécifié n’est pas valide.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
Le handle de contexte spécifié ne fait pas référence à un contexte valide.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
La mémoire tampon de sortie est trop petite.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
La mémoire tampon de sortie est trop grande.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
Impossible de trouver un appareil de sécurité de module de plateforme sécurisée (TPM) compatible sur cet ordinateur.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
L’appareil de sécurité du module de plateforme sécurisée (TPM) est désactivé.

Windows Vista avec SP1 et Windows Server 2008 : Cette valeur de retour n’est pas disponible.

Notes

La fonction Tbsi_Get_TCG_Log retourne le journal des événements TCG pour le système, et la taille de la mémoire tampon dépend du nombre d’événements.

Windows 10 :

La fonction peut retourner un journal qui utilise un format compatible avec différents algorithmes de hachage, en fonction des fonctionnalités matérielles et des paramètres de microprogramme. Ce journal met en forme chaque événement à l’exception du premier en tant que structure TCG_PCR_EVENT2 :

typedef struct {
  TCG_PCRINDEX PCRIndex;
  TCG_EVENTTYPE EventType;
  TPML_DIGEST_VALUES Digests;
  UINT32 EventSize;
  UINT8 Event[EventSize];
} TCG_PCR_EVENT2;

typedef struct {
  UINT32 Count;
  TPMT_HA Digests;
} TPML_DIGEST_VALUES;

typedef struct {
  UINT16 HashAlg;
  UINT8 Digest[size_varies_with_algorithm];
} TPMT_HA;

Le journal met en forme le premier événement en tant que structure TCG_PCR_EVENT , comme décrit plus loin dans cette section Remarques. Le tableau suivant décrit les valeurs des membres de cette structure pour ce premier événement.

TCG_PCR_EVENT membre Valeur ou description
PCRIndex 0
EventType EV_NO_ACTION
Digest 20 octets de zéros
EventSize Taille du membre d’événement
Event A un type de TCG_EfiSpecIdEventStruct
 

Voici la syntaxe de la structure TCG_EfiSpecIdEventStruct que le membre Event de la structure TCG_PCR_EVENT utilise pour le premier événement de journal.

typedef struct {
  BYTE[16] Signature;
  UINT32 PlatformClass;
  UINT8 SpecVersionMinor;
  UINT8 SpecVersionMajor;
  UINT8 SpecErrata;
  UINT8 UintNSize;
  UINT32 NumberOfAlgorithms;
  TCG_EfiSpecIdEventAlgorithmSize DigestSizes[NumberOfAlgorithms];
  UINT8 VendorInfoSize;
  UINT8 VendorInfo[VendorInfoSize];
} TCG_EfiSpecIdEventStruct;

typedef struct {
  UINT16 HashAlg;
  UINT16 DigestSize;
} TCG_EfiSpecIdEventAlgorithmSize;

Le membre Signature de la structure TCG_EfiSpecIdEventStruct est défini sur une chaîne ASCII terminée par null « Spec ID Event03 » lorsque le journal utilise le format compatible avec différents algorithmes de hachage. Le tableau DigestSizes de ce premier événement contient les tailles de synthèse pour les différents algorithmes de hachage que le journal utilise. Lorsqu’un analyseur inspecte un événement de type TCG_PCR_EVENT2, l’analyseur peut analyser le membre TPML_DIGEST_VALUES sans informations sur tous les algorithmes de hachage présents. Les tailles de synthèse du premier événement permettent à l’analyseur d’ignorer le nombre correct d’octets pour les synthèses présentes.

Si le membre Signature n’est pas défini sur une chaîne ASCII terminée par un caractère Null de « Spec ID Event03 », les événements du journal sont de type TCG_PCR_EVENT et la structure TCG_EfiSpecIdEventStruct ne contient pas les membres NumberOfAlgorithms et DigestSizes .

Le format de journal compatible avec différents algorithmes de hachage permet à la plateforme et au système d’exploitation d’utiliser SHA1, SHA256 ou d’autres algorithmes de hachage. Si la plateforme prend en charge l’algorithme de hachage SHA256 et utilise le format de journal compatible avec différents algorithmes de hachage, la plateforme utilise l’algorithme SHA256 au lieu de SHA1.

Windows Vista avec SP1 et Windows Server 2008 : La fonction retourne le journal directement à partir de la table ACPI et retourne la mémoire tampon allouée ACPI entière, y compris la mémoire tampon inutilisée après tous les événements.

Les événements définis par Windows dans le journal des événements TCG sont un tuple de {Type, Length, Value}. Vous pouvez analyser le journal à l’aide de la structure de TCG_PCR_EVENT suivante à partir de la spécification du client DE PC TCG. Vous pouvez créer une corrélation entre des listes d’événements de journal à l’aide des informations contenues dans le kit de ressources PCP TPM et la spécification principale du module de plateforme sécurisée.

typedef struct {
  TCG_PCRINDEX PCRIndex;
  TCG_EVENTTYPE EventType;
  TCG_DIGEST Digest;
  UINT32 EventSize;
  UINT8 Event[EventSize];
} TCG_PCR_EVENT;

La taille de mémoire requise pour le paramètre pOutputBuf doit être la constante dans TBS_IN_OUT_BUF_SIZE_MAX, définie dans le fichier d’en-tête Tbs.h, ou elle doit être obtenue en appelant la fonction Tbsi_Get_TCG_Log avec une mémoire tampon de longueur nulle pour obtenir la taille de mémoire tampon requise.

Windows Vista avec SP1 et Windows Server 2008 : L’appel de la fonction Tbsi_Get_TCG_Log avec une mémoire tampon de longueur nulle pour obtenir la taille de mémoire tampon requise n’est pas pris en charge. Nous vous recommandons d’utiliser la constante TBS_IN_OUT_BUF_SIZE_MAX, définie dans le fichier d’en-tête Tbs.h, pour la taille de mémoire du paramètre pOutputBuf .

Exemples

#include <windows.h>
#include <tbs.h>
#pragma comment(lib, "Tbs.lib")

void main()
{
    TBS_RESULT result;
    TBS_HCONTEXT hContext;
    TBS_CONTEXT_PARAMS contextParams;
    contextParams.version = TBS_CONTEXT_VERSION_ONE;
    result = Tbsi_Context_Create(&contextParams, &hContext);
    if (result == TBS_SUCCESS) 
    {
        UINT32 iLogSize = TBS_IN_OUT_BUF_SIZE_MAX;
        BYTE* pLogBuffer = new BYTE[iLogSize];
        result = Tbsi_Get_TCG_Log(hContext, pLogBuffer, &iLogSize);
    }
}

Configuration requise

   
Client minimal pris en charge Windows Vista avec SP1 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête tbs.h
Bibliothèque Tbs.lib
DLL Tbs.dll