Registrar um provedor de eventos

Para criar um provedor de eventos do WMI, você deve registrar a instância __Win32Provider que representa seu provedor usando uma instância de __EventProviderRegistration. Como um objeto do COM, seu provedor deve se registrar no sistema operacional e no WMI. O procedimento a seguir pressupõe que você já implementou o processo de registro, conforme descrito em Registrar um provedor.

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

Para registrar um provedor de eventos

  1. Crie uma instância da classe __Win32Provider que descreve o provedor.

  2. Crie uma instância da classe __EventProviderRegistration que descreve o conjunto de recursos do provedor.

    A classe __EventProviderRegistration herda muitas propriedades da classe pai __ObjectProviderRegistration. As propriedades locais da classe __EventProviderRegistration são o caminho do objeto para o provedor e uma lista de consultas que descreve os eventos aos quais o provedor dá suporte. Para obter mais informações, confira Consultar o WMI.

  3. Carregue a implementação das classes __Win32Provider e __EventProviderRegistration no repositório do WMI.

    O WMI usa sua definição de classe para registrar e acessar seu provedor de eventos. Para obter mais informações, consulte Registrar um provedor.

O exemplo de código a seguir descreve uma implementação de uma classe __Win32Provider e uma classe __EventProviderRegistration.

instance of __Win32Provider as $P
{
    ClientLoadableCLSID = NULL;
    CLSID = "{AA7828C5-95F9-11d2-BB0D-00C042424242}";
    DefaultMachineName = NULL;
    ImpersonationLevel = 0;
    InitializationReentrancy = 0;
    InitializeAsAdminFirst = FALSE;
    Name = "FaxEventProvider";
    PerLocaleInitialization = FALSE;
    PerUserInitialization = FALSE;
    Pure = TRUE;
    UnloadTimeout = NULL;
};

instance of __EventProviderRegistration
{  
Provider = $P;
EventQueryList = {
         "SELECT * FROM FaxEvent",
         "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA \"Win32_LogicalDisk\""};
};

A primeira consulta indica que o provedor gera todas as notificações de evento para a classe de evento extrínseca FaxEvent. Como ele usa o operador ISA, a segunda consulta implica que o provedor gera notificações para todos os eventos de criação de instância para a classe Win32_LogicalDisk e todas as suas subclasses.

Quando um provedor se registra para fornecer um evento intrínseco, o evento deve ser aplicado a todas as instâncias de uma classe. Em outras palavras, não é possível escrever uma consulta para fornecer eventos de criação de instância apenas para algumas das unidades de disco que pertencem à classe Win32_LogicalDisk.