Поделиться через


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

Перед регистрацией, чтобы принимать события, необходимо определить, какие типы событий вы хотите получать: встроенные или внешние. Дополнительные сведения о получении событий см. в получении событий WMI. Дополнительные сведения о предоставлении событий см. в Разработка поставщика WMI и Создание поставщика событий. Дополнительные сведения о проблемах безопасности для получения и предоставления событий см. в разделе Защита событий WMI.

Встроенные события

Встроенное событие — это событие, возникающее в ответ на изменение стандартной модели данных WMI. Каждый внутренний класс событий представляет собой определенный тип изменения и возникает, когда WMI или провайдер создает, удаляет или изменяет пространство имен, класс или экземпляр класса. Например, создание экземпляра Win32_LogicalDisk приведет к экземпляру __InstanceCreationEvent.

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

Системный класс Описание
__ClassCreationEvent Уведомляет потребителя о создании класса.
__ClassDeletionEvent Уведомляет потребителя о удалении класса.
__ClassModificationEvent Уведомляет потребителя об изменении класса.
__InstanceCreationEvent Уведомляет потребителя, когда создан экземпляр класса.
__InstanceOperationEvent Уведомляет потребителя о возникновении любого события экземпляра, например о создании, удалении или изменении экземпляра. Этот класс можно использовать в запросах для получения всех типов событий, связанных с экземпляром.
__СобытиеУдаленияЭкземпляра Уведомляет потребителя при удалении экземпляра.
__InstanceModificationEvent Уведомляет потребителя об изменении экземпляра.
__NamespaceCreationEvent Уведомляет потребителя о создании пространства имен.
__NamespaceDeletionEvent Уведомляет потребителя о удалении пространства имен.
__NamespaceModificationEvent Уведомляет потребителя об изменении пространства имен.
__ConsumerFailureEvent Уведомляет пользователя, когда какое-либо другое событие отменяется из-за сбоя со стороны потребителя события.
__EventDroppedEvent Уведомляет потребителя о том, что другое событие не передано запросившему потребителю событий, а отклонено.
__EventQueueOverflowEvent Уведомляет потребителя о том, когда событие удаляется в результате переполнения очереди доставки.
__MethodInvocationEvent Уведомляет потребителя о возникновении события вызова метода.

 

Экстринсические события

Экстринсическое событие — это предопределенное событие, которое не может быть связано непосредственно с изменениями в модели данных WMI. Таким образом, WMI позволяет поставщику событий определить класс событий, описывающий событие. Например, событие, описывающее переключение компьютера на автономный режим, является экстринсическим событием. Поставщик выводит внешнее событие из __ExtrinsicEvent системного класса, который является подклассом __Event системного класса. системного реестра и поставщики SN MP определяют классы событий 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;