Schreiben eines Ereignisanbieters
Ein Ereignisanbieter ist ein COM-Objekt, das WMI mit Benachrichtigungen zu systeminternen und extrinsischen Ereignissen liefert. Ein systeminternes Ereignis meldet eine interne Datenänderung an WMI, während ein extrinsisches Ereignis ein benutzerdefiniertes Ereignis meldet, das nicht von einem systeminternen Ereignis beschrieben wird. Beispielsweise würde ein Ereignis als Reaktion auf Änderungen, Erstellung oder Löschung der Win32 _ LogicalDisk-Klasse als systeminternes Ereignis klassifiziert. Ein Ereignis, das auf der Grundlage eines anderen Ereignisses 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.
Im folgenden Verfahren wird beschrieben, wie sie einen Ereignisanbieter implementieren.
So implementieren Sie einen Ereignisanbieter
Entwerfen und registrieren Sie Ihren Klassenanbieter bei WMI.
Klassenanbieter registrieren sich bei WMI, indem sie eine _ _ Win32Provider-Instanz und eine _ _ EventProviderRegistration-Klasse erstellen. Weitere Informationen finden Sie unter Registrieren eines Ereignisanbieters.
Implementieren Sie die IWbemProviderInit-Schnittstelle für Ihren Anbieter.
Die IWbemProviderInit-Schnittstelle ist eine gemeinsame Schnittstelle, die WMI zum Laden und Initialisieren aller Anbieter verwendet. Weitere Informationen finden Sie unter Initialisieren eines Anbieters.
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.
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 vor dem Senden einer Antwort an WMI zu optimieren, und ist besonders nützlich für einen Anbieter, der Ereignisse mehrerer Typen liefert und so viele interne Optimierungen wie möglich ausführen muss. Weitere Informationen finden Sie unter Optimieren eines Ereignisanbieters.
Implementieren Sie die IWbemEventProviderSecurity-Schnittstelle, um Benutzer 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 Sichern von WMI-Ereignissen.
Fügen Sie zusätzlichen Code hinzu, der für Ihren Anbieter erforderlich ist.
Beim Entwerfen Ihres Anbieters müssen Sie wahrscheinlich 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 Sicherheitsebenen für diesen Client zugreifen. Weitere Informationen finden Sie unter Impersonating a Client.
Ersetzen Sie den bereits vorhandene Anbieter durch Ihren neuen Code.
Sie müssen diesen Schritt nicht ausführen, wenn Sie nicht über einen bereits vorhandene Anbieter zum Kopieren verfügen. Weitere Informationen finden Sie unter Aktualisieren eines Anbieters.
Eine Clientanwendung kann ein Ereignis anfordern, indem sie sich selbst bei WMI als Ereignisverbraucher registriert. Weitere Informationen finden Sie unter Empfangen eines WMI-Ereignisses.