イベント プロバイダーの作成
イベント プロバイダーは、組み込みイベントと extrinsic イベントの通知を WMI に提供する COM オブジェクトです。 組み込みイベントは WMI に内部データ変更を報告しますが、extrinsic イベントは組み込みイベントで説明されていないユーザー定義イベントを報告します。 たとえば、 Win32_LogicalDisk クラスの変更、作成、または削除に応答するイベントは、組み込みイベントとして分類されます。 既存の WMI オブジェクトの変更、作成、または削除以外の何かに基づいて生成されるイベントは、extrinsic イベントです。 サポートされているクラスに関係なく、すべてのイベント プロバイダーを同じ方法で実装できます。
次の手順では、イベント プロバイダーを実装する方法について説明します。
イベント プロバイダーを実装するには
WMI を使用してクラス プロバイダーを設計して登録します。
クラス プロバイダーは、__Win32Provider インスタンスと __EventProviderRegistrationクラスを 作成して WMI に登録します。 詳細については、「 イベント プロバイダーの登録」を参照してください。
プロバイダーの IWbemProviderInit インターフェイスを実装します。
IWbemProviderInit インターフェイスは、WMI がすべてのプロバイダーの読み込みと初期化に使用する一般的なインターフェイスです。 詳細については、「 プロバイダーの初期化」を参照してください。
プロバイダーのプライマリ インターフェイスとして IWbemEventProvider を実装します。
IWbemEventProvider インターフェイスは、ProviderEvents メソッドを使用して WMI にイベントを提供します。 詳細については、「 イベント プロバイダーのプライマリ インターフェイスの実装」を参照してください。
Note
イベント プロバイダーは、マルチスレッド モデル "Both" を使用する必要があります。
必要に応じて、 IWbemEventProviderQuerySink インターフェイスを実装して、イベント プロバイダーのパフォーマンスを向上させることもできます。
IWbemEventProviderQuerySink インターフェイスを使用すると、プロバイダーは WMI に応答を送信する前にクエリを最適化でき、複数の型のイベントを提供し、可能な限り多くの内部最適化を実行する必要があるプロバイダーに最も役立ちます。 詳細については、「 イベント プロバイダーの最適化」を参照してください。
IWbemEventProviderSecurity インターフェイスを実装して、コンシューマーを特定のセキュリティ識別子 (SID) に制限するか、IWbemEventSink::SetSinkSecurity を実装してシンク自体をセキュリティで保護します。 プロバイダーは、MOF コード内の個々のイベントをセキュリティで保護するために、イベント クラスの SECURITY_DESCRIPTOR プロパティを設定することもできます。 詳細については、「 WMI イベントのセキュリティ保護」を参照してください。
プロバイダーに必要なコードを追加します。
プロバイダーを設計するときは、ほとんどの場合、WMI インターフェイスを呼び出す必要があります。 詳細については、「 メソッドの呼び出し」を参照してください。
クライアントの情報を取得するときに、そのクライアントのセキュリティ レベルにアクセスすることが必要になる場合があります。 詳細については、「クライアントの 偽装」を参照してください。
既存のプロバイダーを新しいコードに置き換えます。
コピーする既存のプロバイダーがない場合は、この手順を実行する必要はありません。 詳細については、「 プロバイダーの更新」を参照してください。
クライアント アプリケーションは、イベント コンシューマーとして WMI に登録することで、イベントを要求できます。 詳細については、「 WMI イベントの受信」を参照してください。