Partilhar via


Fornecendo eventos com segurança

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

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

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

    O provedor determina se o consumidor tem privilégios para receber um 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 SeSecurityPrivilege privilégio habilitado.

  • Implementando IWbemEventSink::SetSinkSecurity no coletor usado para gerar eventos permite a configuração de um descritor de segurança (SD) em um coletor para todos os eventos que passam.

    O WMI executa verificações de acesso com base no SD. Utilize este modo quando o provedor não puder tomar a decisão sobre quem tem permissão para consumir os seus eventos, mas puder decidir por um SD para um coletor específico. Por exemplo, use IWbemEventSink::SetSinkSecurity se o provedor de eventos obteve vários coletores através de chamadas para IWbemEventSink::GetRestrictedSink e pretende um descritor de segurança para cada coletor.

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

    Utilize esta 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ínseco definidas pelo seu 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 Administradores para eventos seguros e um descritor de segurança NULL para eventos normais que podem ser recebidos por qualquer pessoa.

Proteção de Eventos por Fornecedores de Eventos Desacoplados

Os provedores de eventos dissociados diferem dos provedores de eventos não dissociados 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 lida com o controle de acesso da mesma maneira que para provedores de eventos não dissociados. Para obter mais informações sobre como escrever um provedor dissociado, consulte Incorporando um provedor em um aplicativo.

Somente os administradores com o conjunto de privilégios FULL_WRITE definido no Controle WMI do Painel de Controle têm permissão para levantar eventos para um namespace. Para obter mais informações, consulte Definição de Segurança de Namespace com o Controlo WMI.

Protegendo eventos WMI