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)

Lihat juga

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT