Einführung in Speicherklassentreiber
Ein Speicherklassentreiber verwendet die gut etablierte SCSI-Klassen-/Portschnittstelle, um ein Massenspeichergerät seines Typs auf jedem Bus zu steuern, für den das System einen Speicherporttreiber bereitstellt (derzeit SCSI, IDE, USB und IEEE 1394). Der bestimmte Bus, mit dem ein Speichergerät verbunden ist, ist für den Speicherklassentreiber transparent.
Ein Speicherklassentreiber verarbeitet E/A-Anforderungen von Benutzeranwendungen oder treibern höherer Ebene, indem er SCSI-Anforderungsblöcke (SRBs) erstellt, die Befehlsdeskriptorblöcke (Command Descriptor Blocks , CDBs) enthalten, und diese über alle dazwischen liegenden Filtertreiber an den zugrunde liegenden Speicherporttreiber sendet.
Ein Speicherklassentreiber stellt keine Adressinformationen im SRB bereit. Stattdessen ist der Porttreiber (oder ein noch niedrigerer Treiber) für jede erforderliche Adressierung verantwortlich. Der Speicherporttreiber übersetzt die SRBs in das Format, das für den zugrunde liegenden Hostbusadapter (HBA) erforderlich ist, bei dem es sich um einen SCSI- oder 1394-Hostbusadapter, einen IDE-Controller oder eine andere solche Hardware handeln kann, und gibt Befehle an das Gerät aus. Im Windows Driver Kit (WDK) steht der Begriff "HBA" für alle zugrunde liegenden Adapter oder Controller.
Für den E/A-Manager und alle Treiber höherer Ebene, die über einem Speicherklassentreiber liegen, sind die meisten Speicherklassentreiber Standard-Kernelmodus-Zwischentreiber. Daher muss jeder Klassentreiber über eine DriverEntry-Routine, eine AddDevice-Routine, eine Unload-Routine, mindestens eine IoCompletion-Routine sowie dispatchPnP- und DispatchPower-Routinen verfügen, um Plug & Play und Power IRPs verarbeiten zu können.
Ein Speicherklassentreiber muss auch über eine DispatchSystemControl-Routine zum Verarbeiten von Systemsteuerungs-IRPs verfügen, und kann über jede andere vom Treiber-Designer festgelegte Standard-Treiberroutine auf höherer Ebene verfügen, z. B. eine StartIo-Routine . Weitere Informationen zu Systemsteuerungs- und Standard-Kernelmodustreiberroutinen finden Sie unter Standardtreiberroutinen.
Für den PnP-Manager ist ein Speicherklassentreiber ein Funktionstreiber, d. h. ein Treiber, der ein einzelnes Gerät antreibt. Ein Speicherklassentreiber kann auch als Bustreiber fungieren und untergeordnete Geräte seiner Geräte auflisten. Beispielsweise gibt der Klassentreiber für ein partitioniertes Mediengerät, z. B. einen Datenträger, eine Liste von PDOs zurück, die seine Partitionen darstellen. Jedes dieser PDO kann als Zielgerät adressiert und von einem eigenen Klassentreiber gewartet werden.
Hinweis
Ein Treiber für ein SCSI-Gerät, z. B. einen Drucker oder einen Scanner, sollte wie in diesem Abschnitt beschrieben implementiert werden. Ein Treiber für ein solches SCSI-Gerät verwendet die gleiche SCSI-Klassen-/Portschnittstelle, um sein Gerät zu steuern, und hat die gleichen Zuständigkeiten für die Verarbeitung von IRPs, das Erstellen von SRBs und das Senden an den zugrunde liegenden Porttreiber wie ein Treiber für ein Speichergerät.