funzione Tbsi_Get_TCG_Log_Ex (tbs.h)

Ottiene il log di configurazione di avvio di Windows (WBCL), noto anche come log TCG, del tipo specificato.

Sintassi

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

Parametri

[in] logType

Tipo di log da recuperare.

Valore Significato
TBS_TCGLOG_SRTM_CURRENT
0
Log associato a PCR 0-15 per la sessione corrente (avvio o ripresa).
TBS_TCGLOG_DRTM_CURRENT
1
Log associato alle richieste pcr 17-22 per la sessione corrente (avvio o ripresa).
TBS_TCGLOG_SRTM_BOOT
2
Log associato alle richieste pcr 0-15 per la sessione di avvio pulito più recente.
TBS_TCGLOG_SRTM_RESUME
3
Log associato a PCR 0-15 per il ripreso più recente dall'ibernazione.

[out, optional] pbOutput

Puntatore a un buffer che riceve e archivia WBCL. Impostare su NULL per stimare il buffer richiesto quando la posizione puntata da pcbOutput è anche 0 in input.

[in, out] pcbOutput

Puntatore a un intero lungo senza segno che specifica le dimensioni, in byte, del buffer di output. In caso di esito positivo, contiene le dimensioni, in byte, dei dati a cui fa riferimento pOutput. In caso di errore, non contiene un valore.

Nota Se pbOutput è NULL e la posizione puntata da pcbOutput è 0, la funzione restituisce TBS_E_BUFFER_TOO_SMALL. In tal caso , pcbOutput punta alla dimensione necessaria di pbOutput.

Valore restituito

Codice/valore restituito Descrizione
TBS_SUCCESS
0 (0x0)
Funzione completata.
TBS_E_NO_EVENT_LOG
1 (0x1)
TBS_TCGLOG_DRTM_CURRENT è stato richiesto, ma DRTM non è stato abilitato nel sistema quando il sistema è stato avviato.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Si è verificato un errore interno del software.
Nota Se TBS_E_INTERNAL_ERROR viene restituito, il registro eventi di sistema può contenere l'ID evento 16385 dall'origine evento TBS con codice di errore 0x80070032. Ciò può indicare che la piattaforma hardware non fornisce un registro eventi TCG al sistema operativo. A volte questo può essere risolto installando un aggiornamento BIOS dal produttore della piattaforma.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Un puntatore di output specificato non è valido.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
Il buffer di output è troppo piccolo.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
Il buffer di output è troppo grande.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
Non è possibile trovare un dispositivo di sicurezza TPM (Trusted Platform Module) compatibile in questo computer.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
Il dispositivo di sicurezza TPM (Trusted Platform Module) viene disattivato.

Commenti

La funzione Tbsi_Get_TCG_Log_Ex restituisce il registro eventi TCG per il sistema e la dimensione del buffer dipende dal numero di eventi.

La funzione può restituire un log che usa un formato compatibile con algoritmi di hash diversi, a seconda delle funzionalità hardware e delle impostazioni del firmware. Questo log formatta ogni evento tranne il primo come struttura di 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;

Il log formatta il primo evento come struttura TCG_PCR_EVENT , descritta più avanti in questa sezione Osservazioni. Nella tabella seguente vengono descritti i valori dei membri di questa struttura per questo primo evento.

TCG_PCR_EVENT membro Valore o descrizione
PCRIndex 0
EventType EV_NO_ACTION
Digest 20 byte di zero
EventSize Dimensione del membro evento
Event Ha un tipo di TCG_EfiSpecIdEventStruct
 

Di seguito viene illustrata la sintassi della struttura TCG_EfiSpecIdEventStruct utilizzata dal membro Eventodella strutturaTCG_PCR_EVENT per il primo evento di log.

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;

Il membro Signature della struttura TCG_EfiSpecIdEventStruct è impostato su una stringa ASCII con terminazione null di "Spec ID Event03" quando il log usa il formato compatibile con algoritmi di hash diversi. La matrice DigestSizes in questo primo evento contiene le dimensioni del digest per i diversi algoritmi di hashing usati dal log. Quando un parser controlla un evento di tipo TCG_PCR_EVENT2, il parser può analizzare il membro TPML_DIGEST_VALUES senza informazioni su tutti gli algoritmi di hash presenti. Le dimensioni del digest nel primo evento consentono al parser di ignorare il numero corretto di byte per i digest presenti.

Se il membro Signature non è impostato su una stringa ASCII con terminazione null di "Spec ID Event03", gli eventi nel log sono di tipo TCG_PCR_EVENT e la struttura TCG_EfiSpecIdEventStruct non contiene i membri NumberOfAlgorithms e DigestSizes.

Il formato di log compatibile con algoritmi di hash diversi consente alla piattaforma e al sistema operativo di usare SHA1, SHA256 o altri algoritmi di hashing. Se la piattaforma supporta l'algoritmo hash SHA256 e usa il formato di log compatibile con algoritmi hash diversi, la piattaforma usa l'algoritmo SHA256 anziché SHA1.

Gli eventi definiti da Windows nel registro eventi TCG sono una tupla di {Type, Length, Value}. È possibile analizzare il log usando la struttura di TCG_PCR_EVENT seguente dalla specifica client pc TCG. È possibile creare una correlazione tra elenchi di eventi di log usando le informazioni contenute in TPM PCP Toolkit e la specifica principale TPM.

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

Le dimensioni di memoria necessarie per il parametro pOutputBuf devono essere la costante in TBS_IN_OUT_BUF_SIZE_MAX, definita nel file di intestazione Tbs.h oppure deve essere ottenuta chiamando la funzione Tbsi_Get_TCG_Log_Ex con un buffer di lunghezza zero per ottenere le dimensioni del buffer necessarie.

Requisiti

Requisito Valore
Client minimo supportato Windows 10, versione 1803 [solo app desktop]
Server minimo supportato Windows Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione tbs.h
Libreria Tbs.lib
DLL Tbs.dll