Fonction InitializeEnclave (enclaveapi.h)

Initialise une enclave que vous avez créée et chargée avec des données.

Syntaxe

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

Paramètres

[in] hProcess

Handle du processus pour lequel l’enclave a été créée.

[in] lpAddress

Toute adresse dans l’enclave.

[in] lpEnclaveInformation

Pointeur vers des informations spécifiques à l’architecture à utiliser pour initialiser l’enclave.

Pour les types d’enclave ENCLAVE_TYPE_SGX et ENCLAVE_TYPE_SGX2 , spécifiez un pointeur vers une structure ENCLAVE_INIT_INFO_SGX .

Pour le type d’enclave ENCLAVE_TYPE_VBS , spécifiez un pointeur vers une structure ENCLAVE_INIT_INFO_VBS .

[in] dwInfoLength

Longueur de la structure vers laquelle pointe le paramètre lpEnclaveInformation , en octets. Pour les types d’enclave ENCLAVE_TYPE_SGX et ENCLAVE_TYPE_SGX2 , cette valeur doit être 4096. Pour le type d’enclave ENCLAVE_TYPE_VBS , cette valeur doit être sizeof(ENCLAVE_INIT_INFO_VBS), qui est de 8 octets.

[in] lpEnclaveError

Pointeur facultatif vers une variable qui reçoit un code d’erreur d’enclave spécifique à l’architecture.

Pour les types d’enclave ENCLAVE_TYPE_SGX et ENCLAVE_TYPE_SGX2 , le paramètre lpEnclaveError contient l’erreur générée par l’instruction EINIT si la fonction échoue et que GetLastError retourne ERROR_ENCLAVE_FAILURE.

Pour le type d’enclave ENCLAVE_TYPE_VBS , le paramètre lpEnclaveError n’est pas utilisé.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro. Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Pour obtenir la liste des codes d’erreur courants, consultez Codes d’erreur système. Les codes d’erreur suivants s’appliquent également à cette fonction.

Code de retour Description
ERROR_ENCLAVE_FAILURE Une défaillance spécifique à l’architecture d’enclave sous-jacente s’est produite. La valeur du paramètre lpEnclaveError contient l’erreur spécifique à l’architecture.

Pour les types d’enclaves ENCLAVE_TYPE_SGX et ENCLAVE_TYPE_SGX2 , l’instruction EINIT que la structure ENCLAVE_INIT_INFO_SGX a spécifiée a généré une erreur. La valeur du paramètre lpEnclaveError contient l’erreur générée par l’instruction.
ERROR_BAD_LENGTH La valeur du paramètre dwInfoLength ne correspondait pas à la valeur attendue en fonction de la valeur spécifiée pour le paramètre lpEnclaveInformation .
ERROR_RETRY Le processeur n’a pas pu initialiser l’enclave en temps voulu. Essayez à nouveau d’initialiser l’enclave.

Remarques

Pour créer une enclave, utilisez la fonction CreateEnclave . Pour charger des données dans l’enclave avant de les initialiser, utilisez la fonction LoadEnclaveData .

Windows 10, version 1709 et ultérieures et Windows 11 : pour supprimer l’enclave lorsque vous avez terminé de l’utiliser, appelez DeleteEnclave. Vous ne pouvez pas supprimer une enclave VBS en appelant la fonction VirtualFree ou VirtualFreeEx . Vous pouvez toujours supprimer une enclave SGX en appelant VirtualFree ou VirtualFreeEx.

Windows 10, version 1507, Windows 10, version 1511, Windows 10, version 1607 et Windows 10, version 1703 : pour supprimer l’enclave lorsque vous avez terminé de l’utiliser, appelez la fonction VirtualFree ou VirtualFreeEx et spécifiez les valeurs suivantes :

  • Adresse de base de l’enclave pour le paramètre lpAddress .
  • 0 pour le paramètre dwSize .
  • MEM_RELEASE pour le paramètre dwFreeType .

Configuration requise

   
Client minimal pris en charge Windows 10 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2016 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête enclaveapi.h (inclure Winbase.h)
Bibliothèque Kernel32.lib
DLL Api-ms-win-core-enclave-l1-1-0.dll ; Kernel32.dll ; KernelBase.dll

Voir aussi

Fonctions d’enclave

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx