função Tbsi_Get_TCG_Log_Ex (tbs.h)

Obtém o WBCL (Log de Configuração de Inicialização do Windows), também chamado de log TCG, do tipo especificado.

Sintaxe

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

Parâmetros

[in] logType

O tipo de log a ser recuperado.

Valor Significado
TBS_TCGLOG_SRTM_CURRENT
0
O log associado a PCRs 0-15 para a sessão atual (inicialização ou retomada).
TBS_TCGLOG_DRTM_CURRENT
1
O log associado aos PCRs 17-22 para a sessão atual (inicialização ou retomada).
TBS_TCGLOG_SRTM_BOOT
2
O log associado a PCRs 0-15 para a sessão de inicialização de limpo mais recente.
TBS_TCGLOG_SRTM_RESUME
3
O log associado aos PCRs 0-15 para o currículo mais recente da hibernação.

[out, optional] pbOutput

Ponteiro para um buffer que recebe e armazena o WBCL. Defina como NULL para estimar o buffer necessário quando o local apontado por pcbOutput também estiver 0 na entrada.

[in, out] pcbOutput

Ponteiro para um inteiro longo sem sinal que especifica o tamanho, em bytes, do buffer de saída. Em caso de êxito, contém o tamanho, em bytes, dos dados apontados por pOutput. Em caso de falha, não contém um valor.

Nota Se pbOutput for NULL e o local apontado por pcbOutput for 0, a função retornará TBS_E_BUFFER_TOO_SMALL. Nesse caso, pcbOutput apontará para o tamanho necessário de pbOutput.

Retornar valor

Valor/código retornado Descrição
TBS_SUCCESS
0 (0x0)
A função foi bem-sucedida.
TBS_E_NO_EVENT_LOG
1 (0x1)
TBS_TCGLOG_DRTM_CURRENT foi solicitado, mas o DRTM não estava habilitado no sistema quando o sistema foi inicializado.
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 do evento 16385 da origem do evento TBS com 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_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 TPM (Trusted Platform Module) está desativado.

Comentários

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

A função pode retornar um log que usa um formato compatível com algoritmos de hash diferentes, dependendo dos recursos 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
 

A seguir, mostra 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 diferentes algoritmos de hash 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 o usar o formato de log compatível com diferentes algoritmos de hash, a plataforma usará o algoritmo SHA256 em vez de SHA1.

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 seguinte estrutura de TCG_PCR_EVENT da especificação TCG PC Client. 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_Ex com um buffer de comprimento zero para obter o tamanho do buffer necessário.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1803 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho tbs.h
Biblioteca Tbs.lib
DLL Tbs.dll