Penunjuk Objek Kunci Tidak Valid di Pemberitahuan Registri

Untuk menghindari kesalahan fatal dan kemungkinan kerusakan memori, driver pemfilteran registri tidak boleh mencoba mengakses objek kunci dengan menggunakan penunjuk objek yang tidak valid. Topik ini mencantumkan keadaan di mana anggota Objek dari struktur pemberitahuan panggilan balik registri mungkin berisi nilai non-NULL yang tidak terdefinisi.

Dalam driver pemfilteran registri, parameter kedua dari rutinitas RegistryCallback adalah nilai enumerasi REG_NOTIFY_CLASS . Nilai ini menunjukkan jenis struktur pemberitahuan panggilan balik registri mana yang menjadi parameter ketiga dari titik rutin RegistryCallback . Struktur pemberitahuan berisi informasi tentang operasi registri. Jenis struktur ini bervariasi sesuai dengan operasi registri yang sedang dilakukan.

Banyak jenis struktur pemberitahuan berisi anggota Objek yang menunjuk ke objek kunci. Dalam beberapa kasus, anggota Objek dapat berisi nilai yang bukan NULL, tetapi bukan penunjuk ke objek kunci yang valid.

Nilai Objek Kunci Tidak Ditentukan

Jika parameter kedua dalam panggilan ke rutinitas RegistryCallback dari driver pemfilteran registri adalah nilai enumerasi REG_NOTIFY_CLASSRegNtPostCreateKeyEx atau RegNtPostOpenKeyEx, parameter ketiga adalah penunjuk ke struktur REG_POST_OPERATION_INFORMATION . Anggota Objek dari struktur ini hanya valid jika anggota Status struktur diatur ke STATUS_SUCCESS. Nilai Status lainnya, termasuk kode status bukan nol yang dievaluasi makro NT_SUCCESS ke TRUE, menunjukkan bahwa nilai anggota Objek tidak terdefinisi.

Nilai Objek Kunci Tidak Dalam Status Valid

Jika parameter kedua dalam panggilan balik registri adalah salah satu nilai enumerasi REG_NOTIFY_CLASS berikut, anggota Objek dari struktur pemberitahuan panggilan balik registri menunjuk ke objek kunci yang sedang dihancurkan dan yang jumlah referensinya adalah nol:

Karena anggota Objek menunjuk ke objek kunci yang tidak dalam status valid, driver pemfilteran registri tidak boleh meneruskan nilai Pointer objek sebagai parameter ke rutinitas dukungan driver Windows (misalnya, ObReferenceObjectByPointer).

Namun, selama panggilan RegistryCallback untuk menangani pemberitahuan RegNtPreKeyHandleClose atau RegNtPostKeyHandleClose , driver filter registri dapat memanggil rutinitas manajer konfigurasi (misalnya, CmGetBoundTransaction) yang mengambil objek registri sebagai parameter.