イベント プロバイダーのプライマリ インターフェイスの実装

イベント プロバイダーは、イベント通知を生成するために IWbemEventProvider インターフェイスを実装する必要があります。 WMI はプロバイダーの IWbemEventProvider::ProvideEvents メソッドを呼び出し、IWbemObjectSink インターフェイスの実装であるシンク オブジェクトへのポインターを渡します。 イベント プロバイダーが通知を生成する準備ができたら、プロバイダーは IWbemObjectSink::Indicate メソッドを呼び出します。

イベント プロバイダーは、IWbemEventProvider で生成された通知をイベント オブジェクトに配置する必要があります。 イベント オブジェクトは、Indicate メソッドの "ppObjArray" パラメーターで表される IWbemClassObject インターフェイスの配列内のエントリとして実装する必要があります。 IWbemClassObjects は COM オブジェクトであるため、プロバイダーは IWbemObjectSink::AddRef メソッドを呼び出してシンクの参照カウントを増やす必要があります。 多くの通知 (400 イベントなど) を提供する必要があるイベント プロバイダーは、新しいインスタンスを生成するか、既存のインスタンスを複製することによって、通知ごとに一意のイベント オブジェクトを作成する必要があります。 WMI が、Indicate 呼び出しの完了後にイベント オブジェクトを保持することはなく、AddRef に対して COM 標準を超える特別な要件はありません。

イベント プロバイダーを実装するときは、次のガイドラインを考慮してください。

  • クライアント呼び出しの処理中にクラスを変更しないでください。

  • イベント フィルターを変更する呼び出しなどの、イベント関連の呼び出しを発行しないでください。

  • イベントを再実行する前に、Windows 管理サービスが発行する要求 ( CancelQuery など) をすべて処理してください。

    要求を処理しない場合、イベントを再実行すると、イベントの受け付けがブロックされる可能性があります。

  • プロバイダー内から IWbemObjectSink::SetStatus を呼び出さないでください。