Определение типа события для получения

Перед регистрацией для получения события необходимо определить типы событий для получения: встроенные или экстринсические. Дополнительные сведения о получении событий см. в разделе "Получение события 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 позволяет поставщику событий определить класс событий, описывающий событие. Например, событие, описывающее переключение компьютера на автономный режим, является экстринсическим событием. Поставщик является производным от экстринсического события из системного класса __ExtrinsicEvent , который является подклассом системного класса __Event . Поставщики системного реестра и SNMP определяют классы событий extrinsic, такие как RegistryKeyChangeEvent, которые уведомляют потребителя об изменении раздела реестра. Дополнительные сведения см. в разделе "Регистрация для событий системного реестра " и запись поставщика событий.

В следующем примере поставщик событий сообщает о нарушениях безопасности в одном или нескольких зданиях. Следующий класс может быть определен для экстринсического события, представляющего нарушение безопасности.

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;