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.