Détermination du type d’événement à recevoir

Avant de vous inscrire pour recevoir un événement, vous devez déterminer les types d’événements à recevoir : intrinsèque ou extrinsèque. Pour plus d’informations sur la réception d’événements, consultez réception d’un événement WMI. Pour plus d’informations sur la façon de fournir des événements, consultez développement d’un fournisseur WMI et écriture d’un fournisseur d’événements. Pour plus d’informations sur les problèmes de sécurité liés à la réception et à la fourniture d’événements, consultez sécurisation des événements WMI.

Événements intrinsèques

Un événement intrinsèque est un événement qui se produit en réponse à une modification dans le modèle de données WMI standard. Chaque classe d'événement intrinsèque représente un type spécifique de modification et se produit lorsque WMI ou un fournisseur crée, supprime ou modifie un espace de noms, une classe ou une instance de classe. Par exemple, la création d’une instance de _ disque logique Win32 se traduirait par une instance _ _ InstanceCreationEvent .

WMI crée des événements intrinsèques pour les objets stockés dans l’espace de stockage WMI. Un fournisseur génère des événements intrinsèques pour les classes dynamiques, mais WMI peut créer une instance pour une classe dynamique si aucun fournisseur n’est disponible. WMI utilise l’interrogation pour détecter les modifications. Le tableau suivant répertorie les classes système que WMI utilise pour signaler des événements intrinsèques.

Classe système Description
__ClassCreationEvent Avertit un consommateur lorsqu’une classe est créée.
__ClassDeletionEvent Avertit un consommateur lorsqu’une classe est supprimée.
__ClassModificationEvent Avertit un consommateur lorsqu’une classe est modifiée.
__InstanceCreationEvent Avertit un consommateur lorsqu’une instance de classe est créée.
__InstanceOperationEvent Avertit un consommateur lorsqu’un événement d’instance se produit, par exemple la création, la suppression ou la modification de l’instance. Vous pouvez utiliser cette classe dans les requêtes pour récupérer tous les événements de type associés à une instance.
__InstanceDeletionEvent Avertit un consommateur lorsqu’une instance est supprimée.
__InstanceModificationEvent Avertit un consommateur lorsqu’une instance est modifiée.
__NamespaceCreationEvent Avertit un consommateur lorsqu’un espace de noms est créé.
__NamespaceDeletionEvent Avertit un consommateur lorsqu’un espace de noms est supprimé.
__NamespaceModificationEvent Avertit un consommateur lorsqu’un espace de noms est modifié.
__ConsumerFailureEvent Avertit un consommateur lorsqu’un autre événement est abandonné en raison d’un échec sur la partie d’un consommateur d’événements.
__EventDroppedEvent Avertit un consommateur lorsqu’un autre événement est supprimé au lieu d’être remis au consommateur d’événements demandeur.
__EventQueueOverflowEvent Avertit un consommateur lorsqu’un événement est abandonné à la suite d’un dépassement de capacité de la file d’attente de remise.
__MethodInvocationEvent Avertit un consommateur lorsqu’un événement d’appel de méthode se produit.

Événements extrinsèques

Un événement extrinsèque est une occurrence prédéfinie qui ne peut pas être liée directement à des modifications dans le modèle de données WMI. Par conséquent, WMI permet à un fournisseur d’événements de définir une classe d’événements qui décrit l’événement. Par exemple, un événement qui décrit un ordinateur qui bascule en mode veille est un événement extrinsèque. Un fournisseur dérive un événement extrinsèque de la classe système _ _ ExtrinsicEvent , qui est une sous-classe de la classe de système d' _ _ événements . Le Registre système et les fournisseurs SNMP définissent des classes d’événements extrinsèques, telles que RegistryKeyChangeEvent, qui avertissent un consommateur lorsqu’une clé de Registre est modifiée. Pour plus d’informations, consultez inscription aux événements de Registre système et écriture d’un fournisseur d’événements.

Dans l’exemple suivant, un fournisseur d’événements signale des violations de sécurité à un ou plusieurs bâtiments. La classe suivante peut être définie pour l’événement extrinsèque représentant une violation de sécurité.

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

Pour recevoir les notifications de violation de sécurité, un consommateur s’inscrit pour le type d’événement SecurityViolationEvent. Sauf indication contraire, un consommateur reçoit une notification de toutes les violations de sécurité pendant toutes les périodes de temps et dans tous les bâtiments. La classe d’événements contient également des informations que les consommateurs peuvent utiliser pour demander des événements plus spécifiques.

Dans l’exemple suivant, la requête inscrit le consommateur pour les événements de violation de sécurité dans la génération 24 uniquement.

SELECT * FROM SecurityViolationEvent WHERE Building = 24;