イベント プロバイダーの作成

イベント プロバイダーは、組み込みイベントと外部イベントの通知を WMI に提供する COM オブジェクトです。 組み込みイベントから WMI に内部データ変更が報告されますが、外因性イベントからは組み込みイベントによって記述されないユーザー定義イベントが報告されます。 たとえば、Win32_LogicalDisk クラスの変更、作成、または削除に応答するイベントは、組み込みイベントとして分類されます。 既存の WMI オブジェクトの変更、作成、または削除以外の何かに基づいて生成されるイベントは、外因性イベントです。 サポートされているクラスに関係なく、すべてのイベント プロバイダーを同じ方法で実装できます。

次の手順では、イベント プロバイダーを実装する方法について説明します。

イベント プロバイダーを実装するには

  1. WMI を使用してクラス プロバイダーを設計して登録します。

    クラス プロバイダーは、__Win32Provider インスタンスと __EventProviderRegistration クラスを作成して WMI に登録します。 詳細については、「イベント プロバイダーの登録」を参照してください。

  2. IWbemProviderInit インターフェイスをプロバイダーに実装します。

    IWbemProviderInit インターフェイスは、WMI ですべてのプロバイダーを読み込んで初期化するために使用する一般的なインターフェイスです。 詳細については、「プロバイダーの初期化」を参照してください。

  3. IWbemEventProvider をプライマリ インターフェイスとしてプロバイダーに実装します。

    IWbemEventProvider インターフェイスでは ProviderEvents メソッドを使用して WMI にイベントを提供します。 詳細については、「イベント プロバイダーのプライマリ インターフェイスの実装」を参照してください。

    注意

    イベント プロバイダーでは、マルチスレッド モデル "Both" を使用する必要があります。

     

  4. 必要に応じて、IWbemEventProviderQuerySink インターフェイスを実装して、イベント プロバイダーのパフォーマンスを向上させることもできます。

    IWbemEventProviderQuerySink インターフェイスを使用すると、プロバイダーから WMI に応答を送信する前にクエリを最適化でき、複数の型のイベントを提供し、可能な限り多くの内部最適化を実行する必要があるプロバイダーにとって最も便利です。 詳細については、「イベント プロバイダーの最適化」を参照してください。

  5. IWbemEventProviderSecurity インターフェイスを実装して、コンシューマーを特定のセキュリティ識別子 (SID) に制限するか、IWbemEventSink::SetSinkSecurity を実装してシンク自体をセキュリティで保護します。 プロバイダーでは、MOF コード内の個々のイベントをセキュリティで保護するために、イベント クラスの SECURITY_DESCRIPTOR プロパティを設定することもできます。 詳細については、「WMI イベントのセキュリティ保護」を参照してください。

  6. プロバイダーに必要なコードを追加します。

    プロバイダーを設計するときは、ほとんどの場合、WMI インターフェイスを呼び出す必要があります。 詳細については、メソッドの呼び出しに関するページを参照してください。

    クライアントの情報を取得するときに、そのクライアントのセキュリティ レベルにアクセスすることが必要になる場合があります。 詳細については、「クライアントの偽装」を参照してください。

  7. 既存のプロバイダーを新しいコードに置き換えます。

    コピーする既存のプロバイダーがない場合は、この手順を実行する必要はありません。 詳しくは、「プロバイダーの更新」を参照してください。

クライアント アプリケーションは、それ自体をイベント コンシューマーとして WMI に登録することで、イベントを要求できます。 詳細については、「WMI イベントの受信」を参照してください。