共用方式為


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

[in, out] pOutputBufLen

輸入上不帶正負號長整數的指標,指定輸出緩衝區的大小,以位元組為單位。 如果函式成功,則此參數會在輸出上接收 pOutputBuf所指向資料的大小,以位元組為單位。 如果函式失敗,這個參數就不會收到值。

以零長度緩衝區呼叫 Tbsi_Get_TCG_Log 函式會傳回所需的緩衝區大小。 具有 SP1 和 Windows Server 2008 的 Windows Vista: 此功能無法使用。

傳回值

傳回碼/值 Description
TBS_SUCCESS
0 (0x0)
此函數已成功。
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
發生內部軟體錯誤。
注意 如果傳回TBS_E_INTERNAL_ERROR,系統事件記錄檔可能包含來自 TBS 事件來源的事件識別碼 16385,且錯誤碼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_DEACTI加值稅ED
2150121494 (0x80284016)
TPM) 安全性裝置已停用信任的平臺模組 (。

具有 SP1 和 Windows Server 2008 的 Windows Vista: 無法使用這個傳回值。

備註

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成員 值或描述
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。

具有 SP1 和 Windows Server 2008 的 Windows Vista: 函式會直接從 ACPI 資料表傳回記錄,並傳回整個 ACPI 配置的緩衝區,包括任何事件之後未使用的緩衝區。

TCG 事件記錄檔中的 Windows 定義事件是 {Type, Length, Value} 的 Tuple。 您可以從 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函式來取得,以取得所需的緩衝區大小。

具有 SP1 和 Windows Server 2008 的 Windows Vista: 不支援以零長度緩衝區呼叫 Tbsi_Get_TCG_Log 函式以取得所需的緩衝區大小。 建議您針對pOutputBuf參數的記憶體大小,使用 Tbs.h 標頭檔中定義的常數TBS_IN_OUT_BUF_SIZE_MAX

範例

#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);
    }
}

規格需求

   
最低支援的用戶端 具有 SP1 的 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平臺 Windows
標頭 tbs.h
程式庫 Tbs.lib
DLL Tbs.dll