Freigeben über


IDE_REQUEST_BLOCK Struktur (irb.h)

Die IDE_REQUEST_BLOCK Struktur definiert einen IDE-Anforderungsblock.

Hinweis Der ATA-Porttreiber und die ATA Miniport-Treibermodelle können in Zukunft geändert oder nicht verfügbar sein. Stattdessen empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Syntax

typedef struct _IDE_REQUEST_BLOCK {
  USHORT Function;
  UCHAR  IrbStatus;
  UCHAR  AtaStatus;
  UCHAR  AtaError;
  UCHAR  Channel;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  CdbLength;
  UCHAR  SenseInfoBufferLength;
  UCHAR  SenseInfoBufferType;
  UCHAR  QueueTag;
  ULONG  ReservedAsUlong;
  ULONG  IrbFlags;
  ULONG  TimeOutValue;
  ULONG  DataTransferLength;
  PVOID  IrbExtension;
  PVOID  DataBuffer;
  PVOID  SenseInfoBuffer;
  PVOID  NextIrb;
  PVOID  Reserved;
  union {
    IDE_TASK_FILE  IdeTaskFile;
    UCHAR          Cdb[16];
    IDE_POWER_INFO PowerChange;
    UCHAR          AsUChar[16];
  };
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;

Angehörige

Function

Gibt die Kategorie an, zu der die Anforderung gehört. In der folgenden Tabelle wird die Klassifizierung der E/A-Anforderungen beschrieben.

Funktion Unterbefehle Beschreibung
IRB_FUNCTION_ATA_COMMAND IRB_FUNCTION_ATA_IDENTIFY

IRB_FUNCTION_ATA_READ

IRB_FUNCTION_ATA_WRITE

IRB_FUNCTION_ATA_FLUSH

IRB_FUNCTION_ATA_SMART

Gibt an, dass das IRB eine IdeTaskFile enthält, die den ATA-Befehl beschreibt. Die Unterbefehle geben eine feinere Gruppierung der Anforderung für eine schnellere Suche an.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE Gibt an, dass der IRB einen CDB enthält, der den ATAPI-Befehl beschreibt.
IRB_FUNCTION_MINIPORT_COMMAND IRB_FUNCTION_ADAPTER_FLUSH

IRB_FUNCTION_SHUTDOWN

IRB_FUNCTION_POWER_CHANGE

IRB_FUNCTION_POWER_REBOOT

IRB_FUNCTION_LUN_RESET

IRB_FUNCTION_MINIPORT_IOCTL

Gibt an, dass der IRB für den Miniport gilt. Es liegt in der Verantwortung des Miniports, den Befehl entsprechend zu interpretieren.

IrbStatus

Der Miniport muss dieses Element so festlegen, dass er den Status des angegebenen Vorgangs angibt. In der folgenden Tabelle werden die verschiedenen IrbStatus- Werte und deren Bedeutung beschrieben.

Wert Bedeutung
IRB_STATUS_PENDING Gibt an, dass die Anforderung ausgeführt wird. Der Porttreiber initialisiert IrbStatus- zu diesem Wert. Ein Miniporttreiber sollte nie den IrbStatus- Member auf diesen Wert festlegen.
IRB_STATUS_SUCCESS Gibt an, dass die Anforderung erfolgreich abgeschlossen wurde.
IRB_STATUS_DATALENGTH_MISMATCH Gibt an, dass ein Fehler beim Ausführen oder Überlauf von Daten aufgetreten ist. Der Miniport muss das Feld "DataTransferLength" im IRB aktualisieren, um die tatsächliche Datenmenge anzugeben, die im Falle einer Unterläufe übertragen wurde.
IRB_STATUS_DEVICE_ERROR Gibt an, dass das Gerät einen Fehler zurückgegeben hat. Der Miniporttreiber muss die AtaStatus- und AtaError- Felder im Irb auf den Inhalt des AtA-Status des Geräts aktualisieren und beim Abschluss des Befehls fehlerregistern.
IRB_STATUS_INVALID_REQUEST Gibt an, dass der Miniport die angegebene Anforderung nicht unterstützt.
IRB_STATUS_BUS_RESET Gibt an, dass beim Verarbeiten der angegebenen Anforderung eine Buszurücksetzung aufgetreten ist.
IRB_STATUS_SELECTION_TIMEOUT Gibt an, dass das Zielgerät nicht ausgewählt werden konnte.
IRB_STATUS_BUSY Gibt an, dass das Gerät ausgelastet ist. Der Porttreiber ruft alle mit diesem Status abgeschlossenen Anforderungen erneut auf. Eine Anforderung, die mit dem Beschäftigt-Status abgeschlossen wurde, wird nur einmal wiederholt. Es liegt in der Verantwortung des Miniporttreibers, die Anforderungswarteschlange mit AtaPortDeviceBusy anzuhalten, wenn das Gerät die Anforderung für einen bestimmten Zeitraum nicht verarbeiten kann.
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID ist eine Bitmaske, die gültige Sinndaten im SenseInfoBuffer Mitglied des IRB angibt.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID ist eine Bitmaske, die eine gültige Rückgabeaufgabendatei im SenseInfoBuffer Mitglied des IRB angibt.

AtaStatus

Gibt den Status an, der vom Gerät im Statusregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERRORabgeschlossen wird.

AtaError

Gibt den fehlerwert an, der vom Gerät in seinem Fehlerregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERRORabgeschlossen wird.

Channel

Gibt die Kanalnummer an.

TargetId

Gibt die Ziel-ID des Geräts an.

Lun

Gibt die logische Einheitennummer des Geräts an.

CdbLength

Gibt die Länge in Byte des Puffers an, auf den Cdb-verweist.

SenseInfoBufferLength

Gibt die Länge in Byte des Puffers an, auf den SenseInfoBufferverweist.

SenseInfoBufferType

Gibt den Typ der Datenstruktur an, die in SenseInfoBuffer-zurückgegeben wird. Da ATA-Befehle keinen Anforderungssinn-Befehl benötigen, verwenden ATA_PASS_THROUGH Befehle SenseInfoBuffer-, um Aufgabendateiinformationen zurückzugeben. Für ATA_PASS_THROUGH Befehle, wie im IrbFlags Member angegeben, sollte die entsprechende Rückgabe TaskFile- Größe entweder als SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE oder

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

Das Warteschlangentag für dieses IRB. Der Porttreiber legt dieses Feld auf 0 fest.

ReservedAsUlong

Reserviert für die zukünftige Verwendung.

IrbFlags

Qualifiziert die Anforderung mit bestimmten Aktionen, die ausgeführt werden müssen. Die folgende Tabelle beschreibt sie ausführlich.

Kennzeichnung Beschreibung
IRB_FLAGS_DRDY_REQUIRED Gibt an, dass der Miniporttreiber warten muss, bis das Gerät das DRDY-Bit im ATA-Statusregister festgelegt hat, bevor er diesen Befehl ausgibt.
IRB_FLAGS_USE_DMA Gibt an, dass die Anforderung über eine zugeordnete Punkt/Gather-Liste verfügt und der Miniporttreiber DMA zum Übertragen von Daten für diese Anforderung verwenden kann.
IRB_FLAGS_MAP_BUFFERS Gibt an, dass das DataBuffer Feld im IRB zugeordnet ist. Der Miniport kann sicher auf DataBuffer- zugreifen, wenn dieses Flag festgelegt ist. Der Miniporttreiber darf nicht auf DataBuffer- zugreifen, wenn das Flag nicht festgelegt ist. Der Miniporttreiber kann den Porttreiber anfordern, um den Datenpuffer zuzuordnen, indem dieses Flag im IRB in seiner IdeHwBuildIo Routine festgelegt wird.
IRB_FLAGS_48BIT Gibt an, dass der ATA-Befehl im IRB zum 48-Bit-LBA-Featuresatz gehört. Das Feld Vorherigen in der _IDE_TASK_FILE-Struktur ist gültig, wenn dieses Kennzeichen festgelegt ist.
IRB_FLAGS_PIO_MULTIPLE Gibt an, dass der ATA-Befehl mit der ATA PIO Multiple-Methode übertragen werden soll.
IRB_FLAGS_RETURN_RESULTS Gibt an, dass die ATA-Rückgabeaufgabendatei in SenseInfoBufferkopiert werden soll.
IRB_FLAGS_DATA_IN Gibt an, dass die Daten vom Gerät an das Hostsystem (lesevorgang) übertragen werden sollen.
IRB_FLAGS_DATA_OUT Gibt an, dass die Daten vom Hostsystem an das Gerät übertragen werden sollen ( ein Schreibvorgang).
IRB_FLAGS_DISCARDABLE Gibt an, dass der Befehl auf optimale Weise durchgeführt werden soll. (Hinweis: Dies ist derzeit nicht von ATAport beschäftigt).
IRB_FLAGS_HIGH_PRIORITY Gibt an, dass dieser IRB so schnell wie möglich verarbeitet werden soll, bevor sich irBs mit nicht hoher Priorität derzeit im ATA-Miniport befinden.

TimeOutValue

Gibt die Zeit in Sekunden an, nach der die Anforderung timeout wird.

DataTransferLength

Enthält die Länge in Byte des Datenpuffers, der zu übertragende Daten enthält.

IrbExtension

Zeiger auf die vom Porttreiber zugewiesene Erweiterung pro Anforderung.

DataBuffer

Zeigen Sie auf den Puffer, in dem sich die Daten befinden.

SenseInfoBuffer

Zeigen Sie auf den Puffer, der die Sinnesdaten enthält.

NextIrb

Zeiger auf den nächsten zu verarbeitenden IRB. Der Porttreiber legt dies auf NULL-fest. Der Miniporttreiber kann dieses Feld verwenden, um IRBs miteinander zu verknüpfen.

Reserved

Reserviert für die zukünftige Verwendung.

IdeTaskFile

Enthält eine Struktur vom Typ IDE_TASK_FILE, die die IDE-Aufgabendatei für den angegebenen Controller enthält. Dieses Element wird immer dann definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Function Member und IRB_FUNCTION_ATA_COMMAND ungleich Null ist.

Cdb[16]

Enthält einen Befehlsdeskriptorblock (CDB). Dieses Element wird immer definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Function--Element und IRB_FUNCTION_ATAPI_COMMAND ungleich Null ist.

PowerChange

Gibt einen Enumerationswert vom Typ POWER_CHANGE_INFO an, der einen Energiezustandsübergang definiert. Dieses Element wird immer dann definiert, wenn Function gleich IRB_FUNCTION_POWER_CHANGE ist.

AsUChar[16]

Stellt eine Möglichkeit für den Zugriff auf Member IdeTaskFile-, PowerChange-und cdb- als nicht signierte Zeichendaten bereit.

Bemerkungen

Die IDE_REQUEST_BLOCK-Struktur bietet eine Funktionalität, die dem SCSI_REQUEST_BLOCK ähnelt, aber mit Merkmalen, die für die Verwaltung von Geräten auf einem IDE-Bus besser geeignet sind.

Anforderungen

Anforderung Wert
Header- irb.h (include Irb.h)

Siehe auch

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK