Определение типа получаемого события
Перед регистрацией, чтобы принимать события, необходимо определить, какие типы событий вы хотите получать: встроенные или внешние. Дополнительные сведения о получении событий см. в получении событий 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;