Como gravar um provedor de eventos

Um provedor de eventos é um objeto COM que fornece ao WMI notificações de eventos intrínsecos e extrínsecos. Um evento intrínseco relata uma alteração de dados interna para WMI, enquanto um evento extrínseco relata um evento definido pelo usuário não descrito por um evento intrínseco. Por exemplo, um evento em resposta à alteração, criação ou exclusão da classe Win32_LogicalDisk seria classificado como evento intrínseco. Um evento gerado com base em algo diferente da modificação, criação ou exclusão de um objeto WMI existente é um evento extrínseco. Independentemente da classe com suporte, você pode implementar todos os provedores de eventos da mesma maneira.

O procedimento a seguir descreve como implementar um provedor de eventos.

Para implementar um provedor de eventos

  1. Crie e registre seu provedor de classe com o WMI.

    Os provedores da classe registram-se no WMI criando uma instância de __Win32Provider e uma classe __EventProviderRegistration. Para obter mais informações, confira Como registrar um provedor de eventos.

  2. Implemente a interface IWbemProviderInit em seu provedor.

    A interface IWbemProviderInit é uma interface comum que o WMI usa para carregar e inicializar todos os provedores. Para obter mais informações, confira Como inicializar um provedor.

  3. Implemente o IWbemEventProvider como a interface primária para seu provedor.

    A interface IWbemEventProvider usa o método ProviderEvents para fornecer eventos ao WMI. Para obter mais informações, confira Como implementar a interface primária para um provedor de eventos.

    Observação

    Os provedores de eventos devem usar o modelo multithreading "Both".

     

  4. Opcionalmente, você também pode implementar a interface IWbemEventProviderQuerySink para aumentar o desempenho do provedor de eventos.

    A interface IWbemEventProviderQuerySink permite que o provedor otimize as consultas, antes de enviar uma resposta ao WMI, e é mais útil para um provedor que fornece eventos de vários tipos e que precisa executar o máximo possível de otimizações internas. Para obter mais informações, confira Como otimizar um provedor de eventos.

  5. Implemente a interface IWbemEventProviderSecurity para limitar os consumidores a determinados SIDs (identificadores de segurança) ou implementar IWbemEventSink::SetSinkSecurity para proteger o próprio coletor. O provedor também pode definir a propriedade SECURITY_DESCRIPTOR na classe de evento para proteger eventos individuais no código MOF. Para obter mais informações, confira Como proteger eventos do WMI.

  6. Adicione qualquer código adicional necessário para o provedor.

    Ao projetar o provedor, você provavelmente precisará chamar as interfaces da WMI. Para obter mais informações, confira Como chamar um método.

    Ao recuperar informações para um cliente, talvez seja necessário acessar os níveis de segurança desse cliente. Para obter mais informações, confira Como representar um cliente.

  7. Substitua o provedor preexistente pelo novo código.

    Você não precisa executar esta etapa caso não tenha um provedor preexistente para copiar. Para obter mais informações, confira Como atualizar um provedor.

Um aplicativo cliente pode solicitar um evento registrando-se no WMI como consumidor de evento. Para obter mais informações, confira Como receber um evento do WMI.