Registrieren eines Ereignisanbieters

Zum Erstellen eines WMI-Ereignisanbieters müssen Sie die __Win32Provider Instanz registrieren, die Ihren Anbieter mithilfe einer Instanz von __EventProviderRegistration darstellt. Als COM-Objekt muss sich Ihr Anbieter bei dem Betriebssystem und WMI registrieren. Im folgenden Verfahren wird davon ausgegangen, dass Sie den Registrierungsprozess bereits implementiert haben, wie in der Registrierung eines Anbieters beschrieben.

Das folgende Verfahren beschreibt, wie Sie einen Ereignisanbieter registrieren.

So registrieren Sie einen Ereignisanbieter

  1. Erstellen Sie eine Instanz der __Win32Provider Klasse, die den Anbieter beschreibt.

  2. Erstellen Sie eine Instanz der __EventProviderRegistration Klasse, die den Featuresatz des Anbieters beschreibt.

    Die __EventProviderRegistration-Klasse erbt viele Eigenschaften aus der übergeordneten Klasse __ObjectProviderRegistration . Die lokalen Eigenschaften für die __EventProviderRegistration-Klasse sind der Objektpfad zum Anbieter und eine Liste von Abfragen, die die vom Anbieter unterstützten Ereignisse beschreiben. Weitere Informationen finden Sie unter Abfragen von WMI.

  3. Laden Sie Die Implementierung der klassen __Win32Provider und __EventProviderRegistration in das WMI-Repository.

    WMI verwendet Ihre Klassendefinition, um Ihren Ereignisanbieter zu registrieren und darauf zuzugreifen. Weitere Informationen finden Sie unter Registrieren eines Anbieters.

Im folgenden Codebeispiel wird eine Implementierung einer __Win32Provider Klasse und einer __EventProviderRegistration Klasse beschrieben.

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\""};
};

Die erste Abfrage gibt an, dass der Anbieter alle Ereignisbenachrichtigungen für die extrinsische Ereignisklasse FaxEvent generiert. Da er den ISA-Operator verwendet, bedeutet die zweite Abfrage, dass der Anbieter Benachrichtigungen für alle Instanzenerstellungsereignisse für die Win32_LogicalDisk Klasse und alle seine Unterklassen generiert.

Wenn sich ein Anbieter registriert, um ein systeminternes Ereignis bereitzustellen, muss das Ereignis auf alle Instanzen einer Klasse angewendet werden. Mit anderen Worten, eine Abfrage kann nicht geschrieben werden, um Instanzerstellungsereignisse nur für einige der Datenträgerlaufwerke bereitzustellen, die zur Win32_LogicalDisk Klasse gehören.