Otimizando um provedor de eventos
Um provedor de eventos pode dedicar muito tempo à criação de eventos. Se nenhum aplicativo cliente usar os eventos criados, o provedor está desperdiçando recursos do sistema. Além disso, o WMI gasta uma quantidade considerável de recursos analisando e enviando consultas complexas para o provedor apropriado. Para evitar o desperdício de recursos do sistema e melhorar o desempenho do seu provedor de eventos, pode implementar a interface IWbemEventProviderQuerySink . IWbemEventProviderQuerySink monitora as consultas que as aplicações cliente registam com o WMI usando os métodos NewQuery e CancelQuery. Ao monitorar as consultas de clientes registrados, seu provedor pode determinar se alguma mensagem deve ser enviada ao WMI.
O WMI chama NewQuery num fornecedor de eventos quando um cliente regista uma consulta de filtro de eventos que contém referências a eventos suportados por esse fornecedor de eventos. Assim, o provedor de eventos responsável por eventos de modificação de instância para a classe EmailClass pode ser configurado para gerar notificações apenas para o remetente. Quando o provedor recebe uma solicitação solicitando notificação de alterações no assunto , propriedade, o provedor pode começar a gerar essas notificações. Nesse cenário, não é necessário que o WMI descarte as notificações que relatam alterações apenas no destinatário .
Da mesma forma, o WMI chama CancelQuery num provedor de eventos quando um cliente anula o registo de uma consulta de filtro de eventos que inclui referências a eventos suportados pelo provedor de eventos. O objetivo de CancelQuery é que o provedor de eventos atualize a lista de quais eventos devem ser enviados.
Observação
Se o seu provedor oferecer suporte a IWbemEventProvider e IWbemEventProviderQuerySink , certifique-se de que sua implementação do método IUnknown::QueryInterface retorne ponteiros para ambas as interfaces.