Função InitializeEnclave (enclaveapi.h)
Inicializa um enclave que você criou e carregou com dados.
Sintaxe
BOOL InitializeEnclave(
[in] HANDLE hProcess,
[in] LPVOID lpAddress,
[in] LPCVOID lpEnclaveInformation,
[in] DWORD dwInfoLength,
[in] LPDWORD lpEnclaveError
);
Parâmetros
[in] hProcess
Um identificador para o processo para o qual o enclave foi criado.
[in] lpAddress
Qualquer endereço dentro do enclave.
[in] lpEnclaveInformation
Um ponteiro para informações específicas da arquitetura a serem usadas para inicializar o enclave.
Para os tipos de enclave ENCLAVE_TYPE_SGX e ENCLAVE_TYPE_SGX2 , especifique um ponteiro para uma estrutura de ENCLAVE_INIT_INFO_SGX .
Para o tipo de enclave ENCLAVE_TYPE_VBS , especifique um ponteiro para uma estrutura de ENCLAVE_INIT_INFO_VBS .
[in] dwInfoLength
O comprimento da estrutura para a qual o parâmetro lpEnclaveInformation aponta, em bytes. Para os tipos de enclave ENCLAVE_TYPE_SGX e ENCLAVE_TYPE_SGX2 , esse valor deve ser 4096. Para o tipo de enclave ENCLAVE_TYPE_VBS , esse valor deve ser sizeof(ENCLAVE_INIT_INFO_VBS)
, que é de 8 bytes.
[in] lpEnclaveError
Um ponteiro opcional para uma variável que recebe um código de erro de enclave específico da arquitetura.
Para os tipos de enclave ENCLAVE_TYPE_SGX e ENCLAVE_TYPE_SGX2 , o parâmetro lpEnclaveError contém o erro gerado pela instrução EINIT se a função falhar e GetLastError retornar ERROR_ENCLAVE_FAILURE.
Para o tipo de enclave ENCLAVE_TYPE_VBS , o parâmetro lpEnclaveError não é usado.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero. Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Para obter uma lista de códigos de erro comuns, consulte Códigos de erro do sistema. Os códigos de erro a seguir também se aplicam a essa função.
Código de retorno | Descrição |
---|---|
ERROR_ENCLAVE_FAILURE | Ocorreu uma falha específica da arquitetura de enclave subjacente. O valor do parâmetro lpEnclaveError contém o erro específico da arquitetura. Para os tipos de enclave ENCLAVE_TYPE_SGX e ENCLAVE_TYPE_SGX2 , a instrução EINIT especificada pela estrutura de ENCLAVE_INIT_INFO_SGX gerou um erro. O valor do parâmetro lpEnclaveError contém o erro gerado pela instrução. |
ERROR_BAD_LENGTH | O valor do parâmetro dwInfoLength não correspondeu ao valor esperado com base no valor especificado para o parâmetro lpEnclaveInformation . |
ERROR_RETRY | O processador não pôde inicializar o enclave em tempo hábil. Tente inicializar o enclave novamente. |
Comentários
Para criar um enclave, use a função CreateEnclave . Para carregar dados no enclave antes de inicializá-los, use a função LoadEnclaveData .
Windows 10, versão 1709 e posterior e Windows 11: para excluir o enclave quando terminar de usá-lo, chame DeleteEnclave. Não é possível excluir um enclave de VBS chamando a função VirtualFree ou VirtualFreeEx . Você ainda pode excluir um enclave SGX chamando VirtualFree ou VirtualFreeEx.
Windows 10, versão 1507, Windows 10, versão 1511, Windows 10, versão 1607 e Windows 10, versão 1703: para excluir o enclave quando terminar de usá-lo, chame a função VirtualFree ou VirtualFreeEx e especifique os seguintes valores:
- O endereço base do enclave para o parâmetro lpAddress .
- 0 para o parâmetro dwSize .
- MEM_RELEASE para o parâmetro dwFreeType .
Requisitos
Cliente mínimo com suporte | Windows 10 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2016 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | enclaveapi.h (inclua Winbase.h) |
Biblioteca | Kernel32.lib |
DLL | Api-ms-win-core-enclave-l1-1-0.dll; Kernel32.dll; KernelBase.dll |