Compartir a través de


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

Consulte también

Funciones de enclave

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx