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:
DpWmiQueryReginfo—(Required) Menyediakan informasi tentang data dan blok peristiwa yang didaftarkan oleh driver. WMI memanggil rutinitas DpWmiQueryReginfo driver untuk memproses permintaan IRP_MN_REGINFO atau IRP_MN_REGINFO_EX . Untuk informasi selengkapnya, lihat Menggunakan Pustaka WMI untuk Mendaftarkan Blok.
DpWmiQueryDataBlock—(Required) Mengembalikan satu instans atau semua instans blok data. WMI memanggil rutinitas DpWmiQueryDataBlock driver untuk memproses permintaan IRP_MN_QUERY_SINGLE_INSTANCE atau IRP_MN_QUERY_ALL_DATA .
DpWmiSetDataBlock—(Opsional) Mengubah semua item data dalam satu instans blok data. WMI memanggil rutinitas DpWmiSetDataBlock driver untuk memproses permintaan IRP_MN_CHANGE_SINGLE_INSTANCE .
DpWmiSetDataItem—(Opsional) Mengubah satu item data dalam instans blok data. WMI memanggil rutinitas DpWmiSetDataItem driver untuk memproses permintaan IRP_MN_CHANGE_SINGLE_ITEM .
DpWmiFunctionControl—(Opsional) Mengaktifkan dan menonaktifkan pemberitahuan peristiwa dan pengumpulan data untuk blok yang terdaftar sebagai mahal untuk dikumpulkan. WMI memanggil rutinitas DpWmiFunctionControl driver untuk memproses permintaan IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION, IRP_MN_ENABLE_EVENTS, atau IRP_MN_DISABLE_EVENTS .
DpWmiExecuteMethod—(Opsional) Menjalankan metode yang terkait dengan blok data. WMI memanggil rutinitas DpWmiExecuteMethod driver untuk memproses permintaan IRP_MN_EXECUTE_METHOD .
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:
Driver memanggil WmiSystemControl dengan penunjuk ke struktur WMILIB_CONTEXT yang diinisialisasi, penunjuk ke objek perangkatnya, dan penunjuk ke IRP.
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.
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.
Di semua rutinitas DpWmiXxx kecuali DpWmiQueryReginfo, driver memanggil WmiCompleteRequest untuk menyelesaikan permintaan, atau mengembalikan STATUS_PENDING untuk menunda penyelesaian, seperti untuk IRP apa pun.
WMI melakukan pascaproses yang diperlukan, mengemas output apa pun dalam struktur WNODE_XXX yang sesuai, dan meneruskan output dan status ke konsumen data.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk