Notification au système de fichiers des modifications possibles du média
Un pilote de périphérique de support amovible doit s’assurer que le média n’est pas modifié pour l’appareil représenté par deviceObject (entrée dans chaque routine de pilote qui reçoit un IRP) chaque fois que le pilote traite une IRP qui demande un transfert vers/depuis le média ou une opération de contrôle d’E/S de périphérique qui affecte le média. Le meilleur moment possible pour case activée pour les médias modifiés est juste après la transition d’un état sans média présent à un état multimédia présent si l’appareil physique avertit toujours le pilote de ces changements d’état.
Si son périphérique physique indique que l’état du média a peut-être changé avant que le pilote commence une opération d’E/S ou pendant une opération, le pilote doit effectuer les opérations suivantes :
Vérifiez que le volume est monté en vérifiant l’indicateur VPB_MOUNTED dans le VPB. (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.)
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
Avant de terminer une IRP avec un bloc IoStatus dans lequel le champ Status n’est pas défini sur STATUS_SUCCESS, le pilote doit appeler IoIsErrorUserInduced, qui retourne une valeur Boolean TRUE pour l’une des valeurs d’état suivantes :
- STATUS_VERIFY_REQUIRED
- STATUS_NO_MEDIA_IN_DEVICE
- STATUS_WRONG_VOLUME
- STATUS_UNRECOGNIZED_MEDIA
- STATUS_MEDIA_WRITE_PROTECTED
- STATUS_IO_TIMEOUT
- STATUS_DEVICE_NOT_READY
Si IoIsErrorUserInduced retourne TRUE, le pilote doit appeler IoSetHardErrorOrVerifyDevice afin que le FSD puisse ouvrir une boîte de dialogue à l’utilisateur, qui peut ensuite choisir de fournir le média approprié, de réessayer la demande d’origine ou d’annuler l’opération demandée.