Freigeben von Dateien und Arbeitsspeicher

Die Dateizuordnung kann verwendet werden, um eine Datei oder einen Arbeitsspeicher zwischen zwei oder mehr Prozessen gemeinsam zu nutzen. Um eine Datei oder einen Arbeitsspeicher gemeinsam zu nutzen, müssen alle Prozesse den Namen oder das Handle desselben Dateizuordnungsobjekts verwenden.

Wenn Sie eine Datei freigeben möchten, erstellt oder öffnet der erste Prozess mithilfe der CreateFile-Funktion eine Datei. Als Nächstes wird mithilfe der CreateFileMapping-Funktion ein Dateizuordnungsobjekt erstellt, wobei das Dateihandle und ein Name für das Dateizuordnungsobjekt angegeben werden. Die Namen von Ereignis-, Semaphor-, Mutex-, Wartezeitgeber-, Auftrags- und Dateizuordnungsobjekten verwenden denselben Namespace. Daher schlagen die Funktionen CreateFileMapping und OpenFileMapping fehl, wenn sie einen Namen angeben, der von einem Objekt eines anderen Typs verwendet wird.

Um Arbeitsspeicher freigeben zu können, der keiner Datei zugeordnet ist, muss ein Prozess die CreateFileMapping-Funktion verwenden und INVALID_HANDLE_VALUE als hFile-Parameter anstelle eines vorhandenen Dateihandles angeben. Das entsprechende Dateizuordnungsobjekt greift auf arbeitsspeicher zu, der von der System-Auslagerungsdatei unterstützt wird. Sie müssen eine Größe größer als 0 (null) angeben, wenn Sie eine hFile-Datei mit INVALID_HANDLE_VALUE in einem Aufruf von CreateFileMapping angeben.

Die einfachste Möglichkeit für andere Prozesse, ein Handle des vom ersten Prozess erstellten Dateizuordnungsobjekts abzurufen, besteht darin, die OpenFileMapping-Funktion zu verwenden und den Namen des Objekts anzugeben. Dies wird als benannter freigegebener Speicher bezeichnet. Wenn das Dateizuordnungsobjekt keinen Namen hat, muss der Prozess durch Vererbung oder Duplizierung ein Handle dafür erhalten. Weitere Informationen zu Vererbung und Duplizierung finden Sie unter Vererbung.

Prozesse, die Dateien oder Arbeitsspeicher freigeben, müssen Mithilfe der MapViewOfFile - oder MapViewOfFileEx-Funktion Dateiansichten erstellen. Sie müssen ihren Zugriff mithilfe von Semaphoren, Mutexen, Ereignissen oder einer anderen Technik des gegenseitigen Ausschlusses koordinieren. Weitere Informationen finden Sie unter Synchronisierung.

Ein Freigegebenes Dateizuordnungsobjekt wird erst zerstört, wenn alle Prozesse, die es verwenden, ihre Handles mithilfe der CloseHandle-Funktion schließen.

Informationen zur Sicherheit von Dateizuordnungsobjekten finden Sie unter Sicherheit und Zugriffsrechte für die Dateizuordnung.

Erstellen von benanntem freigegebenem Arbeitsspeicher