Bagikan melalui


fungsi Tbsi_Get_TCG_Log (tbs.h)

Mengambil Log Konfigurasi Boot Windows (WBCL) terbaru, juga disebut sebagai log TCG.

Sintaks

TBS_RESULT Tbsi_Get_TCG_Log(
  [in]      TBS_HCONTEXT hContext,
  [out]     PBYTE        pOutputBuf,
  [in, out] PUINT32      pOutputBufLen
);

Parameter

[in] hContext

Handel TBS dari konteks yang mengambil log. Anda mendapatkan parameter ini dari panggilan sebelumnya ke fungsi Tbsi_Context_Create .

[out] pOutputBuf

Pointer ke buffer untuk menerima dan menyimpan WBCL. Parameter ini mungkin NULL untuk memperkirakan buffer yang diperlukan ketika lokasi yang diacu oleh pcbOutput juga 0 pada input.

[in, out] pOutputBufLen

Penunjuk ke bilangan bulat panjang yang tidak ditandatangani yang, pada input, menentukan ukuran, dalam byte, dari buffer output. Jika fungsi berhasil, parameter ini, pada output, menerima ukuran, dalam byte, dari data yang diacu oleh pOutputBuf. Jika fungsi gagal, parameter ini tidak menerima nilai.

Memanggil fungsi Tbsi_Get_TCG_Log dengan buffer panjang nol akan mengembalikan ukuran buffer yang diperlukan. Windows Vista dengan SP1 dan Windows Server 2008: Fungsionalitas ini tidak tersedia.

Mengembalikan nilai

Mengembalikan kode/nilai Deskripsi
TBS_SUCCESS
0 (0x0)
Fungsi berhasil.
TBS_E_INTERNAL_ERROR
2150121473 (0x80284001)
Terjadi kesalahan perangkat lunak internal.
Catatan Jika TBS_E_INTERNAL_ERROR dikembalikan, log peristiwa sistem mungkin berisi ID peristiwa 16385 dari sumber peristiwa TBS dengan kode kesalahan 0x80070032. Ini mungkin menunjukkan bahwa platform perangkat keras tidak menyediakan log peristiwa TCG ke sistem operasi. Terkadang ini dapat diselesaikan dengan menginstal peningkatan BIOS dari produsen platform.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475 (0x80284003)
Penunjuk output yang ditentukan tidak valid.
TBS_E_INVALID_CONTEXT
2150121476 (0x80284004)
Handel konteks yang ditentukan tidak merujuk ke konteks yang valid.
TBS_E_INSUFFICIENT_BUFFER
2150121477 (0x80284005)
Buffer output terlalu kecil.
TBS_E_BUFFER_TOO_LARGE
2150121486 (0x8028400E)
Buffer output terlalu besar.
TBS_E_TPM_NOT_FOUND
2150121487 (0x8028400F)
Perangkat Keamanan Modul Platform Tepercaya (TPM) yang kompatibel tidak dapat ditemukan pada komputer ini.
TBS_E_DEACTIVATED
2150121494 (0x80284016)
Perangkat Keamanan Modul Platform Tepercaya (TPM) dinonaktifkan.

Windows Vista dengan SP1 dan Windows Server 2008: Nilai pengembalian ini tidak tersedia.

Keterangan

Fungsi Tbsi_Get_TCG_Log mengembalikan Log Peristiwa TCG untuk sistem, dan ukuran buffer tergantung pada jumlah peristiwa.

Windows 10:

Fungsi ini dapat mengembalikan log yang menggunakan format yang kompatibel dengan algoritma hashing yang berbeda, tergantung pada kemampuan perangkat keras dan pengaturan firmware. Log ini memformat setiap peristiwa kecuali yang pertama sebagai struktur 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;

Log memformat peristiwa pertama sebagai struktur TCG_PCR_EVENT , yang dijelaskan nanti di bagian Keterangan ini. Tabel berikut ini menjelaskan nilai anggota struktur ini untuk peristiwa pertama ini.

anggota TCG_PCR_EVENT Nilai atau deskripsi
PCRIndex 0
EventType EV_NO_ACTION
Mencerna 20 byte nol
EventSize Ukuran anggota Peristiwa
Kejadian Memiliki jenis TCG_EfiSpecIdEventStruct
 

Berikut ini memperlihatkan sintaks struktur TCG_EfiSpecIdEventStruct yang digunakan anggota Peristiwa dari struktur TCG_PCR_EVENT untuk peristiwa log pertama.

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;

Anggota Tanda Tangan dari struktur TCG_EfiSpecIdEventStruct diatur ke string ASCII null-dihentikan dari "Spec ID Event03" saat log menggunakan format yang kompatibel dengan algoritma hash yang berbeda. Array DigestSizes dalam peristiwa pertama ini berisi ukuran hash yang berbeda yang digunakan log. Ketika pengurai memeriksa peristiwa jenis TCG_PCR_EVENT2, pengurai dapat mengurai anggota TPML_DIGEST_VALUES tanpa informasi tentang semua algoritma hashing yang ada. Ukuran hash dalam peristiwa pertama memungkinkan pengurai untuk melewati jumlah byte yang benar untuk hash yang ada.

Jika anggota Tanda Tangan tidak diatur ke string ASCII null-dihentikan dari "Spec ID Event03", maka peristiwa dalam log berjenis TCG_PCR_EVENT, dan struktur TCG_EfiSpecIdEventStruct tidak berisi anggota NumberOfAlgorithms dan DigestSizes .

Format log yang kompatibel dengan algoritma hashing yang berbeda memungkinkan platform dan sistem operasi untuk menggunakan SHA1, SHA256, atau algoritma hashing lainnya. Jika platform mendukung algoritma hash SHA256 dan menggunakan format log yang kompatibel dengan algoritma hashing yang berbeda, platform menggunakan algoritma SHA256 alih-alih SHA1.

Windows Vista dengan SP1 dan Windows Server 2008: Fungsi mengembalikan log langsung dari tabel ACPI dan mengembalikan seluruh buffer yang dialokasikan ACPI, termasuk buffer yang tidak digunakan setelah peristiwa apa pun.

Peristiwa yang ditentukan Windows dalam log peristiwa TCG adalah tuple dari {Type, Length, Value}. Anda dapat mengurai log menggunakan struktur TCG_PCR_EVENT berikut dari spesifikasi Klien PC TCG. Anda dapat membuat korelasi antara daftar peristiwa log menggunakan informasi di Toolkit PCP TPM dan Spesifikasi Utama TPM.

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

Ukuran memori yang diperlukan untuk parameter pOutputBuf harus menjadi konstanta dalam TBS_IN_OUT_BUF_SIZE_MAX, yang ditentukan dalam file header Tbs.h, atau harus diperoleh dengan memanggil fungsi Tbsi_Get_TCG_Log dengan buffer panjang nol untuk mendapatkan ukuran buffer yang diperlukan.

Windows Vista dengan SP1 dan Windows Server 2008: Memanggil fungsi Tbsi_Get_TCG_Log dengan buffer panjang nol untuk mendapatkan ukuran buffer yang diperlukan tidak didukung. Kami menyarankan agar Anda menggunakan TBS_IN_OUT_BUF_SIZE_MAX konstanta, yang ditentukan dalam file header Tbs.h, untuk ukuran memori untuk parameter pOutputBuf .

Contoh

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

Persyaratan

   
Klien minimum yang didukung Windows Vista dengan SP1 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header tbs.h
Pustaka Tbs.lib
DLL Tbs.dll