Поделиться через


функция 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_SUCCESS
0 (0x0)
Функция выполнена успешно.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Внутренняя программная ошибка.
Примечание Если возвращается TBS_E_INTERNAL_ERROR, журнал системных событий может содержать событие с идентификатором 16385 из источника событий TBS с кодом ошибки 0x80070032. Это может означать, что аппаратная платформа не предоставляет журнал событий TCG операционной системе. Иногда это можно решить, установив обновление BIOS от производителя платформы.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Указанный выходной указатель недопустим.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
Указанный дескриптор контекста не ссылается на допустимый контекст.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
Выходной буфер слишком мал.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
Выходной буфер слишком велик.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
На этом компьютере не удается найти совместимое устройство безопасности доверенного платформенного модуля (TPM).
TBS_E_DEACTIVATED
2150121494 (0x80284016)
Устройство безопасности доверенного платформенного модуля (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