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_SGX 和 ENCLAVE_TYPE_SGX2 記憶體保護區類型,請指定 ENCLAVE_INIT_INFO_SGX 結構的指標。
針對 ENCLAVE_TYPE_VBS 記憶體保護區類型,請指定 ENCLAVE_INIT_INFO_VBS 結構的指標。
[in] dwInfoLength
lpEnclaveInformation 參數指向的結構長度,以位元組為單位。 針對 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 記憶體保護區類型,此值必須是4096。 對於 ENCLAVE_TYPE_VBS 記憶體保護區類型,此值必須是 sizeof(ENCLAVE_INIT_INFO_VBS)
,也就是8個字節。
[in] lpEnclaveError
可接收架構特定記憶體保護區錯誤碼之變數的選擇性指標。
針對 ENCLAVE_TYPE_SGX 和 ENCLAVE_TYPE_SGX2 記憶體保護區類型, lpEnclaveError 參數包含如果函式失敗而 GetLastError 傳回ERROR_ENCLAVE_FAILURE時產生的 EINIT 指令 錯誤。
對於 ENCLAVE_TYPE_VBS 記憶體保護區類型,不會使用 lpEnclaveError 參數。
傳回值
如果函式成功,則傳回非零的值。 如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
如需常見錯誤碼的清單,請參閱 系統錯誤碼。 下列錯誤碼也適用於此函式。
備註
若要建立記憶體保護區,請使用 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 |