Partager via


Paquets de demandes d’E/S

La plupart des requêtes envoyées aux pilotes de périphérique sont empaquetées dans des paquets de demandes d’E/S (IRP). Un composant de 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 d’appareil ou envoie l’IRP au pilote associé à l’objet d’appareil. Parfois, nous utilisons l’expression passe l’IRP ou transfère l’IRP au lieu d’envoyer l’IRP.

En règle générale, un IRP est traité par plusieurs pilotes organisés dans une pile. Chaque pilote de la pile est associé à un objet d’appareil. Pour plus d’informations, consultez Nœuds d’appareil et piles d’appareils. Lorsqu’un IRP est traité par une pile d’appareils, l’IRP est généralement envoyé en premier à l’objet d’appareil supérieur dans la pile d’appareils. Par exemple, si un IRP est traité par la pile d’appareils illustrée dans ce diagramme, l’IRP est d’abord envoyé à l’objet d’appareil de filtre (Filter DO) en haut de la pile d’appareils.

diagramme d’un nœud d’appareil et de sa pile d’appareils.

Passage d’un IRP vers le bas de la pile des appareils

Supposons que le gestionnaire d’E/S envoie un IRP au filtre DO dans le diagramme. Le pilote associé au filtre DO, AfterThought.sys, traite l’IRP, puis le transmet à l’objet d’appareil fonctionnel (FDO), qui est l’objet d’appareil inférieur suivant dans la pile d’appareils. Lorsqu’un pilote transmet un IRP à l’objet d’appareil inférieur suivant dans la pile d’appareils, nous disons que le pilote transmet l’IRP vers le bas de la pile d’appareils.

Certains IRP sont passés jusqu’au bas de la pile des appareils à l’objet d’appareil physique (PDO). Les autres IIP n’atteignent jamais l’AOP, car ils sont terminés par l’un des pilotes au-dessus de l’AOP.

Les IIP 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 demande d’E/S. Certaines parties de la structure IRP contiennent des informations communes à tous les pilotes participants dans la pile. D’autres parties de l’IRP contiennent des informations spécifiques à un pilote particulier dans la pile.