Freigeben über


Einrichten einer Geräteerweiterung für Speicherklassentreiber

In den Geräteerweiterungen jedes Geräteobjekts, das von einem Speicherklassentreiber erstellt wird, stellt dieser Treiber Speicher für alle vom Treiber bestimmten Daten bereit, die er zum Verwalten von E/A-Anforderungen für das Gerät verwendet, z. B. den Zeiger auf das an AddDevice übergebene PDO, den Zeiger auf das von IoAttachDeviceToDeviceStack zurückgegebene Geräteobjekt, einen Rückzeiger auf das eigene Geräteobjekt, und so weiter.

Die meisten Speicherklassentreiber bieten auch Speicher für die folgenden Informationen:

  • Ein gerätetypspezifischer Timeoutwert

    Der Klassentreiber kann den Timeoutwert in SRBs, den er an den Porttreiber sendet, übergeben. Dabei SRB_FUNCTION_EXECUTE_SCSI Anforderungen (siehe SCSI_REQUEST_BLOCK) im Namen der einzelnen Klassentreiber. Der Porttreiber gibt einen SRB zurück, dessen SrbStatus-Member auf SRB_STATUS_TIMEOUT festgelegt ist, wenn das Intervall zwischen dem Zeitpunkt, in dem der Porttreiber die Anforderung an den zugrunde liegenden Treiber sendet, und dem Abschluss der Anforderung den angegebenen Timeoutwert überschreitet.

  • Ein Zeiger auf die Fehlerbehandlungsroutine des Klassentreibers

    Weitere Informationen zur Fehlerbehandlung in Speicherklassentreibern finden Sie unter IoCompletion-Routinen des Speicherklassentreibers .

  • Eine Anzahl, die der Treiber von Busprotokollfehlern auf dem Gerät verwaltet.

  • Ein Zeiger auf einen vom Treiber zugewiesenen Puffer für Sense-Daten

    Ein Klassentreiber muss Arbeitsspeicher für zurückgegebene Sense-Daten aus einem Cache ausgerichteten, nicht ausseitigen Pool zuweisen. Weitere Informationen zum Zuweisen von Arbeitsspeicher für Treiberpuffer finden Sie unter Zuweisen System-Space Arbeitsspeichers.

  • Ein vom Treiber ermittelter Standardwert für SrbFlags , den der Klassentreiber in SRBs festlegt.

  • Ein Zeiger auf einen Lookaside-Listenheader, wenn der Treiber eine Suchliste für die srBs einrichtet, die er zuordnet.

    Weitere Informationen finden Sie unter Verwenden von Lookaside-Listen .

  • Zeiger auf ein IRP und einen SRB, der zugeordnet und in Reserve für Anforderungen gehalten wird, die selbst bei geringen Arbeitsspeicherbedingungen erfolgreich sein müssen, für Pagingvorgänge sowie Fehlerwiederherstellungsvorgänge (z. B. solche, die von einer ReleaseQueue-Routine des Speicherklassentreibers ausgeführt werden)

  • Ein Zeiger auf die STORAGE_ADAPTER_DESCRIPTOR und STORAGE_DEVICE_DESCRIPTOR Daten, die der Porttreiber vom HBA erfasst hat.

    Informationen dazu, wie Klassentreiber diese Daten erhalten und verwenden, finden Sie unter GetDescriptor Routine des Speicherklassentreibers.

  • Flags, die den vorherigen und aktuellen PnP-Zustand angeben, um Übergänge zwischen Zuständen auf dem Gerät zu verwalten

  • Ein Flag, das den aktuellen Energiezustand des Geräts angibt, um zusätzlichen Aufwand bei der Verarbeitung redundanter Energieanforderungen zu vermeiden.

  • Anzahl der Systemauslagerungsdateien auf dem Gerät, sofern vorhanden, basierend auf vom Treiber empfangenen Auslagerungsbenachrichtigungsanforderungen (IRP_MJ_PNP mit IRP_MN_DEVICE_USAGE_NOTIFICATION)

Ein Speicherklassentreiber kann keine Anforderungen an sein Gerät über den Speicherporttreiber senden, ohne den Geräteobjektzeiger zu verwenden, der von IoAttachDeviceToDeviceStack zurückgegeben und von der AddDevice-Routine des Treibers in der Geräteerweiterung gespeichert wurde.