Erstellen einer Dateiansicht
Um die Daten aus einer Datei dem virtuellen Speicher eines Prozesses zuordnen zu können, müssen Sie eine Ansicht der Datei erstellen. Die Funktionen MapViewOfFile und MapViewOfFileEx verwenden das von CreateFileMapping zurückgegebene Dateizuordnungsobjekthandl, um eine Ansicht der Datei oder eines Teils der Datei im virtuellen Adressraum des Prozesses zu erstellen. Diese Funktionen führen zu einem Fehler, wenn die Zugriffsflags mit denen in Konflikt stehen, die beim Erstellen des Dateizuordnungsobjekts durch CreateFileMapping angegeben wurden.
Die MapViewOfFile-Funktion gibt einen Zeiger auf die Dateiansicht zurück. Durch Ableiten eines Zeigers im Adressbereich, der in MapViewOfFile angegeben ist, kann eine Anwendung Daten aus der Datei lesen und Daten in die Datei schreiben. Das Schreiben in die Dateiansicht führt zu Änderungen am Dateizuordnungsobjekt. Das eigentliche Schreiben in die Datei auf dem Datenträger wird vom System verarbeitet. Daten werden zum Zeitpunkt des Schreibens des Dateizuordnungsobjekts nicht übertragen. Stattdessen wird ein Teil der Dateieingabe und -ausgabe (E/A) zwischengespeichert, um die allgemeine Systemleistung zu verbessern. Anwendungen können dieses Verhalten überschreiben, indem sie die FlushViewOfFile-Funktion aufrufen, um das System zu zwingen, Datenträgertransaktionen sofort durchzuführen.
Die MapViewOfFileEx-Funktion funktioniert genau wie die MapViewOfFile-Funktion, mit der Ausnahme, dass ein Prozess die Basisadresse der Ansicht der Datei im virtuellen Adressraum des Prozesses im lpvBase-Parameter angeben kann. Wenn an der angegebenen Adresse nicht genügend Speicherplatz vorhanden ist, schlägt der Aufruf fehl. Wenn Sie daher eine Datei derselben Adresse in mehreren Prozessen zuordnen müssen, sollten die Prozesse eine geeignete Adresse aushandeln: Der lpvBase-Parameter muss ein ganzzahliges Vielfaches der Granularität der Systemspeicherzuordnung sein, da ander ende der Aufruf fehlschlägt. Um die Granularität der Speicherzuordnung des Systems zu erhalten, verwenden Sie die GetSystemInfo-Funktion, die die Member einer SYSTEM _ INFO-Struktur ausfüllt.
Eine Anwendung kann mehrere Dateiansichten aus demselben Dateizuordnungsobjekt erstellen. Eine Dateiansicht kann eine andere Größe als das Dateizuordnungsobjekt haben, von dem sie abgeleitet wird, muss jedoch kleiner als das Dateizuordnungsobjekt sein. Der durch die Parameter dwOffsetHigh und dwOffsetLow von MapViewOfFile angegebene Offset muss ein Vielfaches der Zuordnungsgranularität des Systems sein.