Partager via


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
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 :

  1. Définissez les indicateurs dans les indicateurs DeviceObject by ORing avec DO_VERIFY_VOLUME.

  2. Définissez le bloc IoStatus dans l’IRP comme suit :

    • État défini sur STATUS_VERIFY_REQUIRED
    • Informations définies sur zéro
  3. 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.