Einführung in Treiberobjekte
Der E/A-Manager erstellt ein Treiberobjekt für jeden Treiber, der installiert und geladen wurde. Treiberobjekte werden mithilfe von DRIVER_OBJECT-Strukturen definiert.
Wenn der E/A-Manager die DriverEntry-Routine eines Treibers aufruft, gibt er die Adresse des Treiberobjekts des Treibers an. Das Treiberobjekt enthält Speicher für Einstiegspunkte zu vielen Standardroutinen eines Treibers. Der Fahrer ist für das Ausfüllen dieser Einstiegspunkte verantwortlich.
Die folgende Abbildung veranschaulicht ein Treiberobjekt mit dem Satz systemdefinierter Standardroutinen, die Treiber der untersten und höheren Ebene haben können oder müssen.
Jede Standardroutine mit einem Sternchen neben dem Namen empfängt ein E/A-Anforderungspaket (IRP) als Eingabe. Jede dieser Standardroutinen empfängt auch einen Zeiger auf das Zielgerätobjekt für die E/A-Anforderung.
Der E/A-Manager definiert den Treiberobjekttyp und verwendet Treiberobjekte, um Informationen zu den geladenen Images von Treibern zu registrieren und nachzuverfolgen. Beachten Sie, dass die Dispatcheinstiegspunkte (DDDispatchXxx über DDDispatchYyy) im Treiberobjekt den hauptfunktionscodes (IRP_MJ_XXX) entsprechen, die in den E/A-Stapelspeicherorten von IRPs übergeben werden.
Der E/A-Manager leitet jeden IRP zuerst an eine vom Treiber bereitgestellte Dispatchroutine weiter. Eine Dispatchroutine des Treibers auf der untersten Ebene ruft in der Regel eine E/A-Supportroutine (IoStartPacket) auf, um jeden IRP mit gültigen Argumenten für die StartIo-Routine des Treibers in die Warteschlange zu stellen (oder zu übergeben). Die StartIo-Routine startet den angeforderten E/A-Vorgang auf einem bestimmten Gerät. Treiber auf höherer Ebene verfügen in der Regel nicht über StartIo-Routinen , aber sie können.