Fungsi CreateEnclave (enclaveapi.h)

Membuat enklave baru yang tidak diinisialisasi. Enklave adalah wilayah kode dan data yang terisolasi dalam ruang alamat untuk aplikasi. Hanya kode yang berjalan dalam enklave yang dapat mengakses data dalam enklave yang sama.

Sintaks

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
);

Parameter

[in] hProcess

Handel ke proses yang ingin Anda buat enklavenya.

[in, optional] lpAddress

Alamat dasar enklave yang disukai. Tentukan NULL agar sistem operasi menetapkan alamat dasar.

[in] dwSize

Ukuran enklave yang ingin Anda buat, termasuk ukuran kode yang akan Anda muat ke enklave, dalam byte.

Enklave VBS harus berukuran kelipatan 2 MB.

Enklave SGX harus berukuran 2 dan harus memiliki basis yang selaras dengan kekuatan 2 yang sama dengan ukuran, dengan penyelarasan minimum 2 MB. Sebagai contoh, jika enklave adalah 128 MB, maka basisnya harus selaras dengan batas 128 MB.

[in] dwInitialCommitment

Jumlah memori yang akan diterapkan untuk enklave, dalam byte.

Jika jumlah memori enklave yang tersedia tidak cukup untuk menerapkan jumlah byte ini, pembuatan enklave gagal. Memori apa pun yang tetap tidak digunakan saat Anda menginisialisasi enklave dengan memanggil InitializeEnclave dikembalikan ke daftar halaman gratis.

Nilai parameter dwInitialCommittment tidak boleh melebihi nilai parameter dwSize .

Parameter ini tidak digunakan untuk enklave keamanan berbasis virtualisasi (VBS).

[in] flEnclaveType

Jenis arsitektur enklave yang ingin Anda buat. Untuk memverifikasi bahwa jenis enklave didukung, panggil IsEnclaveTypeSupported.

Nilai Makna
ENCLAVE_TYPE_SGX
0x00000001
Enklave untuk ekstensi arsitektur Intel Software Guard Extensions (SGX).
ENCLAVE_TYPE_SGX2
0x00000002
Mendukung enklave SGX2 dan SGX1. Platform dan OS mendukung instruksi SGX2 dengan EDMM pada platform ini (selain konstruksi SGX2 lainnya).
ENCLAVE_TYPE_VBS
0x00000010
Enklave VBS.

[in] lpEnclaveInformation

Penunjuk ke informasi khusus arsitektur yang akan digunakan untuk membuat enklave.

Untuk jenis enklave ENCLAVE_TYPE_SGX dan ENCLAVE_TYPE_SGX2 , Anda harus menentukan penunjuk ke struktur ENCLAVE_CREATE_INFO_SGX .

Untuk jenis enklave ENCLAVE_TYPE_VBS , Anda harus menentukan penunjuk ke struktur ENCLAVE_CREATE_INFO_VBS .

[in] dwInfoLength

Panjang struktur yang ditunjukkan parameter lpEnclaveInformation , dalam byte. Untuk jenis enklave ENCLAVE_TYPE_SGX dan ENCLAVE_TYPE_SGX2 , nilai ini harus 4096. Untuk jenis enklave ENCLAVE_TYPE_VBS , nilai ini harus sizeof(ENCLAVE_CREATE_INFO_VBS), yaitu 36 byte.

[out, optional] lpEnclaveError

Penunjuk opsional ke variabel yang menerima kode kesalahan enklave yang khusus untuk arsitektur. Untuk jenis enklave ENCLAVE_TYPE_SGX, ENCLAVE_TYPE_SGX2 , dan ENCLAVE_TYPE_VBS , parameter lpEnclaveError tidak digunakan.

Nilai kembali

Jika fungsi berhasil, nilai pengembalian adalah alamat dasar enklave yang dibuat.

Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Untuk daftar kode kesalahan umum, lihat Kode Kesalahan Sistem. Kode kesalahan berikut juga berlaku untuk fungsi ini.

Menampilkan kode Deskripsi
ERROR_NOT_SUPPORTED Jenis enklave yang tidak didukung ditentukan.
ERROR_BAD_LENGTH Nilai parameter dwInfoLength tidak cocok dengan nilai yang diharapkan berdasarkan nilai yang ditentukan untuk parameter lpEnclaveInformation .

Keterangan

Untuk memuat data ke enklave setelah Anda membuatnya, panggil LoadEnclaveData. Untuk menginisialisasi enklave setelah Anda memuat data, panggil InitializeEnclave.

Windows 10, versi 1709: Untuk menghapus enklave saat Anda selesai menggunakannya, panggil DeleteEnclave. Anda tidak dapat menghapus enklave VBS dengan memanggil fungsi VirtualFree atau VirtualFreeEx . Anda masih dapat menghapus enklave SGX dengan memanggil VirtualFree atau VirtualFreeEx.

Windows 10, versi 1507, Windows 10, versi 1511, Windows 10, versi 1607 dan Windows 10, versi 1703: Untuk menghapus enklave saat Anda selesai menggunakannya, panggil fungsi VirtualFree atau VirtualFreeEx dan tentukan nilai berikut:

  • Alamat dasar enklave untuk parameter lpAddress .
  • 0 untuk parameter dwSize .
  • MEM_RELEASE untuk parameter dwFreeType . Nilai MEM_DECOMMIT tidak didukung untuk enklave.

Untuk informasi tentang ekstensi arsitektur Intel Software Guard Extensions (SGX), lihat Intel Software Guard Extensions.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2016 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header enclaveapi.h (termasuk Winbase.h)
Pustaka Kernel32.lib
DLL Api-ms-win-core-enclave-l1-1-0.dll; Kernel32.dll; KernelBase.dll

Lihat juga

Fungsi Enklave

ENCLAVE_CREATE_INFO_SGX

ENCLAVE_CREATE_INFO_VBS

InitializeEnclave

IsEnclaveTypeSupported

LoadEnclaveData

VirtualFree

VirtualFreeEx