Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Erstellen eines Dateizuordnungsobjekts in Windows umfasst das Öffnen einer Datei mithilfe der CreateFile-Funktion . Mit diesem Prozess können Sie Dateiinhalte direkt in den Arbeitsspeicher zuordnen, um effizienten Zugriff und Manipulation zu ermöglichen. Um sicherzustellen, dass andere Prozesse nicht in den Teil der zugeordneten Datei schreiben können, sollten Sie die Datei mit exklusivem Zugriff öffnen. Darüber hinaus sollte das Dateihandle geöffnet bleiben, bis der Prozess das Dateizuordnungsobjekt nicht mehr benötigt. Eine einfache Möglichkeit, exklusiven Zugriff zu erhalten, besteht darin, null im fdwShareMode-Parameter von CreateFile anzugeben. Das von CreateFile zurückgegebene Handle wird von der CreateFileMapping-Funktion verwendet, um ein Dateizuordnungsobjekt zu erstellen.
Die CreateFileMapping-Funktion gibt ein Handle für das Dateizuordnungsobjekt zurück. Dieses Handle wird beim Erstellen einer Dateiansicht verwendet, sodass Sie auf den freigegebenen Speicher zugreifen können. Wenn Sie CreateFileMapping aufrufen, geben Sie einen Objektnamen an, die Anzahl der Bytes, die aus der Datei zugeordnet werden sollen, und die Lese-/Schreibberechtigung für den zugeordneten Speicher. Der erste Prozess, der CreateFileMapping aufruft, erstellt das Dateizuordnungsobjekt. Prozesse, die CreateFileMapping für ein vorhandenes Objekt aufrufen, erhalten einen Handle für das vorhandene Objekt. Sie können feststellen, ob ein erfolgreicher Aufruf von CreateFileMapping das Datei-Mapping-Objekt erstellt oder geöffnet hat, indem Sie die Funktion GetLastError aufrufen. GetLastError gibt NO_ERROR an den Erstellungsprozess zurück und ERROR_ALREADY_EXISTS zu nachfolgenden Prozessen.
Die CreateFileMapping-Funktion schlägt fehl, wenn die Zugriffskennzeichnungen mit denen in Konflikt geraten, die beim Öffnen der Datei durch die CreateFile-Funktion angegeben wurden. Um zum Beispiel die Datei zu lesen und zu schreiben:
- Geben Sie die Werte GENERIC_READ und GENERIC_WRITE im fdwAccess-Parameter von CreateFile an.
- Geben Sie den PAGE_READWRITE Wert im fdwProtect-Parameter von CreateFileMapping an.
Durch das Erstellen eines Dateizuordnungsobjekts wird kein physischer Speicher zugeordnet; es wird nur vorbehalten.
Dateizuordnungsgröße
Die Größe des Dateizuordnungsobjekts ist unabhängig von der Größe der zugeordneten Datei. Wenn das Dateizuordnungsobjekt jedoch größer als die Datei ist, erweitert das System die Datei, bevor CreateFileMapping zurückgegeben wird. Wenn das Dateizuordnungsobjekt kleiner als die Datei ist, ordnet das System nur die angegebene Anzahl von Bytes aus der Datei zu.
Mit den Parametern dwMaximumSizeHigh und dwMaximumSizeLow von CreateFileMapping können Sie die Anzahl der Bytes angeben, die aus der Datei zugeordnet werden sollen:
Wenn die Größe der Datei nicht geändert werden soll (z. B. beim Zuordnen schreibgeschützter Dateien), rufen Sie CreateFileMapping auf und geben Sie Null für dwMaximumSizeHigh und dwMaximumSizeLow an. Dadurch wird ein Dateizuordnungsobjekt erstellt, das genau die gleiche Größe wie die Datei hat. Andernfalls müssen Sie die Größe der fertigen Datei berechnen oder schätzen, da Dateizuordnungsobjekte statisch sind; sobald sie erstellt wurde, kann ihre Größe nicht vergrößert oder verringert werden. Ein Versuch, eine Datei mit einer Länge von Null auf diese Weise zuzuordnen, schlägt mit einem Fehlercode von ERROR_FILE_INVALID fehl. Programme sollten auf Dateien mit einer Länge von null testen und solche Dateien ablehnen.
Die Größe eines Dateizuordnungsobjekts, das von einer benannten Datei unterstützt wird, ist durch Speicherplatz begrenzt. Die Größe einer Dateiansicht ist auf den größten verfügbaren zusammenhängenden Block des nicht reservierten virtuellen Speichers beschränkt.
Die Größe des Dateizuordnungsobjekts, das Sie auswählen, steuert, wie weit in die Datei Sie mit der Speicherzuordnung "sehen" können. Wenn Sie ein Dateizuordnungsobjekt erstellen, das 500 KB groß ist, haben Sie nur Zugriff auf die ersten 500 KB der Datei, unabhängig von der Größe der Datei. Da es Ihnen keine Systemressourcen kostet, ein größeres Dateizuordnungsobjekt zu erstellen, erstellen Sie ein Dateizuordnungsobjekt, das die Größe der Datei darstellt (legen Sie die Parameter dwMaximumSizeHigh und dwMaximumSizeLow von CreateFileMapping beide auf Null fest), auch wenn Sie nicht erwarten, dass die gesamte Datei angezeigt wird. Die Systemressourcenkosten entstehen beim Erstellen der Ansichten und beim Zugriff darauf.
Sie können einen Teil der Datei anzeigen, der nicht am Anfang der Datei beginnt. Weitere Informationen finden Sie unter Erstellen einer Ansicht in einer Datei.