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_SGXENCLAVE_TYPE_SGX2 enclave 类型,请指定指向 ENCLAVE_INIT_INFO_SGX 结构的指针。

对于 ENCLAVE_TYPE_VBS enclave 类型,请指定指向 ENCLAVE_INIT_INFO_VBS 结构的指针。

[in] dwInfoLength

lpEnclaveInformation 参数指向的 结构的长度(以字节为单位)。 对于 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 enclave 类型,此值必须为 4096。 对于 ENCLAVE_TYPE_VBS enclave 类型,此值必须为 sizeof(ENCLAVE_INIT_INFO_VBS),即 8 个字节。

[in] lpEnclaveError

指向接收特定于体系结构的 enclave 错误代码的变量的可选指针。

对于 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 enclave 类型, lpEnclaveError 参数包含当函数失败且 GetLastError 返回ERROR_ENCLAVE_FAILURE时生成的 EINIT 指令 的错误

对于 ENCLAVE_TYPE_VBS enclave 类型,不使用 lpEnclaveError 参数。

返回值

如果该函数成功,则返回值为非零值。 如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

有关常见错误代码的列表,请参阅 系统错误代码。 以下错误代码也适用于此函数。

返回代码 说明
ERROR_ENCLAVE_FAILURE 发生特定于基础 enclave 体系结构的故障。 lpEnclaveError 参数的值包含特定于体系结构的错误。

对于 ENCLAVE_TYPE_SGXENCLAVE_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 后删除它,请调用 VirtualFreeVirtualFreeEx 函数并指定以下值:

  • 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

另请参阅

Enclave 函数

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx