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

認可されていないユーザーがアクセスできないイベントを受信できないようにすることができます。 イベント プロバイダーでは、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 プロパティが含まれるようにします。 たとえば、イベント プロバイダーでは、シンクを介してセキュリティで保護されたイベントと通常のイベントの両方を発行できます。 この場合、セキュリティで保護されたイベントには Administrator アカウントのセキュリティ記述子を使用し、だれでも受信できる通常のイベントには NULL セキュリティ記述子を使用します。

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

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

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

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