ファイルとメモリの共有

ファイル マッピングを使用して、2 つ以上のプロセス間でファイルまたはメモリを共有できます。 ファイルまたはメモリを共有するには、すべてのプロセスで同じファイル マッピング オブジェクトの名前またはハンドルを使用する必要があります。

ファイルを共有するには、最初のプロセスで CreateFile 関数を使用してファイルを作成または開きます。 次に、 CreateFileMapping 関数を使用してファイル マッピング オブジェクトを作成し、ファイル ハンドルとファイル マッピング オブジェクトの名前を指定します。 イベント、セマフォ、ミューテックス、待機可能タイマー、ジョブ、およびファイル マッピング オブジェクトの名前は、同じ名前空間を共有します。 したがって、 CreateFileMapping 関数と OpenFileMapping 関数は、別の型のオブジェクトで使用されている名前を指定すると失敗します。

ファイルに関連付けられていないメモリを共有するには、プロセスで CreateFileMapping 関数を使用し、既存のファイル ハンドルではなく hFile パラメーターとしてINVALID_HANDLE_VALUEを指定する必要があります。 対応するファイル マッピング オブジェクトは、システム ページング ファイルによってサポートされるメモリにアクセスします。 CreateFileMapping の呼び出しで hFile のINVALID_HANDLE_VALUEを指定する場合は、0 より大きいサイズを指定する必要があります。

他のプロセスが最初のプロセスによって作成されたファイル マッピング オブジェクトのハンドルを取得する最も簡単な方法は、 OpenFileMapping 関数を使用してオブジェクトの名前を指定することです。 これは名前 付き共有メモリと呼ばれます。 ファイル マッピング オブジェクトに名前がない場合、プロセスは継承または重複によってハンドルを取得する必要があります。 継承と重複の詳細については、「継承」を参照 してください

ファイルまたはメモリを共有するプロセスでは、MapViewOfFile または MapViewOfFileEx 関数を使用してファイル ビューを作成する必要があります。 セマフォ、ミューテックス、イベント、またはその他の相互排他手法を使用してアクセスを調整する必要があります。 詳細については、「 同期」を参照してください。

共有ファイル マッピング オブジェクトは、使用するすべてのプロセスが CloseHandle 関数を使用してハンドルを閉じるまで破棄されません。

ファイル マッピング オブジェクトのセキュリティについては、「 ファイル マッピングのセキュリティとアクセス権」を参照してください。

名前付き共有メモリの作成