Mengirim Peristiwa WMI

Driver dapat menggunakan peristiwa WMI untuk memberi tahu aplikasi peristiwa mode pengguna tanpa mengharuskan aplikasi untuk melakukan polling atau mengirim RUN. Driver harus menggunakan peristiwa WMI untuk memberi tahu klien WMI tentang kondisi luar biasa, bukan sebagai alternatif untuk pengelogan kesalahan. Driver harus mendukung blok peristiwa standar yang ditentukan untuk jenis perangkatnya di Wmicore.mof, dan dapat menentukan dan mendaftarkan blok peristiwa kustom tambahan untuk mendukung pemberitahuan khusus perangkat.

Blok peristiwa hanyalah blok data yang berasal dari WMIEvent kelas dasar abstrak. Blok peristiwa dapat berisi data yang sama dengan blok data, atau dapat kosong—yaitu, blok peristiwa tidak boleh berisi item data yang ditentukan driver. Jika blok peristiwa berisi data, ukuran total WNODE_XXX ditambah data tidak boleh melebihi batas yang ditentukan registri 1 kilobyte. Secara umum, peristiwa yang lebih kecil menghasilkan performa sistem yang lebih baik dan pemberitahuan yang lebih tepat waktu. Untuk informasi tentang menentukan blok, lihat Sintaks MOF untuk Data WMI dan Blok Peristiwa dan Merancang Data WMI dan Blok Peristiwa.

Driver menunjukkan dukungan untuk suatu peristiwa dengan mendaftarkan blok peristiwa yang sesuai dengan WMIREG_FLAG_EVENT_ONLY_GUID diatur dalam struktur WMIREGGUID blok. Untuk informasi tentang mendaftarkan blok, lihat Mendaftar sebagai Penyedia Data WMI.

Ketika pengguna klien WMI meminta pemberitahuan peristiwa, WMI mengirimkan permintaan IRP_MN_ENABLE_EVENTS ke driver, yang memperingatkan driver untuk mulai memantau kondisi pemicu yang ditentukan driver peristiwa. Kemudian, ketika kondisi pemicu terjadi, driver mengirimkan peristiwa ke WMI, yang mengirimkannya ke semua konsumen data yang telah mendaftar untuk acara tersebut.

Driver mengirimkan peristiwa ke WMI dengan salah satu cara berikut:

  • Panggil pustaka WMI mode kernel rutin WmiFireEvent. Driver dapat memanggil WmiFireEvent untuk mengirim hanya peristiwa yang tidak menggunakan nama instans dinamis, dan nama instans statis dasar tersebut pada string nama dasar tunggal atau ID instans perangkat PDO. Selain itu, peristiwa harus berupa satu instans—yaitu, driver tidak dapat memanggil WmiFireEvent untuk mengirim peristiwa yang terdiri dari satu item atau beberapa instans. Untuk informasi selengkapnya, lihat Mengirim Acara dengan WmiFireEvent.

  • Panggil IoWMIWriteEvent rutin mode kernel dengan penunjuk ke struktur WNODE_XXXX yang dialokasikan dan dialokasikan driver yang berisi data peristiwa. Untuk informasi selengkapnya, lihat Mengirim Peristiwa dengan IoWMIWriteEvent.