Partager via


Interdire une opération d’E/S rapide dans une routine de rappel de préopération

Dans certaines circonstances, un pilote de minifiltre peut choisir d’interdire une opération d’E/S rapide au lieu de la terminer. L’interdiction d’une opération d’E/S rapide empêche l’utilisation du chemin d’E/S rapide pour l’opération.

Comme l’exécution d’une opération d’E/S, l’interdiction d’une opération d’E/S rapide signifie arrêter le traitement sur celle-ci et la renvoyer au gestionnaire de filtres. Toutefois, l’interdiction d’une opération d’E/S rapide est différente de la réalisation de celle-ci. Si un pilote de minifiltre interdit une opération d’E/S rapide qui a été émise par le gestionnaire d’E/S, le gestionnaire d’E/S peut rééditer la même opération qu’une opération basée sur IRP équivalente.

Quand la routine de rappel de préopération d’un pilote minifiltre interdit une opération d’E/S rapide, le gestionnaire de filtres effectue les opérations suivantes :

  • N’envoie pas l’opération aux pilotes de minifiltre sous le pilote de minifiltre actuel, aux filtres hérités ou au système de fichiers.

  • Appelle les routines de rappel post-opération des pilotes de minifiltre au-dessus du pilote de minifiltre actuel dans le pilote de minifiltre instance pile.

  • N’appelle pas la routine de rappel de post-opération du pilote minifiltre actuel pour l’opération, le cas échéant.

Un pilote de minifiltre interdit une opération d’E/S rapide en retournant FLT_PREOP_DISALLOW_FASTIO de la routine de rappel de préopération pour l’opération.

La routine de rappel de préopération ne doit pas définir le champ IoStatus.Status de la structure de données de rappel, car le gestionnaire de filtres définit automatiquement ce champ sur STATUS_FLT_DISALLOW_FAST_IO.

FLT_PREOP_DISALLOW_FASTIO ne peut être retourné que pour les opérations d’E/S rapides. Pour déterminer si une opération est une opération d’E/S rapide, consultez FLT_IS_FASTIO_OPERATION.

Les pilotes de minifiltre ne peuvent pas retourner FLT_PREOP_DISALLOW_FASTIO pour les opérations IRP_MJ_SHUTDOWN, IRP_MJ_VOLUME_MOUNT ou IRP_MJ_VOLUME_DISMOUNT.