Implémentation de l’interface principale pour un fournisseur d’événements

Un fournisseur d’événements doit implémenter l’interface IWbemEventProvider pour générer des notifications d’événements. WMI appelle la méthode IWbemEventProvider ::P rovideevents du fournisseur et transmet un pointeur vers l’objet récepteur, qui est une implémentation de l’interface IWbemObjectSink . Lorsque le fournisseur d’événements est prêt à générer une notification, le fournisseur appelle la méthode IWbemObjectSink :: indique .

Un fournisseur d’événements doit placer les notifications générées par le biais de IWbemEventProvider dans les objets d’événement. Vous devez implémenter des objets d’événement en tant qu’entrées dans un tableau d’interfaces IWbemClassObject représenté par le paramètre ppObjArray de la méthode d' indication . Étant donné que les IWbemClassObjects sont des objets com, le fournisseur doit incrémenter le décompte de références pour le récepteur en appelant la méthode IWbemObjectSink :: AddRef . Les fournisseurs d’événements qui doivent fournir de nombreuses notifications (par exemple, les événements 400) doivent créer un objet d’événement unique pour chaque notification en générant une nouvelle instance ou en clonant une instance existante. WMI ne contient jamais un objet d’événement au-delà de la fin de l’appel d' indication , et n’a pas d’exigences spéciales pour le AddRef au-dessus et au-delà de la norme com.

Tenez compte des recommandations suivantes lors de l’implémentation d’un fournisseur d’événements :

  • N’apportez pas de modifications de classe lors de la maintenance d’un appel client.

  • N’émettez pas d’appels liés aux événements, tels qu’un appel qui modifie un filtre d’événement.

  • Traitez toutes les demandes que le service de gestion Windows émet, telles que CancelQuery, avant de réexécuter un événement.

    Si vous ne traitez pas la requête, le déclenchement de l’événement peut empêcher l’événement d’être accepté.

  • N’appelez jamais IWbemObjectSink :: SetStatus à partir d’un fournisseur.