Compartir a través de


función Tbsi_Get_TCG_Log_Ex (tbs.h)

Obtiene el registro de configuración de arranque de Windows (WBCL), también denominado registro de TCG, del tipo especificado.

Sintaxis

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

Parámetros

[in] logType

Tipo de registro que se va a recuperar.

Valor Significado
TBS_TCGLOG_SRTM_CURRENT
0
Registro asociado a PCR 0-15 para la sesión actual (arranque o reanudación).
TBS_TCGLOG_DRTM_CURRENT
1
Registro asociado a PCR 17-22 para la sesión actual (arranque o reanudación).
TBS_TCGLOG_SRTM_BOOT
2
Registro asociado a PCR 0-15 para la sesión de arranque limpia más reciente.
TBS_TCGLOG_SRTM_RESUME
3
Registro asociado a PCR 0-15 para la reanudación más reciente de la hibernación.

[out, optional] pbOutput

Puntero a un búfer que recibe y almacena la WBCL. Establézcalo en 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] pcbOutput

Puntero a un entero largo sin signo que especifica el tamaño, en bytes, del búfer de salida. Si se ejecuta correctamente, contiene el tamaño, en bytes, de los datos a los que apunta pOutput. Si se produce un error, no contiene un valor.

Nota Si pbOutput es NULL y la ubicación a la que apunta pcbOutput es 0, la función devuelve TBS_E_BUFFER_TOO_SMALL. En ese caso, pcbOutput apuntará al tamaño necesario de pbOutput.

Valor devuelto

Código o valor devuelto Descripción
TBS_SUCCESS
0 (0x0)
La función se ha realizado correctamente.
TBS_E_NO_EVENT_LOG
1 (0x1)
TBS_TCGLOG_DRTM_CURRENT se solicitó , pero DRTM no estaba habilitado en el sistema cuando el sistema arrancaba.
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 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_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 del 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.

Comentarios

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

La función puede devolver un registro que use un formato compatible con diferentes algoritmos hash, en función de las funcionalidades de hardware y la configuración de 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.

miembro de TCG_PCR_EVENT Valor o descripción
PCRIndex 0
EventType EV_NO_ACTION
Digest 20 bytes de ceros
EventSize El 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 que el analizador omita 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 compatible con distintos algoritmos hash, la plataforma usa el algoritmo SHA256 en lugar de SHA1.

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 del cliente de PC TCG. Puede crear una correlación entre listas de eventos de registro mediante la información del kit de herramientas 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 se debe obtener llamando a la función Tbsi_Get_TCG_Log_Ex con un búfer de longitud cero para obtener el tamaño de búfer necesario.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1803 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado tbs.h
Library Tbs.lib
Archivo DLL Tbs.dll