Pelacakan Peristiwa WMI
Bagian ini menjelaskan ekstensi WMI ke WDM (didukung oleh Windows 2000 dan yang lebih baru) yang dapat digunakan driver mode kernel, sebagai penyedia informasi untuk memberikan informasi kepada konsumen informasi. Driver biasanya memberikan informasi yang digunakan konsumen untuk menentukan konfigurasi driver dan penggunaan sumber daya. Selain ekstensi WMI ke WDM, API mode pengguna mendukung penyedia atau konsumen informasi peristiwa WMI—lihat Windows SDK untuk informasi selengkapnya.
Pencatat pelacakan peristiwa mendukung hingga 32 instans. Salah satu instans dicadangkan untuk melacak kernel. Pencatat mendukung pelacakan tingkat peristiwa yang tinggi.
Peristiwa pelacakan didefinisikan dengan cara yang sama seperti peristiwa WMI lainnya. Peristiwa WMI dijelaskan dalam file MOF. Untuk informasi selengkapnya tentang deskripsi peristiwa WMI, lihat Sintaks MOF untuk Data WMI dan Blok Peristiwa.
Proses di mana informasi log driver mode kernel diintegrasikan ke dalam infrastruktur WMI yang ada. Untuk mencatat peristiwa pelacakan, driver melakukan hal berikut:
Daftar sebagai penyedia WMI dengan memanggil IoWMIRegistrationControl.
Tandai peristiwa sebagai dapat dilacak dengan mengatur WMIREG_FLAG_TRACED_GUID di anggota Bendera struktur WMIREGGUID yang diteruskan saat driver mendaftarkan peristiwa dengan WMI.
Tentukan satu peristiwa sebagai peristiwa kontrol untuk pengaktifan/penonaktifan keseluruhan serangkaian peristiwa pelacakan dengan mengatur WMIREG_FLAG_TRACE_CONTROL_GUID di anggota Bendera struktur WMIREGGUID yang diteruskan saat driver mendaftarkan peristiwa dengan WMI.
Setelah menerima permintaan dari WMI untuk mengaktifkan peristiwa di mana GUID cocok dengan GUID kontrol pelacakan, driver harus menyimpan handel ke pencatat. Nilai akan diperlukan saat menulis peristiwa. Untuk informasi tentang cara menggunakan handel ini, lihat langkah 6. Nilai handel pencatat terkandung dalam anggota HistoricalContext dari bagian WNODE_HEADER buffer WMI yang merupakan bagian dari parameter dalam permintaan aktifkan peristiwa.
Tentukan apakah peristiwa pelacakan akan dikirim ke konsumen peristiwa WMI atau hanya ditargetkan untuk pencatat peristiwa WMI. Ini akan menentukan dari mana memori untuk struktur EVENT_TRACE_HEADER harus berasal. Memori ini pada akhirnya akan diteruskan ke IoWMIWriteEvent.
Jika peristiwa hanya peristiwa log, memori tidak akan dihapus oleh WMI. Dalam hal ini, driver harus melewati buffer pada tumpukan atau harus menggunakan kembali buffer yang dialokasikan untuk tujuan ini. Untuk alasan performa, driver harus meminimalkan panggilan yang tidak perlu untuk mengalokasikan atau membebaskan memori. Kegagalan untuk mematuhi rekomendasi ini akan membahayakan integritas informasi waktu yang terkandung dalam file log.
Jika peristiwa akan dikirim ke pencatat dan ke konsumen peristiwa WMI, maka memori harus dialokasikan dari kumpulan yang tidak disebarkan. Dalam hal ini peristiwa akan dikirim ke pencatat dan kemudian diteruskan ke WMI untuk dikirim ke konsumen peristiwa WMI yang telah meminta pemberitahuan peristiwa. Memori untuk peristiwa tersebut kemudian akan dikosongkan oleh WMI sesuai dengan perilaku IoWMIWriteEvent.
Setelah memori untuk EVENT_TRACE_HEADER dan data peristiwa driver apa pun, jika ada, telah diamankan, informasi berikut harus diatur:
Atur anggota Ukuran ke sizeof(EVENT_TRACE_HEADER) ditambah ukuran data peristiwa driver tambahan yang akan ditambahkan ke akhir EVENT_TRACE_HEADER.
Atur anggota Bendera ke WNODE_FLAG_TRACED_GUID agar peristiwa dikirim ke pencatat. Jika acara juga akan dikirim ke konsumen acara WMI, atur WNODE_FLAG_LOG_WNODE. Catatan, tidak perlu mengatur WNODE_FLAG_TRACED_GUID jika pengaturan WNODE_FLAG_LOG_WNODE. Jika keduanya diatur, WNODE_FLAG_TRACED_GUID akan diutamakan dan acara tidak akan dikirim ke konsumen acara WMI.
Atur Guid atau anggota GuidPtr . Jika menggunakan GuidPtr, atur WNODE_FLAG_USE_GUID_PTR di anggota Bendera .
Secara opsional, tentukan nilai untuk TimeStamp. Jika driver tidak menentukan nilai TimeStamp , pencatat akan mengisi ini. Jika driver tidak ingin pencatat mengatur stempel waktu, maka driver harus mengatur WNODE_FLAG_USE_TIMESTAMP di anggota Bendera .
Atur salah satu anggota EVENT_TRACE_HEADER berikut yang memiliki arti pada driver: Class.Type, Class.Level, dan Class.Version.
Akhirnya transmisikan EVENT_TRACE_HEADER ke WNODE_HEADER dan atur nilai HistoricalContextWnode ke handel pencatat yang disimpan pada langkah 4 di atas.
Panggil IoWMIWriteEvent dengan penunjuk ke struktur EVENT_TRACE_HEADER .
Driver harus terus mencatat peristiwa jejak yang terkait dengan GUID kontrol hingga driver menerima pemberitahuan untuk menonaktifkan pengelogan peristiwa melalui permintaan IRP_MN_DISABLE_EVENTS .