Réception d’événements en permanence

Vous pouvez écrire une application qui peut réagir aux événements à tout moment. Par exemple, un administrateur peut souhaiter recevoir un e-mail lorsque des mesures de performances spécifiques diminuent sur les serveurs réseau. Dans ce cas, votre application doit s’exécuter en permanence. Toutefois, l’exécution continue d’une application ne constitue pas une utilisation efficace des ressources système. Au lieu de cela, WMI vous permet de créer un consommateur d’événements permanent. Les consommateurs d’événements permanents doivent répondre à des exigences de sécurité particulières. Pour plus d’informations, consultez Sécurisation des événements WMI.

Un consommateur d’événements permanent reçoit des événements jusqu’à ce que son inscription soit explicitement annulée.

Un consommateur d’événements permanent est une combinaison des classes, filtres et objets COM WMI suivants qui résident sur votre système :

  • Un objet COM appelé consommateur physique. WMI fournit plusieurs consommateurs permanents standard. Par exemple, le consommateur d’événements de script actif exécute un script quand un événement se produit.
  • Une nouvelle classe de consommateur permanent.
  • Une instance de la classe de consommateur permanent appelée consommateur logique.
  • Un filtre contenant la requête pour les événements.
  • Une liaison entre le consommateur et le filtre.

Les propriétés d’un consommateur d’événements logiques spécifient les actions à effectuer en cas de notification d’un événement, mais ne définissent pas les requêtes d’événements auxquelles elles sont associées. Lorsqu’il est averti, WMI charge automatiquement l’objet COM qui représente le consommateur d’événements permanent dans la mémoire active. En règle générale, cela se produit au démarrage ou en réponse à un événement déclencheur. Après avoir été activé, le consommateur d’événements permanent agit comme un consommateur d’événements normal, mais reste jusqu’à ce qu’il soit déchargé spécifiquement par le système d’exploitation.

Vous pouvez écrire votre propre consommateur d’événements permanent ou utiliser les classes de consommateur standard préinstallées WMI, telles que ActiveScriptEventConsumer. Pour plus d’informations, consultez Classes de consommateur standard, Surveillance et réponse aux événements avec les consommateurs standard et Surveillance des événements.

La procédure suivante décrit comment créer votre propre consommateur d’événements permanent.

Pour créer votre propre consommateur d’événements permanent

  1. Déterminez le type d’événement que vous souhaitez recevoir.

    WMI prend en charge les événements intrinsèques et extrinsèques. Un événement intrinsèque est un événement prédéfini par WMI, tandis qu’un événement extrinsèque est un événement défini par un fournisseur tiers. Pour plus d’informations, consultez Détermination du type d’événement à recevoir.

  2. Implémentez un consommateur physique.

    La différence principale entre une application de gestion et un consommateur physique tient au fait qu’un utilisateur charge et décharge une application de gestion, tandis que WMI charge et décharge un consommateur physique. La plupart de votre codage doit être dans le consommateur physique.

    Notes

    Cette étape est la première de la procédure visant à faciliter l’explication. En termes de codage, vous devez en fait créer le consommateur physique en dernier. De cette façon, vous pouvez mettre en place vos paramètres et votre logique pour votre fournisseur d’événements permanent avant de commencer à coder longuement. Toutefois, aucune restriction n’empêche l’écriture du consommateur physique en premier.

     

  3. Créez une nouvelle classe de consommateur décrivant le consommateur physique.

    Comme pour toute classe, la classe de consommateur décrit les paramètres généraux d’un consommateur d’événements permanent à WMI.

  4. Créez une instance de la classe de consommateur.

    Comme avec toute autre classe WMI, vous devez créer une instance de la classe de consommateur si vous souhaitez implémenter cette classe. Une instance d’une classe de consommateur est également appelée consommateur logique. Le consommateur logique représente le consommateur physique pour WMI.

  5. Créez un filtre d’événement.

    Les requêtes d’événement qui activent des consommateurs d’événements permanents sont appelées filtres d’événements. Un filtre d’événements unique peut être associé à plusieurs consommateurs d’événements logiques. De plus, plusieurs filtres d’événements peuvent être associés à un consommateur d’événements logiques unique. Le filtre est un instance de __EventFilter.

    Un événement de journal NT est généré quand une requête du consommateur d’événements permanent échoue. La source de l’événement est WinMgmt, l’ID de l’événement est 10 et le type de l’événement est Erreur.

  6. Liez le filtre d’événements au consommateur logique.

    En liant le filtre d’événements au consommateur logique, vous indiquez à WMI quel filtre d’événements appartient à quel consommateur logique. Les consommateurs d’événements logiques et les filtres d’événements sont liés par une instance de classe d’association __FilterToConsumerBinding. Quand un événement correspondant à une requête d’événement décrite dans un filtre d’événements est reçu, WMI recherche le consommateur d’événements logiques associé en examinant l’instance de classe d’association. Une fois l’instance de consommateur d’événements logiques localisée, WMI utilise une instance de la classe __EventConsumerProviderRegistration pour localiser et exécuter le consommateur d’événements physiques associé à cette instance.

  7. Écriture d’un fournisseur de consommateurs d’événements.

    Le fournisseur de consommateurs d’événements est un objet COM qui localise le consommateur physique pour WMI.