Bagikan melalui


Pelacakan Peristiwa WMI

Bagian ini menjelaskan ekstensi WMI untuk WDM (didukung oleh Windows 2000 dan yang lebih baru) yang dapat digunakan oleh 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.

Logger pelacakan event mendukung hingga 32 instans. Salah satu instans dicadangkan untuk melacak kernel. Pencatat mendukung pelacakan tingkat kejadian 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:

  1. Daftar sebagai penyedia WMI dengan memanggil IoWMIRegistrationControl.

  2. Tandai peristiwa sebagai dapat ditelusuri dengan mengatur WMIREG_FLAG_TRACED_GUID di anggota Flags struktur WMIREGGUID yang diteruskan saat driver mendaftarkan peristiwa ke WMI.

  3. Tentukan satu peristiwa sebagai peristiwa kontrol untuk mengaktifkan/menonaktifkan serangkaian peristiwa pelacakan secara keseluruhan dengan mengatur WMIREG_FLAG_TRACE_CONTROL_GUID di anggota Bendera struktur WMIREGGUID yang diteruskan saat driver mendaftarkan peristiwa dengan WMI.

  4. Setelah menerima permintaan dari WMI untuk mengaktifkan peristiwa di mana GUID cocok dengan GUID kontrol pelacakan, driver harus menyimpan handle ke perekam. Nilai akan diperlukan saat menulis peristiwa. Untuk informasi tentang cara menggunakan handle ini, lihat langkah 6. Nilai handle pencatat terkandung dalam anggota HistoricalContext dari bagian WNODE_HEADER buffer WMI yang termasuk dalam parameter permintaan pengaktifan peristiwa.

  5. 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 memasukkan buffer pada stack 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 dibebaskan oleh WMI sesuai dengan perilaku IoWMIWriteEvent.

  6. Setelah memori untuk EVENT_TRACE_HEADER dan data peristiwa dari driver, jika ada, telah diamankan, pengaturan informasi berikut harus dilakukan:

    Atur anggota Ukuran ke sizeof(EVENT_TRACE_HEADER) ditambah ukuran data peristiwa driver tambahan yang akan dilampirkan pada akhir EVENT_TRACE_HEADER.

    Atur anggota Flags ke WNODE_FLAG_TRACED_GUID agar peristiwa kejadian dikirim ke logger. Jika acara juga akan dikirim ke konsumen acara WMI, atur WNODE_FLAG_LOG_WNODE. Perhatikan, tidak perlu mengatur WNODE_FLAG_TRACED_GUID jika mengatur WNODE_FLAG_LOG_WNODE. Jika keduanya ditetapkan, WNODE_FLAG_TRACED_GUID akan diutamakan dan acara tidak akan dikirim ke konsumen acara WMI.

    Atur anggota Guid atau 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 cap waktu maka harus menyetel WNODE_FLAG_USE_TIMESTAMP di anggota Flags.

    Atur salah satu anggota EVENT_TRACE_HEADER berikut yang memiliki arti ke driver: Class.Type, Class.Level, dan Class.Version.

    Akhirnya konversikan EVENT_TRACE_HEADER ke WNODE_HEADER dan tetapkan nilai HistoricalContext pada Wnode ke handle logger yang disimpan pada langkah 4 di atas.

  7. Panggil IoWMIWriteEvent dengan pointer ke struktur EVENT_TRACE_HEADER .

Driver harus terus mencatat peristiwa pelacakan yang terkait dengan GUID kontrol hingga driver menerima pemberitahuan untuk menonaktifkan pengelogan peristiwa melalui permintaan IRP_MN_DISABLE_EVENTS .