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
取得するログの種類。
[out, optional] pbOutput
WBCL を受け取って格納するバッファーへのポインター。 入力時に pcbOutput が指す位置も 0 の場合に必要なバッファーを推定するには、NULL に設定します。
[in, out] pcbOutput
出力バッファーのサイズをバイト単位で指定する符号なし long 整数へのポインター。 成功した場合は、 pOutput が指すデータのサイズ (バイト単位) が含まれます。 失敗した場合、 には値が含まれません。
メモpbOutput が NULL で、pcbOutput が指す場所が 0 の場合、関数は TBS_E_BUFFER_TOO_SMALLを返します。 その場合、 pcbOutput は pbOutput の必要なサイズ を指します。
戻り値
リターン コード/値 | Description |
---|---|
|
関数が正常に実行されました。 |
|
TBS_TCGLOG_DRTM_CURRENT が要求されましたが、システムの起動時に DRTM がシステムで有効になっていませんでした。 |
|
内部ソフトウェア エラーが発生しました。
メモTBS_E_INTERNAL_ERRORが返された場合、システム イベント ログには、エラー コードが0x80070032された TBS イベント ソースからのイベント ID 16385 が含まれている可能性があります。 これは、ハードウェア プラットフォームがオペレーティング システムに TCG イベント ログを提供していないことを示している可能性があります。 これは、プラットフォームの製造元から BIOS アップグレードをインストールすることで解決できる場合があります。
|
|
指定された出力ポインターが無効です。 |
|
出力バッファーが小さすぎます。 |
|
出力バッファーが大きすぎます。 |
|
互換性のあるトラステッド プラットフォーム モジュール (TPM) セキュリティ デバイスがこのコンピューターに見つかりません。 |
|
トラステッド プラットフォーム モジュール (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 |