struktur ATA_PASS_THROUGH_DIRECT (ntddscsi.h)
Struktur ATA_PASS_THROUGH_DIRECT digunakan bersama dengan permintaan IOCTL_ATA_PASS_THROUGH_DIRECT untuk menginstruksikan driver port untuk mengirim perintah ATA yang disematkan ke perangkat target.
Sintaks
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;
Anggota
Length
Menentukan panjang dalam byte struktur ATA_PASS_THROUGH_DIRECT.
AtaFlags
Menunjukkan arah transfer data dan menentukan jenis operasi yang akan dilakukan. Nilai anggota ini harus berupa beberapa kombinasi bendera dalam tabel 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_DIRECT 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.
DataBuffer
Arahkan ke buffer data.
PreviousTaskFile[8]
Menentukan isi daftar file tugas input 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 register input dengan cara berikut.
Byte | Daftar Input |
---|---|
0 | Daftar Fitur |
1 | Register Jumlah Sektor |
2 | Register Nomor Sektor |
3 | Daftar Rendah Silinder |
4 | Daftar Tinggi Silinder |
5 | Daftar Perangkat/Kepala |
6 | Daftar Perintah |
7 | Dicadangkan |
Ketika IOCTL_ATA_PASS_THROUGH_DIRECT 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 | Daftar Kesalahan |
1 | Register Jumlah Sektor |
2 | Register Nomor Sektor |
3 | Daftar Rendah Silinder |
4 | Daftar Tinggi Silinder |
5 | Daftar Perangkat/Kepala |
6 | Daftar Status |
7 | Dicadangkan |
Keterangan
Struktur ATA_PASS_THROUGH_DIRECT digunakan dengan IOCTL_ATA_PASS_THROUGH_DIRECT. Dengan permintaan ini, sistem mengunci buffer dalam memori pengguna dan perangkat mengakses memori ini secara langsung. Untuk permintaan kontrol perangkat ini yang di-buffer ganda, lihat IOCTL_ATA_PASS_THROUGH dan ATA_PASS_THROUGH_EX.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | ntddscsi.h (termasuk Ntddscsi.h) |