Share via


funzione Tbsi_Get_TCG_Log (tbs.h)

Recupera il log di configurazione di avvio di Windows (WBCL) più recente, detto anche log TCG.

Sintassi

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

Parametri

[in] hContext

Handle TBS del contesto che sta recuperando il log. Questo parametro viene ottenuto da una chiamata precedente alla funzione Tbsi_Context_Create .

[out] pOutputBuf

Puntatore a un buffer per ricevere e archiviare il WBCL. Questo parametro può essere NULL per stimare il buffer necessario quando la posizione a cui punta pcbOutput è anche 0 sull'input.

[in, out] pOutputBufLen

Puntatore a un intero long senza segno che, all'input, specifica le dimensioni, in byte, del buffer di output. Se la funzione ha esito positivo, questo parametro, nell'output, riceve le dimensioni, in byte, dei dati a cui punta pOutputBuf. Se la funzione non riesce, questo parametro non riceve un valore.

La chiamata alla funzione Tbsi_Get_TCG_Log con un buffer di lunghezza zero restituirà le dimensioni del buffer necessarie. Windows Vista con SP1 e Windows Server 2008: Questa funzionalità non è disponibile.

Valore restituito

Codice/valore restituito Descrizione
TBS_SUCCESS
0 (0x0)
Funzione completata.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Si è verificato un errore interno del software.
Nota Se viene restituito TBS_E_INTERNAL_ERROR, 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 problema può essere risolto installando un aggiornamento DEL BIOS dal produttore della piattaforma.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Un puntatore di output specificato non è valido.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
L'handle di contesto specificato non fa riferimento a un contesto 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.

Windows Vista con SP1 e Windows Server 2008: Questo valore restituito non è disponibile.

Commenti

La funzione Tbsi_Get_TCG_Log restituisce il registro eventi TCG per il sistema e le dimensioni del buffer dipendono dal numero di eventi.

Windows 10:

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

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

Di seguito viene illustrata la sintassi della struttura TCG_EfiSpecIdEventStruct utilizzata dal membro Event della struttura TCG_PCR_EVENT per il primo evento del 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 hash diversi. La matrice DigestSizes in questo primo evento contiene le dimensioni del digest per i diversi algoritmi hash 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 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 hash diversi consente alla piattaforma e al sistema operativo di usare SHA1, SHA256 o altri algoritmi hash. 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.

Windows Vista con SP1 e Windows Server 2008: La funzione restituisce il log direttamente dalla tabella ACPI e restituisce l'intero buffer allocato ACPI, incluso il buffer inutilizzato dopo qualsiasi evento.

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 in TPM PCP Toolkit e la specifica principale del 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 con un buffer di lunghezza zero per ottenere le dimensioni del buffer necessarie.

Windows Vista con SP1 e Windows Server 2008: La chiamata alla funzione Tbsi_Get_TCG_Log con un buffer di lunghezza zero per ottenere le dimensioni del buffer necessarie non è supportata. È consigliabile usare la costante TBS_IN_OUT_BUF_SIZE_MAX, definita nel file di intestazione Tbs.h, per le dimensioni della memoria per il parametro pOutputBuf .

Esempio

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

Requisiti

   
Client minimo supportato Windows Vista con SP1 [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione tbs.h
Libreria Tbs.lib
DLL Tbs.dll