Inscription d’un fournisseur d’événements

Pour créer un fournisseur d’événements WMI, vous devez inscrire l’instance __Win32Provider qui représente votre fournisseur à l’aide d’une instance de __EventProviderRegistration. En tant qu’objet COM, votre fournisseur doit s’inscrire auprès du système d’exploitation et de WMI. La procédure suivante suppose que vous avez déjà implémenté le processus d’inscription comme décrit dans l’inscription d’un fournisseur.

La procédure suivante décrit comment inscrire un fournisseur d’événements.

Pour inscrire un fournisseur d’événements

  1. Créez une instance de la classe __Win32Provider qui décrit le fournisseur.

  2. Créez une instance de la classe __EventProviderRegistration qui décrit l’ensemble de fonctionnalités du fournisseur.

    La classe __EventProviderRegistration hérite de nombreuses propriétés de la classe parente __ObjectProviderRegistration . Les propriétés locales de la classe __EventProviderRegistration sont le chemin d’accès de l’objet au fournisseur et une liste de requêtes qui décrivent les événements pris en charge par le fournisseur. Pour plus d’informations, consultez Interroger WMI.

  3. Chargez votre implémentation des classes __Win32Provider et __EventProviderRegistration dans le référentiel WMI.

    WMI utilise votre définition de classe pour inscrire et accéder à votre fournisseur d’événements. Pour plus d’informations, consultez Inscription d’un fournisseur.

L’exemple de code suivant décrit une implémentation d’une classe __Win32Provider et d’une 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\""};
};

La première requête indique que le fournisseur génère toutes les notifications d’événements pour la classe d’événements extrinsic FaxEvent. Étant donné qu’il utilise l’opérateur ISA, la deuxième requête implique que le fournisseur génère des notifications pour tous les événements de création d’instance pour la classe Win32_LogicalDisk et toutes ses sous-classes.

Lorsqu’un fournisseur s’inscrit pour fournir un événement intrinsèque, l’événement doit s’appliquer à toutes les instances d’une classe. En d’autres termes, une requête ne peut pas être écrite pour fournir des événements de création d’instance uniquement pour certains lecteurs de disque appartenant à la classe Win32_LogicalDisk .