Freigeben über


DispatchDeviceControl- und DispatchInternalDeviceControl-Routinen

Die Verteilerroutinen eines Treibers (siehe DRIVER_DISPATCH) verarbeiten IRPs mit I/O-Funktionscodes von IRP_MJ_DEVICE_CONTROL bzw. IRP_MJ_INTERNAL_DEVICE_CONTROL.

Für jeden gängigen Typ von Peripheriegeräten definiert das System eine Reihe von E/A-Steuercodes für IRP_MJ_DEVICE_CONTROL Anforderungen. Neue Treiber für jeden Gerätetyp müssen diese Anforderungen unterstützen. In den meisten Fällen werden diese öffentlichen E/A-Steuercodes für jeden Gerätetyp nicht in Benutzermodusanwendungen exportiert.

Einige dieser systemdefinierten E/A-Steuerungscodes werden von Treibern höherer Ebene verwendet, die IRPs für den zugrunde liegenden Gerätetreiber durch Aufrufen von IoBuildDeviceIoControlRequest erstellen. Andere werden von Win32-Komponenten verwendet, um mit einem zugrunde liegenden Gerätetreiber zu kommunizieren, indem die Win32-Funktion DeviceIoControl (in der Microsoft Windows SDK-Dokumentation beschrieben) aufgerufen wird, die wiederum einen Systemdienst aufruft. Der I/O-Manager richtet ein IRP ein und speichert den hauptfunktionscode IRP_MJ_DEVICE_CONTROL und den angegebenen E/A-Steuercode in der IO_STACK_LOCATION Struktur unter Parameters.DeviceIoControl.IoControlCode. Anschließend ruft der E/A-Manager die DispatchDeviceControl-Routine des Treibers der höchsten Ebene in der Kette auf.

Für bestimmte vom System bereitgestellte Treiber, die mit neuen Treibern zusammenarbeiten und diese unterstützen, definiert das Betriebssystem auch eine Reihe von E/A-Steuerungscodes für IRP_MJ_INTERNAL_DEVICE_CONTROL Anforderungen. In den meisten Fällen ermöglichen diese öffentlichen E/A-Steuerungscodes, dass Add-On-Treiber auf höherer Ebene mit einem zugrunde liegenden Gerätetreiber zusammenarbeiten.

Als Beispiel unterstützen die vom System bereitgestellten parallelen Treiber eine Reihe interner E/A-Steuerungscodes, die von Anbietern bereitgestellte Treiber in IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderungen senden. Weitere Informationen finden Sie im Entwurfshandbuch für parallele Gerätetreiber.

Fast alle vorgänge, die über systemdefinierte E/A-Steuerungscodes angefordert werden, verwenden gepufferte E/A, da diese Art von Anforderung selten die Übertragung großer Datenmengen erfordert. Das heißt, selbst Treiber, die ihre Geräteobjekte für direkte E/A eingerichtet haben, erhalten IRPs für Gerätesteuerungsanforderungen mit Daten, die in den oder aus dem Puffer bei > übertragen werden sollen (außer bei bestimmten Arten von Gerätetreibern auf höchster Ebene mit eng gekoppelten Win32-Multimediatreibern).

Darüber hinaus kann ein Treiber eine Reihe privater E/A-Steuerungscodes definieren, die andere Treiber für die Kommunikation mit diesem verwenden können. Neue öffentliche E/A-Steuerungscodes können dem System nur mit der Zusammenarbeit der Microsoft Corporation hinzugefügt werden, da öffentliche E/A-Steuerungscodes in das Betriebssystem selbst integriert sind.

Spezifische Informationen zu den einzuhaltenden öffentlichen I/O-Steuerungscodes, die von verschiedenen Arten von Treibern unterstützt werden müssen, und zum Definieren privater I/O-Steuerungscodes finden Sie in den gerätespezifischen Referenzabschnitten des Windows Driver Kit (WDK).