ATA_PASS_THROUGH_EX Struktur (ntddscsi.h)
Die ATA_PASS_THROUGH_EX-Struktur wird zusammen mit einer IOCTL_ATA_PASS_THROUGH Anforderung verwendet, den Porttreiber anzuweisen, einen eingebetteten ATA-Befehl an das Zielgerät zu senden.
Syntax
typedef struct _ATA_PASS_THROUGH_EX {
USHORT Length;
USHORT AtaFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR ReservedAsUchar;
ULONG DataTransferLength;
ULONG TimeOutValue;
ULONG ReservedAsUlong;
ULONG_PTR DataBufferOffset;
UCHAR PreviousTaskFile[8];
UCHAR CurrentTaskFile[8];
} ATA_PASS_THROUGH_EX, *PATA_PASS_THROUGH_EX;
Angehörige
Length
Gibt die Länge in Byte der ATA_PASS_THROUGH_EX-Struktur 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 folgenden Flags sein:
ATA-Flags | Bedeutung |
---|---|
ATA_FLAGS_DRDY_REQUIRED | Warten Sie auf den DRDY-Status des Geräts, bevor Sie den Befehl an das Gerät senden. |
ATA_FLAGS_DATA_IN | Lesen von Daten vom Gerät. |
ATA_FLAGS_DATA_OUT | Schreiben sie 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 Member in der ATA_PASS_THROUGH_EX-Struktur gültig sein. |
ATA_FLAGS_USE_DMA | Legen Sie den Übertragungsmodus auf DMA fest. |
ATA_FLAGS_NO_MULTIPLE | Schreibgeschützt einzelner Sektor. |
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 auf dem Bus angibt. Dieser Wert wird vom Porttreiber festgelegt.
Lun
Gibt die logische Einheitennummer des Geräts an. Dieser Wert wird vom Porttreiber festgelegt.
ReservedAsUchar
Reserviert für die zukünftige Verwendung.
DataTransferLength
Gibt die Größe des Datenpuffers in Bytes an. Wenn ein Unterlauf auftritt, muss der Miniporttreiber dieses Element auf die Anzahl der Bytes aktualisieren, die tatsächlich übertragen wurden.
TimeOutValue
Gibt die Anzahl der Sekunden an, die für die Ausführung der Anforderung zulässig sind, bevor der betriebssystemspezifische Porttreiber bestimmt, dass die Anforderung ein Timeout aufweist.
ReservedAsUlong
Reserviert für die zukünftige Verwendung.
DataBufferOffset
Gibt den Offset in Bytes vom Anfang dieser Struktur bis zum Datenpuffer an.
PreviousTaskFile[8]
Gibt den Inhalt der Aufgabendateieingabe vor dem aktuellen Pass-Through-Befehl an. Dieses Element wird nicht verwendet, wenn das ATA_FLAGS_48BIT_COMMAND Flag nicht festgelegt ist.
CurrentTaskFile[8]
Gibt den Inhalt des Aufgabendateiregisters sowohl für eingabe als auch für die Ausgabe an. Bei eingaben werden die Arraywerte in CurrentTaskFile der Eingabe der Vorgangsdatei auf folgende Weise zugeordnet.
Byte | Eingaberegister |
---|---|
0 | Features registrieren |
1 | Register "Sektoranzahl" |
2 | Branchennummernregister |
3 | Zylinder niedrig register |
4 | Zylinder hoch register |
5 | Geräte-/Kopfregister |
6 | Befehlsregister |
7 | Reserviert |
Nach Abschluss IOCTL_ATA_PASS_THROUGH aktualisiert der Porttreiber CurrentTaskFile mit den Werten, die in der Ausgabe des Geräts vorhanden sind, nach Abschluss des eingebetteten Befehls. Die Arraywerte in CurrentTaskFile entsprechen den folgenden Ausgaberegistern der Vorgangsdatei.
Byte | Ausgaberegister |
---|---|
0 | Fehlerregister |
1 | Register "Sektoranzahl" |
2 | Branchennummernregister |
3 | Zylinder niedrig register |
4 | Zylinder hoch register |
5 | Geräte-/Kopfregister |
6 | Statusregister |
7 | Reserviert |
Bemerkungen
IOCTL_ATA_PASS_THROUGH ist eine gepufferte Gerätesteuerungsanforderung. Um puffern im Systemspeicher zu umgehen, sollten Aufrufer IOCTL_ATA_PASS_THROUGH_DIRECT und ATA_PASS_THROUGH_DIRECTverwenden. Bei der Behandlung einer IOCTL_ATA_PASS_THROUGH_DIRECT Anforderung sperrt das System den Puffer im Benutzerspeicher und das Gerät greift direkt auf diesen Speicher zu.
Anforderungen
Anforderung | Wert |
---|---|
Header- | ntddscsi.h (include Ntddscsi.h) |