Partager via


Synchronisation de l’annulation des IRP

Du point de vue d’un conducteur, un IRP peut être annulé à tout moment. L’annulation d’IRP se produit de manière asynchrone ; Par conséquent, les pilotes doivent être en mesure de gérer un certain nombre de conditions de course potentielles, créées si l’IRP est annulé à l’un des points suivants :

  • Après l’appel d’une routine de pilote, mais avant qu’elle ne met en file d’attente un IRP.

  • Après l’appel d’une routine de pilote, mais avant d’essayer de traiter un IRP. Par exemple, une IRP peut être annulée après l’appel de la routine StartIo d’un pilote, mais avant que la routine StartIo supprime l’IRP de la file d’attente des appareils.

  • Une fois que la routine du pilote a supprimé la file d’attente de l’IRP, mais avant qu’elle ne démarre les E/S demandées.

Notez qu’une fois qu’un pilote met en file d’attente un IRP et libère tous les verrous de rotation qui protègent la file d’attente, un autre thread peut accéder à l’IRP et le modifier. Lorsque le thread d’origine reprend, même dès la ligne de code suivante, l’IRP a peut-être déjà été annulé ou modifié.

Le pilote peut utiliser l’infrastructure de file d’attente IRP cancel-safe pour implémenter la file d’attente IRP. Le système enregistre ensuite une routine d’annulation pour le pilote qui gère automatiquement la synchronisation pour annuler en toute sécurité les irps. Pour plus d’informations, consultez Annuler les files d’attente IRP sécurisées . Sinon, les pilotes doivent implémenter leur propre synchronisation.

Les membres suivants d’un IRP contiennent des informations sur l’annulation :

  • Irp-> Cancel indique si un IRP est en cours d’annulation ou doit l’être.

  • Irp-> CancelRoutine indique si un IRP est annulable. Si ce membre contient un pointeur vers une routine d’annulation, l’IRP est annulable. Si ce membre a la valeur NULL, l’IRP n’est pas annulable. Si ce membre a la valeur NULL, mais que Irp-Cancel> est défini, cela indique que la routine d’annulation est en cours d’exécution et que l’IRP est en cours d’annulation.

Si un pilote gère les IRP annulables, il est chargé de définir la routine d’annulation appropriée dans chaque IRP qu’il contient dans un état annulable.

Cette section inclut les rubriques suivantes sur la synchronisation de l’annulation IRP.

Utilisation du verrou d’annulation de rotation du système

Synchronisation de l’annulation dans les routines de pilotes qui traitent les irps

Synchronisation de l’annulation dans Higher-Level pilotes sans routines d’annulation

Utilisation d’un verrou de rotation Driver-Supplied