Freigeben über


ATA_PASS_THROUGH_DIRECT-Struktur (ntddscsi.h)

Die ATA_PASS_THROUGH_DIRECT-Struktur wird in Verbindung mit einer IOCTL_ATA_PASS_THROUGH_DIRECT-Anforderung verwendet, um den Porttreiber anzuweisen, einen eingebetteten ATA-Befehl an das Zielgerät zu senden.

Syntax

typedef struct _ATA_PASS_THROUGH_DIRECT {
  USHORT Length;
  USHORT AtaFlags;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  ReservedAsUchar;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  ULONG  ReservedAsUlong;
  PVOID  DataBuffer;
  UCHAR  PreviousTaskFile[8];
  UCHAR  CurrentTaskFile[8];
} ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;

Member

Length

Gibt die Länge der ATA_PASS_THROUGH_DIRECT-Struktur in Byte an.

AtaFlags

Gibt die Richtung der Datenübertragung an und gibt die Art des auszuführenden Vorgangs an. Der Wert dieses Elements muss eine Kombination der Flags in der folgenden Tabelle sein.

ATA-Flags Bedeutung
ATA_FLAGS_DRDY_REQUIRED Warten Sie auf die DRDY-status vom Gerät, bevor Sie den Befehl an das Gerät senden.
ATA_FLAGS_DATA_IN Liest Daten vom Gerät.
ATA_FLAGS_DATA_OUT Schreiben von Daten auf das Gerät.
ATA_FLAGS_48BIT_COMMAND Der zu sendende ATA-Befehl verwendet den 48-Bit-Featuresatz für logische Blockadressen (LBA). Wenn dieses Flag festgelegt ist, sollte der Inhalt des PreviousTaskFile-Elements in der ATA_PASS_THROUGH_DIRECT-Struktur gültig sein.
ATA_FLAGS_USE_DMA Legen Sie den Übertragungsmodus auf DMA fest.
ATA_FLAGS_NO_MULTIPLE Nur einzelner Sektor lesen.

PathId

Enthält eine ganze Zahl, die den IDE-Port oder Bus für die Anforderung angibt. Dieser Wert wird vom Porttreiber festgelegt.

TargetId

Enthält eine ganze Zahl, die das Zielgerät im Bus angibt. Dieser Wert wird vom Porttreiber festgelegt.

Lun

Gibt die Nummer der logischen Einheit des Geräts an. Dieser Wert wird vom Porttreiber festgelegt.

ReservedAsUchar

Für die zukünftige Verwendung reserviert.

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.

TimeOutValue

Gibt die Anzahl von Sekunden an, die für die Ausführung der Anforderung zulässig sind, bevor der betriebssystemspezifische Porttreiber feststellt, dass für die Anforderung ein Timeout aufgetreten ist.

ReservedAsUlong

Für die zukünftige Verwendung reserviert.

DataBuffer

Zeiger auf den Datenpuffer.

PreviousTaskFile[8]

Gibt den Inhalt des Eingabetaskdateiregisters vor dem aktuellen Passthrough-Befehl an. Dieser Member wird nicht verwendet, wenn das flag ATA_FLAGS_48BIT_COMMAND nicht festgelegt ist.

CurrentTaskFile[8]

Gibt den Inhalt des Aufgabendateiregisters sowohl für die Eingabe als auch für die Ausgabe an. Bei der Eingabe werden die Arraywerte in CurrentTaskFile den Eingaberegistern wie folgt zugeordnet.

Byte Eingaberegister
0 Features registrieren
1 Sektorzählungsregister
2 Branchennummernregister
3 Zylinder niedriges Register
4 Zylinder hohes Register
5 Geräte-/Hauptregister
6 Befehlsregister
7 Reserviert
 

Wenn IOCTL_ATA_PASS_THROUGH_DIRECT abgeschlossen ist, aktualisiert der Porttreiber CurrentTaskFile mit den Werten, die bei Abschluss des eingebetteten Befehls in den Ausgaberegistern des Geräts vorhanden sind. Die Arraywerte in CurrentTaskFile entsprechen den folgenden Ausgaberegistern der Taskdatei.

Byte Ausgaberegister
0 Fehlerregistrierung
1 Sektorzählungsregister
2 Branchennummernregister
3 Zylinder niedriges Register
4 Zylinder hohes Register
5 Geräte-/Hauptregister
6 Statusregister
7 Reserviert

Hinweise

Die ATA_PASS_THROUGH_DIRECT-Struktur wird mit IOCTL_ATA_PASS_THROUGH_DIRECT verwendet. Mit dieser Anforderung sperrt das System den Puffer im Benutzerspeicher, und das Gerät greift direkt auf diesen Speicher zu. Eine doppelt gepufferte Entsprechung dieser Gerätesteuerungsanforderung finden Sie unter IOCTL_ATA_PASS_THROUGH und ATA_PASS_THROUGH_EX.

Anforderungen

Anforderung Wert
Header ntddscsi.h (einschließen von Ntddscsi.h)

Weitere Informationen

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT