функция Tbsi_Get_TCG_Log (tbs.h)
Извлекает последний журнал конфигурации загрузки Windows (WBCL), также называемый журналом TCG.
Синтаксис
TBS_RESULT Tbsi_Get_TCG_Log(
[in] TBS_HCONTEXT hContext,
[out] PBYTE pOutputBuf,
[in, out] PUINT32 pOutputBufLen
);
Параметры
[in] hContext
Дескриптор TBS контекста, который извлекает журнал. Этот параметр получен при предыдущем вызове функции Tbsi_Context_Create .
[out] pOutputBuf
Указатель на буфер для получения и хранения WBCL. Этот параметр может иметь значение NULL для оценки требуемого буфера, если расположение, на который указывает pcbOutput , также равно 0 на входных данных.
[in, out] pOutputBufLen
Указатель на длинное целое число без знака, которое во входных данных указывает размер выходного буфера в байтах. Если функция выполняется успешно, этот параметр в выходных данных получает размер в байтах данных, на которые указывает pOutputBuf. Если функция завершается сбоем, этот параметр не получает значение.
Вызов функции Tbsi_Get_TCG_Log с буфером нулевой длины вернет необходимый размер буфера. Windows Vista с пакетом обновления 1 (SP1) и Windows Server 2008: Эта функция недоступна.
Возвращаемое значение
Возвращаемый код или значение | Описание |
---|---|
|
Функция выполнена успешно. |
|
Внутренняя программная ошибка.
Примечание Если возвращается TBS_E_INTERNAL_ERROR, журнал системных событий может содержать событие с идентификатором 16385 из источника событий TBS с кодом ошибки 0x80070032. Это может означать, что аппаратная платформа не предоставляет журнал событий TCG операционной системе. Иногда это можно решить, установив обновление BIOS от производителя платформы.
|
|
Указанный выходной указатель недопустим. |
|
Указанный дескриптор контекста не ссылается на допустимый контекст. |
|
Выходной буфер слишком мал. |
|
Выходной буфер слишком велик. |
|
На этом компьютере не удается найти совместимое устройство безопасности доверенного платформенного модуля (TPM). |
|
Устройство безопасности доверенного платформенного модуля (TPM) деактивировано.
Windows Vista с пакетом обновления 1 (SP1) и Windows Server 2008: Это возвращаемое значение недоступно. |
Комментарии
Функция Tbsi_Get_TCG_Log возвращает журнал событий TCG для системы, а размер буфера зависит от количества событий.
Windows 10:
Функция может возвращать журнал, использующий формат, совместимый с разными алгоритмами хэширования в зависимости от возможностей оборудования и параметров встроенного ПО. Этот журнал форматирует каждое событие, кроме первого, как 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;
Журнал форматирует первое событие как структуру TCG_PCR_EVENT , которая описана далее в этом разделе примечаний. В следующей таблице описаны значения членов этой структуры для этого первого события.
элемент TCG_PCR_EVENT | Значение или описание |
---|---|
PCRIndex | 0 |
EventType | EV_NO_ACTION |
Digest (дайджест) | 20 байт нулей |
EventSize | Размер элемента event |
Событие | Имеет тип TCG_EfiSpecIdEventStruct |
Ниже показан синтаксис структуры TCG_EfiSpecIdEventStruct , которую элемент Eventструктуры TCG_PCR_EVENT использует для первого события журнала.
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;
Если в журнале используется формат, совместимый с различными алгоритмами хэширования, для элемента Signatureструктуры TCG_EfiSpecIdEventStruct задается строка ASCII со значением NULL, заканчивающаяся null. Массив DigestSizes в этом первом событии содержит размеры хэша для различных алгоритмов хэширования, которые использует журнал. Когда средство синтаксического анализа проверяет событие типа TCG_PCR_EVENT2, средство синтаксического анализа может проанализировать элемент TPML_DIGEST_VALUES без сведений обо всех имеющихся алгоритмах хэширования. Размеры хэша в первом событии позволяют средству синтаксического анализа пропустить правильное количество байтов для имеющихся дайджестов.
Если для элемента Signature не задана строка ASCII со значением "Spec ID Event03", то события в журнале имеют тип TCG_PCR_EVENT, а структура TCG_EfiSpecIdEventStruct не содержит членов NumberOfAlgorithms и DigestSizes .
Формат журнала, совместимый с различными алгоритмами хэширования, позволяет платформе и операционной системе использовать SHA1, SHA256 или другие алгоритмы хэширования. Если платформа поддерживает алгоритм хэширования SHA256, а использует формат журнала, совместимый с различными алгоритмами хэширования, платформа использует алгоритм SHA256 вместо SHA1.
Windows Vista с пакетом обновления 1 (SP1) и Windows Server 2008: Функция возвращает журнал непосредственно из таблицы ACPI и весь выделенный буфер ACPI, включая неиспользуемый буфер после любых событий.
События, определенные Windows, в журнале событий TCG представляют собой кортеж {Type, Length, Value}. Вы можете проанализировать журнал, используя следующую структуру TCG_PCR_EVENT из спецификации клиента TCG PC. Вы можете создать корреляцию между списками событий журнала, используя сведения из набора средств PCP TPM и основной спецификации TPM.
typedef struct {
TCG_PCRINDEX PCRIndex;
TCG_EVENTTYPE EventType;
TCG_DIGEST Digest;
UINT32 EventSize;
UINT8 Event[EventSize];
} TCG_PCR_EVENT;
Размер памяти, необходимый для параметра pOutputBuf , должен быть либо константой в TBS_IN_OUT_BUF_SIZE_MAX, определенной в файле заголовка Tbs.h, либо должен быть получен путем вызова функции Tbsi_Get_TCG_Log с буфером нулевой длины, чтобы получить требуемый размер буфера.
Windows Vista с пакетом обновления 1 (SP1) и Windows Server 2008: Вызов функции Tbsi_Get_TCG_Log с буфером нулевой длины для получения требуемого размера буфера не поддерживается. Мы рекомендуем использовать константу TBS_IN_OUT_BUF_SIZE_MAX, определенную в файле заголовка Tbs.h, для размера памяти для параметра pOutputBuf .
Примеры
#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);
}
}
Требования
Минимальная версия клиента | Windows Vista с пакетом обновления 1 (SP1) [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | tbs.h |
Библиотека | Tbs.lib |
DLL | Tbs.dll |