Fornecer eventos com segurança

Você pode impedir que usuários não autorizados recebam eventos aos quais eles não devem ter acesso. Seu provedor de eventos pode fornecer instâncias de suas próprias classes de evento, assim como o Provedor de Registro do Sistema fornece classes como RegistryKeyChangeEvent. Seu provedor de eventos também pode fornecer eventos intrínsecos, como __InstanceCreationEvent. Para obter mais informações, consulte Escrever um provedor de eventos.

Um provedor de eventos pode controlar o acesso aos destinatários de eventos das seguintes maneiras:

  • Usando o controle de acesso implementando IWbemEventProviderSecurity::AccessCheck é a maneira mais eficiente.

    O provedor determina se o consumidor tem privilégios para receber o evento solicitado. Se o consumidor não tiver privilégios suficientes para se registrar, o WMI retornará um erro de acesso negado. Use esse modo quando o provedor puder tomar a decisão sobre quem pode receber eventos. Por exemplo, um provedor pode fornecer eventos relacionados à segurança e pode exigir que o consumidor tenha privilégios de administrador com o privilégio SeSecurityPrivilege habilitado.

  • Implementar IWbemEventSink::SetSinkSecurity no coletor usado para gerar eventos permite definir um descritor de segurança (SD) em um coletor para todos os eventos que passam por ele.

    O WMI executa verificações de acesso com base no SD. Use esse modo quando o provedor não puder tomar a decisão sobre quem tem permissão para consumir seus eventos, mas puder decidir sobre um SD para um coletor específico. Por exemplo, use IWbemEventSink::SetSinkSecurity se o provedor de eventos tiver obtido vários coletores por meio de chamadas a IWbemEventSink::GetRestrictedSink e você desejar um descritor de segurança para cada coletor.

  • Definir a propriedade SECURITY_DESCRIPTOR de um evento permite a configuração de um SD para cada evento.

    Use essa abordagem quando cada evento entregue ao coletor puder ter descritores de segurança diferentes. Para usar essa abordagem, derive qualquer uma das classes de evento extrínsecas definidas pelo provedor de __Event ou __ExtrinsicEvent para que sua classe contenha a propriedade SECURITY_DESCRIPTOR. Por exemplo, seu provedor de eventos pode publicar eventos seguros e normais por meio de um coletor. Nesse caso, use o descritor de segurança da conta de administradores para eventos seguros e um descritor de segurança NULL para eventos normais que podem ser recebidos por qualquer pessoa.

Proteger eventos por provedores de eventos desacoplados

Os provedores de eventos desacoplados diferem dos provedores de eventos não desacoplados na maneira como se registram no WMI. A chamada para IWbemEventProviderSecurity::AccessCheck para eventos de um provedor desacoplado nunca propaga o token de acesso do cliente. O WMI trata do controle de acesso da mesma forma para provedores de eventos não desacoplados. Para obter mais informações sobre como escrever um provedor desacoplado, consulte Incorporar um provedor em um aplicativo.

Somente os administradores com o privilégio FULL_WRITE definido no Controle do WMI do Painel de Controle têm permissão para gerar eventos para um namespace. Para obter mais informações, consulte Configurar a segurança do namespace com o Controle do WMI.

Proteger eventos do WMI