Bagikan melalui


IOCTL_SCSI_PASS_THROUGH_EX IOCTL (ntddscsi.h)

Permintaan kode kontrol IOCTL_SCSI_PASS_THROUGH_EX adalah versi yang diperluas dari permintaan IOCTL_SCSI_PASS_THROUGH . Permintaan ini menyediakan dukungan untuk transfer data dua arah dan memungkinkan blok data perintah (CDB) > 16 byte.

Memungkinkan aplikasi untuk mengirim hampir semua perintah SCSI ke perangkat target, dengan batasan berikut:

  • Perintah multitarget, seperti COPY, tidak diizinkan.
  • Jika driver kelas untuk jenis target perangkat ada, permintaan harus dikirim ke driver kelas tersebut. Dengan demikian, aplikasi dapat mengirim permintaan ini langsung ke driver port sistem untuk unit logis target (LU) hanya jika tidak ada driver kelas untuk jenis perangkat yang terhubung ke LU tersebut. Driver port sistem tidak memeriksa untuk menentukan apakah perangkat telah diklaim oleh driver kelas sebelum memproses permintaan pass-through. Oleh karena itu, jika aplikasi melewati driver kelas yang telah mengklaim perangkat dan mengirim permintaan pass-through untuk perangkat tersebut langsung ke driver port, konflik untuk kontrol perangkat dapat terjadi antara driver kelas dan aplikasi. Jika permintaan pass-through dikirim ke objek perangkat adaptor dan jika berasal dari mode pengguna dan menargetkan LU yang diklaim oleh driver kelas, Storport gagal permintaan dengan STATUS_INVALID_DEVICE_REQUEST. Jika permintaan dikirim ke objek perangkat LU, berasal dari mode kernel, atau menargetkan LU yang tidak diklaim, permintaan tersebut diteruskan ke driver miniport.
  • Permintaan ini tidak dapat digunakan jika CDB mungkin memerlukan driver miniport yang mendasar untuk mengakses memori secara langsung. Jika CDB penelepon mungkin memerlukan akses langsung ke memori, gunakan IOCTL_SCSI_PASS_THROUGH_DIRECT_EX sebagai gantinya.
  • Aplikasi tidak boleh mencoba mengirim permintaan pass-through secara asinkron. Semua permintaan pass-through harus sinkron.
  • Aplikasi tidak memerlukan hak administratif untuk mengirim permintaan pass-through ke perangkat, tetapi mereka harus memiliki akses baca/tulis ke perangkat.
Aplikasi panggilan membuat blok deskriptor perintah SCSI, yang dapat menyertakan permintaan untuk data pengertian permintaan jika CHECK CONDITION terjadi.

IOCTL_SCSI_PASS_THROUGH_EX adalah permintaan kontrol perangkat yang di-buffer. Untuk melewati buffering dalam memori sistem, pemanggil harus menggunakan IOCTL_SCSI_PASS_THROUGH_DIRECT_EX. Saat menangani permintaan IOCTL_SCSI_PASS_THROUGH_DIRECT_EX , sistem mengunci buffer dalam memori pengguna dan perangkat mengakses memori ini secara langsung.

Permintaan ini biasanya digunakan untuk mentransfer data dalam jumlah kecil (<16K).

Aplikasi dapat mengirim permintaan ini melalui permintaan IRP_MJ_DEVICE_CONTROL .

Driver kelas penyimpanan mengatur nomor IRP kecil ke IRP_MN_SCSI_CLASS untuk menunjukkan bahwa permintaan telah diproses oleh driver kelas penyimpanan.

Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Struktur ini mencakup SCSI CDB, yang harus diinisialisasi oleh pemanggil kecuali untuk jalur, ID target, dan nomor unit logis (LUN), yang diisi oleh driver port. Untuk perintah data-out, data yang akan ditransfer disertakan dalam buffer di Irp-AssociatedIrp.SystemBuffer> di DataInBufferOffset dalam struktur SCSI_PASS_THROUGH_EX. Namun, pemanggil harus mengalokasikan penyimpanan tambahan, segera setelah SCSI_PASS_THROUGH_EX, jika pemanggil meminta data request-sense.

Panjang buffer input

Parameters.DeviceIoControl.InputBufferLength menunjukkan ukuran, dalam byte, buffer di Irp->AssociatedIrp.SystemBuffer, yang harus setidaknya (ukuran data + senseof(SCSI_PASS_THROUGH_EX)). Ukuran struktur SCSI_PASS_THROUGH_EX bervariasi, tergantung pada nilai yang ditentukan dalam DataInTransferLength .

Buffer output

Driver port mengembalikan data request-sense dan data apa pun yang ditransfer dari perangkat ke buffer di Irp-AssociatedIrp.SystemBuffer>. SenseInfoLength dan DataOutTransferLength dalam struktur SCSI_PASS_THROUGH_EX diperbarui untuk menunjukkan jumlah data yang ditransfer.

Panjang buffer output

SenseInfoLength dan DataOutTransferLength dalam struktur SCSI_PASS_THROUGH_EX diperbarui untuk menunjukkan jumlah data yang ditransfer.

Blok status

Bidang Informasi diatur ke jumlah byte yang dikembalikan dalam buffer output di Irp-AssociatedIrp.SystemBuffer>. Bidang Status diatur ke STATUS_SUCCESS, atau mungkin untuk STATUS_BUFFER_TOO_SMALL atau STATUS_INVALID_PARAMETER jika nilai Panjang input dalam SCSI_PASS_THROUGH_EX diatur secara tidak benar.

Keterangan

Untuk mengeluarkan permintaan IOCTL_SCSI_PASS_THROUGH_EX , perangkat penyimpanan yang mendasar harus mendukung SRB yang diperluas. Ini berarti bahwa jenis SRB yang didukung SRB_TYPE_STORAGE_REQUEST_BLOCK. Aplikasi dapat meminta dukungan SRB dengan permintaan IOCTL_STORAGE_QUERY_PROPERTY dengan jenis kueri PropertyStandardQuery dan jenis properti StorageDeviceProperty. Anggota SrbType yang dikembalikan dalam struktur STORAGE_ADAPTER_DESCRIPTIOR akan menunjukkan SRB_TYPE_SCSI_REQUEST_BLOCK atau SRB_TYPE_STORAGE_REQUEST_BLOCK.

Persyaratan

Persyaratan Nilai
Header ntddscsi.h (termasuk Ntddscsi.h)

Lihat juga

SCSI_PASS_THROUGH_EX