Partager via


IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)

Le code de contrôle IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES est envoyé pour forcer un vidage d’un système de fichiers avant qu’un cliché instantané de volume ne se produise. Ce IOCTL est émis en tant que demande de IRP_MJ_DEVICE_CONTROL envoyée uniquement à l’objet de périphérique de volume d’un système de fichiers local et aux pilotes de filtre de système de fichiers qui peuvent avoir été attachés à ce volume. Ce IOCTL est le plus souvent envoyé par le service de cliché instantané en volume, mais il peut également être émis par d’autres applications ou processus en mode utilisateur. Il est également possible, dans des circonstances particulières, que ce IOCTL soit envoyé par le pilote de cliché instantané de volume (volsnap.sys) lors d’une demande de mise en veille prolongée ou avant un vidage sur incident. Ce IOCTL est envoyé aux pilotes de filtre du système de fichiers, aux pilotes de système de fichiers et à d’autres pilotes de périphérique (pilotes de filtre de stockage et pilotes de stockage, par exemple) situés sous les systèmes de fichiers.

Lorsqu’un système de fichiers tel que NTFS reçoit IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, le système de fichiers doit vider le volume sur le disque, ce qui force les structures de disque du système de fichiers à un état cohérent et à jour. Le système de fichiers doit verrouiller le système de fichiers dans un état montable en lecture seule, bloquant toute nouvelle modification du système de fichiers pour empêcher les pages de disque mises en cache de devenir sale. Une fois que le système de fichiers a placé le système de fichiers dans un tel état, il doit passer l’IRP avec le IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL vers le bas de la pile au pilote suivant tout en continuant à maintenir le système de fichiers dans un tel état montable en lecture seule jusqu’à ce que les pilotes ci-dessous terminent l’IRP. Lorsque l’IRP se termine ou est annulé, le système de fichiers réactive les E/S sur le volume et retourne.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

IrpSp->Parameters.DeviceIoControl.IoControlCode est défini sur IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES.

Mémoire tampon de sortie

None

Bloc d’état

Le membre Status est défini pour STATUS_SUCCESS sur la réussite ou une valeur NTSTATUS appropriée, comme l’une des valeurs suivantes :

STATUS_FILE_LOCK_CONFLICT

Un conflit de verrouillage de fichier a été rencontré. Cette erreur peut être retournée par le gestionnaire de filtres.

STATUS_VOLUME_DISMOUNTED

Le volume a été démonté.

Remarques

Un cliché instantané d’un volume est une copie dans le temps de ce volume. Le cliché instantané est principalement utilisé par une application de sauvegarde afin qu’elle puisse sauvegarder des fichiers de manière cohérente, même si les fichiers peuvent réellement changer pendant le temps nécessaire à l’exécution de l’opération de sauvegarde. Un cliché instantané peut également être utilisé pour préparer un volume pour une mise en veille prolongée résultant d’une requête PNP et pour les vidages sur incident.

Windows XP et les versions ultérieures du système d’exploitation incluent une infrastructure pour orchestrer le minutage d’un cliché instantané, ainsi qu’un pilote de filtre de stockage (et non un pilote de filtre de système de fichiers) qui utilise une technique de copie sur écriture afin de créer un cliché instantané. Le service VSS (Volume Shadow Copy Service) orchestre le cliché instantané. Le pilote de cliché instantané de volume, volsnap.sys, est un pilote de filtre de stockage qui se charge au-dessus de la pile de stockage située sous les systèmes de fichiers.

L’un des instantané importants iocTL qui affecte les systèmes de fichiers est IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. Ce IOCTL est en fait destiné à l’interprétation par les systèmes de fichiers, même s’il s’agit d’un IOCTL. Cela est dû au fait que tous les systèmes de fichiers doivent passer le IOCTL à un pilote de niveau inférieur qui attend de traiter le IOCTL après le système de fichiers.

IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES est envoyé uniquement à l’objet de périphérique de volume d’un système de fichiers local et aux pilotes de filtre de système de fichiers qui ont pu être attachés à ce volume. L’objet de périphérique de stockage lié au volume via le membre RealDevice de la structure VPB (Volume Parameter Block) aura toujours l’un des types d’appareils suivants :

FILE_DEVICE_DISK

FILE_DEVICE_VIRTUAL_DISK

Ce IOCTL n’est pas envoyé aux systèmes de fichiers distants.

Lorsqu’un système de fichiers local reçoit IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, le pilote doit créer une image cohérente des métadonnées du système de fichiers. Le pilote ne doit pas avoir de pages incohérentes les unes avec les autres. Le pilote doit vider toute partie de ses métadonnées et des mémoires tampons de cache mappées qu’il n’a pas vidées sur le disque et conserver les écritures jusqu’à ce que le iocTL soit terminé par les pilotes de niveau inférieur.

Pour les pilotes de système de fichiers minifiltres, le gestionnaire de filtres reçoit ce IOCTL et émet un rappel au pilote de minifiltre si le pilote s’est inscrit pour recevoir cette IRP. Lorsqu’un pilote de minifiltre ou un pilote de filtre de système de fichiers hérité reçoit cette propriété IOCTL, le pilote doit vider toute partie de ses métadonnées qu’il n’a pas vidées sur le disque. Si le pilote de filtre utilise des tampons de cache mappés pour écrire ses métadonnées, le système de fichiers prend en charge toutes les opérations de vidage. Le pilote de filtre doit simplement s’assurer qu’il n’écrit pas dans ses mémoires tampons de cache mappées pendant que le système de fichiers tente de vider les modifications sur le disque. Un pilote de filtre de système de fichiers hérité doit passer l’IRP au pilote suivant dans la pile.

Un pilote peut choisir de vider les données tout en conservant cette IRP contenant les IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL avant de les transmettre aux pilotes de niveau inférieur. Toutes les données vidées sur le disque tout en conservant ce IOCTL avant d’envoyer l’IRP au pilote de niveau inférieur suivant seront des données disponibles sur le cliché instantané résultant.

S’il s’agit d’un volume en lecture seule, un système de fichiers ou un pilote de filtre de système de fichiers n’a normalement rien à faire lors de la réception de ce IOCTL, à l’exception de l’envoyer au pilote de niveau inférieur suivant.

Configuration requise

Condition requise Valeur
En-tête ntifs.h (include Ntifs.h, Fltkernel.h)

Voir aussi

IRP_MJ_DEVICE_CONTROL