Freigeben über


Implementieren der primären Schnittstelle für einen Ereignisanbieter

Ein Ereignisanbieter muss die IWbemEventProvider-Schnittstelle implementieren, um Ereignisbenachrichtigungen zu generieren. WMI ruft die IWbemEventProvider::P rovideEvents-Methode des Anbieters auf und übergibt einen Zeiger an das Senkenobjekt, das eine Implementierung der IWbemObjectSink-Schnittstelle ist. Wenn der Ereignisanbieter bereit ist, eine Benachrichtigung zu generieren, ruft der Anbieter die IWbemObjectSink::Indicate-Methode auf.

Ein Ereignisanbieter muss die über IWbemEventProvider generierten Benachrichtigungen in Ereignisobjekten platzieren. Sie müssen Ereignisobjekte als Einträge in einem Array von IWbemClassObject-Schnittstellen implementieren, die vom ppObjArray-Parameter der Indicate-Methode dargestellt werden. Da IWbemClassObjects COM-Objekte sind, muss der Anbieter die Verweisanzahl für die Senke erhöhen, indem die IWbemObjectSink::AddRef-Methode aufgerufen wird. Ereignisanbieter, die viele Benachrichtigungen bereitstellen müssen (z. B. für 400 Ereignisse), sollten ein eindeutiges Ereignisobjekt für jede Benachrichtigung erstellen, indem sie entweder eine neue Instanz generieren oder eine vorhandene klonen. WMI behält ein Objekt nie länger als bis zum Abschluss des Indicate-Aufrufs bei und stellt keine über den COM-Standard hinausgehenden besonderen Anforderungen an AddRef.

Beachten Sie beim Implementieren eines Ereignisanbieters die folgenden Leitlinien:

  • Ändern Sie keine Klassen, während Sie einen Clientaufruf bearbeiten.

  • Führen Sie keine ereignisbezogenen Aufrufe aus, z. B. keinen Aufruf zum Ändern eines Ereignisfilters.

  • Verarbeiten Sie alle Anforderungen, die der Windows-Verwaltungsdienst stellt, z. B. CancelQuery, ehe Sie ein Ereignis erneut auslösen.

    Wenn Sie die Anforderung nicht verarbeiten, kann das erneute Aktivieren des Ereignisses verhindern, dass das Ereignis jemals akzeptiert wird.

  • Rufen Sie IWbemObjectSink::SetStatus niemals innerhalb eines Anbieters auf.