Bagikan melalui


Mengelola Masa Pakai Objek

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.

UMDF menggunakan skema penghitungan referensi untuk mengelola masa pakai objek panggilan balik dan objek kerangka kerja.

Mengelola Referensi ke Objek Panggilan Balik Driver-Supplied

Dalam kebanyakan kasus, driver tidak diperlukan untuk menyimpan referensi ke objek panggilan balik. Jika metode antarmuka objek panggilan balik hanya dipanggil oleh kerangka kerja dan oleh objek yang masa pakainya bergantung pada objek panggilan balik dan objek kerangka kerja yang dipasangkan objek panggilan balik, driver tidak perlu menyimpan referensi. Dengan kata lain, driver atau kerangka kerja dapat dengan aman memanggil metode antarmuka objek yang lebih tinggi dalam hierarki objek.

Mengelola Referensi ke Objek Kerangka Kerja

Di UMDF, prinsip masa pakai COM umum dan model masa pakai khusus WDF menentukan masa pakai objek kerangka kerja. Driver Anda harus memenuhi kriteria untuk kedua model sehingga objek kerangka kerja dibebaskan dari memori pada waktu yang tepat.

COM Lifetime Management

Di COM, penelepon biasanya menyimpan referensi ke objek saat objek sedang digunakan, dan kemudian pemanggil merilis referensi ketika tidak lagi memerlukan objek. Namun, driver UMDF tidak perlu menyimpan referensi ke objek kerangka kerja. Bahkan, driver dapat merilis referensi objek kerangka kerja segera setelah driver membuat objek kerangka kerja.

Misalnya, sampel UMDF merilis objek perangkat setelah mereka memanggil IWDFDriver::CreateDevice. Meskipun referensi dirilis lebih awal, objek perangkat terus ada sampai perangkat dihapus karena pohon objek WDF menyimpan referensi ke sana.

Karena UMDF melacak semua objek kerangka kerja di pohon objek, driver tidak perlu menyimpan referensi ke objek kerangka kerja.

Namun, jika driver Anda menyimpan referensi ke objek kerangka kerja, driver harus melepaskan referensi ketika tidak lagi membutuhkan objek . Referensi melingkar tetap ada sampai driver merilis referensinya. Untuk menghindari referensi melingkar, driver biasanya tidak boleh menyimpan referensi eksplisit ke objek kerangka kerja.

Jika driver harus menyimpan referensi ke objek kerangka kerja, objek panggilan balik driver juga harus mengimplementasikan antarmuka IObjectCleanup . Ketika driver memanggil IWDFObject::D eleteWdfObject pada objek kerangka kerja, objek kerangka kerja memanggil metode IObjectCleanup::OnCleanup objek panggilan balik yang sesuai. Implementasi IObjectCleanup::OnCleanup harus merilis referensi ke objek kerangka kerja untuk memungkinkan kerangka kerja selesai merobek objek kerangka kerja.

Manajemen Masa Pakai WDF

Jika Anda membuat objek jenis yang memungkinkan Anda untuk mengambil alih induk default, Anda harus memilih induk dengan masa pakai yang cocok dengan masa pakai objek Anda. Untuk informasi selengkapnya tentang objek induk default dan apakah driver dapat menggantikan induk default, lihat tabel di Objek Kerangka Kerja.

Jika Anda mencocokkan masa pakai objek, kerangka kerja akan menghapus objek Anda saat objek induk dihapus. Jika Anda tidak cocok dengan masa pakai objek dan Anda ingin objek dihapus sebelum induk default dihapus, Anda dapat secara eksplisit menghapus objek dengan memanggil DeleteWdfObject saat objek tidak lagi diperlukan.

Misalnya, jika Anda membuat objek permintaan baru lalu memanggil IWDFDriver::CreateWdfMemory untuk membuat objek memori untuk permintaan ini, Anda dapat menentukan objek permintaan sebagai induk objek memori baru. Karena WDF menghapus objek anak ketika objek induk dihapus, driver tidak perlu memanggil DeleteWdfObject untuk menghapus objek memori.

Namun, jika tidak ada induk yang masa pakainya sangat cocok dengan masa pakai objek Anda, dan jika Anda ingin objek dihapus sebelum induk default dihapus, Anda harus menggunakan penghapusan eksplisit. Misalnya, driver dapat membuat beberapa objek permintaan yang digunakan untuk durasi singkat. Dalam hal ini, driver dapat menghemat memori dengan secara eksplisit menghapus permintaan ketika tidak lagi diperlukan.

Demikian pula, jika Anda membuat objek yang tidak memungkinkan Anda untuk mengambil alih induk default dan jika Anda ingin objek dihapus sebelum induk default dihapus, driver harus secara eksplisit menghapus objek.