Bagikan melalui


Membuat Antrean I/O

Objek antrean kerangka kerja mewakili antrean I/O, yang merupakan kontainer untuk permintaan I/O yang diterima driver. Setiap driver dapat membuat satu atau beberapa antrean I/O untuk setiap perangkat. Objek antrean kerangka kerja menentukan serangkaian fungsi panggilan balik peristiwa yang dapat disediakan driver dan serangkaian metode objek yang dapat dipanggil driver.

Ketika kerangka kerja menerima permintaan I/O yang diarahkan ke salah satu perangkat driver, kerangka kerja menempatkan permintaan dalam antrean I/O yang sesuai. Jika driver Anda mendaftarkan satu atau beberapa penangan permintaan, kerangka kerja dapat memberi tahu driver Anda setiap kali permintaan I/O tersedia. Atau, driver Anda dapat melakukan polling antrean I/O untuk permintaan.

Sebagian besar driver membuat antrean I/O di fungsi panggilan balik EvtDriverDeviceAdd mereka. Untuk membuat antrean I/O untuk perangkat, driver memanggil metode WdfIoQueueCreate objek antrean kerangka kerja (yang membuat objek antrean kerangka kerja). Driver memasok struktur WDF_IO_QUEUE_CONFIG ke metode . Struktur ini berisi informasi konfigurasi tentang antrean, seperti metode pengiriman antrean dan penunjuk untuk meminta penangan yang dipanggil kerangka kerja saat permintaan tersedia dalam antrean. Struktur ini juga menunjukkan apakah antrean akan dikelola daya dan apakah driver mendukung buffer panjang nol untuk permintaan I/O antrean.

Jika driver mengatur anggota DefaultQueue dari struktur WDF_IO_QUEUE_CONFIG ke TRUE, antrean menjadi antrean I/O default perangkat. Jika driver Anda membuat antrean I/O default, kerangka kerja menempatkan semua permintaan I/O perangkat dalam antrean ini, kecuali Anda membuat antrean tambahan untuk menerima beberapa permintaan. Driver dapat memperoleh handel ke antrean I/O default perangkat dengan memanggil metode WdfDeviceGetDefaultQueue .

Jika Anda ingin menggunakan lebih dari satu antrean I/O untuk perangkat, driver dapat memanggil WdfIoQueueCreate untuk membuat objek antrean sebanyak yang Anda butuhkan. Jika driver membuat beberapa antrean, driver dapat memanggil WdfDeviceConfigureRequestDispatching, yang menginstruksikan kerangka kerja untuk mengarahkan berbagai jenis permintaan ke antrean yang berbeda. Misalnya, Anda dapat menentukan bahwa semua permintaan baca akan dikirimkan ke satu antrean dan semua permintaan tulis akan dikirimkan ke antrean lain.

Jika driver Anda membuat sekumpulan antrean I/O dan memanggil WdfDeviceConfigureRequestDispatching untuk mengarahkan setiap jenis permintaan yang dapat diterima driver Anda ke antrean tertentu, driver tidak memerlukan antrean default.

Jika driver tidak menyediakan antrean I/O untuk permintaan jenis tertentu, dan jika driver Anda adalah driver fungsi, kerangka kerja menyelesaikan permintaan jenis tersebut dengan nilai status penyelesaian STATUS_INVALID_DEVICE_REQUEST. Jika driver Anda adalah driver filter dan telah disebut WdfFdoInitSetFilter, kerangka kerja secara otomatis meneruskan permintaan ini ke driver berikutnya yang lebih rendah di tumpukan driver. Jadi, misalnya, driver filter yang tidak memproses permintaan baca tidak harus memberikan antrean I/O yang menerima permintaan baca.

Untuk contoh bagaimana driver dapat menggunakan antrean I/O, lihat Contoh Penggunaan Antrean I/O.