CreateEnclave 함수(enclaveapi.h)

초기화되지 않은 새 enclave를 만듭니다. enclave는 애플리케이션의 주소 공간 내에서 코드 및 데이터의 격리된 영역입니다. enclave 내에서 실행되는 코드만 동일한 Enclave 내의 데이터에 액세스할 수 있습니다.

구문

LPVOID CreateEnclave(
  [in]            HANDLE  hProcess,
  [in, optional]  LPVOID  lpAddress,
  [in]            SIZE_T  dwSize,
  [in]            SIZE_T  dwInitialCommitment,
  [in]            DWORD   flEnclaveType,
  [in]            LPCVOID lpEnclaveInformation,
  [in]            DWORD   dwInfoLength,
  [out, optional] LPDWORD lpEnclaveError
);

매개 변수

[in] hProcess

enclave를 만들려는 프로세스에 대한 핸들입니다.

[in, optional] lpAddress

enclave의 기본 기본 주소입니다. 운영 체제에서 기본 주소를 할당하도록 NULL 을 지정합니다.

[in] dwSize

enclave에 로드할 코드의 크기를 포함하여 만들려는 Enclave의 크기(바이트)입니다.

VBS enclave의 크기는 2MB의 배수여야 합니다.

SGX enclave는 크기가 2인 전력이어야 하며, 최소 맞춤이 2MB인 크기와 동일한 2의 전력에 기준이 정렬되어야 합니다. 예를 들어 enclave가 128MB인 경우 해당 기본은 128MB 경계에 맞춰야 합니다.

[in] dwInitialCommitment

enclave에 커밋할 메모리 양(바이트)입니다.

사용 가능한 enclave 메모리 양이 이 바이트 수를 커밋하기에 충분하지 않으면 enclave 만들기가 실패합니다. InitializeEnclave를 호출하여 enclave를 초기화할 때 사용되지 않는 상태로 유지되는 모든 메모리는 사용 가능한 페이지 목록으로 반환됩니다.

dwInitialCommittment 매개 변수의 값은 dwSize 매개 변수의 값을 초과하면 안 됩니다.

이 매개 변수는 VBS(가상화 기반 보안) enclave에 사용되지 않습니다.

[in] flEnclaveType

만들려는 enclave의 아키텍처 유형입니다. enclave 형식이 지원되는지 확인하려면 IsEnclaveTypeSupported를 호출합니다.

의미
ENCLAVE_TYPE_SGX
0x00000001
Intel SGX(Software Guard Extensions) 아키텍처 확장의 enclave입니다.
ENCLAVE_TYPE_SGX2
0x00000002
SGX2 및 SGX1 enclave를 지원합니다. 플랫폼 및 OS는 이 플랫폼에서 EDMM을 사용하여 SGX2 지침을 지원합니다(다른 SGX2 구문 외에).
ENCLAVE_TYPE_VBS
0x00000010
VBS enclave입니다.

[in] lpEnclaveInformation

enclave를 만드는 데 사용할 아키텍처 관련 정보에 대한 포인터입니다.

ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 enclave 형식의 경우 ENCLAVE_CREATE_INFO_SGX 구조체에 대한 포인터를 지정해야 합니다.

ENCLAVE_TYPE_VBS enclave 형식의 경우 ENCLAVE_CREATE_INFO_VBS 구조체에 대한 포인터를 지정해야 합니다.

[in] dwInfoLength

lpEnclaveInformation 매개 변수가 가리키는 구조체의 길이(바이트)입니다. ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2 enclave 형식의 경우 이 값은 4096이어야 합니다. ENCLAVE_TYPE_VBS enclave 형식의 경우 이 값은 36바이트인 이어야 sizeof(ENCLAVE_CREATE_INFO_VBS)합니다.

[out, optional] lpEnclaveError

아키텍처별 enclave 오류 코드를 수신하는 변수에 대한 선택적 포인터입니다. ENCLAVE_TYPE_SGX, ENCLAVE_TYPE_SGX2ENCLAVE_TYPE_VBS enclave 형식의 경우 lpEnclaveError 매개 변수는 사용되지 않습니다.

반환 값

함수가 성공하면 반환 값은 생성된 enclave의 기본 주소입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

일반적인 오류 코드 목록은 시스템 오류 코드를 참조하세요. 이 함수에도 다음 오류 코드가 적용됩니다.

반환 코드 설명
ERROR_NOT_SUPPORTED 지원되지 않는 enclave 형식이 지정되었습니다.
ERROR_BAD_LENGTH dwInfoLength 매개 변수의 값이 lpEnclaveInformation 매개 변수에 지정된 값에 따라 예상되는 값과 일치하지 않습니다.

설명

만든 후 Enclave에 데이터를 로드하려면 LoadEnclaveData를 호출합니다. 데이터를 로드한 후 enclave를 초기화하려면 InitializeEnclave를 호출합니다.

Windows 10 버전 1709: 사용을 완료할 때 enclave를 삭제하려면 DeleteEnclave를 호출합니다. VirtualFree 또는 VirtualFreeEx 함수를 호출하여 VBS enclave 를 삭제할 수 없습니다. VirtualFree 또는 VirtualFreeEx를 호출하여 SGX enclave를 삭제할 수 있습니다.

Windows 10, 버전 1507, Windows 10, 버전 1511, Windows 10, 버전 1607 및 Windows 10 버전 1703: 사용을 완료할 때 enclave를 삭제하려면 VirtualFree 또는 VirtualFreeEx 함수를 호출하고 다음 값을 지정합니다.

  • lpAddress 매개 변수에 대한 enclave의 기본 주소입니다.
  • dwSize 매개 변수의 경우 0입니다.
  • dwFreeType 매개 변수에 대한 MEM_RELEASE. enclave에 대해 MEM_DECOMMIT 값이 지원되지 않습니다.

Intel SGX(Software Guard Extensions) 아키텍처 확장에 대한 자세한 내용은 Intel Software Guard 확장을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2016 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 enclaveapi.h(Winbase.h 포함)
라이브러리 Kernel32.lib
DLL Api-ms-win-core-enclave-l1-1-0.dll; Kernel32.dll; KernelBase.dll

추가 정보

Enclave 함수

ENCLAVE_CREATE_INFO_SGX

ENCLAVE_CREATE_INFO_VBS

InitializeEnclave

IsEnclaveTypeSupported

LoadEnclaveData

VirtualFree

VirtualFreeEx