Bagikan melalui


Pengendali Permintaan

Jika driver Anda telah menentukan metode pengiriman berurutan atau paralel untuk antrean I/O, kerangka kerja memanggil fungsi panggilan balik yang disediakan driver setiap kali siap untuk mengirimkan salah satu permintaan antrean ke driver.

Untuk setiap antrean I/O, driver dapat menyediakan satu atau beberapa fungsi panggilan balik berikut, yang disebut penangan permintaan:

EvtIoRead
Kerangka kerja memanggil fungsi callback EvtIoRead dari antrean I/O ketika permintaan baca tersedia dalam antrean.

EvtIoWrite
Kerangka akan memanggil fungsi callback EvtIoWrite dari antrean I/O ketika ada permintaan tulis yang tersedia dalam antrean.

EvtIoDeviceControl
Kerangka kerja memanggil fungsi antrean I/O EvtIoDeviceControl ketika permintaan kontrol I/O perangkat tersedia dalam antrean.

EvtIoInternalDeviceControl
Framework memanggil fungsi panggilan balik EvtIoInternalDeviceControl dari antrean I/O ketika permintaan kontrol I/O perangkat internal tersedia di dalam antrean.

EvtIoDefault
Kerangka kerja memanggil fungsi panggilan balik EvtIoDefault antrean I/O ketika permintaan apa pun tersedia, jika driver belum menyediakan fungsi panggilan balik khusus jenis permintaan terkait.

Driver mendaftarkan fungsi panggilan balik ketika memanggil WdfIoQueueCreate untuk membuat antrean I/O untuk perangkat.

Masing-masing fungsi panggilan balik ini menerima dua argumen input: handle ke permintaan I/O yang disampaikan oleh kerangka kerja ke driver dan handle ke antrean I/O yang menyimpan permintaan. Fungsi panggilan balik dapat menentukan perangkat target dengan memanggil WdfIoQueueGetDevice.

Kerangka kerja memanggil pengendali permintaan driver Anda dalam konteks utas arbitrer. Driver tidak boleh menunggu untuk jangka waktu yang lama saat menjalankan dalam konteks utas arbitrer. Dalam beberapa kasus, driver Anda mungkin menggunakan objek dispatcher kernel sebagai mekanisme sinkronisasi. Untuk informasi tentang kapan driver Anda dapat menunggu objek dispatcher, dan tindakan yang harus dilakukan ketika tidak bisa, lihat Pengantar Objek Dispatcher Kernel.