Freigeben über


SCSI_PASS_THROUGH_EX-Struktur (ntddscsi.h)

Die SCSI_PASS_THROUGH_EX-Struktur wird in Verbindung mit einer IOCTL_SCSI_PASS_THROUGH_EX-Anforderung verwendet, um den Porttreiber anzuweisen, einen eingebetteten SCSI-Befehl an das Zielgerät zu senden. SCSI_PASS_THROUGH_EX können bidirektionale Datenübertragungen und einen Befehlsdatenblock mit variabler Länge enthalten.

Hinweis

Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Verwenden Sie stattdessen die Modelle Storport-Treiber und Storport-Miniporttreiber .

Syntax

typedef struct _SCSI_PASS_THROUGH_EX {
  ULONG     Version;
  ULONG     Length;
  ULONG     CdbLength;
  ULONG     StorAddressLength;
  UCHAR     ScsiStatus;
  UCHAR     SenseInfoLength;
  UCHAR     DataDirection;
  UCHAR     Reserved;
  ULONG     TimeOutValue;
  ULONG     StorAddressOffset;
  ULONG     SenseInfoOffset;
  ULONG     DataOutTransferLength;
  ULONG     DataInTransferLength;
  ULONG_PTR DataOutBufferOffset;
  ULONG_PTR DataInBufferOffset;
  UCHAR     Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;

Member

Version

Die Version dieser Struktur. Auf 0 festlegen.

Length

Die Größe dieser Struktur in Bytes. Legen Sie diese Option auf sizeof(SCSI_PASS_THROUGH_EX) fest.

CdbLength

Die Größe des SCSI-Befehlsdeskriptorblocks in Cdb in Bytes.

StorAddressLength

Die Länge (in Bytes) der Adressstruktur des Speichergeräts am Offset von StorAddressOffset nach dieser Struktur.

ScsiStatus

Meldet die SCSI-status, die vom HBA oder dem Zielgerät zurückgegeben wurde.

SenseInfoLength

Die Größe des Anforderungs-Sense-Puffers in Bytes. Dieser Member ist optional und kann auf 0 festgelegt werden.

DataDirection

Gibt an, ob der SCSI-Befehl Daten liest oder schreibt. Dieses Feld muss einer der folgenden Werte sein:

Wert Bedeutung
SCSI_IOCTL_DATA_OUT Schreiben Sie Daten auf das Gerät.
SCSI_IOCTL_DATA_IN Lesen Sie Daten vom Gerät.
SCSI_IOCTL_DATA_UNSPECIFIED Es werden keine Daten übertragen.
SCSI_IOCTL_DATA_BIDIRECTIONAL Daten sind sowohl für die Eingabe als auch für die Ausgabe gültig.

Reserved

Reserviert. Auf 0 festlegen.

TimeOutValue

Gibt das Intervall in Sekunden an, das die Anforderung ausführen kann, bevor der Porttreiber ein Timeout für möglich hält.

StorAddressOffset

Der Speicherort der Adressstruktur des Zielspeichergeräts (in Bytes) vom Anfang dieser Struktur.

SenseInfoOffset

Offset vom Anfang dieser Struktur zum Anforderungs-Sense-Puffer. Legen Sie auf 0 fest, wenn kein Anforderungssinnspuffer vorhanden ist.

DataOutTransferLength

Gibt die Größe des Ausgabedatenpuffers in Bytes an. Viele Geräte übertragen Datenblöcke vordefinierter Länge. Der Wert in DataOutTransferLength muss ein integrales Vielfaches dieser vordefinierten Mindestlänge sein, die vom Gerät angegeben wird. Wenn eine Unterausführung auftritt, muss der Miniporttreiber diesen Member auf die Anzahl der tatsächlich übertragenen Bytes aktualisieren. Wenn kein Ausgabedatenpuffer vorhanden ist, wird dieser Member auf 0 festgelegt.

DataInTransferLength

Gibt die Größe des Eingabedatenpuffers in Bytes an. Viele Geräte übertragen Datenblöcke vordefinierter Länge. Der Wert in DataInTransferLength muss ein integrales Vielfaches dieser vordefinierten Mindestlänge sein, die vom Gerät angegeben wird. Wenn eine Unterausführung auftritt, muss der Miniporttreiber diesen Member auf die Anzahl der tatsächlich übertragenen Bytes aktualisieren. Wenn kein Eingabedatenpuffer vorhanden ist, wird dieser Member auf 0 festgelegt.

DataOutBufferOffset

Enthält einen Offset vom Anfang dieser Struktur zum Ausgabedatenpuffer. Der Offset muss die Datenausrichtungsanforderungen des Geräts berücksichtigen.

DataInBufferOffset

Enthält einen Offset vom Anfang dieser Struktur zum Eingabedatenpuffer. Der Offset muss die Datenausrichtungsanforderungen des Geräts berücksichtigen.

Cdb[ANYSIZE_ARRAY]

Gibt den SCSI-Befehlsdeskriptorblock an, der an das Zielgerät gesendet werden soll.

Hinweise

Die SCSI_PASS_THROUGH_EX-Struktur wird mit dem IOCTL_SCSI_PASS_THROUGH_EX-Steuerelementcode verwendet, bei dem es sich um eine gepufferte Gerätesteuerungsanforderung handelt. Um das Puffern im Systemspeicher zu umgehen, sollten Aufrufer IOCTL_SCSI_PASS_THROUGH_DIRECT_EX verwenden. Bei der Behandlung einer IOCTL_SCSI_PASS_THROUGH_DIRECT_EX Anforderung sperrt das System den Puffer im Benutzerspeicher, und das Gerät greift direkt auf diesen Speicher zu.

Hinweis

Treiber, die unter einer 64-Bit-Version von Windows ausgeführt werden, müssen die SCSI_PASS_THROUGH32_EX-Struktur als Anforderungsdatentyp verwenden, wenn sie eine IOCTL_SCSI_PASS_THROUGH_EX Anforderung aus einem 32-Bit-Prozess verarbeiten.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Kopfzeile ntddscsi.h (include Ntddscsi.h)

Weitere Informationen

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_EX

SCSI_PASS_THROUGH