IDE_REQUEST_BLOCK-Struktur (irb.h)

Die IDE_REQUEST_BLOCK-Struktur definiert einen IDE-Anforderungsblock.

Hinweis Die Modelle ATA-Porttreiber und ATA-Miniporttreiber sind möglicherweise geändert oder in Zukunft nicht mehr verfügbar. Stattdessen wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

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;

Member

Function

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

Function 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 der 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 ein CDB enthält, das 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 angemessen zu interpretieren.

IrbStatus

Der Miniport muss diesen Member so festlegen, dass die status des angegebenen Vorgangs angegeben wird. 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 mit diesem Wert. Ein Miniporttreiber sollte den IrbStatus-Member niemals auf diesen Wert festlegen.
IRB_STATUS_SUCCESS Gibt an, dass die Anforderung erfolgreich abgeschlossen wurde.
IRB_STATUS_DATALENGTH_MISMATCH Gibt an, dass ein Datenunter- oder Überlauffehler aufgetreten ist. Der Miniport muss das Feld DataTransferLength im IRB aktualisieren, um die tatsächliche Datenmenge anzugeben, die im Falle einer Unterausführung übertragen wurde.
IRB_STATUS_DEVICE_ERROR Gibt an, dass das Gerät einen Fehler zurückgegeben hat. Der Miniporttreiber muss die Felder AtaStatus und AtaError im Irb auf den Inhalt der ATA-status des Geräts aktualisieren und beim Abschluss des Befehls fehlerregistrieren.
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 Busrücksetzung erfolgt 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 wiederholt jede Anforderung, die mit diesem status abgeschlossen wurde. Eine Anforderung, die mit ausgelasteten status abgeschlossen wurde, wird nur einmal wiederholt. Es liegt in der Verantwortung des Miniporttreibers, die Anforderungswarteschlange mithilfe von 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-Element des IRB angibt.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID ist eine Bitmaske, die eine gültige Rückgabetaskdatei im SenseInfoBuffer-Element des IRB angibt.

AtaStatus

Gibt die status an, die vom Gerät im status-Register zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERROR abgeschlossen wird.

AtaError

Gibt den Fehlerwert an, der vom Gerät im Fehlerregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERROR abgeschlossen wird.

Channel

Gibt die Kanalnummer an.

TargetId

Gibt die Ziel-ID des Geräts an.

Lun

Gibt die Nummer der logischen Einheit des Geräts an.

CdbLength

Gibt die Länge des Puffers in Bytes an, auf den cdb verweist.

SenseInfoBufferLength

Gibt die Länge des Puffers in Bytes an, auf den SenseInfoBuffer verweist.

SenseInfoBufferType

Gibt den Typ der in SenseInfoBuffer zurückgegebenen Datenstruktur an. Da ATA-Befehle den Befehl request sense nicht benötigen, verwenden ATA_PASS_THROUGH Befehle SenseInfoBuffer , um Informationen zur Taskdatei 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 gemeldet werden.

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

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

ReservedAsUlong

Für die zukünftige Verwendung reserviert.

IrbFlags

Qualifiziert die Anforderung mit bestimmten Aktionen, die ausgeführt werden müssen. In der folgenden Tabelle werden sie ausführlich beschrieben.

Flag Beschreibung
IRB_FLAGS_DRDY_REQUIRED Gibt an, dass der Miniporttreiber warten muss, bis das Gerät das DRDY-Bit im ATA-status-Register festgelegt hat, bevor dieser Befehl ausgegeben wird.
IRB_FLAGS_USE_DMA Gibt an, dass die Anforderung über eine zugeordnete Scatter/Gather-Liste verfügt und der Miniporttreiber DMA verwenden kann, um Daten für diese Anforderung zu übertragen.
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 auffordern, den Datenpuffer zuzuordnen, indem er dieses Flag im IRB in seiner IdeHwBuildIo-Routine festlegt.
IRB_FLAGS_48BIT Gibt an, dass der ATA-Befehl im IRB zum 48-Bit-LBA-Featuresatz gehört. Das Feld Zurück in der _IDE_TASK_FILE-Struktur ist gültig, wenn dieses Flag 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ückgabetaskdatei in SenseInfoBuffer kopiert werden soll.
IRB_FLAGS_DATA_IN Gibt an, dass die Daten vom Gerät an das Hostsystem übertragen werden sollen (ein Lesevorgang).
IRB_FLAGS_DATA_OUT Gibt an, dass die Daten vom Hostsystem auf das Gerät übertragen werden sollen (schreibvorgang).
IRB_FLAGS_DISCARDABLE Gibt an, dass der Befehl in bestmöglicher Weise ausgeführt werden soll. (Hinweis: Dies wird derzeit nicht von ATAport verwendet).
IRB_FLAGS_HIGH_PRIORITY Gibt an, dass dieser IRB so schnell wie möglich vor IRBs ohne hohe Priorität verarbeitet werden soll, die sich derzeit im ATA-Miniport befinden.

TimeOutValue

Gibt die Zeit in Sekunden an, nach der ein Timeout für die Anforderung erfolgt.

DataTransferLength

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

IrbExtension

Zeiger auf die vom Porttreiber zugewiesene Erweiterung pro Anforderung.

DataBuffer

Zeiger auf den Puffer, in dem sich die Daten befinden.

SenseInfoBuffer

Zeiger auf den Puffer, der die Sinndaten 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

Für die zukünftige Verwendung reserviert.

IdeTaskFile

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

Cdb[16]

Enthält einen Befehlsdeskriptorblock (CDB). Dieser Member wird immer dann definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Funktionsmember und IRB_FUNCTION_ATAPI_COMMAND nichtzero ist.

PowerChange

Gibt einen Enumerationswert vom Typ POWER_CHANGE_INFO an, der einen Energiezustandsübergang definiert. Dieser Member wird immer dann definiert, wenn Die Funktion gleich IRB_FUNCTION_POWER_CHANGE ist.

AsUChar[16]

Ermöglicht den Zugriff auf die Member IdeTaskFile, PowerChange und Cdb als Zeichendaten ohne Vorzeichen.

Hinweise

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

Anforderungen

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

Weitere Informationen

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK