Поделиться через


Функция InitializeEnclave (enclaveapi.h)

Инициализирует созданный и загруженный с данными анклав.

Синтаксис

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

Параметры

[in] hProcess

Дескриптор процесса, для которого был создан анклав.

[in] lpAddress

Любой адрес в анклаве.

[in] lpEnclaveInformation

Указатель на сведения об архитектуре, используемые для инициализации анклава.

Для типов ENCLAVE_TYPE_SGX и ENCLAVE_TYPE_SGX2 анклава укажите указатель на структуру ENCLAVE_INIT_INFO_SGX .

Для типа анклава ENCLAVE_TYPE_VBS укажите указатель на структуру ENCLAVE_INIT_INFO_VBS .

[in] dwInfoLength

Длина структуры, на которую указывает параметр lpEnclaveInformation , в байтах. Для типов анклава ENCLAVE_TYPE_SGX и ENCLAVE_TYPE_SGX2 это значение должно быть равно 4096. Для типа анклава ENCLAVE_TYPE_VBS это значение должно быть sizeof(ENCLAVE_INIT_INFO_VBS)равно 8 байтам.

[in] lpEnclaveError

Необязательный указатель на переменную, которая получает код ошибки анклава, зависящий от архитектуры.

Для типов ENCLAVE_TYPE_SGX и ENCLAVE_TYPE_SGX2 анклава параметр lpEnclaveError содержит ошибку , созданную инструкцией EINIT при сбое функции, а GetLastError возвращает ERROR_ENCLAVE_FAILURE.

Для типа анклава ENCLAVE_TYPE_VBS параметр lpEnclaveError не используется.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение. Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Список распространенных кодов ошибок см. в разделе Системные коды ошибок. Для этой функции также применяются следующие коды ошибок.

Код возврата Описание
ERROR_ENCLAVE_FAILURE Произошел сбой, характерный для базовой архитектуры анклава. Значение параметра lpEnclaveError содержит ошибку для конкретной архитектуры.

Для типов ENCLAVE_TYPE_SGX и ENCLAVE_TYPE_SGX2 анклава инструкция EINIT, указанная ENCLAVE_INIT_INFO_SGX структуре, вызвала ошибку. Значение параметра lpEnclaveError содержит ошибку, созданную инструкцией.
ERROR_BAD_LENGTH Значение параметра dwInfoLength не совпадает с ожидаемым значением на основе значения, указанного для параметра lpEnclaveInformation .
ERROR_RETRY Процессору не удалось своевременно инициализировать анклав. Попробуйте инициализировать анклав еще раз.

Комментарии

Чтобы создать анклав, используйте функцию CreateEnclave . Чтобы загрузить данные в анклав перед их инициализацией, используйте функцию LoadEnclaveData .

Windows 10 версии 1709 и более поздних версий и Windows 11. Чтобы удалить анклав после его использования, вызовите Метод DeleteEnclave. Вы не можете удалить анклав VBS, вызвав функцию VirtualFree или VirtualFreeEx . Вы по-прежнему можете удалить анклав SGX, вызвав VirtualFree или VirtualFreeEx.

Windows 10 версии 1507, Windows 10, версии 1511, Windows 10 версии 1607 и Windows 10 версии 1703. Чтобы удалить анклав после его использования, вызовите функцию VirtualFree или VirtualFreeEx и укажите следующие значения:

  • Базовый адрес анклава для параметра lpAddress .
  • 0 для параметра dwSize .
  • MEM_RELEASE для параметра dwFreeType .

Требования

   
Минимальная версия клиента Windows 10 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2016 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header enclaveapi.h (включая Winbase.h)
Библиотека Kernel32.lib
DLL Api-ms-win-core-enclave-l1-1-0.dll; Kernel32.dll; KernelBase.dll

См. также раздел

Функции анклава

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx