struktur ATA_PASS_THROUGH_EX (ntddscsi.h)
Struktur ATA_PASS_THROUGH_EX digunakan bersama dengan permintaan IOCTL_ATA_PASS_THROUGH untuk menginstruksikan driver port untuk mengirim perintah ATA yang disematkan ke perangkat target.
Sintaks
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;
Anggota
Length
Menentukan panjang dalam byte struktur ATA_PASS_THROUGH_EX.
AtaFlags
Menunjukkan arah transfer data dan menentukan jenis operasi yang akan dilakukan. Nilai anggota ini harus berupa beberapa kombinasi dari bendera berikut:
Bendera ATA | Makna |
---|---|
ATA_FLAGS_DRDY_REQUIRED | Tunggu status DRDY dari perangkat sebelum mengirim perintah ke perangkat. |
ATA_FLAGS_DATA_IN | Membaca data dari perangkat. |
ATA_FLAGS_DATA_OUT | Tulis data ke perangkat. |
ATA_FLAGS_48BIT_COMMAND | Perintah ATA yang akan dikirim menggunakan set fitur alamat blok logis (LBA) 48-bit. Ketika bendera ini diatur, konten anggota PreviousTaskFile dalam struktur ATA_PASS_THROUGH_EX harus valid. |
ATA_FLAGS_USE_DMA | Atur mode transfer ke DMA. |
ATA_FLAGS_NO_MULTIPLE | Baca sektor tunggal saja. |
PathId
Berisi bilangan bulat yang menunjukkan port IDE atau bus untuk permintaan tersebut. Nilai ini ditetapkan oleh driver port.
TargetId
Berisi bilangan bulat yang menunjukkan perangkat target pada bus. Nilai ini ditetapkan oleh driver port.
Lun
Menunjukkan nomor unit logis perangkat. Nilai ini ditetapkan oleh driver port.
ReservedAsUchar
Disiapkan untuk penggunaan masa mendatang.
DataTransferLength
Menunjukkan ukuran, dalam byte, dari buffer data. Jika underrun terjadi, driver miniport harus memperbarui anggota ini ke jumlah byte yang benar-benar ditransfer.
TimeOutValue
Menunjukkan jumlah detik yang diizinkan untuk permintaan dijalankan sebelum driver port khusus OS menentukan bahwa permintaan telah kehabisan waktu.
ReservedAsUlong
Disiapkan untuk penggunaan masa mendatang.
DataBufferOffset
Menentukan offset, dalam byte, dari awal struktur ini hingga buffer data.
PreviousTaskFile[8]
Menentukan isi daftar input file tugas sebelum perintah pass-through saat ini. Anggota ini tidak digunakan ketika bendera ATA_FLAGS_48BIT_COMMAND tidak diatur.
CurrentTaskFile[8]
Menentukan konten daftar file tugas pada input dan output. Pada input, nilai array di peta CurrentTaskFile ke input file tugas mendaftar dengan cara berikut.
Byte | Daftar Input |
---|---|
0 | Daftar fitur |
1 | Register jumlah sektor |
2 | Register nomor sektor |
3 | Register rendah silinder |
4 | Register tinggi silinder |
5 | Register perangkat/kepala |
6 | Daftar perintah |
7 | Dicadangkan |
Ketika IOCTL_ATA_PASS_THROUGH selesai, driver port memperbarui CurrentTaskFile dengan nilai yang ada dalam output perangkat mendaftar pada penyelesaian perintah yang disematkan. Nilai array di CurrentTaskFile sesuai dengan daftar output file tugas berikut.
Byte | Daftar Keluaran |
---|---|
0 | Kesalahan mendaftar |
1 | Register jumlah sektor |
2 | Register nomor sektor |
3 | Register rendah silinder |
4 | Register tinggi silinder |
5 | Register perangkat/kepala |
6 | Daftar status |
7 | Dicadangkan |
Keterangan
IOCTL_ATA_PASS_THROUGH adalah permintaan kontrol perangkat yang di-buffer. Untuk melewati buffering dalam memori sistem, pemanggil harus menggunakan IOCTL_ATA_PASS_THROUGH_DIRECT dan ATA_PASS_THROUGH_DIRECT. Saat menangani permintaan IOCTL_ATA_PASS_THROUGH_DIRECT, sistem mengunci buffer dalam memori pengguna dan perangkat mengakses memori ini secara langsung.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | ntddscsi.h (termasuk Ntddscsi.h) |