共用方式為


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 ,以估計輸入時 ,當輸入上指向之位置 也是 0 時所需的緩衝區。

[in, out] pcbOutput

不帶正負號長整數的指標,指定輸出緩衝區的大小,以位元組為單位。 成功時,包含 pOutput 所指向數據的大小,以位元組為單位。 失敗時,不包含 值。

注意如果 pbOutputNULL,而由TBS_E_BUFFER_TOO_SMALL的TBS_E_BUFFER_TOO_SMALL 在此情況下, 其會 指向 pbOutput 的必要大小。

傳回值

傳回碼/值 Description
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 ,系統事件記錄檔可能會包含 TBS 事件來源的事件標識碼 16385,錯誤碼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成員 值或描述
PCIndex 0
EventType EV_NO_ACTION
Digest 20 個字節的零
EventSize 事件成員的大小
事件 具有TCG_EfiSpecIdEventStruct類型
 

以下顯示TCG_EfiSpecIdEventStruct結構的語法,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;

當記錄檔使用與不同哈希演算法相容的格式時,TCG_EfiSpecIdEventStruct 結構的 Signature 成員會設定為 “Spec ID Event03” 的 Null 終止 ASCII 字符串。 此第一個事件中的 DigestSizes 陣列包含記錄所使用的不同哈希演算法的摘要大小。 當剖析器檢查類型 為 TCG_PCR_EVENT2 的事件時,剖析器可以剖析 TPML_DIGEST_VALUES 成員,而不需要所有哈希演算法的相關信息。 第一個事件的摘要大小可讓剖析器略過現有摘要的正確位元元組數目。

如果 Signature 成員未設定為 “Spec ID Event03” 的 Null 終止 ASCII 字串,則記錄檔中的事件類型為 TCG_PCR_EVENT,而 TCG_EfiSpecIdEventStruct 結構不包含 NumberOfAlgorithmsDigestSizes 成員。

與不同哈希演算法相容的記錄格式可讓平臺和操作系統使用SHA1、SHA256或其他哈希演算法。 如果平臺支援SHA256哈希演算法,並使用與不同哈希演算法相容的記錄格式,則平臺會使用SHA256演算法,而不是SHA1。

TCG 事件記錄檔中的 Windows 定義事件是 {Type, Length, Value} 的元組。 您可以從 TCG PC 用戶端規格使用下列TCG_PCR_EVENT結構來剖析記錄。您可以使用 TPM PCP 工具組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
標頭 tbs.h
程式庫 Tbs.lib
Dll Tbs.dll