Bagikan melalui


Siklus Hidup Objek Kerangka Kerja

"Siklus hidup" objek kerangka kerja mencakup waktu sejak objek dibuat saat dihapus. Jumlah referensi objek mengontrol kapan objek akan dihapus.

Membuat Objek Kerangka Kerja

Sebagian besar objek kerangka kerja dibuat oleh panggilan driver ke metode pembuatan objek. Misalnya, setiap driver kerangka kerja harus memanggil WdfDriverCreate untuk membuat objek driver kerangka kerja.

Objek kerangka kerja lainnya dibuat oleh kerangka kerja. Misalnya, ketika aplikasi pengguna membuka perangkat untuk operasi baca atau tulis, kerangka kerja membuat objek file kerangka kerja dan meneruskannya ke fungsi panggilan balik EvtDeviceFileCreate driver.

Beberapa objek kerangka kerja dapat dibuat oleh kerangka kerja atau oleh driver. Misalnya, ketika manajer I/O mengirimkan permintaan I/O ke driver, kerangka kerja membuat objek permintaan kerangka kerja dan mengirimkannya ke driver, biasanya dengan memanggil salah satu penangan permintaan driver. Driver juga dapat membuat objek permintaan kerangka kerja dan mengirimkannya ke driver lain.

Menggunakan Jumlah Referensi

Kerangka kerja mempertahankan jumlah referensi untuk setiap objek. Saat objek dibuat, kerangka kerja mengatur jumlah referensinya menjadi satu. Jika jumlah referensi menjadi nol, kerangka kerja akan menghapus objek .

Driver dapat mengubah jumlah referensi objek dengan memanggil WdfObjectReference untuk menambah jumlah referensi atau WdfObjectDereference untuk mengurangi jumlah referensi. (Driver dapat memanggil WdfObjectDereference hanya jika sebelumnya disebut WdfObjectReference.)

Dalam kebanyakan kasus, driver tidak perlu menambah atau mengurangi jumlah referensi objek. Kerangka kerja menambah hitungan sebelum meneruskan handel objek ke driver, dan mengurangi hitungan ketika driver tidak lagi membutuhkan objek.

Driver memanggil WdfObjectReference untuk memastikan bahwa objek tidak akan dihapus (oleh kerangka kerja atau oleh utas driver) sebelum driver selesai menggunakannya. Untuk contoh situasi di mana driver harus memanggil WdfObjectReference dan WdfObjectDereference, lihat Menyinkronkan Pembatalan Permintaan Terkirim.

Menghapus Objek Kerangka Kerja

Objek dihapus baik karena driver memanggil WdfObjectDelete atau karena kerangka kerja memanggil rutinitas penghapusan internal, tetapi objek dihapus hanya jika jumlah referensinya nol. Setelah driver atau kerangka kerja mencoba menghapus objek, handel objek tetap valid sampai setelah jumlah referensi menjadi nol. Driver tidak dapat menghapus objek hanya dengan memanggil WdfObjectDereference untuk mengurangi jumlah referensi objek ke nol--driver juga harus memanggil WdfObjectDelete.

Jika objek kerangka kerja adalah objek anak dari induk dan induk sedang dihapus, kerangka kerja mencoba menghapus objek anak sebelum menghapus induk. Penghapusan objek dimulai dari objek terjauh dari induk dan bekerja hingga hierarki objek menuju akar.

Driver dapat mendaftarkan dua fungsi panggilan balik berikut yang dipanggil kerangka kerja saat driver atau kerangka kerja menghapus objek:

Salah satu fungsi panggilan balik ini harus membatalkan alokasi sumber daya khusus objek apa pun yang dialokasikan driver saat objek dibuat.

Kerangka kerja selalu menangani penghapusan beberapa objek kerangka kerja, dan driver tidak boleh mencoba menghapus objek ini. Untuk daftar objek kerangka kerja yang tidak dapat dihapus driver, lihat WdfObjectDelete.