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 le vidage d’un système de fichiers avant qu’une cliché instantané de volume ne se produise. Cette IOCTL est émise 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é de 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. Cette IOCTL est envoyée aux pilotes de filtre de 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, forçant les structures de disque du système de fichiers à un état cohérent et up-to-date. Le système de fichiers doit verrouiller le système de fichiers dans un état montable en lecture seule, bloquant les modifications apportées au nouveau système de fichiers pour empêcher toute page de disque mise en cache de devenir incorrecte. Une fois que le système de fichiers a placé le système de fichiers dans un tel état, il doit transmettre l’IRP avec le IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL vers le pilote suivant tout en continuant à conserver le système de fichiers dans un état montable en lecture seule jusqu’à ce que les pilotes ci-dessous terminent l’IRP. Une fois l’IRP terminé ou annulé, le système de fichiers active à nouveau 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

Aucun

Bloc d’état

Le membre Status est défini sur STATUS_SUCCESS sur la réussite ou sur une valeur NTSTATUS appropriée, par exemple 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

Une cliché instantané d’un volume est une copie à un point dans le temps de ce volume. La cliché instantané est principalement utilisée 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 pour effectuer l’opération de sauvegarde. Une cliché instantané peut également être utilisée 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 versions ultérieures du système d’exploitation incluent une infrastructure permettant d’orchestrer le minutage d’une 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 en écriture afin de créer une cliché instantané. Le service VSS (Volume Shadow Copy Service) orchestre la 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 sous les systèmes de fichiers.

Un IOCTL important lié à la capture instantanée 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 le traitement du 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 peuvent avoir été attachés à ce volume. L’objet d’appareil de stockage lié au volume via l'RealDevice membre 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 une 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 contenir les écritures tant que le IOCTL n’a pas été terminé par des pilotes de niveau inférieur.

Pour les pilotes de système de fichiers minifilter, le gestionnaire de filtres reçoit ce IOCTL et émet un rappel au pilote minifilter si le pilote s’est inscrit pour recevoir cet IRP. Lorsqu’un pilote minifilter ou un pilote de filtre de système de fichiers hérité reçoit ce IOCTL, le pilote doit vider une partie de ses métadonnées qu’il n’a pas vidé sur le disque. Si le pilote de filtre utilise des mémoires tampons de cache mappées pour écrire ses métadonnées, le système de fichiers s’occupe de tous les vidages. Le pilote de filtre doit simplement s’assurer qu’il n’écrit dans aucune de 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 lors de la conservation de cet IRP contenant la IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL avant de le passer à des pilotes de niveau inférieur. Toutes les données vidées sur le disque tout en conservant cette IOCTL avant d’envoyer le protocole IRP au pilote de niveau inférieur suivant seront des données disponibles sur la cliché instantané résultant.

S’il s’agit d’un volume en lecture seule, il n’existe normalement rien qu’un pilote de filtre de système de fichiers ou de système de fichiers ne doit effectuer lors de la réception de ce IOCTL, sauf de l’envoyer au pilote de niveau inférieur suivant.

Exigences

Exigence Valeur
d’en-tête ntifs.h (include Ntifs.h, Fltkernel.h)

Voir aussi

IRP_MJ_DEVICE_CONTROL