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.
[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 |
---|---|
|
La función se ha realizado correctamente. |
|
TBS_TCGLOG_DRTM_CURRENT se solicitó , pero DRTM no estaba habilitado en el sistema cuando el sistema arrancaba. |
|
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.
|
|
Un puntero de salida especificado no es válido. |
|
El búfer de salida es demasiado pequeño. |
|
El búfer de salida es demasiado grande. |
|
No se encuentra un dispositivo de seguridad del módulo de plataforma segura (TPM) compatible en este equipo. |
|
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 |