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 |
---|---|
|
A função foi bem-sucedida. |
|
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.
|
|
Um ponteiro de saída especificado não é válido. |
|
O identificador de contexto especificado não se refere a um contexto válido. |
|
O buffer de saída é muito pequeno. |
|
O buffer de saída é muito grande. |
|
Um dispositivo de segurança TPM (Trusted Platform Module) compatível não pode ser encontrado neste computador. |
|
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 |