IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)

Il codice di controllo IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES viene inviato per forzare lo scarico di un file system prima che si verifichi una copia shadow del volume. Questo IOCTL viene rilasciato come richiesta di IRP_MJ_DEVICE_CONTROL inviata solo all'oggetto dispositivo del volume di un file system locale e ai driver di filtro del file system che potrebbero essere collegati a tale volume. Questo IOCTL è più comunemente inviato dal servizio Copia shadow del volume, ma può anche essere rilasciato da altre applicazioni o processi in modalità utente. È anche possibile inviare questo IOCTL in circostanze speciali tramite il driver copia shadow del volume (volsnap.sys) durante una richiesta di ibernazione o prima di un dump di arresto anomalo. Questo IOCTL viene inviato ai driver di filtro del file system, ai driver del file system e ad altri driver di dispositivo (driver di filtro di archiviazione e driver di archiviazione, ad esempio) che si trovano sotto i file system.

Quando un file system come NTFS riceve IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, il file system deve scaricare il volume su disco, forzando le strutture del file system in uno stato coerente e aggiornato. Il file system deve bloccare il file system in uno stato montabile di sola lettura, bloccando le modifiche del nuovo file system per impedire che le pagine del disco memorizzate nella cache diventino sporche. Dopo che il file system ha inserito il file system in uno stato di questo tipo, deve passare l'IRP con il IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL verso il basso dello stack al driver successivo, continuando a mantenere il file system in uno stato montabile di sola lettura fino a quando i driver seguenti completano l'IRP. Al termine o all'annullamento dell'IRP, il file system riabilita l'I/O nel volume e restituisce.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

IrpSp->Parameters.DeviceIoControl.IoControlCode è impostato su IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES.

Buffer di output

Nessuno

Blocco dello stato

Il membro Status è impostato su STATUS_SUCCESS sull'esito positivo o su un valore NTSTATUS appropriato, ad esempio uno dei seguenti:

STATUS_FILE_LOCK_CONFLICT

È stato rilevato un conflitto di blocco file. Questo errore può essere restituito dal gestore filtri.

STATUS_VOLUME_DISMOUNTED

Il volume è stato smontato.

Commenti

Una copia shadow di un volume è una copia temporizzato del volume. La copia shadow viene usata principalmente da un'applicazione di backup in modo che possa eseguire il backup dei file in modo coerente, anche se i file possono cambiare durante il tempo per completare l'operazione di backup. Una copia shadow può essere usata anche per preparare un volume per un'ibernazione risultante da una richiesta PNP e per i dump di arresto anomalo.

Windows XP e versioni successive del sistema operativo includono un framework per orchestrare i tempi per una copia shadow, nonché un driver di filtro di archiviazione (non un driver di filtro del file system) che usa una tecnica di copia in scrittura per creare una copia shadow. Il servizio copia shadow del volume orchestra la copia shadow. Il driver copia shadow del volume, volsnap.sys, è un driver di filtro di archiviazione che carica sopra lo stack di archiviazione sotto i file system.

Un importante IOCTL correlato allo snapshot che influisce sui file system è IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. Questo IOCTL è effettivamente destinato all'interpretazione da parte dei file system, anche se è un IOCTL. Questo perché tutti i file system devono passare IOCTL a un driver di livello inferiore in attesa di elaborare IOCTL dopo il file system.

IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES viene inviato solo all'oggetto del dispositivo volume di un file system locale e ai driver di filtro del file system che potrebbero essere collegati a tale volume. L'oggetto dispositivo di archiviazione collegato al volume tramite il membro RealDevice della struttura VpB (Volume Parameter Block) avrà sempre uno dei tipi di dispositivo seguenti:

FILE_DEVICE_DISK

FILE_DEVICE_VIRTUAL_DISK

Questo IOCTL non viene inviato ai file system remoti.

Quando un file system locale riceve IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, il driver deve creare un'immagine coerente dei metadati del file system. Il driver non deve avere pagine non coerenti tra loro. Il driver deve scaricare qualsiasi parte dei metadati e dei buffer della cache mappati che non è stato scaricato su disco e tenere le scritture fino a quando non è stato completato da driver di livello inferiore.

Per i driver del file system minifilter, il gestore filtri riceve questo IOCTL e invia un callback al driver minifilter se il driver è stato registrato per ricevere l'IRP. Quando un driver minifilter o un driver di filtro del file system legacy riceve questo IOCTL, il driver deve scaricare qualsiasi parte dei relativi metadati che non è stata scaricata su disco. Se il driver di filtro usa buffer di cache mappati per scrivere i metadati, il file system si occupa di tutte le operazioni di scaricamento. Il driver di filtro deve solo assicurarsi di non scrivere in uno dei buffer della cache mappati mentre il file system sta tentando di scaricare le modifiche su disco. Un driver di filtro del file system legacy deve passare l'IRP fino al driver successivo nello stack.

Un driver può scegliere di scaricare i dati mantenendo questo IRP contenente il IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL prima di passarlo ai driver di livello inferiore. Tutti i dati scaricati nel disco mantenendo questo IOCTL prima di inviare l'IRP al driver di livello inferiore successivo saranno i dati disponibili nella copia shadow risultante.

Se si tratta di un volume di sola lettura, normalmente non c'è nulla che un file system o un driver di filtro del file system deve eseguire quando si riceve questo IOCTL, ad eccezione di inviarlo al driver di livello inferiore successivo.

Requisiti

Requisito Valore
Intestazione ntifs.h (include Ntifs.h, Fltkernel.h)

Vedi anche

IRP_MJ_DEVICE_CONTROL