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

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