Schreiben eines Ereignisanbieters

Ein Ereignisanbieter ist ein COM-Objekt, das WMI Benachrichtigungen zu systeminternen und extrinsischen Ereignissen bereitstellt. Ein systeminternes Ereignis meldet eine interne Datenänderung an WMI, während ein extrinsisches Ereignis ein benutzerdefiniertes Ereignis meldet, das nicht durch ein systeminternes Ereignis beschrieben wird. Beispielsweise würde ein Ereignis als Reaktion auf Änderungs-, Erstellungs- oder Löschvorgänge der Win32_LogicalDisk-Klasse als systeminternes Ereignis klassifiziert. Ein Ereignis, das auf einer anderen Grundlage als der Änderung, Erstellung oder Löschung eines vorhandenen WMI-Objekts generiert wird, ist ein extrinsisches Ereignis. Unabhängig von der unterstützten Klasse können Sie alle Ereignisanbieter auf die gleiche Weise implementieren.

Das folgende Verfahren beschreibt, wie ein Ereignisanbieter implementiert wird.

Implementieren eines Ereignisanbieters

  1. Entwerfen und registrieren Sie Ihren Klassenanbieter bei WMI.

    Sie können Klassenanbieter bei WMI registrieren, indem Sie eine __Win32Provider-Instanz und eine __EventProviderRegistration-Klasse erstellen. Weitere Informationen finden Sie unter Registrieren eines Ereignisanbieters.

  2. Implementieren Sie die IWbemProviderInit-Schnittstelle für Ihren Anbieter.

    Die IWbemProviderInit-Schnittstelle ist eine allgemeine Schnittstelle, die WMI zum Laden und Initialisieren aller Anbieter verwendet. Weitere Informationen finden Sie unter Initialisieren eines Anbieters.

  3. Implementieren Sie IWbemEventProvider als primäre Schnittstelle für Ihren Anbieter.

    Die IWbemEventProvider-Schnittstelle verwendet die ProviderEvents-Methode, um Ereignisse an WMI zu senden. Weitere Informationen finden Sie unter Implementieren der primären Schnittstelle für einen Ereignisanbieter.

    Hinweis

    Ereignisanbieter müssen das Multithreadingmodell „Both“ verwenden.

     

  4. Optional können Sie auch die IWbemEventProviderQuerySink-Schnittstelle implementieren, um die Leistung Ihres Ereignisanbieters zu erhöhen.

    Die IWbemEventProviderQuerySink-Schnittstelle ermöglicht es dem Anbieter, Abfragen zu optimieren, bevor eine Antwort an WMI gesendet wird. Dies ist besonders nützlich für einen Anbieter, der Ereignisse mehrerer Typen sendet und so viele interne Optimierungen wie möglich durchführen muss. Weitere Informationen finden Sie unter Optimieren eines Ereignisanbieters.

  5. Implementieren Sie die IWbemEventProviderSecurity-Schnittstelle, um Consumer auf bestimmte Sicherheits-IDs (SIDs) zu beschränken, oder implementieren Sie IWbemEventSink::SetSinkSecurity, um die Senke selbst zu schützen. Der Anbieter kann auch die SECURITY_DESCRIPTOR-Eigenschaft in der Ereignisklasse festlegen, um einzelne Ereignisse im MOF-Code zu schützen. Weitere Informationen finden Sie unter Schützen von WMI-Ereignissen.

  6. Fügen Sie zusätzlichen Code hinzu, der für Ihren Anbieter erforderlich ist.

    Beim Entwerfen Ihres Anbieters müssen Sie höchstwahrscheinlich WMI-Schnittstellen aufrufen. Weitere Informationen finden Sie unter Aufrufen einer Methode.

    Beim Abrufen von Informationen für einen Client müssen Sie möglicherweise auf die Sicherheitsstufen für diesen Client zugreifen. Weitere Informationen finden Sie unter Identitätswechsel für einen Client.

  7. Ersetzen Sie den bereits vorhandenen Anbieter durch Ihren neuen Code.

    Sie müssen diesen Schritt nicht ausführen, wenn Sie keinen bereits vorhandenen Anbieter zum Kopieren haben. Weitere Informationen finden Sie unter Aktualisieren eines Anbieters.

Eine Clientanwendung kann ein Ereignis anfordern, indem sie sich selbst bei WMI als Ereignisconsumer registriert. Weitere Informationen finden Sie unter Empfangen eines WMI-Ereignisses.