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 auftritt. 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 Benutzermodusanwendungen oder -prozessen ausgestellt werden. Es ist auch unter besonderen Umständen möglich, dass diese IOCTL vom Volume Shadow Copy Driver (volsnap.sys) während einer Ruhezustandsanforderung oder vor einem Absturzabbild gesendet werden kann. Diese IOCTL wird an Dateisystemfiltertreiber, Dateisystemtreiber und andere Gerätetreiber (z. B. Speicherfiltertreiber und Speichertreiber) unter den Dateisystemen gesendet.
Wenn ein Dateisystem wie NTFS IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES empfängt, sollte das Dateisystem das Volume auf den Datenträger leeren, wodurch die Datenträgerstrukturen des Dateisystems in einen konsistenten und up-to-datumszustand erzwungen werden. Das Dateisystem sollte das Dateisystem in einem schreibgeschützten bereitstellungsfähigen Zustand sperren und alle neuen Dateisystemänderungen blockieren, um zu verhindern, dass zwischengespeicherte Datenträgerseiten schmutzig 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 abwärts an den nächsten Treiber übergeben, während das Dateisystem weiterhin in einem schreibgeschützten bereitstellungsfähigen Zustand bleibt, bis die unten stehenden Treiber das IRP abgeschlossen haben. Wenn das IRP abgeschlossen oder abgebrochen wird, aktiviert das Dateisystem E/A auf dem Volume erneut und gibt zurück.
Hauptcode
Eingabepuffer
IrpSp->Parameters.DeviceIoControl.IoControlCode wird auf IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES festgelegt.
Ausgabepuffer
Nichts
Statusblock
Das Status- Mitglied wird auf "Erfolg" oder einen entsprechenden NTSTATUS-Wert wie einen der folgenden Werte STATUS_SUCCESS festgelegt:
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.
Bemerkungen
Eine Schattenkopie eines Volumes ist eine Punkt-in-Time-Kopie dieses Volumes. Die Schattenkopie wird in erster Linie von einer Sicherungsanwendung verwendet, sodass dateien auf konsistente Weise gesichert werden können, auch wenn Dateien während der Zeit zum Abschließen des Sicherungsvorgangs wirklich geändert werden können. Eine Schattenkopie kann auch verwendet werden, um ein Volume für eine Ruhepause vorzubereiten, die sich aus einer PNP-Anforderung und für Absturzabbilder ergibt.
Windows XP und höhere Versionen des Betriebssystems enthalten ein Framework zum Orchestrieren der Anzeigedauer 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 über dem Speicherstapel unter Dateisystemen geladen wird.
Eine wichtige snapshotbezogene IOCTL, die Dateisysteme betrifft, ist IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. Diese IOCTL ist eigentlich für die Interpretation durch Dateisysteme vorgesehen, auch wenn es sich um eine IOCTL handelt. Dies liegt daran, dass alle Dateisysteme das IOCTL an einen Treiber auf niedrigerer Ebene übergeben sollten, der darauf wartet, die IOCTL nach dem Dateisystem zu verarbeiten.
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 über den RealDevice Member der VpB-Struktur (Volume Parameter Block) mit dem Volume-Volume-Gerät 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 einheitliches Bild der Dateisystemmetadaten erstellen. Der Treiber sollte keine Seiten aufweisen, die miteinander inkonsistent sind. Der Treiber muss jeden Teil seiner Metadaten leeren und zugeordneten Cachepuffer leeren, die er nicht auf den Datenträger geleert hat, und Schreibvorgänge halten, bis die IOCTL von Treibern auf niedrigerer Ebene abgeschlossen wurde.
Für Minifilter-Dateisystemtreiber empfängt der Filter-Manager diese IOCTL und gibt einen Rückruf an den Minifiltertreiber aus, wenn der Treiber registriert wurde, um dieses IRP zu erhalten. Wenn ein Minifiltertreiber oder ein älteren Dateisystemfiltertreiber diesen IOCTL empfängt, muss der Treiber einen Teil seiner Metadaten leeren, der nicht auf den Datenträger geleert wurde. Wenn der Filtertreiber zugeordnete Cachepuffer verwendet, um seine Metadaten zu schreiben, kümmert sich das Dateisystem um alle Löschvorgänge. Der Filtertreiber muss lediglich sicherstellen, dass er nicht in einen seiner zugeordneten Cachepuffer schreibt, während das Dateisystem versucht, Änderungen auf dem Datenträger zu leeren. Ein älteren Dateisystemfiltertreiber muss das IRP an den nächsten Treiber im Stapel übergeben.
Ein Treiber kann daten leeren, während dieser IRP die IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL enthält, bevor er an Treiber auf niedrigerer Ebene übergeben wird. Alle Daten, die auf den Datenträger geleert werden, während sie dieses IOCTL gedrückt halten, bevor der IRP an den nächsten Treiber auf niedrigerer Ebene gesendet wird, sind Daten auf der resultierenden Schattenkopie verfügbar.
Wenn es sich um ein schreibgeschütztes Volume handelt, gibt es normalerweise nichts, das ein Dateisystem- oder Dateisystemfiltertreiber beim Empfang dieses IOCTL ausführen muss, außer an den nächsten Treiber auf niedrigerer Ebene zu senden.
Anforderungen
Anforderung | Wert |
---|---|
Header- | ntifs.h (einschließlich Ntifs.h, Fltkernel.h) |