Utilisation des routines d’achèvement 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 minifilter, consultez Recommandations pour le portage des pilotes de filtre hérités.
Les pilotes de filtre de système de fichiers utilisent des routines d’achèvement similaires à celles utilisées par les pilotes de périphérique. Une routine d’achèvement effectue le traitement d’achèvement sur un IRP. Toute routine de pilote qui transmet une IRP au pilote de niveau inférieur suivant peut éventuellement inscrire une routine d’achèvement pour l’IRP en appelant IoSetCompletionRoutine avant d’appeler IoCallDriver.
Chaque routine d’achèvement IRP est définie comme suit :
NTSTATUS
(*PIO_COMPLETION_ROUTINE) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
Les routines d’achèvement sont appelées dans IRQL <= DISPATCH_LEVEL, dans un contexte de thread arbitraire.
Étant donné qu’elles peuvent être appelées à l’DISPATCH_LEVEL IRQL, les routines d’achèvement ne peuvent pas appeler des routines en mode noyau qui doivent être appelées à un IRQL inférieur, comme IoDeleteDevice. Pour la même raison, toutes les structures de données utilisées dans une routine d’achèvement doivent être allouées à partir d’un pool non paginé.
Cette section traite des sujets suivants :
Comment le traitement de l’achèvement est effectué
Vérification de l’indicateur PendingReturned
Retour de l’état à partir de routines d’achèvement
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour