Bagikan melalui


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)

Lihat juga

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT