Paquets de demandes d’E/S
La plupart des requêtes envoyées aux pilotes de périphériques sont encapsulées dans des paquets de requêtes d’E/S (IRP). Un composant du système d’exploitation ou un pilote envoie un IRP à un pilote en appelant IoCallDriver, qui a deux paramètres : un pointeur vers un DEVICE_OBJECT et un pointeur vers un IRP. Le DEVICE_OBJECT a un pointeur vers un DRIVER_OBJECT associé. Lorsqu’un composant appelle IoCallDriver, nous disons que le composant envoie l’IRP à l’objet de périphérique ou envoie l’IRP au pilote associé à l’objet de périphérique. Parfois, nous utilisons l’expression transmet l’IRP ou fait suivre l’IRP au lieu de envoie l’IRP.
En général, un IRP est traité par plusieurs pilotes disposés en pile. Chaque pilote dans la pile est associé à un objet de périphérique. Pour plus d’informations, veuillez consulter la section Nœuds de périphérique et piles de périphériques. Lorsqu’un IRP est traité par une pile de périphériques, l’IRP est généralement envoyé d’abord à l’objet de périphérique situé en haut de la pile de périphériques. Par exemple, si un IRP est traité par la pile de périphériques illustrée dans ce diagramme, l’IRP serait d’abord envoyé à l’objet de périphérique filtre (Filter DO) en haut de la pile de périphériques.
Transmission d’un IRP dans la pile de périphériques
Supposons que le gestionnaire d’E/S envoie un IRP au Filter DO dans le diagramme. Le pilote associé au Filter DO, AfterThought.sys, traite l’IRP, puis le transmet à l’objet de périphérique fonctionnel (FDO), qui est l’objet de périphérique suivant dans la pile de périphériques. Lorsqu’un pilote transmet un IRP à l’objet de périphérique suivant dans la pile de périphériques, nous disons que le pilote transmet l’IRP dans la pile de périphériques.
Certains IRP sont transmis jusqu’à l’objet de périphérique physique (PDO). D’autres IRP n’atteignent jamais le PDO car ils sont complétés par l’un des pilotes situés au-dessus du PDO.
Les IRP sont autonomes
La structure IRP est autonome dans le sens où elle contient toutes les informations dont un pilote a besoin pour gérer une requête d’E/S. Certaines parties de la structure IRP contiennent des informations communes à tous les pilotes participant à la pile. D’autres parties de l’IRP contiennent des informations spécifiques à un pilote particulier dans la pile.