Partager via


Utilisation de routines IoCompletion

Les pilotes de niveau supérieur qui surveillent, sur une base spécifique à l’IRP, la façon dont les pilotes de niveau inférieur ont effectué des demandes particulières peuvent avoir une ou plusieurs routines IoCompletion . Les pilotes de niveau supérieur qui allouent des IRPs pour envoyer des requêtes aux pilotes inférieurs doivent avoir une routine IoCompletion .

La routine DispatchRead ou DispatchWrite d’un pilote de niveau supérieur ou intermédiaire est plus susceptible de définir une routine IoCompletion pour un IRP, car les pilotes de niveau inférieur doivent gérer les demandes de transfert de manière asynchrone.

Le pilote de niveau le plus bas dans une pile de pilotes ne peut pas inscrire les routines IoCompletion .

Les pilotes n’inscrivent généralement pas les routines IoCompletion pour les IP associés aux opérations d’E/S synchrones. Par instance, la routine DispatchDeviceControl d’un pilote de niveau supérieur peut allouer un IRP à l’aide d’IoBuildDeviceIoControlRequest. Dans ce cas, la routine de répartition n’inscrit généralement pas de routine IoCompletion , car les demandes de contrôle d’appareil sont généralement gérées de manière synchrone. Au lieu de cela, le pilote peut allouer et initialiser un objet d’événement, et sa routine DispatchDeviceControl peut attendre qu’un événement soit initialisé lorsqu’il envoie sur des IRP alloués par le pilote. En règle générale, un pilote de niveau supérieur n’enregistre pas de routine IoCompletion pour un IRP alloué avec IoBuildSynchronousFsdRequest, pour la même raison.

Cette section contient les rubriques suivantes :

Inscription d’une routine IoCompletion

Implémentation d’une routine IoCompletion