Fornitura di eventi in modo sicuro

È possibile impedire agli utenti non autorizzati di ricevere eventi a cui non devono avere accesso. Il provider di eventi può fornire istanze delle proprie classi di evento, proprio come il provider del Registro di sistema fornisce classi come RegistryKeyChangeEvent. Il provider di eventi può anche recapitare eventi intrinseci, ad esempio __InstanceCreationEvent. Per altre informazioni, vedere Scrittura di un provider di eventi.

Un provider di eventi può controllare l'accesso ai destinatari degli eventi nei modi seguenti:

  • L'uso del controllo di accesso implementando IWbemEventProviderSecurity::AccessCheck è il modo più efficiente.

    Il provider determina se il consumer dispone dei privilegi per ricevere un evento richiesto. Se il consumer non dispone di privilegi sufficienti per la registrazione, WMI restituisce un errore di accesso negato. Usare questa modalità quando il provider può prendere la decisione su chi può ricevere eventi. Ad esempio, un provider può fornire eventi correlati alla sicurezza e può richiedere che l'utente disponga dei privilegi di amministratore con il privilegio SeSecurityPrivilege abilitato.

  • L'implementazione di IWbemEventSink::SetSinkSecurity nel sink usato per generare eventi consente l'impostazione di un descrittore di sicurezza (SD) in un sink per tutti gli eventi che passano.

    WMI esegue controlli di accesso basati su SD. Usare questa modalità quando il provider non può prendere la decisione relativa a chi è autorizzato a utilizzare gli eventi, ma può decidere su un SD per un sink specifico. Ad esempio, usare IWbemEventSink::SetSinkSecurity se il provider di eventi ha ottenuto diversi sink tramite chiamate a IWbemEventSink::GetRestrictedSink e si vuole un descrittore di sicurezza per ogni sink.

  • L'impostazione della proprietà SECURITY_DESCRIPTOR di un evento consente l'impostazione di una sd per ogni evento.

    Usare questo approccio quando ogni evento recapitato al sink può avere descrittori di sicurezza diversi. Per usare questo approccio, derivare qualsiasi classe di evento estrinsica definita dal provider da __Event o __ExtrinsicEvent in modo che la classe contenga la proprietà SECURITY_DESCRIPTOR . Ad esempio, il provider di eventi può pubblicare eventi sicuri e normali tramite un sink. In questo caso, usare il descrittore di sicurezza dell'account Administrators per gli eventi sicuri e un descrittore di sicurezza NULL per gli eventi normali che possono essere ricevuti da chiunque.

Protezione degli eventi da provider di eventi disaccoppiati

I provider di eventi disaccoppiati differiscono dai provider di eventi nondecoupled nel modo in cui vengono registrati con WMI. La chiamata a IWbemEventProviderSecurity::AccessCheck per gli eventi da un provider disaccoppiato non propaga mai il token di accesso client. WMI gestisce il controllo di accesso nello stesso modo dei provider di eventi nondecoupled. Per altre informazioni sulla scrittura di un provider disaccoppiato, vedere Incorporazione di un provider in un'applicazione.

Solo gli amministratori con il privilegio FULL_WRITE impostato nel controllo WMI del Pannello di controllo possono generare eventi per uno spazio dei nomi. Per altre informazioni, vedere Impostazione della sicurezza dello spazio dei nomi con il controllo WMI.

Protezione degli eventi WMI