Función InitializeEnclave (enclaveapi.h)
Inicializa un enclave que ha creado y cargado con datos.
Sintaxis
BOOL InitializeEnclave(
[in] HANDLE hProcess,
[in] LPVOID lpAddress,
[in] LPCVOID lpEnclaveInformation,
[in] DWORD dwInfoLength,
[in] LPDWORD lpEnclaveError
);
Parámetros
[in] hProcess
Identificador del proceso para el que se creó el enclave.
[in] lpAddress
Cualquier dirección dentro del enclave.
[in] lpEnclaveInformation
Puntero a información específica de la arquitectura que se usará para inicializar el enclave.
Para los tipos de enclave ENCLAVE_TYPE_SGX y ENCLAVE_TYPE_SGX2 , especifique un puntero a una estructura de ENCLAVE_INIT_INFO_SGX .
En el ENCLAVE_TYPE_VBS tipo de enclave, especifique un puntero a una estructura ENCLAVE_INIT_INFO_VBS .
[in] dwInfoLength
Longitud de la estructura a la que apunta el parámetro lpEnclaveInformation , en bytes. Para los tipos de enclave de ENCLAVE_TYPE_SGX y ENCLAVE_TYPE_SGX2 , este valor debe ser 4096. Para el tipo de enclave de ENCLAVE_TYPE_VBS , este valor debe ser sizeof(ENCLAVE_INIT_INFO_VBS)
, que es de 8 bytes.
[in] lpEnclaveError
Puntero opcional a una variable que recibe un código de error de enclave específico de la arquitectura.
Para los tipos de enclave ENCLAVE_TYPE_SGX y ENCLAVE_TYPE_SGX2 , el parámetro lpEnclaveError contiene el error que la instrucción EINIT generó si se produce un error en la función y GetLastError devuelve ERROR_ENCLAVE_FAILURE.
Para el tipo de enclave ENCLAVE_TYPE_VBS , no se usa el parámetro lpEnclaveError .
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero. Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Para obtener una lista de códigos de error comunes, consulte Códigos de error del sistema. Los siguientes códigos de error también se aplican a esta función.
Código devuelto | Descripción |
---|---|
ERROR_ENCLAVE_FAILURE | Error específico de la arquitectura de enclave subyacente. El valor del parámetro lpEnclaveError contiene el error específico de la arquitectura. Para los tipos de enclave ENCLAVE_TYPE_SGX y ENCLAVE_TYPE_SGX2 , la instrucción EINIT que la estructura de ENCLAVE_INIT_INFO_SGX especificó generó un error. El valor del parámetro lpEnclaveError contiene el error que generó la instrucción. |
ERROR_BAD_LENGTH | El valor del parámetro dwInfoLength no coincide con el valor esperado en función del valor especificado para el parámetro lpEnclaveInformation . |
ERROR_RETRY | El procesador no pudo inicializar el enclave de forma oportuna. Intente volver a inicializar el enclave. |
Comentarios
Para crear un enclave, use la función CreateEnclave . Para cargar datos en el enclave antes de inicializarlos, use la función LoadEnclaveData .
Windows 10, versión 1709 y posteriores y Windows 11: para eliminar el enclave cuando termine de usarlo, llame a DeleteEnclave. No se puede eliminar un enclave de VBS llamando a la función VirtualFree o VirtualFreeEx . Todavía puede eliminar un enclave SGX llamando a VirtualFree o VirtualFreeEx.
Windows 10, versión 1507, Windows 10, versión 1511, Windows 10, versión 1607 y Windows 10, versión 1703: para eliminar el enclave cuando termine de usarlo, llame a la función VirtualFree o VirtualFreeEx y especifique los valores siguientes:
- Dirección base del enclave para el parámetro lpAddress .
- 0 para el parámetro dwSize .
- MEM_RELEASE para el parámetro dwFreeType .
Requisitos
Cliente mínimo compatible | Windows 10 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2016 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | enclaveapi.h (incluir Winbase.h) |
Library | Kernel32.lib |
Archivo DLL | Api-ms-win-core-enclave-l1-1-0.dll; Kernel32.dll; KernelBase.dll |