Tbsi_Get_TCG_Log_Ex関数 (tbs.h)

指定した種類の TCG ログとも呼ばれる Windows ブート構成ログ (WBCL) を取得します。

構文

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 を受け取って格納するバッファーへのポインター。 入力時に pcbOutput が指す位置も 0 の場合に必要なバッファーを推定するには、NULL に設定します。

[in, out] pcbOutput

出力バッファーのサイズをバイト単位で指定する符号なし long 整数へのポインター。 成功した場合は、 pOutput が指すデータのサイズ (バイト単位) が含まれます。 失敗した場合、 には値が含まれません。

メモpbOutputNULL、pcbOutput が指す場所が 0 の場合、関数は TBS_E_BUFFER_TOO_SMALLを返します。 その場合、 pcbOutput は 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が返された場合、システム イベント ログには、エラー コードが0x80070032された TBS イベント ソースからのイベント ID 16385 が含まれている可能性があります。 これは、ハードウェア プラットフォームがオペレーティング システムに 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 イベント ログを返し、バッファー サイズはイベントの数によって異なります。

関数は、ハードウェアの機能とファームウェアの設定に応じて、異なるハッシュ アルゴリズムと互換性のある形式を使用するログを返す場合があります。 このログは、1 つ目を除く各イベントを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
ダイジェスト 20 バイトのゼロ
EventSize イベント メンバーのサイズ
Event TCG_EfiSpecIdEventStructの種類があります
 

次に、 TCG_PCR_EVENT 構造体の Event メンバーが最初のログ イベントに使用する TCG_EfiSpecIdEventStruct 構造体の構文を示します。

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 メンバーは、null で終わる "Spec ID Event03" の ASCII 文字列に設定されます。 この最初のイベントの DigestSizes 配列には、ログで使用されるさまざまなハッシュ アルゴリズムのダイジェスト サイズが含まれています。 パーサーが TCG_PCR_EVENT2型のイベントを検査する場合、パーサーは、すべてのハッシュ アルゴリズムに関する情報がなくても 、TPML_DIGEST_VALUES メンバーを解析できます。 最初のイベントのダイジェスト サイズを使用すると、パーサーは存在するダイジェストの正しいバイト数をスキップできます。

Signature メンバーが "Spec ID Event03" の null で終わる ASCII 文字列に設定されていない場合、ログ内のイベントの種類は TCG_PCR_EVENT で、TCG_EfiSpecIdEventStruct構造体には NumberOfAlgorithms メンバーと DigestSizes メンバーは含まれません。

さまざまなハッシュ アルゴリズムと互換性のあるログ形式を使用すると、プラットフォームとオペレーティング システムで SHA1、SHA256、またはその他のハッシュ アルゴリズムを使用できます。 プラットフォームが SHA256 ハッシュ アルゴリズムをサポートし、 が異なるハッシュ アルゴリズムと互換性のあるログ形式を使用している場合、プラットフォームでは SHA1 ではなく SHA256 アルゴリズムが使用されます。

TCG イベント ログ内の Windows 定義イベントは、{Type, Length, Value} のタプルです。 TCG PC クライアント 仕様の次のTCG_PCR_EVENT構造を使用して、ログを解析できます。TPM PCP Toolkit と TPMメイン仕様の情報を使用して、ログ イベントの一覧間に相関関係を作成できます。

typedef struct {
  TCG_PCRINDEX PCRIndex;
  TCG_EVENTTYPE EventType;
  TCG_DIGEST Digest;
  UINT32 EventSize;
  UINT8 Event[EventSize];
} TCG_PCR_EVENT;

pOutputBuf パラメーターに必要なメモリ サイズは、Tbs.h ヘッダー ファイルで定義されているTBS_IN_OUT_BUF_SIZE_MAXの定数であるか、必要なバッファー サイズを取得するために長さ 0 のバッファーでTbsi_Get_TCG_Log_Ex関数を呼び出すことによって取得する必要があります。

要件

要件
サポートされている最小のクライアント Windows 10バージョン 1803 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー tbs.h
Library Tbs.lib
[DLL] Tbs.dll