Mengantre ulang Permintaan I/O

Driver dapat mengantre ulang permintaan I/O yang mereka peroleh dari antrean I/O. Driver dapat mengantre ulang permintaan I/O ke antrean I/O lain yang telah dibuat driver untuk perangkat yang sama. Selain itu, pengemudi bus dapat mengantre ulang permintaan I/O dari antrean I/O perangkat anak ke antrean I/O perangkat induk.

Mengantre Ulang Permintaan I/O ke Antrean I/O yang Berbeda untuk Perangkat

Setelah penangan permintaan driver menerima permintaan I/O dari antrean I/O driver, driver dapat memanggil WdfRequestForwardToIoQueue untuk mengantre ulang permintaan ke antrean lain.

Misalnya, jika Anda ingin driver Anda mengalokasikan sumber daya ke permintaan sebelum memproses permintaan, fungsi panggilan balik EvtIoDefault driver dapat menerima semua permintaan, menyimpan informasi sumber daya di memori konteks setiap permintaan, lalu memanggil WdfRequestForwardToIoQueue untuk mengantrekan ulang setiap permintaan ke antrean tambahan.

Jika driver Anda memanggil WdfRequestForwardToIoQueue untuk mengantre ulang permintaan I/O yang diperoleh driver dari antrean I/O yang menggunakan metode pengiriman berurutan, kerangka kerja akan mengirimkan permintaan I/O berikutnya dari antrean berurutan ke driver tanpa menunggu permintaan antrean ulang selesai.

Jika driver Anda menggunakan metode pengiriman manual, driver dapat memanggil metode WdfRequestRequeue untuk mengembalikan permintaan I/O ke kepala antrean I/O tempat driver memperolehnya. Setelah memanggil WdfRequestRequeue, panggilan berikutnya driver ke WdfIoQueueRetrieveNextRequest mengambil permintaan yang diantrekan kembali.

Mengantre ulang Permintaan I/O ke Antrean I/O Perangkat Induk

Driver fungsi untuk perangkat induk dapat bertindak sebagai driver bus yang menghitung perangkat anak dari perangkat induk dan membuat objek perangkat fisik (PDO) untuk perangkat anak. Driver tersebut terkadang dapat menerima permintaan I/O untuk perangkat anak yang harus ditangani perangkat induk.

Misalnya, bus protokol (seperti USB) biasanya mengontrol sumber daya perangkat keras yang ditetapkan ke setiap perangkat yang terhubung. Oleh karena itu, driver fungsi untuk bus induk biasanya menangani operasi I/O untuk setiap perangkat anak. Ketika manajer I/O mengirim permintaan I/O ke tumpukan perangkat salah satu perangkat anak, driver fungsi untuk bus menerima permintaan I/O di salah satu antrean I/O perangkat anak, karena driver tersebut membuat PDO perangkat anak. Sebelum driver dapat memproses permintaan I/O dalam konteks perangkat bus induk, driver harus mengantrekan ulang permintaan I/O dari antrean I/O perangkat anak ke antrean I/O milik perangkat induk.

Namun, driver tidak dapat memanggil WdfRequestForwardToIoQueue untuk memindahkan permintaan dari antrean anak ke antrean induk. Karena manajer I/O membuat tumpukan perangkat terpisah untuk perangkat induk dan anak, objek perangkat WDM yang mendasar harus terlebih dahulu diubah dari yang mewakili perangkat anak menjadi perangkat yang mewakili induknya.

Sebelum KMDF versi 1.9, driver dapat mengirim permintaan I/O dari perangkat anak hanya ke induknya dengan membuat target I/O jarak jauh, meningkatkan ukuran tumpukan perangkat perangkat anak, dan menentukan objek perangkat WDM yang benar.

Dimulai dengan KMDF versi 1.9, driver dapat memanggil WdfPdoInitAllowForwardingRequestToParent sebelum membuat perangkat anak lalu memanggil WdfRequestForwardToParentDeviceIoQueue untuk mengantre ulang permintaan dari antrean I/O anak ke antrean induk. Jika driver menggunakanWdfPdoInitAllowForwardingRequestToParent dan WdfRequestForwardToParentDeviceIoQueue, kerangka kerja meningkatkan ukuran tumpukan perangkat anak dan menetapkan objek perangkat WDM yang benar ke permintaan I/O.