Mendukung Blok Data WMI dan Peristiwa di Driver Anda

[Hanya berlaku untuk KMDF]

Driver berbasis kerangka kerja mendukung blok data WMI dengan menyediakan fungsi panggilan balik peristiwa. Driver mendukung peristiwa WMI dengan memanggil metode objek yang mengirim peristiwa ke klien WMI.

Mendukung Blok Data WMI Baca/Tulis

Jika informasi dalam blok data WMI dapat dibaca dan ditulis oleh klien WMI, driver harus menyediakan fungsi panggilan balik EvtWmiInstanceQueryInstance yang melayani permintaan baca klien, ditambah fungsi panggilan balik EvtWmiInstanceSetInstance atau EvtWmiInstanceSetItem (atau keduanya) yang melayani permintaan tulis klien.

Jika blok data berisi metode yang dijalankan driver atas permintaan klien, driver juga harus menyediakan fungsi panggilan balik EvtWmiInstanceExecuteMethod .

Jika blok data WMI hanya menulis (yaitu, klien WMI dapat menulis informasi ke blok data tetapi tidak dapat membaca blok data), driver tidak menyediakan fungsi panggilan balik EvtWmiInstanceQueryInstance .

Mendukung Read-Only Blok Data WMI

Jika informasi dalam blok data WMI tidak dapat dimodifikasi oleh klien WMI, driver tidak menyediakan fungsi panggilan balik EvtWmiInstanceSetInstance atau EvtWmiInstanceSetItem . Untuk mendukung permintaan informasi blok data dari klien WMI, driver dapat melakukan salah satu hal berikut:

Jika driver mengatur UseContextForQuery ke TRUE, kerangka kerja menyalin ruang konteks objek instans ke dalam buffer yang disediakan WMI saat klien WMI meminta informasi instans. Tidak diperlukan panggilan balik EvtWmiInstanceXxx jika driver hanya memiliki satu instans WMI yang menyediakan data baca-saja dan panjang tetap dari area konteks objeknya.

Jika blok data baca-saja berisi metode yang dijalankan driver atas permintaan klien, driver juga dapat menyediakan fungsi panggilan balik EvtWmiInstanceExecuteMethod .

Mendukung Blok Data WMI yang Mahal

Jika driver Anda mengumpulkan data dinamis dalam jumlah yang relatif besar untuk mendukung salah satu blok data WMI-nya, driver harus melakukan hal berikut:

  • Nyatakan blok data menjadi "mahal" dengan mengatur bendera WdfWmiProviderExpensive di anggota Bendera struktur WDF_WMI_PROVIDER_CONFIG objek penyedia WMI.

  • Berikan fungsi panggilan balik EvtWmiProviderFunctionControl yang memungkinkan dan menonaktifkan pengumpulan data untuk blok data, atau panggil WdfWmiProviderIsEnabled untuk menentukan apakah driver harus mengaktifkan atau menonaktifkan pengumpulan data.

Jika driver Anda menetapkan bendera WdfWmiProviderExpensive , kerangka kerja memanggil fungsi panggilan balik EvtWmiProviderFunctionControl saat klien WMI mendaftar untuk mengakses blok data. Fungsi panggilan balik harus memungkinkan kemampuan driver untuk mengumpulkan data. Jika semua klien WMI menghapus pendaftaran mereka untuk blok data, kerangka kerja memanggil fungsi panggilan balik EvtWmiProviderFunctionControl lagi sehingga driver dapat berhenti mengumpulkan data.

Mendukung Acara WMI

Driver dapat menggunakan peristiwa WMI untuk memberi tahu klien WMI tentang kondisi luar biasa. (Anda tidak boleh menggunakan peristiwa WMI sebagai alternatif untuk mencatat kesalahan.) Seperti item data, peristiwa WMI didefinisikan dalam blok data WMI dalam file format objek terkelola (.mof).

Klien WMI mendaftar untuk pemberitahuan peristiwa WMI. Untuk mengirim peristiwa ke klien WMI terdaftar, driver Anda memanggil metode WdfWmiInstanceFireEvent . Metode ini memungkinkan driver untuk secara opsional mengirim data khusus peristiwa ke klien.

Jika blok data WMI yang menentukan peristiwa juga berisi item data WMI atau item metode, driver menyediakan fungsi panggilan balik WMI yang sesuai. Jika blok data menentukan peristiwa tetapi tidak berisi data atau item metode, driver Anda harus mengatur bendera WdfWmiProviderEventOnly di anggota Bendera dari struktur WDF_WMI_PROVIDER_CONFIG objek penyedia WMI.

Driver harus memanggil WdfWmiInstanceFireEvent hanya jika klien WMI telah mendaftar untuk pemberitahuan peristiwa. Driver dapat menentukan apakah harus memanggil WdfWmiInstanceFireEvent dengan menyediakan fungsi panggilan balik EvtWmiProviderFunctionControl atau memanggil WdfWmiProviderIsEnabled.

Mendukung Pelacakan Peristiwa WMI

Peristiwa pelacakan didefinisikan dalam file .mof, dengan cara yang sama seperti peristiwa WMI lainnya. Ketika driver Anda membuat objek penyedia WMI untuk peristiwa pelacakan, driver harus mengatur bendera WdfWmiProviderTracing di anggota Bendera struktur WDF_WMI_PROVIDER_CONFIG objek penyedia.

Setelah instans penyedia didaftarkan, driver dapat memanggil WdfWmiProviderGetTracingHandle untuk mendapatkan handel pelacakan. Driver dapat menggunakan handel pelacakan sebagai input ke rutinitas WmiTraceMessage .

Untuk informasi selengkapnya tentang pelacakan peristiwa, lihat: