Memanggil WmiSystemControl untuk Menangani RUNPS WMI

Rutinitas pustaka WMI menyederhanakan penanganan permintaan WMI karena alih-alih memproses setiap permintaan tersebut, driver memanggil WmiSystemControl. Dalam panggilan WmiSystemControl , driver melewati struktur WMILIB_CONTEXT yang diinisialisasi yang berisi titik masuk ke rutinitas panggilan balik pustaka WMI driver (rutinitas DpWmiXxx ) dan informasi tentang blok data driver dan blok peristiwa.

Karena pustaka WMI tidak menyediakan mekanisme untuk meneruskan nama instans dinamis atau daftar nama instans statis, driver dapat menggunakan pustaka WMI untuk menangani permintaan yang hanya melibatkan blok data dengan nama instans statis berdasarkan PDO atau string nama dasar tunggal. Untuk informasi selengkapnya tentang nama instans statis dan dinamis, lihat Menentukan Nama Instans WMI. Tidak ada yang mencegah driver menggunakan pustaka WMI untuk menangani permintaan untuk blok tersebut dan memproses permintaan untuk blok lain dalam rutinitas DispatchSystemControl-nya . Untuk informasi selengkapnya, lihat Memproses RUNP WMI dalam Rutinitas DispatchSystemControl.

Untuk menangani runtime integrasi WMI dengan memanggil WmiSystemControl, driver harus menerapkan rutinitas panggilan balik DpWmiXxx tertentu yang diperlukan, dan mungkin menerapkan rutinitas panggilan balik DpWmiXxx opsional tambahan:

Rutinitas DpWmiXxx driver dapat memiliki nama apa pun yang dipilih oleh penulis driver.

Sebelum memanggil WmiSystemControl, driver harus menginisialisasi struktur WMILIB_CONTEXT dengan titik masuk ke rutinitas DpWmiXxx dan informasi tentang blok data dan blok peristiwanya.

Ketika driver menerima permintaan WMI:

  1. Driver memanggil WmiSystemControl dengan penunjuk ke struktur WMILIB_CONTEXT yang diinisialisasi, penunjuk ke objek perangkatnya, dan penunjuk ke IRP.

  2. WMI memvalidasi parameter IRP dan memanggil rutinitas DpWmiXxx driver yang memproses permintaan. Jika driver tidak menetapkan titik masuk dalam WMILIB_CONTEXT untuk rutinitas DpWmiXxx opsional, WMI menyelesaikan IRP dengan nilai dan status default.

  3. Dalam rutinitas DpWmiXxx , driver memproses permintaan dan menulis output apa pun ke buffer yang disediakan pemanggil. Misalnya, rutinitas DpWmiQueryDataBlock driver akan menulis instans yang diminta dari blok yang ditentukan ke buffer.

  4. Di semua rutinitas DpWmiXxx kecuali DpWmiQueryReginfo, driver memanggil WmiCompleteRequest untuk menyelesaikan permintaan, atau mengembalikan STATUS_PENDING untuk menunda penyelesaian, seperti untuk IRP apa pun.

  5. WMI melakukan pascaproses yang diperlukan, mengemas output apa pun dalam struktur WNODE_XXX yang sesuai, dan meneruskan output dan status ke konsumen data.