Determinar o tipo de evento a receber

Antes de se registrar para receber um evento, você deve determinar os tipos de eventos a serem recebidos: intrínsecos ou extrínsecos. Para obter mais informações sobre como receber eventos, consulte Receber um evento do WMI. Para obter mais informações sobre como fornecer eventos, confira Desenvolver um provedor do WMI e Escrever um provedor de eventos. Para obter mais informações sobre as preocupações de segurança para receber e fornecer eventos, consulte Proteger eventos do WMI.

Eventos intrínsecos

Um evento intrínseco é um evento que ocorre em resposta a uma alteração no modelo de dados do WMI padrão. Cada classe de evento intrínseca representa um tipo específico de alteração e ocorre quando o WMI ou um provedor cria, exclui ou modifica um namespace, uma classe ou uma instância de classe. Por exemplo, a criação de uma instância de Win32_LogicalDisk resultaria em uma instância __InstanceCreationEvent.

O WMI cria eventos intrínsecos para objetos armazenados no repositório do WMI. Um provedor gera eventos intrínsecos para classes dinâmicas, mas o WMI pode criar uma instância de uma classe dinâmica se nenhum provedor estiver disponível. O WMI usa sondagem para detectar as alterações. A tabela a seguir lista as classes do sistema que o WMI usa para relatar eventos intrínsecos.

System.Class Description
__ClassCreationEvent Notifica um consumidor quando uma classe é criada.
__ClassDeletionEvent Notifica um consumidor quando uma classe é excluída.
__ClassModificationEvent Notifica um consumidor quando uma classe é modificada.
__InstanceCreationEvent Notifica um consumidor quando uma instância de classe é criada.
__InstanceOperationEvent Notifica um consumidor quando ocorre qualquer evento de instância, como criação, exclusão ou modificação da instância. Você pode usar essa classe em consultas para obter todos os tipos de eventos associados a uma instância.
__InstanceDeletionEvent Notifica um consumidor quando uma instância é excluída.
__InstanceModificationEvent Notifica um consumidor quando uma instância é modificada.
__NamespaceCreationEvent Notifica um consumidor quando um namespace é criado.
__NamespaceDeletionEvent Notifica um consumidor quando um namespace é excluído.
__NamespaceModificationEvent Notifica um consumidor quando um namespace é modificado.
__ConsumerFailureEvent Notifica um consumidor quando algum outro evento é descartado devido a uma falha por parte de um consumidor de evento.
__EventDroppedEvent Notifica um consumidor quando algum outro evento é descartado em vez de ser entregue ao consumidor do evento solicitante.
__EventQueueOverflowEvent Notifica um consumidor quando um evento é descartado como resultado de um estouro da fila de entrega.
__MethodInvocationEvent Notifica um consumidor quando ocorre um evento de chamada de método.

 

Eventos extrínsecos

Um evento extrínseco é uma ocorrência predefinida que não pode ser vinculada diretamente a alterações no modelo de dados do WMI. Portanto, o WMI permite que um provedor de eventos defina uma classe de evento que descreva o evento. Por exemplo, um evento que descreve um computador alternando para o modo de espera é um evento extrínseco. Um provedor deriva um evento extrínseco da classe do sistema __ExtrinsicEvent, que é uma subclasse da classe do sistema __Event. O Registro do Sistema e os provedores do SNMP definem classes de evento extrínsecas, como RegistryKeyChangeEvent, que notifica um consumidor quando uma chave do Registro é alterada. Para obter mais informações, consulte Registrar-se para eventos do Registro do Sistema e Escrever um provedor de eventos.

No exemplo a seguir, um provedor de eventos está relatando violações de segurança em uma ou mais compilações. A classe a seguir pode ser definida para o evento extrínseco que representa uma violação de segurança.

class SecurityViolationEvent : __ExtrinsicEvent
{
   string Building;           // building where violation occurred
   sint32 EntranceNumber;     // entrance where violation occurred
   datetime TimeOfDetection;  // date and time of violation
}

Para receber as notificações de violação de segurança, um consumidor registra-se no tipo de evento SecurityViolationEvent. A menos que seja especificado de outra forma, um consumidor recebe uma notificação de todas as violações de segurança durante todos os períodos de tempo e em todas as compilações. A classe de evento também contém informações que os consumidores podem usar para solicitar eventos mais específicos.

No exemplo a seguir, a consulta registra o consumidor em eventos de violação de segurança somente na compilação 24.

SELECT * FROM SecurityViolationEvent WHERE Building = 24;