Erstellen einer Dateiansicht

Um die Daten aus einer Datei dem virtuellen Arbeitsspeicher eines Prozesses zuzuordnen, müssen Sie eine Ansicht der Datei erstellen. Die Funktionen MapViewOfFile und MapViewOfFileEx verwenden das von CreateFileMapping zurückgegebene Dateizuordnungsobjekthandle, um eine Ansicht der Datei oder eines Teils der Datei im virtuellen Adressraum des Prozesses zu erstellen. Diese Funktionen schlagen fehl, wenn die Zugriffsflags mit denen in Konflikt treten, die angegeben wurden, als CreateFileMapping das Dateizuordnungsobjekt erstellt hat.

Die MapViewOfFile-Funktion gibt einen Zeiger auf die Dateiansicht zurück. Durch das Deferencieren 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. Die Daten werden zum Zeitpunkt des Schreibens des Dateizuordnungsobjekts nicht tatsächlich übertragen. Stattdessen wird ein Groß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 zu erzwingen, dass das System Datenträgertransaktionen sofort ausführt.

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 Parameter lpvBase angeben kann. Wenn an der angegebenen Adresse nicht genügend Speicherplatz vorhanden ist, schlägt der Anruf fehl. Wenn Sie also eine Datei derselben Adresse in mehreren Prozessen zuordnen müssen, sollten die Prozesse eine geeignete Adresse aushandeln: Der lpvBase-Parameter muss ein integrales Vielfaches der Systemspeicherzuordnungsgranularität sein, andernfalls schlägt der Aufruf fehl. Um die Granularität der Arbeitsspeicherzuordnung des Systems zu erhalten, verwenden Sie die GetSystemInfo-Funktion , die die Elemente einer SYSTEM_INFO-Struktur einfü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.

Erstellen einer Ansicht in einer Datei