Implementar a interface primária para um provedor de eventos

Um provedor de eventos precisa implementar a interface IWbemEventProvider para gerar notificações de evento. O WMI chama o método IWbemEventProvider::ProvideEvents do provedor e passa um ponteiro para o objeto de coletor, que é uma implementação da interface IWbemObjectSink. Quando o provedor de eventos estiver pronto para gerar uma notificação, ele chamará o método IWbemObjectSink::Indicate.

Um provedor de eventos deve colocar as notificações geradas por meio de IWbemEventProvider em objetos de evento. Implemente objetos de evento como entradas em uma matriz de interfaces IWbemClassObject representadas pelo parâmetro ppObjArray do método Indicate. Como IWbemClassObjects são objetos COM, o provedor precisa incrementar a contagem de referência para o coletor chamando o método IWbemObjectSink::AddRef. Provedores de eventos que precisam fornecer muitas notificações (por exemplo, 400 eventos) devem criar um objeto de evento exclusivo para cada notificação gerando uma nova instância ou clonando uma existente. O WMI nunca mantém um objeto de evento após a conclusão da chamada Indicate e não tem requisitos especiais para AddRef além do padrão COM.

Considere as seguintes diretrizes ao implementar um provedor de eventos:

  • Não faça nenhuma alteração de classe durante a manutenção de uma chamada de cliente.

  • Não emita chamadas relacionadas a eventos, como uma chamada que modifica um filtro de evento.

  • Processe as solicitações que o serviço de Gerenciamento do Windows emite, como CancelQuery, antes de disparar um evento novamente.

    Se você não processar a solicitação, disparar o evento novamente poderá impedir que o evento seja aceito.

  • Nunca chame IWbemObjectSink::SetStatus de dentro de um provedor.