ATA_PASS_THROUGH_EX-Struktur (ntddscsi.h)
Die ATA_PASS_THROUGH_EX-Struktur wird in Verbindung mit einer IOCTL_ATA_PASS_THROUGH-Anforderung verwendet, um 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;
Member
Length
Gibt die Länge der ATA_PASS_THROUGH_EX-Struktur in Byte an.
AtaFlags
Gibt die Richtung der Datenübertragung an und gibt die Art des auszuführenden Vorgangs an. Der Wert dieses Members muss eine Kombination der folgenden Flags 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_EX-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 Bytes aktualisieren, die tatsächlich übertragen wurden.
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.
DataBufferOffset
Gibt den Offset in Bytes vom Anfang dieser Struktur bis zum Datenpuffer an.
PreviousTaskFile[8]
Gibt den Inhalt der Eingaberegister der Taskdatei 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 der Taskdatei wie folgt zugeordnet.
Byte | Eingaberegister |
---|---|
0 | Features registrieren |
1 | Sektorzählungsregister |
2 | Branchennummernregister |
3 | Zylinder unteres Register |
4 | Zylinderhochregister |
5 | Geräte-/Kopfregister |
6 | Befehlsregister |
7 | Reserviert |
Wenn IOCTL_ATA_PASS_THROUGH 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 unteres Register |
4 | Zylinderhochregister |
5 | Geräte-/Kopfregister |
6 | Statusregister |
7 | Reserviert |
Hinweise
IOCTL_ATA_PASS_THROUGH ist eine gepufferte Gerätesteuerungsanforderung. Um die Pufferung im Systemspeicher zu umgehen, sollten Aufrufer IOCTL_ATA_PASS_THROUGH_DIRECT und ATA_PASS_THROUGH_DIRECT verwenden. Bei der Verarbeitung 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 (einschließen von Ntddscsi.h) |