Partager via


Écriture de routines de répartition IRP

Notes

Pour une fiabilité et des performances optimales, utilisez des pilotes de minifiltre de système de fichiers avec prise en charge de Filter Manager au lieu des pilotes de filtre de système de fichiers hérités. Pour porter votre pilote hérité vers un pilote de minifiltre, consultez Recommandations pour le portage des pilotes de filtre hérités.

Les pilotes de filtre de système de fichiers utilisent des routines de répartition similaires à celles utilisées dans les pilotes de périphérique. Une routine de répartition gère un ou plusieurs types de irps. (Le type d’un IRP est déterminé par son code de fonction principal.) La routine DriverEntrydu pilote enregistre les points d’entrée de la routine de répartition en les stockant dans la table de répartition de l’objet pilote. Lorsqu’un IRP est envoyé au pilote, le sous-système d’E/S appelle la routine de répartition appropriée en fonction du code de fonction principal de l’IRP.

Chaque routine de distribution IRP est définie comme suit :

NTSTATUS
(*PDRIVER_DISPATCH) (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

Les routines de répartition des pilotes de filtre de système de fichiers sont le plus souvent appelées au PASSIVE_LEVEL IRQL, dans le contexte du thread à l’origine de la demande d’E/S, qui est généralement un thread d’application en mode utilisateur. Toutefois, il existe quelques exceptions à cette règle. Par exemple, les erreurs de page entraînent l’appel des routines de distribution de lecture et d’écriture au APC_LEVEL IRQL. Ces exceptions sont résumées dans un tableau dans Dispatch Routine IRQL et Thread Context. Malheureusement, il n’est actuellement pas possible d’empêcher les pilotes de la chaîne de filtre d’appeler IoCallDriver au PASSIVE_LEVEL IRQL > (par exemple, en ne parvenant pas à libérer un spinlock ou un mutex rapide). Néanmoins, il est vivement recommandé que les routines de répartition des filtres appellent toujours IoCallDriver au même IRQL où elles ont été appelées.

Les routines de répartition peuvent être rendues paginables, à condition qu’elles répondent aux critères décrits dans la section Rendre les pilotes paginables du Guide de conception de l’architecture de pilote Kernel-Mode.

Si un pilote de filtre de système de fichiers a un objet de périphérique de contrôle (CDO), ses routines de distribution doivent être en mesure de détecter et de gérer les cas où l’objet d’appareil cible de l’IRP est le CDO plutôt qu’un objet de périphérique de volume (VDO) pour un volume monté. Pour plus d’informations sur le CDO, consultez L’objet d’appareil de contrôle du pilote de filtre.

Cette section traite des rubriques suivantes :

Fin de l’IRP

Passage de l’IRP aux pilotes Lower-Level

Retour de l’état à partir de routines de répartition

Exemple : passage de l’IRP vers le bas sans définir une routine d’achèvement

Contraintes sur les routines de répartition

IrQL de routine de répartition et contexte de thread