GetRuntimeAttestationReport API 允許 VTL0 使用者模式程序從安全核心取得簽署的執行時證明報告。 本報告提供已載入驅動程式與程式碼完整性資訊清單,這些資訊對於驗證系統完整性及執行遊戲及安全敏感應用中的反作弊政策至關重要。
語法
BOOL GetRuntimeAttestationReport(
UCHAR *Nonce,
UINT16 PackageVersion,
UINT64 ReportTypesBitmap,
PVOID ReportBuffer,
PUINT32 ReportBufferSize
);
參數
Nonce
指標指向一個包含 nonce 的 32 位元組緩衝區,以防止重播攻擊。 如果只計算輸出大小,請指定 NULL 。
PackageVersion
指定執行時報告的套件版本。 用於 RUNTIME_REPORT_PACKAGE_VERSION_CURRENT 最新版本。
ReportTypesBitmap
位圖,指定要產生的報表類型。 使用 RUNTIME_REPORT_TYPE_TO_MASK 巨集將列舉值轉換成點陣遮罩。
-
RuntimeReportTypeDriver= 0(車手報告) -
RuntimeReportTypeCodeIntegrity= 1(程式碼完整性報告) -
RUNTIME_REPORT_TYPE_MASK_ALL(所有報導均有支持)
ReportBuffer
指向一個緩衝區,該處將放置簽署報告。 請指定 NULL 只計算所需的輸出大小。
ReportBufferSize
指標指向包含緩衝區大小的變數。 更新為寫入的實際位元組數,若 ReportBuffer 為 NULL,則更新為所需大小。
返回值
- 成功時會回傳真值。
- 錯誤時回傳 FALSE;使用 GetLastError() 來獲取擴充錯誤資訊。
備註
API 提供一份簽署的執行時證明報告,後端可進行驗證。
執行時定期呼叫 API,以維持 up-to-date 證明。 務必先透過傳遞 NULL 來計算所需的緩衝區大小,然後分配緩衝區並再次呼叫以取得報告。
報告僅在啟用 HVCI(Hypervisor-Protected Code Integrity)時才能產生。
回傳的緩衝區會被組織為「執行時報告套件」,包含:
- RUNTIME_REPORT_PACKAGE_HEADER
- 32 位元組的 nonce
- 一個或多個RUNTIME_REPORT_DIGEST_HEADER(每個報告類型一個)
- 簽名斑點
- 一個或多個經過認證的執行報告(每個報告都有一個RUNTIME_REPORT_HEADER)
安全要求
- TPM 2.0、安全開機、VBS、HVCI 和 IOMMU 必須啟用。
- 測試簽署與除錯旗標必須關閉。
認證報告只有在這些安全功能仍然有效時才有效。
需求
| Requirement | 價值觀 |
|---|---|
| 目標平臺 | 窗戶 |
| Header | sysinfoapi.h (包括 Windows.h) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |