Freigeben über


GetDescriptor-Routine des Speicherklassentreibers

Für Datenübertragungsvorgänge benötigen Speicherklassentreiber Konfigurationsinformationen zu jedem HBA, der einen Bus fährt, an den ihre Geräte angeschlossen sind. Um diese Informationen abzurufen, ruft ein Klassentreiber entweder eine interne GetDescriptor-Routine auf oder implementiert die gleiche Funktionalität in seiner StartDevice-Routine . (Informationen zu StartDevice finden Sie unter Behandeln von PnP-Start in einem Speicherklassentreiber.)

Eine GetDescriptor-Routine erstellt und richtet Abfrageeigenschaftenanforderungen (IRP_MJ_DEVICE_CONTROL mit IOCTL_STORAGE_QUERY_PROPERTY) für den Porttreiber ein, um Geräte- und Adapterdeskriptoren abzurufen, die der Klassentreiber in seiner Geräteerweiterung speichert. Der Klassentreiber kann auch vom Treiberschreiber festgelegte Flags in der Geräteerweiterung entsprechend den zurückgegebenen Deskriptordaten festlegen.

Der Klassentreiber prüft die zurückgegebenen STORAGE_DEVICE_DESCRIPTOR Daten, um Die Gerätefunktionen (SCSI-Untersuchungsdaten oder die Nicht-SCSI-Entsprechung) zu ermitteln, z. B. den SCSI-Gerätetyp, ob die Medien des Geräts (falls vorhanden) wechselbar sind (RemovableMedia), ob das Gerät mehrere ausstehende Befehle (CommandQueueing) und verschiedene ID-Zeichenfolgen unterstützt. Der Klassentreiber prüft die zurückgegebenen STORAGE_ADAPTER_DESCRIPTOR Daten, um die Adapterfunktionen zu ermitteln, einschließlich:

  • Die maximale Anzahl von Bytes, die ein bestimmter HBA in einem einzelnen Vorgang übertragen kann (MaximumTransferLength).

  • Wenn die HBA gepufferte Daten übertragen kann, die von nicht zusammenhängenden physischen Seiten unterstützt werden (also Scatter/Gather unterstützt), wie viele nicht zusammenhängende physische Seiten pro Puffer, pro Übertragungsvorgang (MaximumPhysicalPages), verwaltet werden können.

  • Die Anforderungen an die Ausrichtung der HBA bei Übertragungen, damit der Klassentreiber das AlignmentRequirement-Feld in seinen Geräteobjekten (AlignmentMask) korrekt festlegen kann.

    Anwendungen, die IOCTL_SCSI_PASS_THROUGH Anforderungen senden, können auch dieses Feld verwenden.

    Weitere Informationen zum Einrichten von AlignmentRequirement in Geräteobjekten finden Sie unter Initialisieren eines Device-Objekts.

  • Gibt an, ob die HBA SCSI-markierte Warteschlangen und/oder interne Warteschlangen pro logischer Einheit (CommandQueueing) unterstützt.

  • Gibt an, ob die HBA synchrone Übertragungen (AcceleratedTransfer) unterstützt.

  • Gibt an, ob die HBA Daten intern zwischenspeichert (CachesData).

Der Klassentreiber sollte diese Informationen in der Geräteerweiterung der FDO speichern, damit seine Dispatch-Routinen sicherstellen können, dass alle Anforderungen, die an den Speicherporttreiber gesendet werden, der Größe, der Anzahl der physischen Unterbrechungen und der Ausrichtungsanforderungen der zugrunde liegenden HBA entsprechen. Weitere Informationen zu den Dispatch-Routinen des Speicherklassen-Treibers finden Sie unter Storage Class Driver's Dispatch Routines. Weitere Informationen zum Einrichten von Geräteerweiterungen finden Sie unter Einrichten einer Speicherklassen-Treiber-Geräteerweiterung.