STORAGE_REQUEST_BLOCK-Struktur (srb.h)
Die STORAGE_REQUEST_BLOCK ist die Struktur des erweiterten SCSI-Anforderungsblocks (SCSI Request Block, SRB). Die -Struktur ermöglicht das Hinzufügen erweiterter Daten, die einer SRB-Funktion zugeordnet sind.
Hinweis
Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle sind möglicherweise geändert oder in Zukunft nicht mehr verfügbar. Verwenden Sie stattdessen die Modelle Storport-Treiber und Storport-Miniporttreiber .
Syntax
typedef struct _STORAGE_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
ULONG ReservedUlong1;
ULONG Signature;
ULONG Version;
ULONG SrbLength;
ULONG SrbFunction;
ULONG SrbFlags;
ULONG ReservedUlong2;
ULONG RequestTag;
USHORT RequestPriority;
USHORT RequestAttribute;
ULONG TimeOutValue;
union {
ULONG SystemStatus;
ULONG RequestTagHigh4Bytes;
} DUMMYUNIONNAME;
ULONG SystemStatus;
ULONG ZeroGuard1;
ULONG AddressOffset;
ULONG NumSrbExData;
ULONG DataTransferLength;
PVOID POINTER_ALIGN DataBuffer;
PVOID POINTER_ALIGN ZeroGuard2;
PVOID POINTER_ALIGN OriginalRequest;
PVOID POINTER_ALIGN ClassContext;
PVOID POINTER_ALIGN PortContext;
PVOID POINTER_ALIGN MiniportContext;
_STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
struct _STORAGE_REQUEST_BLOCK;
ULONG SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;
Member
Length
Gibt die Größe des SRB-Headers zur Kompatibilität mit der SCSI_REQUEST_BLOCK-Struktur an. Dies entspricht dem Offset des Signature-Elements dieser Struktur.
Function
Legen Sie auf SRB_FUNCTION_STORAGE_REQUEST_BLOCK fest, um anzugeben, dass es sich um einen erweiterten SRB handelt. Im Gegensatz zu SCSI_REQUEST_BLOCK befindet sich der SRB-Funktionsbezeichner stattdessen im SrbFunction-Member .
SrbStatus
Gibt den status der abgeschlossenen Anforderung zurück. Dieser Member sollte vom Miniporttreiber festgelegt werden, bevor er den betriebssystemspezifischen Treiber benachrichtigt, dass die Anforderung abgeschlossen wurde, indem ScsiPortNotification mit RequestComplete aufgerufen wird. Der Wert dieses Members kann einer der folgenden sein:
Wert | Bedeutung |
---|---|
SRB_STATUS_PENDING (0x00) | Gibt an, dass die Anforderung ausgeführt wird. Der betriebssystemspezifische Porttreiber initialisiert SrbStatus mit diesem Wert. |
SRB_STATUS_SUCCESS (0x01) | Gibt an, dass die Anforderung erfolgreich abgeschlossen wurde. |
SRB_STATUS_ABORTED (0x02) | Gibt an, dass die Anforderung wie vom Porttreiber angewiesen abgebrochen wurde. Ein Miniporttreiber legt diese status im NextSrb-Member für eine erfolgreiche SRB_FUNCTION_ABORT_COMMAND-Anforderung fest. |
SRB_STATUS_ABORT_FAILED (0x03) | Gibt an, dass der Versuch, die Anforderung abzubrechen, fehlgeschlagen ist. Geben Sie diesen status für eine SRB_FUNCTION_ABORT_COMMAND-Anforderung zurück, wenn die angegebene Anforderung nicht gefunden werden kann. |
SRB_STATUS_ERROR (0x04) | Gibt an, dass die Anforderung mit einem Fehler im SCSI-Bus-status abgeschlossen wurde. |
SRB_STATUS_BUSY (0x05) | Gibt an, dass der Miniporttreiber oder das Zielgerät die Anforderung zu diesem Zeitpunkt nicht annehmen konnte. Der betriebssystemspezifische Porttreiber übermittelt die Anforderung später erneut. |
SRB_STATUS_INVALID_REQUEST (0x06) | Gibt an, dass der Miniporttreiber die angegebene Anforderung nicht unterstützt. |
SRB_STATUS_INVALID_PATH_ID (0x07) | Gibt an, dass die im SRB angegebene PathId nicht vorhanden ist. |
SRB_STATUS_NO_DEVICE (0x08) | Gibt an, dass das Gerät nicht reagiert hat. |
SRB_STATUS_TIMEOUT (0x09) | Gibt ein Timeout für die Anforderung an. |
SRB_STATUS_SELECTION_TIMEOUT (0x0A) | Gibt an, dass das Timeout für die Auswahl des SCSI-Geräts unterbrochen wurde. |
SRB_STATUS_COMMAND_TIMEOUT (0x0B) | Gibt an, dass das Ziel den Befehl nicht innerhalb des Zeitlimits abgeschlossen hat. |
SRB_STATUS_MESSAGE_REJECTED (0x0D) | Gibt an, dass das Ziel eine Nachricht abgelehnt hat. Dies wird normalerweise nur für Nachrichtentypanforderungen wie SRB_FUNCTION_TERMINATE_IO zurückgegeben. |
SRB_STATUS_BUS_RESET (0x0E) | Gibt an, dass ein Bus zurückgesetzt wurde, während diese Anforderung ausgeführt wurde. |
SRB_STATUS_PARITY_ERROR (0x0F) | Gibt an, dass ein Paritätsfehler auf dem SCSI-Bus aufgetreten ist und dass bei einer Wiederholung ein Fehler aufgetreten ist. |
SRB_STATUS_REQUEST_SENSE_FAILED (0x10) | Gibt an, dass der Befehl request-sense fehlgeschlagen ist. Dies wird nur zurückgegeben, wenn der Hostbusadapter (HBA) die automatische Anforderungsoptimierung ausführt und der Miniporttreiber AutoRequestSense im PORT_CONFIGURATION_INFORMATION für diesen HBA auf TRUE festgelegt hat. |
SRB_STATUS_NO_HBA (0x11) | Gibt an, dass der HBA nicht reagiert. |
SRB_STATUS_DATA_OVERRUN (0x12) | Gibt an, dass ein Datenüberlauf- oder Unterlauffehler aufgetreten ist. Der Miniporttreiber muss auch das DataTransferLength-Element des SRB aktualisieren, um anzugeben, wie viele Daten tatsächlich übertragen wurden, wenn ein Unterlauf auftritt. |
SRB_STATUS_UNEXPECTED_BUS_FREE (0x13) | Gibt an, dass das Ziel unerwartet getrennt wurde. |
SRB_STATUS_PHASE_SEQUENCE_FAILURE (0x14) | Gibt an, dass der HBA einen fehlerhaften Fehler bei der Phasensequenz erkannt hat. |
SRB_STATUS_BAD_SRB_BLOCK_LENGTH (0x15) | Gibt an, dass die Anforderung fehlgeschlagen ist, weil die SRB-Länge ungültig war. |
SRB_STATUS_REQUEST_FLUSHED (0x16) | Gibt an, dass die Anforderung für status beendet wurde. |
SRB_STATUS_INVALID_LUN (0x20) | Gibt an, dass der Lun-Wert im SRB ungültig ist. |
SRB_STATUS_INVALID_TARGET_ID (0x21) | Gibt an, dass der TargetID-Wert im SRB ungültig ist. |
SRB_STATUS_BAD_FUNCTION (0x22) | Gibt an, dass der SRB-Funktionscode nicht unterstützt wird. |
SRB_STATUS_ERROR_RECOVERY (0x23) | Gibt an, dass die Anforderung mit einem Fehler in der SCSI-Bus-status abgeschlossen wurde und dass die SCSI INITIATE RECOVERY-Nachricht empfangen wurde. |
SRB_STATUS_NOT_POWERED (0x24) | Ein gibt an, dass die Anforderung fehlgeschlagen ist, weil das Ziel nicht mit Strom versorgt wird. Bei Anforderungen mit SRB_FLAGS_NO_KEEP_AWAKE, die in SrbFlags festgelegt sind, schlagen Anforderungen, die an heruntergefahrene LUNs gesendet werden, mit diesem status fehl. |
SRB_STATUS_LINK_DOWN (0x25) | Gibt an, dass die Anforderung fehlgeschlagen ist, weil der Link ausgefallen ist. |
SRB_STATUS_INTERNAL_ERROR (0x30) | Gibt an, dass der Storport-Treiber die Anforderung nicht an den Miniporttreiber oder das Zielgerät übermitteln konnte. In solchen Fällen wird status in InternalStatus aufgezeichnet. |
SRB_STATUS_QUEUE_FROZEN (0x40) | Ein Miniporttreiber sollte den SrbStatus-Member niemals auf diesen Wert festlegen. Der Windows-Porttreiber kann diesen Wert festlegen, um einen Speicherklassentreiber darüber zu informieren, dass seine Anforderungswarteschlange für ein bestimmtes Peripheriegerät gesperrt wurde. |
SRB_STATUS_AUTOSENSE_VALID (0x80) | Gibt an, dass die im SenseInfoBuffer zurückgegebenen Informationen gültig sind. |
ReservedUlong1
Reserviert. Auf 0 festlegen.
Signature
Die Signatur des erweiterten SRB-Formats. Dies ist auf SRB_SIGNATURE festgelegt.
Version
Die Version der verwendeten Struktur. Die aktuelle Version ist STORAGE_REQUEST_BLOCK_VERSION_1.
SrbLength
Die Länge dieses erweiterten SRB in Byte, einschließlich dieser Struktur, adresse und alle erweiterten SRB-Daten.
SrbFunction
Gibt den auszuführenden Vorgang an, der einer der folgenden Werte sein kann:
Wert | Bedeutung |
---|---|
SRB_FUNCTION_EXECUTE_SCSI (0x00) | Eine E/A-Anforderung für SCSI-Geräte sollte auf der logischen Zieleinheit ausgeführt werden. Bei NumSrbExData> 0 befinden sich mindestens eine der folgenden erweiterten Anforderungsblockstrukturen an den in SrbExDataOffset angegebenen Offsets: SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONAL, SRBEX_DATA_IO_INFO |
SRB_FUNCTION_IO_CONTROL (0x02) | Die Anforderung ist eine E/A-Steuerungsanforderung, die aus einer Benutzermodusanwendung mit einem dedizierten HBA stammt. Der SRB DataBuffer zeigt auf einen SRB_IO_CONTROL-Header gefolgt vom Datenbereich. Der Wert in DataBuffer kann vom Treiber unabhängig vom Wert von MapBuffers verwendet werden. Nur die Member SRB Function, SrbFlags, TimeOutValue, DataBuffer und DataTransferLength sind gültig, zusammen mit dem SrbExtension-Member , wenn der Miniporttreiber bei der Initialisierung SRB-Erweiterungen angefordert hat. Wenn ein Miniporttreiber einen anwendungsdedienten HBA steuert, sodass er diese Anforderung unterstützt, sollte der Miniporttreiber die Anforderung ausführen und den betriebssystemspezifischen Porttreiber benachrichtigen, wenn der SRB abgeschlossen ist. Dabei wird der normale Mechanismus von Aufrufen von ScsiPortNotification mit RequestComplete und NextRequest verwendet. |
SRB_FUNCTION_RECEIVE_EVENT (0x03) | Der HBA sollte darauf vorbereitet sein, eine asynchrone Ereignisbenachrichtigung vom adressierten Ziel zu empfangen. Der SRB DataBuffer-Member gibt an, wo die Daten platziert werden sollen. HINWEIS: Diese Funktion wird von Storport nicht an den Miniport gesendet. |
SRB_FUNCTION_SHUTDOWN (0x07) | Das System wird heruntergefahren. Ein Miniporttreiber kann mehrere dieser Benachrichtigungen empfangen, bevor alle Systemaktivitäten tatsächlich beendet werden. Die letzte Benachrichtigung zum Herunterfahren erfolgt jedoch nach der letzten Start-E/A. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. |
SRB_FUNCTION_FLUSH (0x08) | Der Miniporttreiber sollte alle zwischengespeicherten Daten für das Zielgerät leeren. Diese Anforderung wird nur an den Miniporttreiber gesendet, wenn CachesData im PORT_CONFIGURATION_INFORMATION für den HBA auf TRUE festgelegt ist. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. |
SRB_FUNCTION_ABORT_COMMAND (0x10) | Eine SCSIMESS_ABORT Nachricht sollte gesendet werden, um die Anforderung abzubrechen, auf die das NextSrb-Element verweist. Wenn es sich um eine Tagged-Queue-Anforderung handelt, sollte stattdessen eine SCSIMESS_ABORT_WITH_TAG Nachricht verwendet werden. Wenn die angegebene Anforderung abgeschlossen wurde, sollte diese Anforderung normal abgeschlossen werden. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. HINWEIS: Diese Funktion wird von Storport nicht an den Miniport gesendet. |
SRB_FUNCTION_RELEASE_RECOVERY (0x11) | Eine SCSIMESS_RELEASE_RECOVERY Nachricht sollte an den Zielcontroller gesendet werden. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. HINWEIS: Diese Funktion wird von Storport nicht an den Miniport gesendet. |
SRB_FUNCTION_RESET_BUS (0x12) | Der SCSI-Bus sollte mithilfe der SCSIMESS_BUS_DEVICE_RESET-Meldung zurückgesetzt werden. Ein Miniporttreiber empfängt diese Anforderung nur, wenn für eine bestimmte Anforderung ein Timeout aufgetreten ist und bei einer nachfolgenden Anforderung zum Abbrechen der Timeoutanforderung ebenfalls ein Timeout aufgetreten ist. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. |
SRB_FUNCTION_TERMINATE_IO (0x14) | Eine SCSIMESS_TERMINATE_IO_PROCESS Nachricht sollte gesendet werden, um die Anforderung abzubrechen, auf die das NextSrb-Element verweist. Wenn die angegebene Anforderung bereits abgeschlossen ist, sollte diese Anforderung normal ausgeführt werden. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. HINWEIS: Diese Funktion wird von Storport nicht an den Miniport gesendet. |
SRB_FUNCTION_RESET_DEVICE (0x16) | Der SCSI-Zielcontroller sollte mithilfe der meldung SCSIMESS_BUS_DEVICE_RESET zurückgesetzt werden. Der Miniporttreiber sollte alle aktiven Anforderungen für den Zielcontroller abschließen. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. |
SRB_FUNCTION_WMI (0x17) | Die Anforderung ist eine power extended-Anforderung, die als SRBEX_DATA_WMI-Struktur formatiert ist. Der Offset zu erweiterten Anforderungsdaten befindet sich unter SrbExDataOffset[0]. |
SRB_FUNCTION_LOCK_QUEUE (0x18) | Enthält Anforderungen, die vom Porttreiber für eine bestimmte logische Einheit in die Warteschlange gestellt werden, in der Regel während der Verarbeitung einer Energieanforderung. Nur die Elemente SRB Length, Function, SrbFlags und OriginalRequest sind gültig. Wenn die Warteschlange gesperrt ist, werden nur Anforderungen mit SrbFlags ORed mit SRB_FLAGS_BYPASS_LOCKED_QUEUE verarbeitet. SCSI-Miniporttreiber verarbeiten keine SRB_FUNCTION_LOCK_QUEUE Anforderungen. |
SRB_FUNCTION_UNLOCK_QUEUE (0x19) | Gibt die Warteschlange des Porttreibers für eine logische Einheit frei, die zuvor mit SRB_FUNCTION_LOCK_QUEUE gesperrt war. Die SrbFlags der Entsperranforderung müssen mit SRB_FLAGS_BYPASS_LOCKED_QUEUE. Nur die Elemente SRB Length, Function, SrbFlags und OriginalRequest sind gültig. SCSI-Miniporttreiber verarbeiten keine SRB_FUNCTION_UNLOCK_QUEUE Anforderungen. |
SRB_FUNCTION_QUIESCE_DEVICE (0x1A) | Die Anforderung erfolgt nur zwischen einer Speicherklasse und einem Speicherporttreiber und wird nicht an den Miniport gesendet. Diese Funktion dient als Wartevorgang des Klassentreibers, damit der Porttreiber alle ausstehenden E/A-Vorgänge abschließen kann. |
SRB_FUNCTION_RESET_LOGICAL_UNIT (0x20) | Die logische Einheit sollte nach Möglichkeit zurückgesetzt werden. Der HBA-Miniporttreiber sollte alle aktiven Anforderungen für die logische Einheit abschließen. Erweiterte SRB-Daten sind für diese Funktion nicht erforderlich. Storport unterstützt diese Art der Zurücksetzung, der SCSI-Port hingegen nicht. |
SRB_FUNCTION_POWER (0x24) | Die Anforderung ist eine power extended-Anforderung, die als SRBEX_DATA_POWER-Struktur formatiert ist. Der Offset zu erweiterten Anforderungsdaten befindet sich unter SrbExDataOffset[0]. |
SRB_FUNCTION_PNP (0x25) | Die Anforderung ist eine erweiterte PnP-Anforderung, die als SRBEX_DATA_PNP-Struktur formatiert ist. Der Offset zu erweiterten Anforderungsdaten befindet sich unter SrbExDataOffset[0]. |
SRB_FUNCTION_DUMP_POINTERS (0x26) | Eine Anforderung mit dieser Funktion wird an einen Storport-Miniporttreiber gesendet, der zum Steuern des Datenträgers verwendet wird, der die Absturzabbilddaten enthält. Die Anforderung sammelt Informationen, die vom Miniporttreiber benötigt werden, um Absturzabbild und Ruhezustand zu unterstützen. Weitere Informationen finden Sie in der MINIPORT_DUMP_POINTERS-Struktur. Ein physischer Miniporttreiber muss das STOR_FEATURE_DUMP_POINTERS-Flag im FeatureSupport-Member seiner HW_INITIALIZATION_DATA festlegen, um eine Anforderung mit dieser Funktion zu empfangen. |
SRB_FUNCTION_FREE_DUMP_POINTERS (0x27) | Eine Anforderung mit dieser Funktion wird an einen Storport-Miniporttreiber gesendet, um alle Ressourcen freizugeben, die während einer vorherigen Anforderung für SRB_FUNCTION_DUMP_POINTERS zugeordnet wurden. |
SrbFlags
Gibt verschiedene Parameter und Optionen für die Anforderung an. SrbFlags ist schreibgeschützt, außer wenn SRB_FLAGS_UNSPECIFIED_DIRECTION festgelegt ist und Miniporttreiber untergeordneter DMA-Adapter erforderlich sind, um SRB_FLAGS_DATA_IN oder SRB_FLAGS_DATA_OUT zu aktualisieren. Für dieses Element kann eines oder mehrere dieser Flags festgelegt sein.
Flag | Bedeutung |
---|---|
SRB_FLAGS_NO_DATA_TRANSFER (0x00000000) | Gibt an, dass keine Datenübertragung mit dieser Anforderung erfolgt. Wenn dies festgelegt ist, sind die Flags SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN und SRB_FLAGS_UNSPECIFIED_DIRECTION eindeutig. |
SRB_FLAGS_QUEUE_ACTION_ENABLE (0x00000002) | Gibt an, dass Tagged-Queue-Aktionen aktiviert werden sollen. |
SRB_FLAGS_DISABLE_DISCONNECT (0x00000004) | Gibt an, dass der HBA nicht zulassen sollte, dass das Ziel während der Verarbeitung dieser Anforderung die Verbindung mit dem SCSI-Bus trennt. |
SRB_FLAGS_DISABLE_SYNCH_TRANSFER (0x00000008) | Gibt an, dass der HBA nach Möglichkeit asynchrone E/A-Vorgänge für diese Übertragungsanforderung ausführen soll. Wenn zuvor über synchrone E/A-Vorgänge verhandelt wurde, muss der HBA die asynchrone E/A neu aushandeln, bevor die Übertragung ausgeführt wird. |
SRB_FLAGS_BYPASS_FROZEN_QUEUE (0x00000010) | Dieses Flag ist für Miniporttreiber irrelevant. |
SRB_FLAGS_DISABLE_AUTOSENSE (0x00000020) | Gibt an, dass keine Informationen zur Anforderungsoptimierung zurückgegeben werden sollen. |
SRB_FLAGS_DATA_IN (0x00000040) | Gibt an, dass Daten vom Gerät an das System übertragen werden. |
SRB_FLAGS_DATA_OUT (0x00000080) | Gibt an, dass Daten vom System auf das Gerät übertragen werden. |
SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) | Für die Abwärtskompatibilität mit den ASPI/CAM-SCSI-Schnittstellen definiert, gibt dieses Flag an, dass die Übertragungsrichtung eine der vorherigen sein kann, da beide vorherigen Flags festgelegt sind. Wenn dieses Flag festgelegt ist, sollte ein Miniporttreiber die Übertragungsrichtung bestimmen, indem er die Datenphase für das Ziel auf dem SCSI-Bus untersucht. |
SRB_FLAGS_NO_QUEUE_FREEZE (0x00000100) | Dieses Flag ist für Miniporttreiber irrelevant. |
SRB_FLAGS_ADAPTER_CACHE_ENABLE (0x00000200) | Gibt an, dass der Adapter Daten zwischenspeichern kann. |
SRB_FLAGS_FREE_SENSE_BUFFER (0x00000400) | Gibt an, dass entweder der Port oder der Miniporttreiber einen Puffer für Sense-Daten zugewiesen hat. Dadurch wird der Klassentreiber darüber informiert, dass der Sense-Datenpuffer nach dem Extrahieren der Daten freigegeben werden muss. |
SRB_FLAGS_D3_PROCESSING (0x00000800) | Gibt an, dass die Anforderung Teil der D3-Verarbeitung ist. Miniports, die die Laufzeitenergiesteuerung unterstützen, sollten storPortPoFxActivateComponent oder StorPortPoFxIdleComponent mit diesen Anforderungen nicht aufrufen. |
SRB_FLAGS_SEQUENTIAL_REQUIRED (0x00001000) | Gibt an, dass der LBA-Bereich in die zone für sequenzielle Schreibvorgänge fällt, die erforderlich ist. |
SRB_FLAGS_IS_ACTIVE (0x00010000) | Dieses Flag ist für Miniporttreiber irrelevant. |
SRB_FLAGS_ALLOCATED_FROM_ZONE (0x00020000) | Dieses Flag ist für Miniporttreiber irrelevant und für neue Windows-Klassentreiber veraltet. Für einen Windows-Legacyklassentreiber gibt dies an, ob der SRB aus einem Zonenpuffer zugeordnet wurde. Wenn dieses Flag festgelegt ist, muss der Klassentreiber ExInterlockedFreeToZone aufrufen, um den SRB freizugeben. Andernfalls muss ExFreePool aufgerufen werden. Neue Klassentreiber sollten Lookaside-Listen anstelle von Zonenpuffern verwenden. |
SRB_FLAGS_SGLIST_FROM_POOL (0x00040000) | Dieses Flag ist für Miniporttreiber irrelevant. Für den Klassentreiber gibt dies an, dass Arbeitsspeicher für eine Scatter/Gather-Liste aus einem nicht auslagerten Pool zugewiesen wurde. Wenn dieses Flag festgelegt ist, muss der Klassentreiber ExFreePool aufrufen, um den Arbeitsspeicher nach Abschluss des SRB freizugeben. |
SRB_FLAGS_BYPASS_LOCKED_QUEUE (0x00080000) | Dieses Flag ist für Miniporttreiber irrelevant. Für den Porttreiber gibt dieses Flag an, dass die Anforderung verarbeitet werden soll, unabhängig davon, ob die Warteschlange für logische Einheiten gesperrt ist oder nicht. Ein Treiber auf höherer Ebene muss dieses Flag festlegen, um eine SRB_FUNCTION_UNLOCK_QUEUE Anforderung zu senden. |
SRB_FLAGS_NO_KEEP_AWAKE (0x00100000) | Dieses Flag ist für Miniporttreiber irrelevant. Ein Windows-Klassentreiber verwendet dieses Flag, um dem Porttreiber anzugeben, dass die Anforderung fehlschlägt, anstatt das Gerät hochzuschalten, um diese Anforderung zu verarbeiten. |
SRB_FLAGS_PORT_DRIVER_ALLOCSENSE (0x00200000) | Der Porttreiber muss den Sense-Puffer für den SRB zuordnen. |
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT (0x00400000) | Veraltet, nicht verwenden. |
SRB_FLAGS_DONT_START_NEXT_PACKET (0x00800000) | Veraltet, nicht verwenden. |
SRB_FLAGS_PORT_DRIVER_RESERVED (0x0F000000) | Ist für das System reserviert. |
SRB_FLAGS_CLASS_DRIVER_RESERVED (0xF0000000) | Ist für das System reserviert. |
ReservedUlong2
Reserviert. Auf 0 festlegen.
RequestTag
Enthält den Warteschlangentagwert, der vom betriebssystemspezifischen Porttreiber zugewiesen wird. Wenn dieser Member für getaggte Warteschlangen verwendet wird, unterstützt der HBA interne Warteschlangen von Anforderungen an logische Einheiten (LUs), und der Miniporttreiber legt TaggedQueueing im PORT_CONFIGURATION_INFORMATION für diesen HBA auf TRUE fest.
RequestPriority
Die Prioritätszuweisung für den SRB. Dies ist einer der folgenden _STOR_IO_PRIORITY_HINT Werte:
Wert | Bedeutung |
---|---|
StorIoPriorityVeryLow (0) | Sehr niedrige Priorität. |
StorIoPriorityLow (1) | Niedrige Priorität. |
StorIoPriorityNormal (2) | Normale Priorität. |
StorIoPriorityHigh (3) | Hohe Priorität. |
StorIoPriorityCritical (4) | Kritische Priorität. |
RequestAttribute
Gibt die Getaggt-Warteschlangennachricht an, die beim Festlegen des SRB_FLAGS_QUEUE_ACTION_ENABLE-Flags verwendet werden soll. Der Wert kann einer der folgenden Sein: SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST oder SRB_ORDERED_QUEUE_TAG_REQUEST.
TimeOutValue
Gibt das Intervall in Sekunden an, das die Anforderung ausführen kann, bevor der betriebssystemspezifische Porttreiber ein Timeout für möglich hält. Miniporttreiber sind nicht erforderlich, um Anforderungen zu zeitieren, da der Porttreiber dies bereits tut.
DUMMYUNIONNAME
Eingebettete Union.
DUMMYUNIONNAME.SystemStatus
Dient zum Speichern von Systemfehlerinformationen status in SrbStatus-Fehlerbedingungen (z. B. SRB_STATUS_INTERNAL_ERROR).
DUMMYUNIONNAME.RequestTagHigh4Bytes
Wird verwendet, um hohe vier Bytes des eindeutigen Tags zu speichern, wenn die Funktion für eindeutige Tags aktiviert ist.
SystemStatus
Wird vom Storport-Treiber anstelle von SrbStatus verwendet, um die status der abgeschlossenen Anforderung zu melden, wenn die Anforderung nicht an den Miniporttreiber übermittelt werden kann. In solchen Fällen ist SrbStatus auf SRB_STATUS_INTERNAL_ERROR festgelegt. Dieses Element wird ausschließlich für die Kommunikation zwischen storport und dem Klassentreiber verwendet und sollte nicht von Miniporttreibern verwendet werden.
ZeroGuard1
Ein Schutzbereich zum Schutz vor Treibern, die diese Struktur als SCSI_REQUEST_BLOCK interpretieren. Auf 0 festlegen.
AddressOffset
Der Offset der Speicheranforderungsadresse vom Anfang dieser Struktur. Dieser Offset sucht eine STOR_ADDRESS-Struktur , die die Adresse für die Anforderung enthält.
NumSrbExData
Die Anzahl der erweiterten SRB-Datenblöcke für diese Anforderung.
DataTransferLength
Gibt die Größe des Datenpuffers in Bytes an. Wenn eine Unterausführung auftritt, muss der Miniporttreiber diesen Member auf die Anzahl der tatsächlich übertragenen Bytes aktualisieren.
DataBuffer
Zeigt auf den Datenpuffer. Miniporttreiber sollten diesen Wert nicht als Datenzeiger verwenden, es sei denn, der Miniporttreiber legt MapBuffers im PORT_CONFIGURATION_INFORMATION für den HBA auf TRUE fest. Bei SRB_FUNCTION_IO_CONTROL Anforderungen können Miniporttreiber diesen Wert jedoch unabhängig vom Wert von MapBuffers als Datenzeiger verwenden.
ZeroGuard2
Ein Schutzbereich zum Schutz vor Treibern, die diese Struktur als SCSI_REQUEST_BLOCK interpretieren. Auf 0 festlegen.
OriginalRequest
Verweist auf die IRP für diese Anforderung. Dieses Element ist für Miniporttreiber irrelevant.
ClassContext
Verweist auf einen Klassentreiberkontext für diese Anforderung. Dieses Element ist für Miniporttreiber irrelevant.
PortContext
Verweist auf einen Porttreiberkontext für diese Anforderung. Dieses Element ist für Miniporttreiber irrelevant.
MiniportContext
Zeigt auf die Srb-Erweiterung. Ein Miniporttreiber darf diesen Member nicht verwenden, wenn er SrbExtensionSize in HW_INITIALIZATION_DATA auf 0 festgelegt hat. Der Arbeitsspeicher bei MiniportContext wird nicht vom betriebssystemspezifischen Porttreiber initialisiert, und der HBA kann direkt auf die vom Miniporttreiber ermittelten Daten zugreifen. Die entsprechende physische Adresse kann abgerufen werden, indem Sie ScsiPortGetPhysicalAddress mit dem MiniportContext-Zeiger aufrufen.
NextSrb
Gibt den STORAGE_REQUEST_BLOCK an, für den diese Anforderung gilt. Nur eine kleine Teilmenge von Anforderungen verwendet einen zweiten SRB, z. B. SRB_FUNCTION_ABORT_COMMAND.
_STORAGE_REQUEST_BLOCK
SrbExDataOffset[ANYSIZE_ARRAY]
Ein Array von Offsets, das den Speicherort erweiterter Datenblöcke für den SRB angibt. Dieses Array ist leer, wenn NumSrbExData = 0.
Hinweise
Ab Windows 8 wird ein erweiterter SRB-Typ mit der Verwendung der STORAGE_REQUEST_BLOCK-Struktur unterstützt. STORAGE_REQUEST_BLOCK erweitert SRB-Funktionen, sodass der Anforderung erweiterte Datenblöcke für die SRB-Funktion hinzugefügt werden können. Die Unterstützung für SRB-Anforderungen, die die SCSI_REQUEST_BLOCK-Struktur verwenden, wird fortgesetzt.
Wenn NumSrbExData> 0 ist, befinden sich die Offsets für die erweiterten SRB-Datenblöcke im SrbExDataOffset-Array . Jeder Offset ist relativ zum Anfang dieser Struktur und verweist auf eine SRBEX_DATA Struktur, die den erweiterten Datenblock enthält.
Die Zielgeräteadresse für den SRB befindet sich in einer STOR_ADDRESS Struktur, die von AddressOffset angegeben wird.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8 |
Kopfzeile | srb.h (einschließlich Storport.h, Srb.h, Minitape.h) |