GetDescriptor-Routine des Speicherklassentreibers
Für Datenübertragungsvorgänge benötigen Speicherklassentreiber Konfigurationsinformationen zu jedem HBA, der einen Bus antreibt, an den ihre Geräte angeschlossen sind. Um diese Informationen zu erhalten, ruft ein Klassentreiber entweder eine interne GetDescriptor-Routine auf oder implementiert dieselbe Funktionalität in seiner StartDevice-Routine . (Informationen zu StartDevice finden Sie unter Handling PnP Start in a Storage Class Driver.)
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 Treiber writer bestimmte Flags in der Geräteerweiterung entsprechend den zurückgegebenen Deskriptordaten festlegen.
Der Klassentreiber überprüft die zurückgegebenen STORAGE_DEVICE_DESCRIPTOR Daten, um Gerätefunktionen (SCSI-Untersuchungsdaten oder nicht SCSI-äquivalente Daten) zu ermitteln, z. B. den SCSI-Gerätetyp, ob das Medium des Geräts (falls vorhanden) wechselbar ist (RemovableMedia), ob das Gerät mehrere ausstehende Befehle (CommandQueueing) unterstützt, und verschiedene ID-Zeichenfolgen. Der Klassentreiber überprü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 der HBA gepufferte Daten übertragen kann, die von nicht zusammenhängenden physischen Seiten unterstützt werden (d. h. wenn er Scatter/Gather unterstützt), wie viele nicht zusammenhängende physische Seiten pro Puffer verwaltet werden können, pro Übertragungsvorgang (MaximumPhysicalPages).
Die Ausrichtungsanforderungen des HBA für Übertragungen, damit der Klassentreiber das Feld AlignmentRequirement in seinen Geräteobjekten (AlignmentMask) ordnungsgemäß festlegen kann.
Anwendungen, die IOCTL_SCSI_PASS_THROUGH Anforderungen senden, können dieses Feld ebenfalls verwenden.
Weitere Informationen zum Einrichten von AlignmentRequirement in Geräteobjekten finden Sie unter Initialisieren eines Geräteobjekts.
Gibt an, ob der HBA SCSI-markierte Warteschlangen und/oder interne Warteschlangen pro logischer Einheit (CommandQueueing) unterstützt.
Gibt an, ob der HBA synchrone Übertragungen (AcceleratedTransfer) unterstützt.
Gibt an, ob der HBA Daten intern zwischenspeichert (CachesData).
Der Klassentreiber sollte diese Informationen in der Geräteerweiterung der FDO speichern, damit seine Dispatchroutinen sicherstellen können, dass alle Anforderungen, die an den Speicherporttreiber gesendet werden, der Größe, der Anzahl der physischen Unterbrechungen und den Ausrichtungsanforderungen des zugrunde liegenden HBA entsprechen. Weitere Informationen zu Dispatchroutinen für Klassentreiber finden Sie unter Dispatch-Routinen des Speicherklassentreibers. Weitere Informationen zum Einrichten von Geräteerweiterungen finden Sie unter Einrichten der Geräteerweiterung eines Speicherklassentreibers.