Menggunakan Item Kerja
Peringatan
UMDF 2 adalah versi terbaru UMDF dan pengganti 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 Memulai UMDF.
Item kerja adalah tugas yang dilakukan driver dalam fungsi panggilan balik peristiwa OnWorkItem . Fungsi-fungsi ini berjalan secara asinkron.
Driver UMDF biasanya menggunakan item kerja jika OnInterruptIsr harus melakukan pemrosesan tambahan tanpa menunda eksekusi permintaan layanan interupsi (ISR) karena baris interupsi dapat dibagikan oleh beberapa perangkat.
Biasanya, fungsi panggilan balik OnInterruptIsr driver membuat objek item kerja dan menambahkannya ke antrean item kerja sistem. Selanjutnya, utas threadpool menghapus antrean objek dan memanggil fungsi panggilan balik OnWorkItem item kerja.
Menyiapkan Item Kerja
Untuk menyiapkan item kerja, driver Anda harus:
Buat item kerja.
Driver Anda memanggil IWDFDevice3::CreateWorkItem untuk membuat objek item kerja dan mengidentifikasi fungsi panggilan balik OnWorkItem yang akan memproses item kerja.
Simpan informasi tentang item kerja.
Biasanya, driver menggunakan memori konteks objek item kerja untuk menyimpan informasi tentang tugas yang harus dilakukan fungsi panggilan balik OnWorkItem . Ketika fungsi panggilan balik OnWorkItem dipanggil, fungsi tersebut dapat mengambil informasi dengan mengakses memori konteks ini. Untuk informasi tentang cara mengalokasikan dan mengakses memori konteks, lihatIWDFObject::AssignContext.
Tambahkan item kerja ke antrean item kerja sistem.
Driver Anda memanggil IWDFWorkItem::Enqueue, yang menambahkan item kerja driver ke antrean item kerja.
Saat driver Anda memanggil IWDFDevice3::CreateWorkItem, driver tersebut dapat secara opsional menyediakan objek induk (misalnya objek perangkat atau objek antrean). Ketika sistem menghapus objek tersebut, sistem juga menghapus item kerja yang ada yang terkait dengan objek .
Menggunakan Fungsi Panggilan Balik WorkItem
Setelah item kerja ditambahkan ke antrean item kerja, item tersebut tetap dalam antrean hingga utas pekerja sistem tersedia. Utas pekerja sistem menghapus item kerja dari antrean lalu memanggil fungsi panggilan balik OnWorkItem driver, meneruskan objek item kerja sebagai input.
Biasanya, fungsi panggilan balik OnWorkItem melakukan langkah-langkah berikut:
- Mendapatkan informasi yang disediakan driver tentang item kerja dengan mengakses memori konteks objek item kerja.
- Melakukan tugas yang Anda tentukan. Jika perlu, fungsi panggilan balik dapat memanggil IWDFWorkItem::GetParentObject untuk menentukan objek induk item kerja.
- Jika driver akan mengantre ulang item kerja, menunjukkan bahwa handel ke item kerja sekarang tersedia untuk digunakan kembali.
Beberapa driver mungkin perlu memanggil IWDFWorkItem::Flush untuk membersihkan item kerja mereka dari antrean item kerja. Jika driver memanggil metode Flush , metode tidak kembali sampai utas pekerja menghapus item kerja yang ditentukan dari antrean item kerja dan memanggil fungsi panggilan balik OnWorkItem driver, dan fungsi panggilan balik OnWorkItem kemudian dikembalikan setelah memproses item kerja.