Einführung in Standardtreiberroutinen

Jeder Kernelmodustreiber wird um eine Reihe systemdefinierter Standardtreiberroutinen herum erstellt. Kernelmodustreiber verarbeiten E/A-Anforderungspakete (IRPs) innerhalb dieser Standardroutinen, indem sie vom System bereitgestellte Treiberunterstützungsroutinen aufrufen.

Alle Treiber, unabhängig von ihrem Niveau in einer Kette angefügter Treiber, müssen über einen grundlegenden Satz von Standardroutinen verfügen, um IRPs verarbeiten zu können. Ob ein Treiber zusätzliche Standardroutinen implementieren muss, hängt davon ab, ob der Treiber ein physisches Gerät steuert oder sich über einen physischen Gerätetreiber befindet, sowie von der Art des zugrunde liegenden physischen Geräts. Treiber der niedrigsten Ebene, die physische Geräte steuern, verfügen über mehr erforderliche Routinen als Treiber auf höherer Ebene, die IRPs normalerweise zur Verarbeitung an einen niedrigeren Treiber übergeben.

Standardtreiberroutinen können in zwei Gruppen unterteilt werden: diejenigen, die jeder Kernelmodustreiber aufweisen muss, und diejenigen, die optional sind, je nach Treibertyp und Speicherort im Gerätestapel.

In der folgenden Tabelle sind die erforderlichen Standardroutinen aufgeführt.

Erforderliche Standardtreiberroutinen Zweck Wo beschrieben
DriverEntry Initialisiert den Treiber und sein Treiberobjekt. Schreiben einer DriverEntry-Routine
AddDevice Initialisiert Geräte und erstellt Geräteobjekte. Schreiben einer AddDevice-Routine
Versandroutinen Empfangen und Verarbeiten von IRPs. Schreiben von Dispatchroutinen
Entladen Geben Sie Systemressourcen frei, die vom Treiber abgerufen wurden. Schreiben einer Entladeroutine

In der folgenden Tabelle sind mehrere optionale Routinen aufgeführt.

Optionale Standardtreiberroutinen Zweck Wo beschrieben
Initialisieren Schließt die Treiberinitialisierung ab, wenn DriverEntry dies nicht kann. Schreiben einer Neuitialisierungsroutine
StartIo Startet einen E/A-Vorgang auf einem physischen Gerät. Schreiben einer StartIo-Routine
Unterbrechung der Dienstroutine Speichert den Zustand eines Geräts, wenn es unterbrochen wird. Schreiben einer ISR
Verzögerte Prozeduraufrufe Schließt die Verarbeitung eines Geräteunterbrechungs ab, nachdem ein ISR den Gerätestatus gespeichert hat. DPC-Objekte und DPCs
SynchCritSection Synchronisiert den Zugriff auf Treiberdaten. Verwenden kritischer Abschnitte
AdapterControl Initiiert DMA-Vorgänge. Adapterobjekte und DMA
IoCompletion Schließt die Verarbeitung eines IRP durch einen Treiber ab. Abschließen von IRPs
Abbrechen Bricht die Verarbeitung eines IRP durch einen Treiber ab. Abbrechen von IRPs
CustomTimerDpc, IoTimer Timing und Synchronisierung von Ereignissen. Synchronisierungstechniken

Das aktuelle IRP- und das Zielgerätobjekt sind Eingabeparameter für viele Standardroutinen. Jeder Treiber verarbeitet jedes IRP schrittweise über seine Standardroutinen.

Gemäß der Konvention haben die vom System bereitgestellten Treiber dem Namen jeder Standardroutine mit Ausnahme von DriverEntry ein identifizierende, treiberspezifisches oder gerätespezifisches Präfix vorangestellt. In dieser Dokumentation wird beispielsweise "DD" verwendet, wie in der Abbildung in Einführung in Treiberobjekte gezeigt. Die Einhaltung dieser Konvention erleichtert das Debuggen und Verwalten von Treibern.