Introduction aux routines de pilotes standard

Chaque pilote en mode noyau est construit autour d’un ensemble de routines de pilotes standard définies par le système. Les pilotes en mode noyau traitent les paquets de demandes d’E/ S (IRP) au sein de ces routines standard en appelant des routines de prise en charge des pilotes fournis par le système.

Tous les conducteurs, quel que soit leur niveau dans une chaîne de conducteurs attachés, doivent avoir un ensemble de routines standard de base pour traiter les IRP. Le fait qu’un pilote doit implémenter des routines standard supplémentaires dépend du fait qu’il contrôle un périphérique physique ou s’il est superposé à un pilote de périphérique physique, ainsi que de la nature de l’appareil physique sous-jacent. Les pilotes de niveau inférieur qui contrôlent les périphériques physiques ont plus de routines requises que les pilotes de niveau supérieur, qui passent généralement des IRP à un pilote inférieur pour traitement.

Les routines de pilotes standard peuvent être divisées en deux groupes : celles que chaque pilote en mode noyau doit avoir et celles qui sont facultatives, en fonction du type de pilote et de l’emplacement dans la pile de périphériques.

Le tableau suivant répertorie les routines standard requises.

Routines de pilotes standard requises Objectif Où décrit
DriverEntry Initialise le pilote et son objet driver. Écriture d’une routine DriverEntry
AddDevice Initialise des appareils et crée des objets d’appareil. Écriture d’une routine AddDevice
Routines de distribution Recevoir et traiter des IRP. Écriture de routines de répartition
Décharger Libérer les ressources système acquises par le pilote. Écriture d’une routine de déchargement

Le tableau suivant répertorie plusieurs routines facultatives.

Routines de pilotes standard facultatives Objectif Où décrit
Réinitialiser Termine l’initialisation du pilote si DriverEntry ne peut pas. Écriture d’une routine de réinitialisation
StartIo Démarre une opération d’E/S sur un appareil physique. Écriture d’une routine StartIo
Routine du service d’interruption Enregistre l’état d’un appareil lorsqu’il s’interrompt. Écriture d’un ISR
Appels de procédure différée Termine le traitement d’une interruption d’appareil après qu’un ISR a enregistré l’état de l’appareil. Objets DPC et DPC
SynchCritSection Synchronise l’accès aux données du pilote. Utilisation des sections critiques
AdapterControl Lance des opérations DMA. Objets adaptateurs et DMA
IoCompletion Termine le traitement d’un IRP par un pilote. Exécution des programmes d’intégration
Annuler Annule le traitement d’un IRP par un pilote. Annulation des IRPs
CustomTimerDpc, IoTimer Minutage et synchronisation des événements. Techniques de synchronisation

L’IRP actuel et l’objet d’appareil cible sont des paramètres d’entrée pour de nombreuses routines standard. Chaque pilote traite chaque IRP par étapes à travers son ensemble de routines standard.

Par convention, les pilotes fournis par le système ont ajouté un préfixe d’identification, spécifique au pilote ou spécifique au périphérique au nom de chaque routine standard, à l’exception de DriverEntry. À titre d’exemple, cette documentation utilise « DD », comme illustré dans Présentation des objets de pilote. En suivant cette convention, il est plus facile de déboguer et de gérer les pilotes.