GetRuntimeAttestationReport API 允许 VTL0 用户模式进程从安全内核检索已签名的运行时证明报告。 此报告提供加载的驱动程序和代码完整性信息列表,这对于验证系统完整性和执行游戏和安全敏感应用程序中的反作弊策略至关重要。
Syntax
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
指向包含缓冲区大小的变量的指针。 使用实际写入的字节数进行更新;如果是ReportBufferNULL,则用所需的大小进行更新。
返回值
- 成功时返回 TRUE。
- 返回错误时为 FALSE;使用 GetLastError() 获取扩展的错误信息。
注解
API 提供签名的运行时证明报告,该报告可由后端验证。
在运行时定期调用 API,以维护 up-to日期证明。 始终首先通过传递 ReportBuffer 的 NULL 来计算所需的缓冲区大小,然后分配缓冲区并再次调用以检索报表。
仅当启用了 HVCI(Hypervisor-Protected 代码完整性)时,才能生成报告。
返回的缓冲区组织为“运行时报表包”,其中包括:
- RUNTIME_REPORT_PACKAGE_HEADER
- 32 字节 nonce
- 一个或多个RUNTIME_REPORT_DIGEST_HEADER(每个报表类型一个)
- 签名 blob
- 一个或多个经过身份验证的运行时报告(每个报表都有RUNTIME_REPORT_HEADER)
安全要求
- 必须启用 TPM 2.0、安全启动、VBS、HVCI 和 IOMMU。
- 测试签名和调试标志必须关闭。
仅当这些安全功能处于活动状态时,证明报告才有效。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | Windows操作系统 |
| Header | sysinfoapi.h (包括 Windows.h) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |