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


Получение событий в любое время

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

Постоянный потребитель событий получает события до тех пор, пока его регистрация не будет явно отменена.

Постоянный потребитель событий — это сочетание следующих классов WMI, фильтров и COM-объектов, которые находятся в вашей системе:

  • COM-объект называется физическим потребителем. WMI поставляет несколько стандартных постоянных потребителей. Например, потребитель события активного скрипта запускает скрипт при возникновении события.
  • Новый постоянный класс потребителей.
  • Экземпляр постоянного класса потребителей, называемый логическим потребителем.
  • Фильтр, содержащий запрос событий.
  • Связь между потребителем и фильтром.

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

Вы можете написать собственный постоянный потребитель событий или использовать предварительно установленный классы потребителей уровня "Стандартный", например ActiveScriptEventConsumer. Дополнительные сведения см. в классах потребителей уровня "Стандартный", мониторинге и реагировании на события со стандартными потребителямии событиях мониторинга.

В следующей процедуре описывается, как создать собственного постоянного потребителя событий.

Создание собственных постоянных потребителей событий

  1. Определите, какие события вы хотите получить.

    WMI поддерживает встроенные и внешние события. Встроенное событие — это событие, предопределенное WMI, в то время как внешнее событие является событием, определенным сторонним поставщиком. Для получения дополнительной информации см. Определение типа получаемого события.

  2. Внедрить физического потребителя.

    Основное различие между приложением управления и физическим потребителем заключается в том, что пользователь загружает и выгружает приложение управления, а WMI загружает и выгружает физического потребителя. Большая часть кода должна находиться в физическом потребителе.

    Заметка

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

     

  3. Создать новый класс потребителя, описывающийфизического потребителя.

    Как и любой класс, класс потребителей описывает общие параметры постоянного потребителя событий в WMI.

  4. Создать экземпляр класса потребителя.

    Как и любой другой класс WMI, необходимо создать экземпляр класса потребителей, если вы хотите реализовать этот класс. Экземпляр класса потребителя также называется логическим потребителем. Логический потребитель представляет физического потребителя в WMI.

  5. создайте фильтр событий.

    Запросы событий, которые активируют постоянные потребители событий, называются фильтрами событий. Один фильтр событий может быть связан с несколькими потребителями логических событий. Кроме того, несколько фильтров событий могут быть связаны с одним потребителем логического события. Фильтр — это экземпляр __EventFilter.

    Событие журнала NT создается при сбое запроса постоянного потребителя событий. Источник события — WinMgmt, идентификатор события — 10, а тип события — Error.

  6. Связывание фильтра событий с логическим потребителем.

    Связав фильтр событий с логическим потребителем, необходимо указать WMI о том, какой фильтр событий принадлежит логическому потребителю. Экземпляр ассоциативного класса связывает потребителей логических событий и фильтры событий: __FilterToConsumerBinding. Когда событие получено и соответствует запросу события, описанному в фильтре событий WMI, программа WMI находит связанного потребителя логического события путем просмотра экземпляра класса ассоциации. После обнаружения экземпляра потребителя логического события WMI использует экземпляр класса __EventConsumerProviderRegistration для поиска и запуска потребителя физического события, связанного с этим экземпляром.

  7. Написание поставщика потребителей событий.

    Поставщик потребителей событий — это COM-объект, который находит физического потребителя для WMI.