Menyediakan Peristiwa dengan Aman

Anda dapat mencegah pengguna yang tidak sah menerima peristiwa yang seharusnya tidak mereka akses. Penyedia acara Anda dapat menyediakan instans kelas peristiwanya sendiri, sama seperti Penyedia Registri Sistem menyediakan kelas seperti RegistryKeyChangeEvent. Penyedia acara Anda juga dapat mengirimkan peristiwa intrinsik seperti __InstanceCreationEvent. Untuk informasi selengkapnya, lihat Menulis Penyedia Acara.

Penyedia acara dapat mengontrol akses ke penerima peristiwa dengan cara berikut:

  • Menggunakan kontrol akses dengan menerapkan IWbemEventProviderSecurity::AccessCheck adalah cara yang paling efisien.

    Penyedia menentukan apakah konsumen memiliki hak istimewa untuk menerima peristiwa yang diminta. Jika pengguna tidak memiliki hak istimewa yang memadai untuk mendaftar, WMI mengembalikan kesalahan akses yang ditolak. Gunakan mode ini ketika penyedia dapat membuat keputusan tentang siapa yang dapat menerima peristiwa. Misalnya, penyedia dapat menyediakan peristiwa terkait keamanan dan dapat mengharuskan konsumen memiliki hak istimewa administrator dengan hak istimewa SeSecurityPrivilege diaktifkan.

  • Menerapkan IWbemEventSink::SetSinkSecurity pada sink yang digunakan untuk memicu kejadian memungkinkan pengaturan deskriptor keamanan (SD) pada sink untuk setiap kejadian yang melewati sink.

    WMI melakukan pemeriksaan akses berdasarkan SD. Gunakan mode ini ketika penyedia tidak dapat membuat keputusan mengenai siapa yang diizinkan untuk mengkonsumsi peristiwanya, tetapi dapat memutuskan SD untuk sink tertentu. Misalnya, gunakan IWbemEventSink::SetSinkSecurity jika penyedia acara Anda memperoleh sejumlah sink melalui panggilan ke IWbemEventSink::GetRestrictedSink dan Anda memerlukan deskriptor keamanan untuk setiap sink.

  • Menyetel properti SECURITY_DESCRIPTOR dari suatu peristiwa memungkinkan penyetelan Security Descriptor untuk setiap peristiwa.

    Gunakan pendekatan ini ketika setiap peristiwa yang dikirimkan ke sink dapat memiliki deskriptor keamanan yang berbeda. Untuk menggunakan pendekatan ini, dapatkan salah satu kelas peristiwa ekstrinsik yang ditentukan oleh penyedia Anda dari __Event atau __ExtrinsicEvent sehingga kelas Anda berisi properti SECURITY_DESCRIPTOR. Misalnya, penyedia acara Anda dapat menerbitkan acara aman dan normal melalui saluran sink. Dalam hal ini, gunakan pendeskripsi keamanan akun Administrator untuk peristiwa aman dan pendeskripsi keamanan NULL untuk peristiwa normal yang dapat diterima oleh siapa pun.

Mengamankan Acara dengan Penyedia Acara Terpisah

Penyedia acara yang terpisah berbeda dari penyedia acara yang tidak terpisah dalam cara mereka mendaftar dengan WMI. Panggilan ke IWbemEventProviderSecurity::AccessCheck untuk peristiwa dari penyedia terpisah tidak akan pernah menyebarkan token akses klien. WMI menangani kontrol akses dengan cara yang sama seperti untuk penyedia acara yang tidak terpisah. Untuk informasi selengkapnya tentang menulis penyedia yang terpisah, lihat Memasukkan Penyedia dalam Aplikasi.

Hanya administrator dengan hak istimewa FULL_WRITE yang ditetapkan dalam Kontrol WMI dari Panel Kontrol diizinkan untuk menjalankan peristiwa untuk namespace. Untuk informasi selengkapnya, lihat Mengatur Keamanan Namespace dengan Kontrol WMI.

Mengamankan Peristiwa WMI