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 |
---|---|
|
La función se ha realizado correctamente. |
|
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.
|
|
Un puntero de salida especificado no es válido. |
|
El identificador de contexto especificado no hace referencia a un contexto 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 de módulo de plataforma segura (TPM) compatible en este equipo. |
|
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 |