Partilhar via


Vinculando um filtro de evento com um consumidor lógico

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

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

Para vincular um filtro de eventos a um consumidor lógico

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

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

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

  3. Defina a propriedade Consumer como a instância do seu 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 eventos de forma 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 em 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 usar comunicação semissíncrona em vez de assíncrona. Consulte Chamando um Métodopara mais informações.

     

  5. Ao cancelar o registo do consumidor do evento lógico, certifique-se de excluir a instância __FilterToConsumerBinding.

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

O exemplo de código a seguir mostra uma instância de __FilterToConsumerBinding, que associa uma instância de uma classe ActiveScriptEventConsumer a um filtro de evento específico (a instância do consumidor de evento foi criada no tópico Criação de um Consumidor Lógico e o filtro de eventos foi criado no tópico Criação de um Filtro de Eventos).

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 Administradores local.

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

Quando um filtro é vinculado a um consumidor lógico, o evento é registrado por de Rastreamento de Eventos para Windows (ETW). Para obter mais informações, consulte Rastreamento da Atividade WMI.

receber eventos em todos os momentos