Associar um filtro de evento com um consumidor lógico

Depois de criar o consumidor de eventos lógicos e o filtro de evento, você deve vinculá-los, o que registra o consumidor lógico para receber uma notificação sobre os eventos especificados pelo filtro.

O procedimento a seguir descreve como associar um filtro de evento a um consumidor lógico.

Para associar um filtro de evento a um consumidor lógico

  1. Crie uma instância da classe do sistema __FilterToConsumerBinding no repositório do WMI.

    A classe __FilterToConsumerBinding é uma classe de associação que vincula a instância de filtro de evento e a instância de consumidor lógico por meio das propriedades de referência Filter e Consumer. Para obter mais informações, veja Declarar uma classe de associação.

  2. Defina a propriedade Filter como a instância do filtro.

  3. Defina a propriedade Consumer como a instância do consumidor lógico.

  4. Defina a propriedade DeliverSynchronously para determinar o tipo de entrega desejado.

    A propriedade DeliverSynchronously determina quando o WMI entrega notificações de evento de maneira síncrona ou assíncrona. Definir essa propriedade como TRUE solicita uma entrega síncrona. Use a entrega síncrona somente quando o consumidor permanente puder processar eventos dentro de aproximadamente 100 microssegundos.

    Observação

    Como o retorno de chamada para o coletor pode não ser retornado no mesmo nível de autenticação exigido pelo cliente, é recomendável que você use comunicação semissíncrona em vez de assíncrona. Para obter mais informações, consulte Chamar um método.

     

  5. Ao cancelar o registro do consumidor de eventos lógicos, exclua a instância __FilterToConsumerBinding.

    Cada instância de __FilterToConsumerBinding representa um registro para uma notificação de evento específica. Quando você exclui uma associação, o WMI desativa o registro. Talvez seja necessário excluir as instâncias do consumidor lógico e do filtro de eventos para desativar o registro, dependendo da implementação.

O exemplo de código a seguir mostra uma instância __FilterToConsumerBinding que associa uma instância de uma classe ActiveScriptEventConsumer a um filtro de evento específico (a instância do consumidor do evento foi criada no tópico Criar um consumidor lógico e o filtro de evento foi criado no tópico Criar um filtro de evento).

instance of __FilterToConsumerBinding
{
    Filter = $FILTER;
    Consumer = $CONSUMER;
    DeliverSynchronously=FALSE;

    // this is the Administrators SID in array of bytes format
    CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}; 
};

Dois consumidores, ActiveScriptEventConsumer e CommandLineEventConsumer, não funcionarão, a menos que seu criador seja membro do grupo local de Administradores.

: Quando um administrador cria uma assinatura, seu SID não é usado para a propriedade CreatorSID, mas o SID do grupo Administradores local é usado. Portanto, mesmo que as instâncias sejam criadas por administradores diferentes, a assinatura funcionará. Para obter mais informações, consulte Receber eventos com segurança.

Quando um filtro é associado a um consumidor lógico, o evento é registrado pelo ETW (Rastreamento de Eventos para Windows). Para obter mais informações, confira Rastreamento da atividade do WMI.

Receber eventos o tempo todo