функция Tbsi_Get_TCG_Log_Ex (tbs.h)

Возвращает журнал конфигурации загрузки Windows (WBCL), также называемый журналом TCG, указанного типа.

Синтаксис

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

Параметры

[in] logType

Тип извлекаемого журнала.

Значение Значение
TBS_TCGLOG_SRTM_CURRENT
0
Журнал, связанный с PCR 0–15 для текущего сеанса (загрузка или возобновление).
TBS_TCGLOG_DRTM_CURRENT
1
Журнал, связанный с PCR 17–22 для текущего сеанса (загрузка или возобновление).
TBS_TCGLOG_SRTM_BOOT
2
Журнал, связанный с PCR 0–15 для последнего сеанса чистой загрузки.
TBS_TCGLOG_SRTM_RESUME
3
Журнал, связанный с PCR 0–15 для последнего возобновления из гибернации.

[out, optional] pbOutput

Указатель на буфер, который получает и сохраняет WBCL. Задайте значение NULL , чтобы оценить требуемый буфер, если расположение, на который указывает pcbOutput , также равно 0 на входных данных.

[in, out] pcbOutput

Указатель на длинное целое число без знака, указывающее размер выходного буфера в байтах. При успешном выполнении содержит размер (в байтах) данных, на которые указывает pOutput. При сбое не содержит значения.

Примечание Если pbOutput имеет значение NULL , а расположение, на который указывает pcbOutput , равно 0, функция возвращает TBS_E_BUFFER_TOO_SMALL. В этом случае pcbOutput указывает на требуемый размер pbOutput.

Возвращаемое значение

Возвращаемый код или значение Описание
TBS_SUCCESS
0 (0x0)
Функция выполнена успешно.
TBS_E_NO_EVENT_LOG
1 (0x1)
TBS_TCGLOG_DRTM_CURRENT был запрошен, но DRTM не был включен в системе при загрузке системы.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Внутренняя программная ошибка.
Примечание Если возвращается TBS_E_INTERNAL_ERROR , журнал системных событий может содержать идентификатор события 16385 из источника событий TBS с кодом ошибки 0x80070032. Это может означать, что аппаратная платформа не предоставляет журнал событий TCG операционной системе. Иногда это можно решить, установив обновление BIOS от производителя платформы.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Указанный выходной указатель недопустим.
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) деактивировано.

Комментарии

Функция Tbsi_Get_TCG_Log_Ex возвращает журнал событий TCG для системы, а размер буфера зависит от количества событий.

Функция может возвращать журнал, использующий формат, совместимый с разными алгоритмами хэширования в зависимости от возможностей оборудования и параметров встроенного ПО. Этот журнал форматирует каждое событие, кроме первого, как 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, в журнале событий 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_Ex с буфером нулевой длины, чтобы получить требуемый размер буфера.

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1803 [только классические приложения]
Минимальная версия сервера Windows Server [только классические приложения]
Целевая платформа Windows
Header tbs.h
Библиотека Tbs.lib
DLL Tbs.dll