Утилита WMI Event Registration — часть 1

Утилита WMI Event Registration — часть 1 WMI - администрирование Windows

Сегодня мы рассмотрим утилиту WMI Event Registration, которая входит в состав пакета WMI Tools и предоставляет возможности в удобной форме создавать, регистрировать и настраивать постоянные потребители событий WMI.

Сам обзор я разбил на две части, и в этой части мы рассмотрим описание утилиты WMI Event Registration, процесс создания событий таймера и фильтров событий.

Для запуска утилиты Event Registration нужно в папке с установленным пакетом WMI Tools запустить файл EventReg.htm с помощью обозревателя Internet Explorer. После того, как произойдет подключение к пространству имен, перед нами появится окно с двумя панелями.

Утилита пакета WMI Tools - Event Registration

Левая панель отвечает за отображение классов и экземпляров, которые связаны с событиями, правая панель отображает связи, установленные между потребителями и фильтрами событий. Слева вверху находится выпадающий список, в котором можно выбрать тип отображаемых объектов:

  • Consumers – потребители событий
  • Filters – фильтры событий
  • Timers – события таймера

Там же вверху справа от списка находится поле для выбора пространства имен  (смотрите статью «Классы WMI, пространство имен и CIM«) и управляющие кнопки в виде пиктограмм в левой и правой панелях.

  • Browse for Namespace – отвечает за соединение с пространством имен WMI на локальной или удаленной системе
  • New Instance – собственно, создание новых экземпляров для потребителей событий, фильтров событий или же событий таймеров
  • Edit Instance Properties – редактирование свойств для выбранных экземпляров классов
  • Delete Instance – позволяет удалить выбранный экземпляр класса
  • Register – позволяет установить связь между потребителем событий и фильтром событий
  • View Instance Properties – дает возможность для просмотра свойств заданного класса
Кнопки в виде пиктограмм

Стоит отметить, что если в левой панели отображаются потребители событий, то в правой – фильтры, и наоборот, если слева фильтры, то справа потребители событий.

Потребители и фильтры событий в окне Event Registration

Создание событий таймера

События таймера могут быть двух типов:

  • Интервальный тип – событие возникает через заданные интервалы времени, являются экземплярами класса __AbsoluteTimerlnstruction
  • Абсолютный тип – событие возникает в заданное время, являются экземплярами класса __IntervalTimerlnstruction

События таймера абсолютного типа

Из выпадающего списка в левой панели вверху выбираем пункт Timers, после чего раскрываем список классов корневого элемента __TimerInstruction

Выпадающий список Timers со списком событий таймера

Выбираем класс __AbsoluteTimerInstruction и жмем на кнопку с пиктограммой New Instance или щелкаем правой кнопкой мыши по классу и выбираем одноименный пункт. После этого появится новое диалоговое окно Edit new instance properties.

Создание экземпляра класса WMI

Тут нам нужно заполнить два поля:

  • EventDateTime – щелкаем в столбце Value, после чего откроется диалоговое окно для ввода даты и времени
Установка времени для абсолютного события таймера
  • TimerID – тут вводим имя таймера, например, Absolute_Timer.

После ввода нужных данных, нажимаем на кнопку ОК, после чего будет создан новый экземпляр класса __AbsoluteTimerInstruction.

Экземпляр класса WMI для события таймера

Событий таймера интервального типа

Для создания события таймера интервального типа нужно проделать практически те же действия, что и для события таймера абсолютного типа. Только тут нужно создать экземпляр для класса __IntervalTimerInstruction. В диалоговом окне заполним следующие поля:

  • IntervalBetweenEvents – задаем интервал в миллисекундах, например, 30000 (30 секунд)
  • TimerID – имя таймера, например, Interval_Timer
Редактирование свойств WMI для интервального события таймера

В конечном итоге у нас должен появится новый экземпляр класса __IntervalTimerInstruction.

Фильтры событий

Использование фильтров событий позволяет задавать критерии, исходя из которых, произойдет оповещение потребителя событий. Все фильтры событий являются экземплярами системного класса __EventFilter, который можно увидеть при выборе поля Filterts из выпадающего списка. Выбираем системный класс __EventFilter и нажимаем на кнопку New Instance или щелкаем правой кнопкой мыши и выбираем одноименный пункт, после чего откроется диалоговое окно Edit new instance properties.

Диалоговое окно создания фильтра событий

Тут нам нужно заполнить три свойства (поля):

  • Name – задает имя фильтра
  • Query – запрос, по которому будет происходить фильтрация
  • Query Language – язык запроса (например, WQL)

Хорошо, теперь давайте попрактикуемся, создадим три фильтра:

Фильтр для события, которое возникнет при запуске программы калькулятор (Calc.exe). Свойству Name присвоим значение Start_Calc_Filter. В поле WQL пропишем следующий запрос:

SELECT*FROM __InstanceCreationEvent WITHIN5WHERE TargetInstance ISA "Win32_Process"AND TargetInstance.Name="Calc.exe"

Тут мы выбираем все свойства для класса __InstanceCreationEvent (отвечает за создание нового экземпляра заданного класса), определяем временной интервал опроса (WITHIN 5) и задаем диапазон для запроса (оператор WHERE). Свойство TargetInstance хранит информацию об объекте, который вызвал событие. Нам нужен экземпляр класса Win32_Process с именем Calc.exe.

Не стоит путаться, фильтр сам по себе ничего не решает, уже потом мы может создать потребитель событий и связать его с этим фильтром. Или по простому – определим, что надо делать при запуске программы калькулятор (записать информацию в файл, вывести сообщение и так далее).

Инструментарий Windows Management Instrumentation

Теперь надо взять в разработку созданные ранее события таймера, помним, что у нас есть два события таймера абсолютного (Absolute_Timer) и интервального (Interval_Timer) типа. Создадим для них по фильтру с именами Absolute_Timer_Filter и Interval_Timer_Filter. И запишем в поле WQL следующие запросы:

SELECT*FROM __TimerEvent WHERE TimerId="Absolute_Timer"

для Absolute_Timer_Filter

и

SELECT*FROM __TimerEvent WHERE TimerId="Interval_Timer"

для Interval_Timer_Filter

Видим, что в самих запросах происходит обращение к системному классу __TimerEvent (он отвечает за события таймера) и отсеивание происходит по свойству TimerId. В итоге у нас появились еще два фильтра, первый определяет точное время, в которое надо оповестить потребитель событий, второй – задает интервалы для оповещения потребителя событий. Так, для второго фильтра задан интервал в 30 секунд (это значение мы прописали в событии таймера), то есть, можно связать с ним потребитель событий, который будет, ну скажем…. запускать калькулятор.

Фильтры событий WMI пакета WMI Tools

Хорошо, в следующей части по WMI Event Registration (Утилита WMI Event Registration — часть 2) мы рассмотри процесс создания постоянных потребителей событий.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий