Partager via


files d’attente IRP Driver-Managed

À l’exception des pilotes de système de fichiers, le gestionnaire d’E/S associe un objet de file d’attente d’appareil (pour la mise en file d’attente des IRP) à chaque objet d’appareil créé par un pilote.

La plupart des pilotes d’appareil appellent les routines de support du gestionnaire d’E/S pour utiliser la file d’attente d’appareils associée, qui contient les irps chaque fois que les demandes d’E/S d’appareil pour un objet d’appareil cible arrivent plus rapidement que le pilote ne peut les traiter jusqu’à l’achèvement. Avec cette technique, les IIP sont mis en file d’attente vers une routine StartIo fournie par le pilote.

Pour de bonnes performances, la plupart des pilotes intermédiaires se contentent de passer des IRPs à des pilotes inférieurs aussi rapidement qu’ils arrivent, de sorte que les pilotes intermédiaires n’utilisent presque jamais les files d’attente d’appareils associées à leurs objets d’appareil respectifs.

Toutefois, vous pouvez concevoir un pilote pour gérer les files d’attente internes des IRP en configurant explicitement une ou plusieurs files d’attente d’appareils, des files d’attente verrouillées ou des files d’attente d’annulation sécurisées. Cette approche peut être particulièrement utile si le pilote contrôle un appareil qui chevauche les opérations d’E/S. Pour un tel appareil, il peut être difficile de gérer le traitement simultané de deux irps ou plus pour le même objet d’appareil cible à l’aide d’une seule file d’attente.

Le moyen le plus simple de créer une file d’attente interne consiste à utiliser l’infrastructure de file d’attente IRP cancel-safe. Vous pouvez implémenter le mécanisme de mise en file d’attente de votre choix dans votre pilote. Vous pouvez ensuite utiliser IoCsqInitialize pour inscrire un ensemble de routines de rappel qui gèrent l’insertion et la suppression d’IRP, ainsi que le verrouillage et le déverrouillage de votre file d’attente. L’infrastructure de file d’attente IRP cancel-safe fournit les routines IoCsqInsertIrp, IoCsqRemoveIrp et IoCsqRemoveNextIrp qui utilisent automatiquement les routines de rappel pour insérer et supprimer en toute sécurité les irps de la file d’attente du pilote. Le système utilise également vos routines de rappel pour supprimer en toute sécurité tous les IRPs qui sont annulés.

Vous pouvez également choisir de configurer des files d’attente supplémentaires pour les IRP dans le pilote d’un contrôleur d’appareil pour un ensemble d’appareils physiques hétérogènes. Par exemple, le pilote de port SCSI utilise des objets de file d’attente de périphériques pour les files d’attente internes. Ce pilote a à la fois une routine StartIo et configure les objets de file d’attente d’appareils en tant que files d’attente supplémentaires, en plus de la file d’attente d’appareils associée à l’objet d’appareil qu’il crée pour représenter un adaptateur HBA. Le pilote de port SCSI utilise ses files d’attente de périphériques supplémentaires pour contenir les IRPs liés à des unités logiques particulières sur les bus SCSI contrôlés par HBA.

Le pilote du contrôleur de disquette système est un exemple de pilote qui n’a pas de routine StartIo et utilise une file d’attente verrouillée. Ce pilote configure une file d’attente verrouillée doublement liée dans laquelle et à partir de laquelle le pilote et son thread dédié au périphérique insèrent et suppriment les IRPs.

Le noyau définit le type d’objet file d’attente d’appareil. Le composant de support exécutif fournit des routines pour l’insertion et la suppression des IRP dans les files d’attente verrouillées. Les pilotes pour Windows XP et les versions ultérieures de Windows peuvent utiliser des files d’attente IRP sans annulation pour gérer la mise en file d’attente IRP.

Les sections suivantes expliquent comment utiliser les files d’attente d’appareils, les files d’attente verrouillées et les files d’attente d’annulation sécurisées :

Configuration et utilisation de files d’attente d’appareils

Gestion des files d’attente d’appareils

Configuration et utilisation de files d’attente verrouillées

Gestion des files d’attente verrouillées avec un thread Driver-Created

Annuler les files d’attente IRP sécurisées