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_SGXENCLAVE_TYPE_SGX2エンクレーブ型の場合は、ENCLAVE_INIT_INFO_SGX構造体へのポインターを指定します。

ENCLAVE_TYPE_VBS エンクレーブ型の場合は、ENCLAVE_INIT_INFO_VBS構造体へのポインターを指定します。

[in] dwInfoLength

lpEnclaveInformation パラメーターが指す構造体の長さ (バイト単位)。 ENCLAVE_TYPE_SGXENCLAVE_TYPE_SGX2エンクレーブの種類の場合、この値は 4096 である必要があります。 ENCLAVE_TYPE_VBSエンクレーブの種類の場合、この値は sizeof(ENCLAVE_INIT_INFO_VBS)である必要があります。これは 8 バイトです。

[in] lpEnclaveError

アーキテクチャ固有のエンクレーブ エラー コードを受け取る変数への省略可能なポインター。

ENCLAVE_TYPE_SGXおよびENCLAVE_TYPE_SGX2エンクレーブ型の場合、lpEnclaveError パラメーターには、関数が失敗し、GetLastErrorERROR_ENCLAVE_FAILUREを返す場合に EINIT 命令が生成するエラーが含まれます。

ENCLAVE_TYPE_VBSエンクレーブ型の場合、lpEnclaveError パラメーターは使用されません。

戻り値

関数が成功すると、戻り値は 0 以外になります。 関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

一般的なエラー コードの一覧については、「 システム エラー コード」を参照してください。 この関数には、次のエラー コードも適用されます。

リターン コード 説明
ERROR_ENCLAVE_FAILURE 基になるエンクレーブ アーキテクチャに固有のエラーが発生しました。 lpEnclaveError パラメーターの値には、アーキテクチャ固有のエラーが含まれています。

ENCLAVE_TYPE_SGXおよびENCLAVE_TYPE_SGX2エンクレーブ型の場合、ENCLAVE_INIT_INFO_SGX構造体が指定した EINIT 命令によってエラーが発生しました。 lpEnclaveError パラメーターの値には、命令によって生成されたエラーが含まれています。
ERROR_BAD_LENGTH dwInfoLength パラメーターの値が、lpEnclaveInformation パラメーターに指定された値に基づいて予期される値と一致しませんでした。
ERROR_RETRY プロセッサは、タイムリーにエンクレーブを初期化できませんでした。 エンクレーブをもう一度初期化してみてください。

注釈

エンクレーブを作成するには、 CreateEnclave 関数を使用します。 初期化する前にエンクレーブにデータを読み込むには、 LoadEnclaveData 関数を使用します。

Windows 10バージョン 1709 以降とWindows 11: エンクレーブの使用が完了したら、DeleteEnclave を呼び出します。 VirtualFree または VirtualFreeEx 関数を呼び出して VBS エンクレーブを削除することはできません。 引き続き VirtualFree または VirtualFreeEx を呼び出して、SGX エンクレーブ 削除できます。

Windows 10、バージョン 1507、Windows 10、バージョン 1511、Windows 10、バージョン 1607、Windows 10、バージョン 1703: 使用が完了したときにエンクレーブを削除するには、VirtualFree または VirtualFreeEx 関数を呼び出し、次の値を指定します。

  • lpAddress パラメーターのエンクレーブのベース アドレス。
  • dwSize パラメーターの場合は 0。
  • dwFreeType パラメーターのMEM_RELEASE

要件

   
サポートされている最小のクライアント Windows 10 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2016 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー enclaveapi.h (Winbase.h を含む)
Library Kernel32.lib
[DLL] Api-ms-win-core-enclave-l1-1-0.dll;Kernel32.dll;KernelBase.dll

こちらもご覧ください

エンクレーブ関数

CreateEnclave

ENCLAVE_INIT_INFO_SGX

LoadEnclaveData

VirtualFree

VirtualFreeEx