Partilhar via


Implementando a interface primária para um provedor de eventos

Um provedor de eventos deve implementar a interfaceIWbemEventProvider para gerar notificações de eventos. 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 está pronto para gerar uma notificação, o provedor chama o IWbemObjectSink::Indicate método.

Um provedor de eventos deve colocar as notificações geradas por meio IWbemEventProvider em objetos de evento. Você deve implementar objetos de evento como entradas em um array de interfaces IWbemClassObject representadas pelo parâmetro ppObjArray do método Indicate. Como os IWbemClassObjects são objetos COM, o provedor deve incrementar a contagem de referência para o sink chamando o método IWbemObjectSink::AddRef. Os provedores de eventos que devem 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 retém um objeto de evento após a conclusão da chamada Indicar e não possui 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 o atendimento de uma chamada de cliente.

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

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

    Se você não processar a solicitação, reativar o evento pode impedir que o evento seja aceito.

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