Tbsi_Get_TCG_Log_Ex-Funktion (tbs.h)

Ruft das Windows-Startkonfigurationsprotokoll (WBCL), auch als TCG-Protokoll bezeichnet, des angegebenen Typs ab.

Syntax

TBS_RESULT Tbsi_Get_TCG_Log_Ex(
  [in]            UINT32  logType,
  [out, optional] PBYTE   pbOutput,
  [in, out]       PUINT32 pcbOutput
);

Parameter

[in] logType

Der Typ des abzurufenden Protokolls.

Wert Bedeutung
TBS_TCGLOG_SRTM_CURRENT
0
Das Protokoll, das PCRs 0-15 für die aktuelle Sitzung zugeordnet ist (Start oder Fortsetzen).
TBS_TCGLOG_DRTM_CURRENT
1
Das Protokoll, das PCRs 17-22 für die aktuelle Sitzung zugeordnet ist (Start oder Fortsetzen).
TBS_TCGLOG_SRTM_BOOT
2
Das Protokoll, das PCRs 0-15 für die letzte sauber Startsitzung zugeordnet ist.
TBS_TCGLOG_SRTM_RESUME
3
Das Protokoll, das pcRs 0-15 für den letzten Lebenslauf aus dem Ruhezustand zugeordnet ist.

[out, optional] pbOutput

Zeiger auf einen Puffer, der die WBCL empfängt und speichert. Legen Sie diese Einstellung auf NULL fest, um den erforderlichen Puffer zu schätzen, wenn die Position, auf die von pcbOutput verwiesen wird, bei der Eingabe ebenfalls 0 ist.

[in, out] pcbOutput

Zeiger auf eine ganze Zahl ohne Vorzeichen, die die Größe des Ausgabepuffers in Bytes angibt. Enthält bei Erfolg die Größe der Daten in Byte, auf die von pOutput verwiesen wird. Enthält bei Fehler keinen Wert.

Hinweis Wenn pbOutputNULL ist und die Position, auf die von pcbOutput verwiesen wird, 0 ist, gibt die Funktion TBS_E_BUFFER_TOO_SMALL zurück. In diesem Fall zeigt pcbOutput auf die erforderliche Größe von pbOutput.

Rückgabewert

Rückgabecode/-wert BESCHREIBUNG
TBS_SUCCESS
0 (0x0)
Die Funktion wurde erfolgreich ausgeführt.
TBS_E_NO_EVENT_LOG
1 (0x1)
TBS_TCGLOG_DRTM_CURRENT wurde angefordert, aber DRTM wurde auf dem System nicht aktiviert, als das System gestartet wurde.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Interner Softwarefehler.
Hinweis Wenn TBS_E_INTERNAL_ERROR zurückgegeben wird, kann das Systemereignisprotokoll die Ereignis-ID 16385 aus der TBS-Ereignisquelle mit fehlercode 0x80070032 enthalten. Dies kann darauf hindeuten, dass die Hardwareplattform kein TCG-Ereignisprotokoll für das Betriebssystem bereitstellt. Manchmal kann dies durch Installieren eines BIOS-Upgrades vom Plattformhersteller behoben werden.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Ein angegebener Ausgabezeiger ist ungültig.
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) wird deaktiviert.

Hinweise

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

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

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 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 Byte von Nullen
EventSize Die Größe des Ereigniselements
Event Verfügt über einen Typ von TCG_EfiSpecIdEventStruct
 

Im Folgenden wird die Syntax der TCG_EfiSpecIdEventStruct-Struktur veranschaulicht, die der Event-Member 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;

Der Signature-Member der TCG_EfiSpecIdEventStruct-Struktur wird auf eine NULL-endende 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 im Protokoll verwendet werden. Wenn ein Parser ein Ereignis vom Typ TCG_PCR_EVENT2 untersucht, kann der Parser den TPML_DIGEST_VALUES-Member ohne Informationen zu allen vorhandenen Hashalgorithmen analysieren. Die Digestgrößen im ersten Ereignis ermöglichen es dem Parser, die richtige Anzahl von Bytes für die vorhandenen Digests zu überspringen.

Wenn der Signature-Member nicht auf eine MIT NULL endende 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 Hashingalgorithmen kompatibel ist, ermöglicht der Plattform und dem Betriebssystem die Verwendung von SHA1-, SHA256- oder anderen Hashingalgorithmen. 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.

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. Mithilfe der Informationen im TPM PCP Toolkit und der TPM-Hauptspezifikation können Sie eine Korrelation zwischen Listen von Protokollereignissen erstellen.

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 Tbs.h-Headerdatei definiert ist, oder sie sollte durch Aufrufen der Tbsi_Get_TCG_Log_Ex-Funktion mit einem Puffer der Länge null abgerufen werden, um die erforderliche Puffergröße zu erhalten.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1803 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile tbs.h
Bibliothek Tbs.lib
DLL Tbs.dll