Réponse aux demandes Check-Verify du système de fichiers
À sa discrétion, le système de fichiers peut envoyer un IRP au point d’entrée Dispatch du pilote de périphérique pour les requêtes IRP_MJ_DEVICE_CONTROL avec Parameters.DeviceIoControl.IoControlCode dans l’emplacement de la pile d’E/S défini sur le suivant :
IOCTL_XXX_CHECK_VERIFY
où XXX est le type d’appareil, tel que DISK, TAPE ou CDROM.
Le type DISK inclut à la fois des périphériques multimédias amovibles non partitionnables (disquettes) et partitionnables.
Si le pilote de périphérique sous-jacent détermine que le média n’a pas changé, le pilote doit terminer l’IRP, en retournant le bloc IoStatus avec les valeurs suivantes :
État |
Défini sur STATUS_SUCCESS |
Information |
Défini sur zéro |
En outre, si le type de périphérique est DISK ou CDROM et que l’appelant a spécifié une mémoire tampon de sortie, le pilote retourne le nombre de modifications de média dans la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer> et définit Irp-IoStatus.Information> sur sizeof(ULONG). En retournant ce décompte, le pilote donne à l’appelant la possibilité de déterminer si le média a changé de son point de vue.
Si le pilote de périphérique sous-jacent détermine que le média a changé, il effectue une action différente selon que le volume est monté ou non. Si le volume est monté (l’indicateur VPB_MOUNTED est défini dans le VPB), le pilote doit effectuer les opérations suivantes :
Définissez les indicateurs dans les indicateurs DeviceObject by ORing avec DO_VERIFY_VOLUME.
Définissez le bloc IoStatus dans l’IRP comme suit :
- État défini sur STATUS_VERIFY_REQUIRED
- Informations définies sur zéro
Appelez IoCompleteRequest avec l’IRP d’entrée.
Si le volume n’est pas monté, le pilote ne doit pas définir le bit DO_VERIFY_VOLUME. Le pilote doit définir IoStatus.Status sur STATUS_IO_DEVICE_ERROR, définir IoStatus.Information sur zéro et appeler IoCompleteRequest avec l’IRP.