InitializeEnclave 函数 (enclaveapi.h)
初始化创建并加载了数据的 enclave。
语法
BOOL InitializeEnclave(
[in] HANDLE hProcess,
[in] LPVOID lpAddress,
[in] LPCVOID lpEnclaveInformation,
[in] DWORD dwInfoLength,
[in] LPDWORD lpEnclaveError
);
参数
[in] hProcess
为其创建 enclave 的进程句柄。
[in] lpAddress
enclave 中的任何地址。
[in] lpEnclaveInformation
指向用于初始化 enclave 的特定于体系结构的信息的指针。
对于 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 enclave 类型,请指定指向 ENCLAVE_INIT_INFO_SGX 结构的指针。
对于 ENCLAVE_TYPE_VBS enclave 类型,请指定指向 ENCLAVE_INIT_INFO_VBS 结构的指针。
[in] dwInfoLength
lpEnclaveInformation 参数指向的 结构的长度(以字节为单位)。 对于 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 enclave 类型,此值必须为 4096。 对于 ENCLAVE_TYPE_VBS enclave 类型,此值必须为 sizeof(ENCLAVE_INIT_INFO_VBS)
,即 8 个字节。
[in] lpEnclaveError
指向接收特定于体系结构的 enclave 错误代码的变量的可选指针。
对于 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 enclave 类型, lpEnclaveError 参数包含当函数失败且 GetLastError 返回ERROR_ENCLAVE_FAILURE时生成的 EINIT 指令 的错误。
对于 ENCLAVE_TYPE_VBS enclave 类型,不使用 lpEnclaveError 参数。
返回值
如果该函数成功,则返回值为非零值。 如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
有关常见错误代码的列表,请参阅 系统错误代码。 以下错误代码也适用于此函数。
返回代码 | 说明 |
---|---|
ERROR_ENCLAVE_FAILURE | 发生特定于基础 enclave 体系结构的故障。 lpEnclaveError 参数的值包含特定于体系结构的错误。 对于 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 enclave 类型,指定的 ENCLAVE_INIT_INFO_SGX 结构的 EINIT 指令生成了错误。 lpEnclaveError 参数的值包含指令生成的错误。 |
ERROR_BAD_LENGTH | dwInfoLength 参数的值与基于为 lpEnclaveInformation 参数指定的值的预期值不匹配。 |
ERROR_RETRY | 处理器无法及时初始化 enclave。 尝试再次初始化 enclave。 |
注解
若要创建 enclave,请使用 CreateEnclave 函数。 若要在初始化 enclave 之前将数据加载到 enclave 中,请使用 LoadEnclaveData 函数。
Windows 10版本 1709 及更高版本以及Windows 11:若要在使用完 enclave 后将其删除,请调用 DeleteEnclave。 无法通过调用 VirtualFree 或 VirtualFreeEx 函数删除 VBS enclave。 仍可通过调用 VirtualFree 或 VirtualFreeEx 删除 SGX enclave。
Windows 10版本 1507、Windows 10、版本 1511、Windows 10、版本 1607 和 Windows 10 版本 1703:若要在使用完 enclave 后删除它,请调用 VirtualFree 或 VirtualFreeEx 函数并指定以下值:
- lpAddress 参数的 enclave 基址。
- 0 表示 dwSize 参数。
- dwFreeType 参数的MEM_RELEASE。
要求
最低受支持的客户端 | Windows 10 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2016 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | enclaveapi.h (包括 Winbase.h) |
Library | Kernel32.lib |
DLL | Api-ms-win-core-enclave-l1-1-0.dll;Kernel32.dll;KernelBase.dll |