Registrieren eines Ereignisanbieters

Um einen WMI-Ereignisanbieter zu erstellen, müssen Sie die __Win32Provider-Instanz, die Ihren Anbieter darstellt, mithilfe einer Instanz von __EventProviderRegistration registrieren. Als COM-Objekt muss sich Ihr Anbieter beim Betriebssystem und bei WMI registrieren. Beim folgenden Verfahren wird davon ausgegangen, dass Sie den Registrierungsprozess bereits implementiert haben, wie unter Registrieren eines Anbieters beschrieben.

Im folgenden Verfahren wird beschrieben, wie Sie einen Ereignisanbieter registrieren.

So registrieren Sie einen Ereignisanbieter

  1. Erstelle eine Instanz der __Win32Provider-Klasse, die den Anbieter beschreibt.

  2. Erstelle eine Instanz der __EventProviderRegistration-Klasse, die den Funktionsumfang des Anbieters beschreibt.

    Die __EventProviderRegistration-Klasse erbt viele Eigenschaften von der übergeordneten Klasse __ObjectProviderRegistration. Die lokalen Eigenschaften der __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 Ihre 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 der ISA-Operator verwendet wird, impliziert die zweite Abfrage, dass der Anbieter Benachrichtigungen für alle Instanzerstellungsereignisse für die Win32_LogicalDisk-Klasse und alle ihre Unterklassen generiert.

Wenn sich ein Anbieter registriert, um ein systeminternes Ereignis bereitzustellen, muss das Ereignis für alle Instanzen einer Klasse gelten. Anders ausgedrückt: Eine Abfrage kann nicht geschrieben werden, um Instanzerstellungsereignisse nur für einige der Datenträger bereitzustellen, die zur Win32_LogicalDisk-Klasse gehören.