次の方法で共有


イベントを安全に提供する

不正なユーザーがアクセス不可能なイベントを受信しないようにできます。 イベント プロバイダーは、System Registry Provider が registryKeyChangeEventなどのクラスを提供するのと同様に、独自のイベント クラスのインスタンス提供できます。 イベント プロバイダーは、__InstanceCreationEventなどの組み込みイベントを配信することもできます。 詳細については、「イベント プロバイダーの作成」を参照してください。

イベント プロバイダーは、次の方法でイベント受信者へのアクセスを制御できます。

  • IWbemEventProviderSecurity::AccessCheck を実装してアクセス制御を使用することが最も効率的な方法です。

    プロバイダーは、コンシューマーが要求されたイベントを受信する権限を持っているかどうかを判断します。 コンシューマーに登録するための十分な特権がない場合、WMI はアクセス拒否エラーを返します。 プロバイダーがイベントを受信できるユーザーを決定できる場合は、このモードを使用します。 たとえば、プロバイダーはセキュリティ関連のイベントを提供し、SeSecurityPrivilege 特権を有効にした管理者特権をコンシューマーに付与する必要がある場合があります。

  • イベント 発生させるために使用されるシンクに IWbemEventSink::SetSinkSecurity を実装すると、通過するすべてのイベントに対してシンクのセキュリティ記述子 (SD) を設定できます。

    WMI は、SD に基づいてアクセス チェックを実行します。 このモードは、プロバイダーがイベントの使用を許可されているユーザーに関する決定を行うことができないが、特定のシンクの SD を決定できる場合に使用します。 たとえば、イベント プロバイダーが IWbemEventSink::GetRestrictedSinkの呼び出しによって複数のシンクを取得し、各シンクのセキュリティ記述子が必要な場合は、IWbemEventSink::SetSinkSecurityを使用します。

  • イベントの SECURITY_DESCRIPTOR プロパティを設定すると、各イベントの SD を設定できます。

    シンクに配信される各イベントに異なるセキュリティ記述子がある場合は、この方法を使用します。 この方法を使用するには、__Event または __ExtrinsicEvent からプロバイダーによって定義された外部イベント クラスを派生させて、クラスに SECURITY_DESCRIPTOR プロパティが含まれるようにします。 たとえば、イベント プロバイダーは、シンクを介してセキュリティで保護されたイベントと通常のイベントの両方を発行できます。 この場合、セキュリティで保護されたイベントには Administrators アカウントのセキュリティ記述子を使用し、すべてのユーザーが受信できる通常のイベントには NULL セキュリティ記述子を使用します。

分離されたイベント プロバイダーによるイベントのセキュリティ保護

分離型イベントプロバイダーは、WMIへの登録方法が結合型イベントプロバイダーと異なります。 分離されたプロバイダーからのイベント IWbemEventProviderSecurity::AccessCheck を呼び出すと、クライアント アクセス トークンは伝達されません。 WMI は、非分離イベント プロバイダーの場合と同じ方法でアクセス制御を処理します。 分離されたプロバイダーの記述の詳細については、「アプリケーションにプロバイダーを組み込む」を参照してください。

コントロール パネルWMI コントロール で設定された FULL_WRITE 権限を持つ管理者のみが、名前空間のイベントを生成できます。 詳細については、「WMI コントロールを使用した名前空間セキュリティの設定」を参照してください。

WMI イベントのセキュリティ保護