Présentation des objets de pilote

Le gestionnaire d’E/S crée un objet pilote pour chaque pilote qui a été installé et chargé. Les objets driver sont définis à l’aide de structures DRIVER_OBJECT .

Lorsque le gestionnaire d’E/S appelle la routine DriverEntry d’un pilote, il fournit l’adresse de l’objet pilote du pilote. L’objet driver contient du stockage pour les points d’entrée de nombreuses routines standard d’un pilote. Le conducteur est responsable du remplissage de ces points d’entrée.

La figure suivante illustre un objet pilote, avec l’ensemble des routines standard définies par le système que les pilotes de niveau inférieur et supérieur peuvent ou doivent avoir.

Chaque routine standard avec un astérisque à côté de son nom reçoit un paquet de demandes d’E/S (IRP) en entrée. Chacune de ces routines standard reçoit également un pointeur vers l’objet d’appareil cible pour la demande d’E/S.

diagramme illustrant un objet driver.

Le gestionnaire d’E/S définit le type d’objet de pilote et utilise des objets de pilote pour inscrire et suivre des informations sur les images chargées des pilotes. Notez que les points d’entrée de répartition (DDDispatchXxx à DDDispatchYyy) dans l’objet pilote correspondent aux codes de fonction principaux (IRP_MJ_XXX) qui sont passés dans les emplacements de pile d’E/S des IRP.

Le gestionnaire d’E/S achemine d’abord chaque IRP vers une routine de distribution fournie par le pilote. La routine de répartition d’un pilote de niveau inférieur appelle généralement une routine de prise en charge des E/S (IoStartPacket) pour mettre en file d’attente (ou transmettre) chaque IRP qui a des arguments valides pour la routine StartIo du pilote. La routine StartIo démarre l’opération d’E/S demandée sur un appareil particulier. Les pilotes de niveau supérieur n’ont généralement pas de routines StartIo , mais ils le peuvent.