イベントプロバイダーは、イベント通知を生成するために、IWbemEventProvider インターフェイスを実装する必要があります。 WMI は、プロバイダーの IWbemEventProvider::P rovideEvents メソッドを呼び出し、シンク オブジェクトへのポインターを渡します。これは、IWbemObjectSink インターフェイスの実装です。 イベント プロバイダーが通知を生成する準備ができたら、IWbemObjectSink::Indicate メソッドを呼び出します。
イベント プロバイダーは、イベント オブジェクト IWbemEventProvider を介して生成された通知を配置する必要があります。 イベント オブジェクトは、Indicate メソッドの ppObjArray パラメーターで表される IWbemClassObject インターフェイスの配列にエントリとして実装する必要があります。 IWbemClassObjects は COM オブジェクトであるため、プロバイダーは、IWbemObjectSink::AddRef メソッドを呼び出すことによって、シンクの参照カウントをインクリメントする必要があります。 多くの通知 (400 イベントなど) を提供する必要があるイベント プロバイダーは、新しいインスタンスを生成するか、既存のインスタンスを複製することによって、通知ごとに一意のイベント オブジェクトを作成する必要があります。 WMI は、Indicate 呼び出しが完了してからイベント オブジェクトを保持することはありません。また、COM 標準を超える AddRef に関する特別な要件はありません。
イベント プロバイダーを実装する場合は、次のガイドラインを考慮してください。
クライアント呼び出しの処理中にクラスを変更しないでください。
イベント フィルターを変更する呼び出しなど、イベント関連の呼び出しは発行しないでください。
イベントを再度発生させる前に、CancelQueryなど、Windows Management サービスが発行するすべての要求を処理します。
要求を処理しない場合、イベントを再要求すると、イベントが受け入れられるのをブロックする可能性があります。
プロバイダー内 IWbemObjectSink::SetStatus を呼び出すことはありません。