функция 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
Тип извлекаемого журнала.
[out, optional] pbOutput
Указатель на буфер, который получает и сохраняет WBCL. Задайте значение NULL , чтобы оценить требуемый буфер, если расположение, на который указывает pcbOutput , также равно 0 на входных данных.
[in, out] pcbOutput
Указатель на длинное целое число без знака, указывающее размер выходного буфера в байтах. При успешном выполнении содержит размер (в байтах) данных, на которые указывает pOutput. При сбое не содержит значения.
Примечание Если pbOutput имеет значение NULL , а расположение, на который указывает pcbOutput , равно 0, функция возвращает TBS_E_BUFFER_TOO_SMALL. В этом случае pcbOutput указывает на требуемый размер pbOutput.
Возвращаемое значение
Возвращаемый код или значение | Описание |
---|---|
|
Функция выполнена успешно. |
|
TBS_TCGLOG_DRTM_CURRENT был запрошен, но DRTM не был включен в системе при загрузке системы. |
|
Внутренняя программная ошибка.
Примечание Если возвращается TBS_E_INTERNAL_ERROR , журнал системных событий может содержать идентификатор события 16385 из источника событий TBS с кодом ошибки 0x80070032. Это может означать, что аппаратная платформа не предоставляет журнал событий TCG операционной системе. Иногда это можно решить, установив обновление BIOS от производителя платформы.
|
|
Указанный выходной указатель недопустим. |
|
Выходной буфер слишком мал. |
|
Выходной буфер слишком велик. |
|
На этом компьютере не удается найти совместимое устройство безопасности доверенного платформенного модуля (TPM). |
|
Устройство безопасности доверенного платформенного модуля (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 |