Présentation des routines d’annulation
Tout pilote dans lequel les IRPs peuvent être maintenus dans un état en attente pendant un intervalle indéfini doit avoir une ou plusieurs routines Cancel . Par exemple, un pilote de clavier peut attendre indéfiniment qu’un utilisateur appuie sur une touche. À l’inverse, si un pilote ne met jamais en file d’attente plus de IRPs qu’il ne peut le faire en cinq minutes, il n’a probablement pas besoin d’une routine Cancel .
Supposons qu’un thread en mode utilisateur effectue une demande d’E/S, qui est mise en file d’attente par la routine de répartition d’un pilote de périphérique de niveau supérieur, et que le thread demandeur soit arrêté pendant que l’IRP est mis en file d’attente. Les IIP mis en file d’attente pour le compte d’un thread terminé doivent être annulés. Par conséquent, le pilote doit définir une routine Cancel fournie par le pilote dans chaque IRP qu’il met en file d’attente.
Un pilote qui crée des IRP associés doit les annuler lorsque le master IRP est annulé. Étant donné que les IRP associés ne sont pas associés à un thread demandeur, la routine Cancel de l’IRP master est responsable de l’annulation de tous les IRPs associés lorsque le master IRP est annulé.
Le nombre de routines d’annulation d’un pilote dépend de la conception du pilote. En général, un pilote doit avoir une routine Cancel pour chaque étape de son traitement d’E/S au cours de laquelle un IRP peut être maintenu dans un état en attente pendant un intervalle indéfini. Ces IRPs en attente sont considérés comme étant dans un état annulable.
Tenez compte des instructions de conception suivantes :
Le pilote de niveau le plus élevé d’une chaîne de pilotes en couches doit avoir au moins une routine Cancel s’il met en file d’attente les IRPs ou qu’il maintient les IRPs dans un état annulable. Il peut avoir plusieurs routines Cancel , si nécessaire.
Les pilotes de niveau inférieur dans lesquels les IRPs peuvent être maintenus dans un état annulable pendant des intervalles relativement longs doivent également avoir une ou plusieurs routines Cancel .
Si un pilote gère ses propres files d’attente internes d’irps, il doit avoir une routine d’annulation distincte pour chacune de ses files d’attente.
Certains pilotes de niveau supérieur pour les appareils interactifs, tels que le clavier, la souris, le son, les pilotes de classe parallèle et de série, doivent avoir des routines Cancel . Certains pilotes de niveau inférieur, tels qu’un pilote de port parallèle qui contient des irps mis en file d’attente pour un certain nombre de pilotes de classe de niveau supérieur pendant des intervalles relativement longs, doivent également avoir des routines d’annulation .
Il est peu probable que les pilotes de périphériques de stockage de masse, ainsi que les pilotes intermédiaires, aient des routines d’annulation . Il incombe à un pilote de système de fichiers de gérer l’annulation des demandes d’E/S de fichiers, tandis que les entrées irp dans les pilotes de stockage de masse de niveau inférieur sont généralement traitées trop rapidement pour être annulées.