受信するイベントの種類の決定

イベントの受信に登録する前に、受信するイベントの種類 (組み込みまたは外因性) を決定する必要があります。 イベントの受信方法の詳細については、「WMI イベントの受信」を参照してください。 イベントの提供に関する詳細については、「WMI プロバイダーの開発」と「イベント プロバイダーの作成」を参照してください。 イベントの受信と提供のセキュリティに関する考慮事項については、「WMI イベントのセキュリティ保護」を参照してください。

組み込みイベント

組み込みイベントは、標準 WMI データ モデルの変更に対応して発生するイベントです。 各組み込みイベント クラスは、特定の変更の種類を表し、WMI またはプロバイダーが名前空間、クラス、またはクラス インスタンスを作成、削除、または変更するときに発生します。 たとえば、Win32_LogicalDisk インスタンスを作成すると、__InstanceCreationEvent インスタンスが発生します。

WMI は、WMI リポジトリに格納されているオブジェクトの組み込みイベントを作成します。 プロバイダーは動的クラスの組み込みイベントを生成しますが、使用可能なプロバイダーがない場合は、WMI が動的クラスのインスタンスを作成できます。 WMI はポーリングを使用して変更を検出します。 次の表に、WMI が組み込みイベントを報告するために使用するシステム クラスの一覧を示します。

システム クラス 説明
__ClassCreationEvent クラスの作成時にコンシューマーに通知します。
__ClassDeletionEvent クラスの削除時にコンシューマーに通知します。
__ClassModificationEvent クラスの変更時にコンシューマーに通知します。
__InstanceCreationEvent クラス インスタンスの作成時にコンシューマーに通知します。
__InstanceOperationEvent インスタンスの作成、削除、変更などのインスタンス イベントの発生時にコンシューマーに通知します。 このクラスをクエリで使用すると、インスタンスに関連付けられているすべての種類のイベントを取得できます。
__InstanceDeletionEvent インスタンスの削除時にコンシューマーに通知します。
__InstanceModificationEvent インスタンスの変更時にコンシューマーに通知します。
__NamespaceCreationEvent 名前空間の作成時にコンシューマーに通知します。
__NamespaceDeletionEvent 名前空間の削除時にコンシューマーに通知します。
__NamespaceModificationEvent 名前空間の変更時にコンシューマーに通知します。
__ConsumerFailureEvent イベント コンシューマー側で発生した障害によって他のイベントが削除されたときにコンシューマーに通知します。
__EventDroppedEvent 他のイベントが要求元のイベント コンシューマーに配信されず、削除されたときにコンシューマーに通知します。
__EventQueueOverflowEvent 配信キューのオーバーフローによってイベントが削除されたときにコンシューマーに通知します。
__MethodInvocationEvent メソッド呼び出しイベントが発生したときにコンシューマーに通知します。

 

外因性イベント

外因性イベントは、WMI データ モデルの変更に直接リンクできない定義済みのイベントです。 そのため WMI では、イベントを記述するイベント クラスをイベント プロバイダーで定義できます。 たとえば、スタンバイ モードへのコンピューターの切り替えを記述するイベントは、外因性イベントです。 プロバイダーは、__Event システムクラスのサブクラスである __ExtrinsicEvent システム クラスから外因性イベントを派生させます。 外因性イベント クラスは、システム レジストリ プロバイダーと SNMP プロバイダーで定義します。たとえば、レジストリ キーの変更時にコンシューマーに通知する RegistryKeyChangeEvent などです。 詳細については、「システム レジストリ イベントの登録」と「イベント プロバイダーの作成」を参照してください。

次の例では、イベント プロバイダーが 1 つ以上の建物にセキュリティ違反を報告しています。 セキュリティ違反を表す外因性イベントに対して、次のクラスを定義できます。

class SecurityViolationEvent : __ExtrinsicEvent
{
   string Building;           // building where violation occurred
   sint32 EntranceNumber;     // entrance where violation occurred
   datetime TimeOfDetection;  // date and time of violation
}

セキュリティ違反通知を受け取るために、コンシューマーは SecurityViolationEvent イベントの種類に登録します。 特に指定がない限り、コンシューマーは、すべての期間にすべての建物で発生したすべてのセキュリティ違反の通知を受け取ります。 イベント クラスには、コンシューマーがより具体的なイベントを要求するために使用できる情報も含まれています。

次の例では、クエリによってコンシューマーが建物 24 内のセキュリティ違反イベントにのみ登録されます。

SELECT * FROM SecurityViolationEvent WHERE Building = 24;