Определение типа получаемого события
Перед регистрацией для получения события необходимо определить типы событий для получения: встроенные или внешние. Дополнительные сведения о получении событий см. в разделе Получение события WMI. Дополнительные сведения о предоставлении событий см. в разделах Разработка поставщика WMI и Запись поставщика событий. Дополнительные сведения о проблемах безопасности при получении и предоставлении событий см. в разделе Защита событий WMI.
Встроенные события
Встроенное событие — это событие, которое происходит в ответ на изменение стандартной модели данных WMI. Каждый класс встроенного события представляет конкретный тип изменения и возникает, когда WMI или поставщик создает, удаляет или изменяет пространство имен, класс или экземпляр класса. Например, создание экземпляра Win32_LogicalDisk приведет к созданию экземпляра __InstanceCreationEvent .
WMI создает встроенные события для объектов, хранящихся в репозитории WMI. Поставщик создает внутренние события для динамических классов, но WMI может создать экземпляр для динамического класса, если поставщик недоступен. WMI использует опрос для обнаружения изменений. В следующей таблице перечислены системные классы, которые WMI использует для создания отчетов о встроенных событиях.
Класс System | Описание |
---|---|
__ClassCreationEvent | Уведомляет потребителя при создании класса. |
__ClassDeletionEvent | Уведомляет потребителя об удалении класса. |
__ClassModificationEvent | Уведомляет потребителя об изменении класса. |
__InstanceCreationEvent | Уведомляет потребителя при создании экземпляра класса. |
__InstanceOperationEvent | Уведомляет потребителя при возникновении какого-либо события экземпляра, например при создании, удалении или изменении экземпляра. Этот класс можно использовать в запросах для получения событий всех типов, связанных с экземпляром . |
__InstanceDeletionEvent | Уведомляет потребителя об удалении экземпляра. |
__InstanceModificationEvent | Уведомляет потребителя об изменении экземпляра. |
__NamespaceCreationEvent | Уведомляет потребителя при создании пространства имен. |
__NamespaceDeletionEvent | Уведомляет потребителя об удалении пространства имен. |
__NamespaceModificationEvent | Уведомляет потребителя при изменении пространства имен. |
__ConsumerFailureEvent | Уведомляет потребителя при удалении какого-то другого события из-за сбоя на стороне потребителя события. |
__EventDroppedEvent | Уведомляет потребителя о том, что какое-то другое событие удаляется, а не доставляется потребителю запрашивающего события. |
__EventQueueOverflowEvent | Уведомляет потребителя о том, что событие удаляется в результате переполнения очереди доставки. |
__MethodInvocationEvent | Уведомляет потребителя при возникновении события вызова метода. |
События с помощью extrinsic
Событие extrinsic — это предопределенное событие, которое не может быть напрямую связано с изменениями в модели данных WMI. Таким образом, WMI позволяет поставщику событий определить класс событий, описывающий событие. Например, событие, описывающее переключение компьютера в режим stand-by, является событием экстринсического. Поставщик наследует событие экстринсического от системного класса __ExtrinsicEvent , который является подклассом системного класса __Event . Поставщики системного реестра и SNMP определяют классы событий, например RegistryKeyChangeEvent, которые уведомляют потребителя об изменении раздела реестра. Дополнительные сведения см. в разделах Регистрация для событий системного реестра и Запись поставщика событий.
В следующем примере поставщик событий сообщает о нарушениях безопасности в одно или несколько зданий. Следующий класс может быть определен для события extrinsic, представляющего нарушение безопасности.
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;