Compartilhar via


função Tbsi_Get_TCG_Log (tbs.h)

Recupera o LOG de Configuração de Inicialização do Windows (WBCL) mais recente, também conhecido como um log TCG.

Sintaxe

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

Parâmetros

[in] hContext

O identificador TBS do contexto que está recuperando o log. Você obtém esse parâmetro de uma chamada anterior para a função Tbsi_Context_Create .

[out] pOutputBuf

Um ponteiro para um buffer para receber e armazenar o WBCL. Esse parâmetro pode ser NULL para estimar o buffer necessário quando o local apontado por pcbOutput também é 0 na entrada.

[in, out] pOutputBufLen

Um ponteiro para um inteiro longo sem sinal que, na entrada, especifica o tamanho, em bytes, do buffer de saída. Se a função for bem-sucedida, esse parâmetro, na saída, receberá o tamanho, em bytes, dos dados apontados por pOutputBuf. Se a função falhar, esse parâmetro não receberá um valor.

Chamar a função Tbsi_Get_TCG_Log com um buffer de comprimento zero retornará o tamanho do buffer necessário. Windows Vista com SP1 e Windows Server 2008: Essa funcionalidade não está disponível.

Retornar valor

Código/valor de retorno Descrição
TBS_SUCCESS
0 (0x0)
A função foi bem-sucedida.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Ocorreu um erro interno de software.
Nota Se TBS_E_INTERNAL_ERROR for retornado, o log de eventos do sistema poderá conter a ID de evento 16385 da origem do evento TBS com o código de erro 0x80070032. Isso pode indicar que a plataforma de hardware não fornece um log de eventos TCG para o sistema operacional. Às vezes, isso pode ser resolvido instalando uma atualização do BIOS do fabricante da plataforma.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Um ponteiro de saída especificado não é válido.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
O identificador de contexto especificado não se refere a um contexto válido.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
O buffer de saída é muito pequeno.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
O buffer de saída é muito grande.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
Um dispositivo de segurança TPM (Trusted Platform Module) compatível não pode ser encontrado neste computador.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
O dispositivo de segurança do TPM (Trusted Platform Module) está desativado.

Windows Vista com SP1 e Windows Server 2008: Esse valor retornado não está disponível.

Comentários

A função Tbsi_Get_TCG_Log retorna o Log de Eventos TCG para o sistema e o tamanho do buffer depende do número de eventos.

Windows 10:

A função pode retornar um log que usa um formato compatível com algoritmos de hash diferentes, dependendo das funcionalidades de hardware e das configurações de firmware. Esse log formata cada evento, exceto o primeiro como uma estrutura 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;

O log formata o primeiro evento como uma estrutura TCG_PCR_EVENT , que é descrita posteriormente nesta seção Comentários. A tabela a seguir descreve os valores dos membros dessa estrutura para este primeiro evento.

membro TCG_PCR_EVENT Valor ou descrição
PCRIndex 0
EventType EV_NO_ACTION
Resumo da mensagem 20 bytes de zeros
EventSize O tamanho do membro event
Evento Tem um tipo de TCG_EfiSpecIdEventStruct
 

Veja a seguir a sintaxe da estrutura TCG_EfiSpecIdEventStruct que o membro Event da estrutura TCG_PCR_EVENT usa para o primeiro evento de 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;

O membro Signature da estrutura TCG_EfiSpecIdEventStruct é definido como uma cadeia de caracteres ASCII terminada em nulo de "Spec ID Event03" quando o log usa o formato compatível com algoritmos de hash diferentes. A matriz DigestSizes neste primeiro evento contém os tamanhos de resumo para os diferentes algoritmos de hash que o log usa. Quando um analisador inspeciona um evento do tipo TCG_PCR_EVENT2, o analisador pode analisar o membro TPML_DIGEST_VALUES sem informações sobre todos os algoritmos de hash presentes. Os tamanhos de resumo no primeiro evento permitem que o analisador ignore o número correto de bytes para os resumos presentes.

Se o membro Signature não estiver definido como uma cadeia de caracteres ASCII terminada em nulo de "Spec ID Event03", os eventos no log serão do tipo TCG_PCR_EVENT e a estrutura TCG_EfiSpecIdEventStruct não conterá os membros NumberOfAlgorithms e DigestSizes .

O formato de log compatível com algoritmos de hash diferentes permite que a plataforma e o sistema operacional usem SHA1, SHA256 ou outros algoritmos de hash. Se a plataforma der suporte ao algoritmo de hash SHA256 e usar o formato de log compatível com algoritmos de hash diferentes, a plataforma usará o algoritmo SHA256 em vez de SHA1.

Windows Vista com SP1 e Windows Server 2008: A função retorna o log diretamente da tabela ACPI e retorna todo o buffer alocado da ACPI, incluindo o buffer não utilizado após qualquer evento.

Os eventos definidos pelo Windows no log de eventos TCG são uma tupla de {Type, Length, Value}. Você pode analisar o log usando a estrutura de TCG_PCR_EVENT a seguir da especificação do Cliente de PC TCG. Você pode criar uma correlação entre listas de eventos de log usando as informações no TPM PCP Toolkit e na Especificação Principal do TPM.

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

O tamanho da memória necessário para o parâmetro pOutputBuf deve ser a constante em TBS_IN_OUT_BUF_SIZE_MAX, definida no arquivo de cabeçalho Tbs.h ou deve ser obtida chamando a função Tbsi_Get_TCG_Log com um buffer de comprimento zero para obter o tamanho do buffer necessário.

Windows Vista com SP1 e Windows Server 2008: Não há suporte para chamar a função Tbsi_Get_TCG_Log com um buffer de comprimento zero para obter o tamanho do buffer necessário. Recomendamos que você use a constante TBS_IN_OUT_BUF_SIZE_MAX, definida no arquivo de cabeçalho Tbs.h, para o tamanho da memória do parâmetro pOutputBuf .

Exemplos

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

Requisitos

   
Cliente mínimo com suporte Windows Vista com SP1 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho tbs.h
Biblioteca Tbs.lib
DLL Tbs.dll