Mengonfigurasi Mode Pengiriman untuk Antrean I/O

Peringatan

UMDF 2 adalah versi terbaru UMDF dan supersedes UMDF 1. Semua driver UMDF baru harus ditulis menggunakan UMDF 2. Tidak ada fitur baru yang ditambahkan ke UMDF 1 dan ada dukungan terbatas untuk UMDF 1 pada versi Windows 10 yang lebih baru. Driver Universal Windows harus menggunakan UMDF 2.

Sampel UMDF 1 yang diarsipkan dapat ditemukan di Windows 11, versi 22H2 - Pembaruan Sampel Driver Mei 2022.

Untuk informasi selengkapnya, lihat Mulai menggunakan UMDF.

Ketika permintaan I/O dari aplikasi tiba, kerangka kerja menempatkan setiap permintaan dalam antrean I/O yang sesuai. Bagaimana dan kapan permintaan dikirimkan ke driver bergantung pada bagaimana driver mengonfigurasi pengiriman untuk antrean I/O dan tentang bagaimana driver menentukan sinkronisasi fungsi panggilan balik. Antrean I/O juga berinteraksi dengan subsistem PnP dan manajemen daya UMDF untuk menahan permintaan I/O dalam antrean hingga perangkat mencapai status yang tepat.

Catatan Mode pengiriman untuk antrean I/O tidak terkait dengan mode sinkronisasi. Konfigurasi pengiriman antrean I/O mengontrol jumlah permintaan yang dapat diterima driver untuk diproses pada waktu tertentu, sementara sinkronisasi mengontrol eksekusi simultan fungsi panggilan balik peristiwa yang menyajikan atau membatalkan permintaan. Namun, beberapa mode operasi dibuat dengan menggabungkan mode pengiriman dan sinkronisasi.

Driver mengonfigurasi pengiriman untuk antrean I/O ketika driver memanggil metode IWDFDevice::CreateIoQueue untuk mengonfigurasi antrean default atau untuk membuat antrean sekunder. Driver dapat menentukan salah satu nilai dari jenis enumerasi WDF_IO_QUEUE_DISPATCH_TYPE dalam parameter DispatchType dari IWDFDevice::CreateIoQueue untuk mengidentifikasi mode pengiriman. Objek antrean I/O dapat mendukung mode pengiriman berikut:

  • Berurutan

    Mode pengiriman berurutan ditentukan menggunakan nilai WdfIoQueueDispatchSequential . Dalam mode pengiriman ini, antrean dalam status pemrosesan menimbulkan peristiwa sehingga driver hanya memproses satu permintaan pada satu waktu. Antrean menunda permintaan tambahan apa pun sampai driver selesai memproses permintaannya saat ini atau memanggil metode IWDFIoRequest::ForwardToIoQueue untuk mengantre ulang permintaan. Ketika permintaan saat ini selesai atau diteruskan, antrean menaikkan peristiwa untuk memberikan permintaan berikutnya.

  • Paralel

    Mode pengiriman paralel ditentukan menggunakan nilai WdfIoQueueDispatchParallel . Dalam mode pengiriman ini, antrean dalam status pemrosesan menimbulkan peristiwa segera setelah permintaan I/O siap untuk driver. Ketika driver menerima permintaan I/O, driver dapat memproses permintaan I/O dengan salah satu cara berikut:

  • Manual

    Mode pengiriman manual ditentukan menggunakan nilai WdfIoQueueDispatchManual . Dalam mode pengiriman ini, antrean I/O tidak secara otomatis memberi tahu driver ketika permintaan tiba di antrean. Driver harus memanggil metode IWDFIoQueue::RetrieveNextRequest untuk mengambil permintaan secara manual dari antrean. Ini adalah model polling.

    Di UMDF versi 1.9 dan yang lebih baru, jika driver Anda menggunakan mode pengiriman manual, driver dapat memanggil IWDFIoRequest2::Requeue untuk mengembalikan permintaan I/O ke kepala antrean I/O tempat driver memperolehnya. Setelah memanggil IWDFIoRequest2::Requeue, panggilan berikutnya driver ke IWDFIoQueue::RetrieveNextRequest mengambil permintaan yang diantrekan kembali.

Untuk semua mode pengiriman, objek antrean I/O menerima dan melacak permintaan hingga driver menangani permintaan atau permintaan dibatalkan.

Jika driver mengonfigurasi antrean untuk pengiriman serial atau paralel, kerangka kerja memberi tahu driver permintaan melalui fungsi panggilan balik yang didaftarkan oleh driver saat driver membuat antrean atau mengonfigurasi antrean default. Untuk informasi selengkapnya, lihat Fungsi Panggilan Balik Peristiwa Antrean I/O.