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.
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;
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 | Arti |
---|---|
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 | Menulis 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 diatur oleh driver port.
TargetId
Berisi bilangan bulat yang menunjukkan perangkat target di bus. Nilai ini diatur oleh driver port.
Lun
Menunjukkan nomor unit logis perangkat. Nilai ini diatur oleh driver port.
ReservedAsUchar
Dicadangkan untuk digunakan di 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 dijalankan permintaan sebelum driver port khusus OS menentukan bahwa permintaan telah kehabisan waktu.
ReservedAsUlong
Dicadangkan untuk digunakan di masa mendatang.
DataBufferOffset
Menentukan offset, dalam byte, dari awal struktur ini ke 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 CurrentTaskFile peta 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 | Dipesan |
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 dalam CurrentTaskFile sesuai dengan daftar output file tugas berikut.
Byte | Daftar Output |
---|---|
0 | Kesalahan register |
1 | Register jumlah sektor |
2 | Register nomor sektor |
3 | Register rendah silinder |
4 | Register tinggi silinder |
5 | Register perangkat/kepala |
6 | Daftar status |
7 | Dipesan |
IOCTL_ATA_PASS_THROUGH adalah permintaan kontrol perangkat yang di-buffer. Untuk melewati buffering dalam memori sistem, penelepon 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.
Syarat | Nilai |
---|---|
Header | ntddscsi.h (termasuk Ntddscsi.h) |