InitializeEnclave 函式 (記憶體保護區api.h)

初始化您使用資料建立和載入的記憶體保護區。

語法

BOOL InitializeEnclave(
  [in] HANDLE  hProcess,
  [in] LPVOID  lpAddress,
  [in] LPCVOID lpEnclaveInformation,
  [in] DWORD   dwInfoLength,
  [in] LPDWORD lpEnclaveError
);

參數

[in] hProcess

建立記憶體保護區之進程的句柄。

[in] lpAddress

記憶體保護區內的任何位址。

[in] lpEnclaveInformation

用來初始化記憶體保護區之架構特定資訊的指標。

針對 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 記憶體保護區類型,請指定 ENCLAVE_INIT_INFO_SGX 結構的指標。

針對 ENCLAVE_TYPE_VBS 記憶體保護區類型,請指定 ENCLAVE_INIT_INFO_VBS 結構的指標。

[in] dwInfoLength

lpEnclaveInformation 參數指向的結構長度,以位元組為單位。 針對 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 記憶體保護區類型,此值必須是4096。 對於 ENCLAVE_TYPE_VBS 記憶體保護區類型,此值必須是 sizeof(ENCLAVE_INIT_INFO_VBS),也就是8個字節。

[in] lpEnclaveError

可接收架構特定記憶體保護區錯誤碼之變數的選擇性指標。

針對 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 記憶體保護區類型, lpEnclaveError 參數包含如果函式失敗而 GetLastError 傳回ERROR_ENCLAVE_FAILURE時產生的 EINIT 指令 錯誤

對於 ENCLAVE_TYPE_VBS 記憶體保護區類型,不會使用 lpEnclaveError 參數。

傳回值

如果函式成功,則傳回非零的值。 如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

如需常見錯誤碼的清單,請參閱 系統錯誤碼。 下列錯誤碼也適用於此函式。

傳回碼 Description
ERROR_ENCLAVE_FAILURE 發生基礎記憶體保護區架構特有的失敗。 lpEnclaveError 參數的值包含架構特定的錯誤。

針對ENCLAVE_TYPE_SGX和ENCLAVE_TYPE_SGX2記憶體保護區類型,指定之ENCLAVE_INIT_INFO_SGX結構的EINIT指令會產生錯誤。 lpEnclaveError 參數的值包含指令產生的錯誤。
ERROR_BAD_LENGTH dwInfoLength 參數的值不符合根據 lpEnclaveInformation 參數所指定的值所預期的值。
ERROR_RETRY 處理器無法及時初始化記憶體保護區。 再次嘗試初始化記憶體保護區。

備註

若要建立記憶體保護區,請使用 CreateEnclave 函式。 若要在初始化數據之前將數據載入記憶體保護區,請使用 LoadEnclaveData 函式。

Windows 10 版本 1709 和更新版本和 Windows 11:若要在完成使用記憶體保護區時刪除記憶體保護區,請呼叫 DeleteEnclave。 您無法藉由呼叫 VirtualFree 或 VirtualFreeEx 函式來刪除 VBS 記憶體保護區。 您仍然可以呼叫 VirtualFree 或 VirtualFreeEx 來刪除 SGX 記憶體保護區

Windows 10 版本 1507、Windows 10 版本 1511、Windows 10、1607 版和 Windows 10 1703 版:若要在完成使用時刪除記憶體保護區,請呼叫 VirtualFree 或 VirtualFreeEx 函式並指定下列值:

  • lpAddress 參數記憶體保護區的基位址。
  • 0 表示 dwSize 參數。
  • MEM_RELEASEdwFreeType 參數。

規格需求

   
最低支援的用戶端 Windows 10 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2016 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 enclaveapi.h (包含 Winbase.h)
程式庫 Kernel32.lib
DLL Api-ms-win-core-enclave-l1-1-0.dll;Kernel32.dll;KernelBase.dll

另請參閱

記憶體保護區函式

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx