Share via


Tbsi_Get_TCG_Log función (tbs.h)

Recupera el registro de configuración de arranque de Windows (WBCL) más reciente, también denominado registro de TCG.

Sintaxis

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

Parámetros

[in] hContext

Identificador TBS del contexto que está recuperando el registro. Este parámetro se obtiene de una llamada anterior a la función Tbsi_Context_Create .

[out] pOutputBuf

Puntero a un búfer para recibir y almacenar la WBCL. Este parámetro puede ser NULL para calcular el búfer necesario cuando la ubicación a la que apunta pcbOutput también es 0 en la entrada.

[in, out] pOutputBufLen

Puntero a un entero largo sin signo que, en la entrada, especifica el tamaño, en bytes, del búfer de salida. Si la función se realiza correctamente, este parámetro, en la salida, recibe el tamaño, en bytes, de los datos a los que apunta pOutputBuf. Si se produce un error en la función, este parámetro no recibe un valor.

Al llamar a la función Tbsi_Get_TCG_Log con un búfer de longitud cero, se devolverá el tamaño del búfer necesario. Windows Vista con SP1 y Windows Server 2008: Esta funcionalidad no está disponible.

Valor devuelto

Código o valor devuelto Descripción
TBS_SUCCESS
0 (0x0)
La función se ha realizado correctamente.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Error interno de software.
Nota Si se devuelve TBS_E_INTERNAL_ERROR, el registro de eventos del sistema puede contener el identificador de evento 16385 del origen del evento TBS con el código de error 0x80070032. Esto puede indicar que la plataforma de hardware no proporciona un registro de eventos TCG al sistema operativo. A veces, esto se puede resolver mediante la instalación de una actualización del BIOS desde el fabricante de la plataforma.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Un puntero de salida especificado no es válido.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
El identificador de contexto especificado no hace referencia a un contexto válido.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
El búfer de salida es demasiado pequeño.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
El búfer de salida es demasiado grande.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
No se encuentra un dispositivo de seguridad de módulo de plataforma segura (TPM) compatible en este equipo.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
El dispositivo de seguridad del módulo de plataforma segura (TPM) está desactivado.

Windows Vista con SP1 y Windows Server 2008: Este valor devuelto no está disponible.

Observaciones

La función Tbsi_Get_TCG_Log devuelve el registro de eventos de TCG para el sistema y el tamaño del búfer depende del número de eventos.

Windows 10:

La función puede devolver un registro que use un formato que sea compatible con diferentes algoritmos hash, en función de las funcionalidades de hardware y la configuración del firmware. Este registro da formato a cada evento excepto el primero como una estructura de 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;

El registro da formato al primer evento como una estructura de TCG_PCR_EVENT , que se describe más adelante en esta sección Comentarios. En la tabla siguiente se describen los valores de los miembros de esta estructura para este primer evento.

TCG_PCR_EVENT miembro Valor o descripción
PCRIndex 0
EventType EV_NO_ACTION
Digest 20 bytes de ceros
EventSize Tamaño del miembro Event
Evento Tiene un tipo de TCG_EfiSpecIdEventStruct
 

A continuación se muestra la sintaxis de la estructura TCG_EfiSpecIdEventStruct que usa el miembro Event de la estructura TCG_PCR_EVENT para el primer evento de registro.

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;

El miembro Signature de la estructura TCG_EfiSpecIdEventStruct se establece en una cadena ASCII terminada en null de "Spec ID Event03" cuando el registro usa el formato compatible con distintos algoritmos hash. La matriz DigestSizes de este primer evento contiene los tamaños de resumen de los distintos algoritmos hash que usa el registro. Cuando un analizador inspecciona un evento de tipo TCG_PCR_EVENT2, el analizador puede analizar el miembro TPML_DIGEST_VALUES sin información sobre todos los algoritmos hash presentes. Los tamaños de resumen del primer evento permiten al analizador omitir el número correcto de bytes para los resúmenes que están presentes.

Si el miembro Signature no está establecido en una cadena ASCII terminada en null de "Spec ID Event03", los eventos del registro son de tipo TCG_PCR_EVENT y la estructura TCG_EfiSpecIdEventStruct no contiene los miembros NumberOfAlgorithms y DigestSizes .

El formato de registro que es compatible con diferentes algoritmos hash permite que la plataforma y el sistema operativo usen SHA1, SHA256 u otros algoritmos hash. Si la plataforma admite el algoritmo hash SHA256 y usa el formato de registro que es compatible con diferentes algoritmos hash, la plataforma usa el algoritmo SHA256 en lugar de SHA1.

Windows Vista con SP1 y Windows Server 2008: La función devuelve el registro directamente desde la tabla ACPI y devuelve todo el búfer asignado ACPI, incluido el búfer sin usar después de cualquier evento.

Los eventos definidos por Windows en el registro de eventos TCG son una tupla de {Type, Length, Value}. Puede analizar el registro mediante la siguiente estructura de TCG_PCR_EVENT de la especificación cliente de TCG PC. Puede crear una correlación entre listas de eventos de registro mediante la información del kit de herramientas de PCP de TPM y la especificación principal de TPM.

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

El tamaño de memoria necesario para el parámetro pOutputBuf debe ser la constante en TBS_IN_OUT_BUF_SIZE_MAX, definida en el archivo de encabezado Tbs.h, o bien debe obtenerse llamando a la función Tbsi_Get_TCG_Log con un búfer de longitud cero para obtener el tamaño de búfer necesario.

Windows Vista con SP1 y Windows Server 2008: No se admite llamar a la función Tbsi_Get_TCG_Log con un búfer de longitud cero para obtener el tamaño de búfer necesario. Se recomienda usar la constante TBS_IN_OUT_BUF_SIZE_MAX, definida en el archivo de encabezado Tbs.h, para el tamaño de memoria del parámetro pOutputBuf .

Ejemplos

#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 compatible Windows Vista con SP1 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado tbs.h
Library Tbs.lib
Archivo DLL Tbs.dll