Menerapkan Antarmuka Utama untuk Penyedia Peristiwa
Penyedia peristiwa harus mengimplementasikan antarmuka IWbemEventProvider untuk menghasilkan pemberitahuan peristiwa. WMI memanggil metode IWbemEventProvider::P rovideEvents dari penyedia dan meneruskan pointer ke objek sink, yang merupakan implementasi dari antarmuka IWbemObjectSink . Ketika penyedia peristiwa siap untuk menghasilkan pemberitahuan, penyedia memanggil metode IWbemObjectSink::Indicate .
Penyedia peristiwa harus menempatkan pemberitahuan yang dihasilkan melalui IWbemEventProvider dalam objek peristiwa. Anda harus menerapkan objek peristiwa sebagai entri dalam array antarmuka IWbemClassObject yang diwakili oleh parameter ppObjArray dari metode Indicate . Karena IWbemClassObjects adalah objek COM, penyedia harus menambah jumlah referensi untuk sink dengan memanggil metode IWbemObjectSink::AddRef . Penyedia peristiwa yang harus menyediakan banyak pemberitahuan (misalnya, 400 peristiwa) harus membuat objek peristiwa unik untuk setiap pemberitahuan dengan menelurkan instans baru atau mengkloning yang sudah ada. WMI tidak pernah memegang objek peristiwa yang melewati penyelesaian panggilan Menunjukkan , dan tidak memiliki persyaratan khusus untuk AddRef di atas dan di luar standar COM.
Pertimbangkan panduan berikut saat menerapkan penyedia peristiwa:
Jangan membuat perubahan kelas saat melayani panggilan klien.
Jangan terbitkan panggilan terkait peristiwa apa pun, seperti panggilan yang memodifikasi filter peristiwa.
Proses permintaan apa pun yang masalah layanan Manajemen Windows, seperti CancelQuery, sebelum mengaktifkan kembali peristiwa.
Jika Anda tidak memproses permintaan, maka mengaktifkan kembali peristiwa mungkin memblokir peristiwa agar tidak pernah diterima.
Jangan pernah memanggil IWbemObjectSink::SetStatus dari dalam penyedia.