Freigeben über


Architektur des Windows-Speichertreibers

Windows-Betriebssystemklassen und Filtertreiber für Peripheriespeichergeräte fungieren als Schnittstelle zwischen zwischen mittleren oder höchsten Treibern, die über der Klasse oder dem Filtertreiber liegen, und einem vom System bereitgestellten Porttreiber.

E/A-Anforderungen von einer Benutzeranwendung oder Kernelkomponente erreichen Speicherklassentreiber über E/A-Systemdienste und einen oder mehrere mittlere oder höchste Treiber, z. B. einen Dateisystemtreiber. Speicherklassentreiber übersetzen die Standard-IRPs, die sie erhalten, in IRPs mit systemdefinierten SCSI-Anforderungsblöcken (SRBs), die SCSI-Befehlsdeskriptorblöcke (CDBs) enthalten, bevor sie jede IRP an den nächstniedrigen Treiber senden. Ein Speicherporttreiber übersetzt SRBs von Klassentreibern in busspezifische Befehle, die er über einen E/A-Bustreiber und möglicherweise einen oder mehrere Filtertreiber an den Speicher-HBA sendet.

Die folgende Abbildung zeigt die mehrschichtige Architektur von Windows-Speichertreibern.

Diagramm, das die mehrschichtige Architektur von nt-basierten Betriebssystemspeichertreibern veranschaulicht.

Ausgehend vom unteren Rand der Abbildung werden die einzelnen Speichertreibertypen beschrieben:

  1. Ein Speicherporttreiber definiert eine Schnittstelle zu allen Windows-Speicherklassentreibern, einschließlich der vom System bereitgestellten Treiber für Datenträger, Band, CDROM, DVD und Changerklassentreiber. Diese Port-/Klassenschnittstelle isoliert Klassentreiber vor adapterspezifischen Anforderungen des Hostbusadapters, mit dem ihre jeweiligen Geräte verbunden sind. Ein Speicherporttreiber synchronisiert auch den Zugriff auf den Bus für alle Treiber von Geräten im entsprechenden HBA. Das System stellt Speicherporttreiber für SCSI-, IDE-, USB- und IEEE 1394-Adapter bereit.

    Ein Speicherporttreiber empfängt SRBs vom nächsthöheren Treiber (einem Speicherklassentreiber oder einem dazwischen liegenden Filtertreiber) und verarbeitet sie wie folgt:

    • Der Speicherporttreiber für einen SCSI oder anderen Bus übergibt SRBs mit CDBs an einen betriebssystemunabhängigen, HBA-spezifischen Storport-Miniporttreiber , der dynamisch mit dem entsprechenden Porttreiber verknüpft ist und hardwarespezifische Unterstützung für einen bestimmten HBA bietet. Informationen zum Implementieren eines SCSI-Miniporttreibers finden Sie unter Storport Miniport-Treiber.
    • Der Speicherporttreiber für einen Legacy-IDE/ATAPI- oder IEEE 1394-Bus übersetzt die vom Speicherklassentreiber empfangenen SRBs in das format, das vom zugrunde liegenden Adapter benötigt wird. Dabei werden z. B. CDBs nach einem busspezifischen Transportprotokoll neu verpackt oder in ein anderes Format übersetzt, wodurch treiber der oberen Ebene vor Denklichkeiten des zugrunde liegenden Busses geschützt werden.
  2. Ein höherer oder niedrigerEr Speicherfiltertreiber unterstützt gerätespezifische Funktionen, die nicht von einem systemseitig bereitgestellten Speicherklassentreiber bereitgestellt werden. Ein niedrigerer Filterspeichertreiber überwacht SRBs und/oder IRPs, die von einem Speicherklassentreiber ausgegeben werden, und ändert sie bei Bedarf, bevor sie an den nächstniedrigen Treiber (ein Speicherporttreiber oder ein anderer Speicherfiltertreiber) übergeben werden.

    Informationen zum Implementieren eines Speicherfiltertreibers finden Sie unter Speicherfiltertreiber.

  3. Ein Speicherklassentreiber verwendet die SCSI-Port-/Klassenschnittstelle, um ein Gerät seines Typs auf einem beliebigen Bus zu steuern, für den das System einen Speicherporttreiber bereitstellt. Ein Klassentreiber ist für eine bestimmte Geräteklasse spezifisch, z. B. kann ein Klassentreiber alle CD-ROM-Geräte auf einem beliebigen unterstützten Bus ausführen. ein anderer kann alle Datenträgergeräte steuern. Der Speicherklassentreiber verarbeitet E/A-Anforderungen von Benutzeranwendungen oder Treibern höher im Speicherstapel, indem er SRBs mit CDBs erstellt und diese SRBs an den nächstniedrigen Treiber (einen Speicherporttreiber oder einen dazwischen liegenden Filtertreiber) ausgibt, so als wäre das Gerät ein SCSI-Gerät.

    Die Implementierung eines Speicherklassentreibers ist für Treiber der oberen Ebene transparent. Ein Klassentreiber für ein Band- oder Mittelwechslungsgerät wird als gerätespezifischer Miniklassentreiber implementiert, der mit einem vom System bereitgestellten Klassentreiber verknüpft ist. Vom System bereitgestellte Klassentreiber für andere Speichergeräte, z. B. Datenträger und CD-ROM/DVD, werden als einzelne monolithische Treiber implementiert.

    Informationen zum Implementieren eines Speicherklassentreibers finden Sie unter Speicherklassentreiber. Informationen zum Implementieren eines Band- oder Changer-Miniklassentreibers finden Sie unter Bandtreiber bzw . Changer-Treiber.

  4. Ein höherer Filterspeichertreiber fängt IRPs von Benutzeranwendungen und Treibern höher im Speicherstapel ab und ändert diese möglicherweise, bevor er sie an den nächstniedrigen Treiber (einen Speicherklassentreiber oder einen anderen Speicherfiltertreiber) übergibt. Filtertreiber überwachen in der Regel die Leistung des zugrunde liegenden Geräts.

Der Bustyp, an den ein Gerät angeschlossen ist, und die Implementierung des Speicherporttreibers sind für Treiber der oberen Ebene transparent. Ein Speicherporttreiber kann gemäß der Port-/Miniporttreiberarchitektur implementiert werden, z. B. der SCSI-Porttreiber. als monolithischer Treiber, der eine einzelne Standardhardware steuert, z. B. den IDE/ATAPI-Porttreiber; oder als Filtertreiber, der SRBs in das Format übersetzt, das für einen anderen Treiberstapel erforderlich ist, z. B. den IEEE 1394-Porttreiber.

Der vom System bereitgestellte SCSI-Porttreiber kann auch als Schnittstelle zwischen einem Speicherklassentreiber und einem SCSI-Miniporttreiber fungieren, der ein Nicht-SCSI-Speichergerät desselben Typs steuert. Anstatt beispielsweise einen Treiber für einen neuen Datenträgerarraycontroller zu schreiben, kann ein Treiberschreiber erheblichen Entwurfs-, Entwicklungs- und Debugaufwand sparen, indem er einen Pseudo-SCSI-Miniporttreiber schreibt, der eine Verbindung mit dem System-SCSI-Porttreiber herstellt und die von diesem bereitgestellte Schnittstelle verwendet. Ein solcher Miniporttreiber ist erforderlich, um eingehende SCSI-Befehle in gerätespezifische Befehle zu übersetzen. Andererseits erledigen die vom System bereitgestellten Port- und Klassentreiber im Auftrag eines Pseudo-SCSI-Miniports viel erforderliche Arbeit, einschließlich Registrierungszugriffe während der Initialisierung, alle Ressourcen- und Objektzuordnungen, Synchronisierung, Vorabdimensionierung angeforderter Übertragungen, um den Funktionen des Geräts des Miniports zu entsprechen, und Wiederholungsanforderungen.

Ausführlichere Informationen zu SRBs finden Sie in der Referenz zu Kernel-Mode Treiberarchitektur. Gerätetypspezifische Informationen zu CDBs finden Sie in den entsprechenden Befehlssätzen in den INCITS-SCSI-3-Standards.