Share via


Tbsi_Get_TCG_Log-Funktion (tbs.h)

Ruft das neueste Windows-Startkonfigurationsprotokoll (WBCL) ab, das auch als TCG-Protokoll bezeichnet wird.

Syntax

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

Parameter

[in] hContext

Das TBS-Handle des Kontexts, der das Protokoll abruft. Sie erhalten diesen Parameter aus einem vorherigen Aufruf der funktion Tbsi_Context_Create .

[out] pOutputBuf

Ein Zeiger auf einen Puffer zum Empfangen und Speichern der WBCL. Dieser Parameter kann NULL sein, um den erforderlichen Puffer zu schätzen, wenn die Position, auf die von pcbOutput verwiesen wird, bei der Eingabe ebenfalls 0 ist.

[in, out] pOutputBufLen

Ein Zeiger auf eine lange ganzzahlige Zahl ohne Vorzeichen, die bei der Eingabe die Größe des Ausgabepuffers in Bytes angibt. Wenn die Funktion erfolgreich ist, empfängt dieser Parameter bei der Ausgabe die Größe der Daten in Bytes, auf die von pOutputBuf verwiesen wird. Wenn die Funktion fehlschlägt, erhält dieser Parameter keinen Wert.

Das Aufrufen der Tbsi_Get_TCG_Log-Funktion mit einem Puffer der Länge null gibt die Größe des erforderlichen Puffers zurück. Windows Vista mit SP1 und Windows Server 2008: Diese Funktionalität ist nicht verfügbar.

Rückgabewert

Rückgabecode/-wert BESCHREIBUNG
TBS_SUCCESS
0 (0x0)
Die Funktion wurde erfolgreich ausgeführt.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Interner Softwarefehler.
Hinweis Wenn TBS_E_INTERNAL_ERROR zurückgegeben wird, enthält das Systemereignisprotokoll möglicherweise die Ereignis-ID 16385 aus der TBS-Ereignisquelle mit fehlercode 0x80070032. Dies kann darauf hindeuten, dass die Hardwareplattform kein TCG-Ereignisprotokoll für das Betriebssystem bereitstellt. Manchmal kann dies durch die Installation eines BIOS-Upgrades vom Plattformhersteller behoben werden.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Ein angegebener Ausgabezeiger ist ungültig.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
Das angegebene Kontexthandle verweist nicht auf einen gültigen Kontext.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
Der Ausgabepuffer ist zu klein.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
Der Ausgabepuffer ist zu groß.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
Auf diesem Computer kann kein kompatibles TPM-Sicherheitsgerät (Trusted Platform Module) gefunden werden.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
Das TPM-Sicherheitsgerät (Trusted Platform Module) ist deaktiviert.

Windows Vista mit SP1 und Windows Server 2008: Dieser Rückgabewert ist nicht verfügbar.

Hinweise

Die Tbsi_Get_TCG_Log-Funktion gibt das TCG-Ereignisprotokoll für das System zurück, und die Puffergröße hängt von der Anzahl der Ereignisse ab.

Windows 10:

Die Funktion gibt möglicherweise ein Protokoll zurück, das je nach Hardwarefunktionen und Firmwareeinstellungen ein Format verwendet, das mit verschiedenen Hashalgorithmen kompatibel ist. Dieses Protokoll formatiert jedes Ereignis mit Ausnahme des ersten als TCG_PCR_EVENT2-Struktur:

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;

Das Protokoll formatiert das erste Ereignis als TCG_PCR_EVENT-Struktur , die weiter unten in diesem Abschnitt mit den Anmerkungen beschrieben wird. In der folgenden Tabelle werden die Werte der Member dieser Struktur für dieses erste Ereignis beschrieben.

TCG_PCR_EVENT-Mitglied Wert oder Beschreibung
PCRIndex 0
EventType EV_NO_ACTION
Digest 20 Bytes mit Nullen
EventSize Die Größe des Ereigniselements
Event Hat einen Typ von TCG_EfiSpecIdEventStruct
 

Im Folgenden wird die Syntax der TCG_EfiSpecIdEventStruct-Struktur veranschaulicht, die das Ereigniselement der TCG_PCR_EVENT-Struktur für das erste Protokollereignis verwendet.

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;

Das Signaturelement der TCG_EfiSpecIdEventStruct-Struktur wird auf eine null-beendete ASCII-Zeichenfolge von "Spec ID Event03" festgelegt, wenn das Protokoll das Format verwendet, das mit verschiedenen Hashalgorithmen kompatibel ist. Das DigestSizes-Array in diesem ersten Ereignis enthält die Digestgrößen für die verschiedenen Hashingalgorithmen, die das Protokoll verwendet. Wenn ein Parser ein Ereignis vom Typ TCG_PCR_EVENT2 überprüft, kann der Parser den TPML_DIGEST_VALUES-Member analysieren, ohne Dass Informationen zu allen vorhandenen Hashalgorithmen vorhanden sind. Die Digestgrößen im ersten Ereignis ermöglichen es dem Parser, die richtige Anzahl von Bytes für die vorhandenen Digests zu überspringen.

Wenn das Signature-Element nicht auf eine null-beendete ASCII-Zeichenfolge von "Spec ID Event03" festgelegt ist, sind die Ereignisse im Protokoll vom Typ TCG_PCR_EVENT, und die TCG_EfiSpecIdEventStruct-Struktur enthält nicht die Member NumberOfAlgorithms und DigestSizes .

Das Protokollformat, das mit verschiedenen Hashalgorithmen kompatibel ist, ermöglicht es der Plattform und dem Betriebssystem, SHA1, SHA256 oder andere Hashingalgorithmen zu verwenden. Wenn die Plattform den SHA256-Hashingalgorithmus unterstützt und das Protokollformat verwendet, das mit verschiedenen Hashingalgorithmen kompatibel ist, verwendet die Plattform den SHA256-Algorithmus anstelle von SHA1.

Windows Vista mit SP1 und Windows Server 2008: Die Funktion gibt das Protokoll direkt aus der ACPI-Tabelle zurück und gibt den gesamten zugewiesenen ACPI-Puffer zurück, einschließlich des nicht verwendeten Puffers nach allen Ereignissen.

Die von Windows definierten Ereignisse im TCG-Ereignisprotokoll sind ein Tupel von {Type, Length, Value}. Sie können das Protokoll mithilfe der folgenden TCG_PCR_EVENT Struktur aus der TCG-PC-Clientspezifikation analysieren. Sie können eine Korrelation zwischen Listen von Protokollereignissen erstellen, indem Sie die Informationen im TPM PCP-Toolkit und der TPM-Hauptspezifikation verwenden.

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

Die für den pOutputBuf-Parameter erforderliche Arbeitsspeichergröße sollte entweder die Konstante in TBS_IN_OUT_BUF_SIZE_MAX sein, die in der Headerdatei Tbs.h definiert ist, oder sie sollte durch Aufrufen der Tbsi_Get_TCG_Log-Funktion mit einem Puffer der Länge null abgerufen werden, um die erforderliche Puffergröße abzurufen.

Windows Vista mit SP1 und Windows Server 2008: Das Aufrufen der Tbsi_Get_TCG_Log-Funktion mit einem Puffer der Länge null, um die erforderliche Puffergröße abzurufen, wird nicht unterstützt. Es wird empfohlen, für die Arbeitsspeichergröße für den pOutputBuf-Parameter die Konstante TBS_IN_OUT_BUF_SIZE_MAX zu verwenden, die in der Headerdatei "Tbs.h" definiert ist.

Beispiele

#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);
    }
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista mit SP1 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile tbs.h
Bibliothek Tbs.lib
DLL Tbs.dll