Compartilhar via


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

Confira também

Funções de enclave

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

Virtualfree

Virtualfreeex