Receber eventos o tempo todo

Talvez você queira gravar um aplicativo que possa reagir a eventos a qualquer momento. Por exemplo, um administrador pode querer receber uma mensagem de email quando medidas de desempenho específicas diminuem nos servidores de rede. Nesse caso, seu aplicativo deve ser executado o tempo todo. No entanto, executar um aplicativo continuamente não é um uso eficiente dos recursos do sistema. Em vez disso, o WMI permite que você crie um consumidor permanente de eventos. Os consumidores permanentes de eventos devem atender aos requisitos especiais de segurança. Para obter mais informações, consulte Proteger eventos do WMI.

Um consumidor permanente de eventos recebe eventos até que seu registro seja explicitamente cancelado.

Um consumidor permanente de eventos é uma combinação das seguintes classes WMI, filtros e objetos COM que residem em seu sistema:

  • Um objeto COM chamado consumidor físico. O WMI fornece vários consumidores permanentes padrão. Por exemplo, o consumidor de eventos de script ativo executa um script quando ocorre um evento.
  • Uma nova classe de consumidores permanentes.
  • Uma instância da classe de consumidores permanentes chamada consumidor lógico.
  • Um filtro que contém a consulta de evento.
  • Uma vinculação entre o consumidor e o filtro.

As propriedades de um consumidor de evento lógico especificam as ações a serem executadas quando notificadas de um evento, mas não definem as consultas de evento às quais estão associadas. Quando sinalizado, o WMI carrega automaticamente o objeto COM que representa o consumidor permanente de eventos na memória ativa. Normalmente, isso ocorre durante a inicialização ou em resposta a um evento de gatilho. Após ser ativado, o consumidor permanente de eventos atua como um consumidor normal de eventos, mas permanece até ser descarregado especificamente pelo sistema operacional.

Você pode gravar seu próprio consumidor permanente de eventos ou usar as Classes de consumidores padrão pré-instaladas do WMI, como ActiveScriptEventConsumer. Para obter mais informações, consulte Classes de consumidores padrão, Monitorar e responder a eventos com consumidores padrão e Eventos de monitoramento.

O procedimento a seguir descreve como criar seu próprio consumidor permanente de eventos.

Para criar seu próprio consumidor permanente de eventos

  1. Determine o tipo de evento que deseja receber.

    O WMI dá suporte a eventos intrínsecos e extrínsecos. Um evento intrínseco é um evento predefinido pelo WMI, enquanto um evento extrínseco é um evento definido por um provedor terceiro. Para obter mais informações, consulte Determinar o tipo de evento a receber.

  2. Implemente um consumidor físico.

    A principal diferença entre um aplicativo de gerenciamento e um consumidor físico é que um usuário carrega e descarrega um aplicativo de gerenciamento, enquanto o WMI carrega e descarrega um consumidor físico. A maior parte da codificação deve estar no consumidor físico.

    Observação

    Esta etapa é a primeira no procedimento para facilitar a explicação. Em termos de codificação, você deve realmente criar o consumidor físico por último. Dessa forma, você pode definir seus parâmetros e lógica para seu provedor de eventos permanente antes de iniciar a codificação longa. No entanto, não há nenhuma restrição para escrever o consumidor físico primeiro.

     

  3. Crie uma nova classe de consumidores que descreva o consumidor físico.

    Como qualquer classe, a classe de consumidores descreve os parâmetros gerais de um consumidor permanente de eventos para WMI.

  4. Crie uma instância da classe de consumidores.

    Como qualquer outra classe do WMI, você deve criar uma instância da classe de consumidores se quiser implementar a classe. Uma instância de uma classe de consumidores também é conhecida como um consumidor lógico. O consumidor lógico representa o consumidor físico para WMI.

  5. Crie um filtro de evento.

    As consultas de evento que ativam consumidores permanentes de eventos são chamadas de filtros de evento. Um único filtro de evento pode ser associado a vários consumidores lógicos de eventos. Além disso, vários filtros de evento podem ser associados a um único consumidor lógico de eventos. O filtro é uma instância de __EventFilter.

    Um evento de log NT é gerado quando a consulta de um consumidor permanente de eventos falha. A origem do evento é WinMgmt, a ID do evento é 10 e o tipo de evento é Error.

  6. Vincule o filtro de evento ao consumidor lógico.

    Ao vincular o filtro de evento ao consumidor lógico, você instrui o WMI sobre qual filtro de evento pertence a qual consumidor lógico. Os consumidores lógicos de eventos e os filtros de evento são vinculados por uma instância de classe de associação de __FilterToConsumerBinding. Quando um evento que corresponde a uma consulta de evento descrita em um filtro de evento é recebido, o WMI localiza o consumidor lógico de eventos associado examinando a instância da classe de associação. Depois que a instância de consumidor lógico de eventos estiver localizada, o WMI usará uma instância da classe __EventConsumerProviderRegistration para localizar e executar o consumidor físico de eventos associado a essa instância.

  7. Gravar um provedor de consumidores de eventos.

    O provedor de consumidores de eventos é um objeto COM que localiza o consumidor físico para o WMI.