Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
À l’exception des pilotes de système de fichiers, le gestionnaire d’E/S associe un objet de file d’attente de périphériques (pour la mise en file d’attente des IRP) à chaque objet de périphérique créé par un pilote.
La plupart des pilotes de périphérique appellent les routines de prise en charge du gestionnaire d’E/S pour utiliser la file d’attente de périphériques associée, qui contient des IRP chaque fois que les demandes d’E/S pour un objet périphérique cible arrivent plus rapidement que le pilote ne peut les traiter jusqu'à leur achèvement. Avec cette technique, les paquets de requête d'entrée/sortie (IRP) sont mis en file d'attente pour une routine StartIo fournie par le pilote.
Pour de bonnes performances, la plupart des pilotes intermédiaires passent simplement les IRPs à des pilotes inférieurs à mesure qu'ils arrivent, de sorte que les pilotes intermédiaires n’utilisent presque jamais les files d’attente de périphériques associées à leurs objets de périphérique respectifs.
Toutefois, vous pouvez concevoir un pilote pour gérer les files d’attente internes des irPs en configurant explicitement une ou plusieurs files d’attente d’appareils, des files d’attente verrouillées ou des files d’attente sans risque d’annulation. 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 ou plusieurs IRPs pour le même objet d’appareil cible à l’aide d’une seule file d’attente.
La façon la plus simple de créer une file d’attente interne consiste à utiliser le cadre de file d’attente IRP sécurisé contre les annulations. 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 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é les IRPs qui sont annulés.
Vous pouvez également choisir de configurer des files d’attente supplémentaires pour les irPs dans le pilote d’un contrôleur de périphérique 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érique pour les files d’attente internes. Ce pilote dispose d'une routine StartIo et configure des objets de file d’attente de périphériques en tant que files d’attente supplémentaires, en plus de la file d’attente de périphérique associée à l’objet de périphérique qu’il crée pour représenter un HBA. Le pilote de port SCSI utilise ses files d’attente de périphériques supplémentaires pour contenir les IRPs destinés à des unités logiques particulières sur le ou les bus SCSI contrôlés par HBA.
Le pilote de contrôleur de floppy système est un exemple de pilote qui n’a pas de routine StartIo et utilise une file d’attente interblocée. Ce pilote configure une file d’attente interblocée doublement liée dans laquelle le pilote et son thread dédié à l’appareil insèrent et suppriment les IRPs.
Le noyau définit le type d'objet de file d'attente du périphérique. Le composant de support exécutif fournit des routines pour l’insertion et la suppression d’IRPs dans des files d’attente interblocées. Les pilotes pour Windows XP et les versions ultérieures de Windows peuvent utiliser des files d'attente IRP sécurisées contre l'annulation pour gérer la mise en file d'attente IRP.
Les sections suivantes expliquent comment utiliser des files d’attente d’appareils, des files d’attente verrouillées et des files d’attente sans risque d’annulation :
Configuration et utilisation des 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 de Driver-Created