Freigeben über


IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)

Der IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES-Steuerelementcode wird gesendet, um eine Leerung eines Dateisystems zu erzwingen, bevor eine Volumeschattenkopie erfolgt. Diese IOCTL wird als IRP_MJ_DEVICE_CONTROL Anforderung ausgegeben, die nur an das Volumegerätobjekt eines lokalen Dateisystems und an Dateisystemfiltertreiber gesendet wird, die möglicherweise an dieses Volume angefügt wurden. Diese IOCTL wird am häufigsten vom Volume Shadow Copy Service gesendet, kann aber auch von anderen Anwendungen oder Prozessen im Benutzermodus ausgegeben werden. Unter besonderen Umständen ist es auch möglich, dass diese IOCTL vom Volume Shadow Copy Driver (volsnap.sys) während einer Ruhezustandsanforderung oder vor einem Absturzabbild gesendet wird. Diese IOCTL wird an Dateisystemfiltertreiber, Dateisystemtreiber und andere Gerätetreiber (z. B. Speicherfiltertreiber und Speichertreiber) gesendet, die sich unterhalb der Dateisysteme befinden.

Wenn ein Dateisystem wie NTFS IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES empfängt, sollte das Dateisystem das Volume auf den Datenträger leeren und die Datenträgerstrukturen des Dateisystems in einen konsistenten und aktuellen Zustand zwingen. Das Dateisystem sollte das Dateisystem in einem schreibgeschützten Bereitstellungszustand sperren und alle neuen Dateisystemänderungen blockieren, um zu verhindern, dass zwischengespeicherte Datenträgerseiten modifiziert werden. Sobald das Dateisystem das Dateisystem in einen solchen Zustand versetzt hat, muss es das IRP mit dem IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL im Stapel an den nächsten Treiber übergeben, während das Dateisystem weiterhin in einem solchen schreibgeschützten Einbindungszustand bleibt, bis die folgenden Treiber die IRP abschließen. Wenn das IRP abgeschlossen oder abgebrochen wird, aktiviert das Dateisystem die E/A-Vorgänge auf dem Volume erneut und gibt zurück.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

IrpSp->Parameters.DeviceIoControl.IoControlCode ist auf IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES festgelegt.

Ausgabepuffer

Keine

Statusblock

Das Statuselement ist auf STATUS_SUCCESS bei Erfolg oder auf einen entsprechenden NTSTATUS-Wert festgelegt, z. B. einen der folgenden:

STATUS_FILE_LOCK_CONFLICT

Es ist ein Dateisperrkonflikt aufgetreten. Dieser Fehler kann vom Filter-Manager zurückgegeben werden.

STATUS_VOLUME_DISMOUNTED

Das Volume wurde aufgehoben.

Hinweise

Eine Schattenkopie eines Volumes ist eine Point-in-Time-Kopie dieses Volumes. Die Schattenkopie wird in erster Linie von einer Sicherungsanwendung verwendet, sodass dateien konsistent gesichert werden können, auch wenn sich die Dateien während der Zeit zum Abschluss des Sicherungsvorgangs wirklich ändern. Eine Schattenkopie kann auch verwendet werden, um ein Volume für einen Ruhezustand vorzubereiten, der sich aus einer PNP-Anforderung und für Absturzabbilder ergibt.

Windows XP und höhere Versionen des Betriebssystems enthalten ein Framework zum Orchestrieren des Zeitpunkts für eine Schattenkopie sowie einen Speicherfiltertreiber (kein Dateisystemfiltertreiber), der eine Kopiertechnik verwendet, um eine Schattenkopie zu erstellen. Der Volume Shadow Copy Service (VSS) orchestriert die Schattenkopie. Der Volume Shadow Copy Driver, volsnap.sys, ist ein Speicherfiltertreiber, der oben auf den Speicherstapel unterhalb von Dateisystemen geladen wird.

Eine wichtige Momentaufnahme bezogene IOCTL, die Dateisysteme betrifft, ist IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. Diese IOCTL ist eigentlich für die Interpretation durch Dateisysteme vorgesehen, obwohl es sich um ein IOCTL handelt. Dies liegt daran, dass alle Dateisysteme die IOCTL an einen Treiber auf niedrigerer Ebene übergeben sollten, der auf die Verarbeitung des IOCTL nach dem Dateisystem wartet.

IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES wird nur an das Volumegerätobjekt eines lokalen Dateisystems und an Dateisystemfiltertreiber gesendet, die möglicherweise an dieses Volume angefügt wurden. Das Speichergerätobjekt, das mit dem Volume über das RealDevice-Element der VPB-Struktur (Volume Parameter Block) verknüpft ist, weist immer einen der folgenden Gerätetypen auf:

FILE_DEVICE_DISK

FILE_DEVICE_VIRTUAL_DISK

Diese IOCTL wird nicht an Remotedateisysteme gesendet.

Wenn ein lokales Dateisystem IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES empfängt, sollte der Treiber ein konsistentes Image der Dateisystemmetadaten erstellen. Der Treiber sollte keine Seiten aufweisen, die inkonsistent sind. Der Treiber muss alle Teile seiner Metadaten und zugeordneten Cachepuffer leeren, die er nicht auf den Datenträger geleert hat, und Schreibvorgänge speichern, bis die IOCTL von Treibern auf niedrigerer Ebene abgeschlossen wurde.

Bei Minifilter-Dateisystemtreibern empfängt der Filter-Manager diese IOCTL und gibt einen Rückruf an den Minifiltertreiber aus, wenn sich der Treiber für den Empfang dieser IRP registriert hat. Wenn ein Minifiltertreiber oder ein Legacy-Dateisystemfiltertreiber diese IOCTL empfängt, muss der Treiber alle Teile seiner Metadaten löschen, die er nicht auf den Datenträger geleert hat. Wenn der Filtertreiber zugeordnete Cachepuffer verwendet, um seine Metadaten zu schreiben, übernimmt das Dateisystem die gesamte Leerung. Der Filtertreiber muss nur sicherstellen, dass er keinen seiner zugeordneten Cachepuffer schreibt, während das Dateisystem versucht, Änderungen auf den Datenträger zu löschen. Ein Legacy-Dateisystemfiltertreiber muss den IRP an den nächsten Treiber im Stapel übergeben.

Ein Treiber kann daten löschen, während er diese IRP mit dem IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL hält, bevor er sie an Treiber auf niedrigerer Ebene übergibt. Alle Daten, die beim Halten dieses IOCTL auf den Datenträger geleert werden, bevor sie den IRP an den nächsten Treiber der unteren Ebene senden, sind Daten, die auf der resultierenden Schattenkopie verfügbar sind.

Wenn es sich um ein schreibgeschütztes Volume handelt, muss ein Dateisystem oder Ein Dateisystemfiltertreiber normalerweise nichts tun, wenn er diese IOCTL empfängt, außer es an den nächsten Treiber auf niedrigerer Ebene zu senden.

Anforderungen

Anforderung Wert
Header ntifs.h (include Ntifs.h, Fltkernel.h)

Weitere Informationen

IRP_MJ_DEVICE_CONTROL