Bagikan melalui


EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL fungsi panggilan balik (wdfio.h)

[Berlaku untuk KMDF dan UMDF]

Fungsi panggilan balik peristiwa EvtIoDeviceControl driver memproses permintaan kontrol I/O perangkat tertentu.

Sintaks

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;

void EvtWdfIoQueueIoDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parameter

[in] Queue

Handel ke objek antrean kerangka kerja yang terkait dengan permintaan I/O.

[in] Request

Handel ke objek permintaan kerangka kerja.

[in] OutputBufferLength

Panjang, dalam byte, dari buffer output permintaan, jika buffer output tersedia.

[in] InputBufferLength

Panjang, dalam byte, dari buffer input permintaan, jika buffer input tersedia.

[in] IoControlCode

Kode kontrol I/O yang ditentukan driver atau yang ditentukan sistem (IOCTL) yang terkait dengan permintaan.

Nilai kembali

Tidak ada

Keterangan

Driver mendaftarkan fungsi panggilan balik EvtIoDeviceControl saat memanggil WdfIoQueueCreate. Untuk informasi selengkapnya tentang memanggil WdfIoQueueCreate, lihat Membuat Antrean I/O.

Jika driver telah mendaftarkan fungsi panggilan balik EvtIoDeviceControl untuk antrean I/O perangkat, fungsi panggilan balik menerima setiap permintaan kontrol I/O (IRP_MJ_DEVICE_CONTROL) dari antrean. Untuk informasi selengkapnya, lihat Penangan Permintaan.

Fungsi panggilan balik EvtIoDeviceControl harus memproses setiap permintaan I/O yang diterima dengan cara tertentu. Untuk informasi selengkapnya, lihat Memproses Permintaan I/O.

Driver menerima permintaan kontrol I/O ketika aplikasi pengguna memanggil DeviceIoControl (dijelaskan dalam dokumentasi Microsoft Windows SDK) atau ketika driver lain membuat permintaan dengan memanggil WdfIoTargetSendIoctlSynchronously atau WdfIoTargetFormatRequestForIoctl.

Jenis operasi yang akan dilakukan tergantung pada nilai parameter IoControlCode . Anda harus menentukan kumpulan nilai IoControlCode yang dapat dikirim aplikasi dan driver lain ke driver Anda. Untuk informasi selengkapnya tentang IOCTL, lihat Menggunakan Kode Kontrol I/O.

Sebagian besar operasi kontrol I/O perangkat memerlukan buffer input, buffer output, atau keduanya. Untuk informasi tentang bagaimana driver dapat mengakses buffer permintaan, lihat Mengakses Buffer Data di driver Framework-Based.

Teknik yang dapat digunakan driver Anda untuk mengakses buffer input dan output permintaan (jika ada) bergantung pada bidang TransferType dari IOCTL. Nilai bidang TransferType IOCTL dapat METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT, atau METHOD_NEITHER. Untuk informasi selengkapnya tentang bidang TransferType , lihat Menentukan Kode Kontrol I/O.

Fungsi panggilan balik EvtIoDeviceControl dapat dipanggil di IRQL <= DISPATCH_LEVEL, kecuali anggota ExecutionLevel dari struktur WDF_OBJECT_ATTRIBUTES perangkat atau driver diatur ke WdfExecutionLevelPassive.

Jika IRQL PASSIVE_LEVEL, kerangka kerja memanggil fungsi panggilan balik dalam wilayah penting.

Untuk informasi selengkapnya tentang tingkat IRQL untuk penangan permintaan, lihat Menggunakan Sinkronisasi Otomatis.

Fungsi panggilan balik EvtIoDeviceControl driver tidak boleh memanggil metode objek antrean berikut:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header wdfio.h (termasuk Wdf.h)
IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan)

Lihat juga

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueBuat

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously