Сегодня мы рассмотрим утилиту WMI Event Registration, которая входит в состав пакета WMI Tools и предоставляет возможности в удобной форме создавать, регистрировать и настраивать постоянные потребители событий WMI.
Сам обзор я разбил на две части, и в этой части мы рассмотрим описание утилиты WMI Event Registration, процесс создания событий таймера и фильтров событий.
Для запуска утилиты Event Registration нужно в папке с установленным пакетом WMI Tools запустить файл EventReg.htm с помощью обозревателя Internet Explorer. После того, как произойдет подключение к пространству имен, перед нами появится окно с двумя панелями.
Левая панель отвечает за отображение классов и экземпляров, которые связаны с событиями, правая панель отображает связи, установленные между потребителями и фильтрами событий. Слева вверху находится выпадающий список, в котором можно выбрать тип отображаемых объектов:
- Consumers – потребители событий
- Filters – фильтры событий
- Timers – события таймера
Там же вверху справа от списка находится поле для выбора пространства имен (смотрите статью «Классы WMI, пространство имен и CIM«) и управляющие кнопки в виде пиктограмм в левой и правой панелях.
- Browse for Namespace – отвечает за соединение с пространством имен WMI на локальной или удаленной системе
- New Instance – собственно, создание новых экземпляров для потребителей событий, фильтров событий или же событий таймеров
- Edit Instance Properties – редактирование свойств для выбранных экземпляров классов
- Delete Instance – позволяет удалить выбранный экземпляр класса
- Register – позволяет установить связь между потребителем событий и фильтром событий
- View Instance Properties – дает возможность для просмотра свойств заданного класса
Стоит отметить, что если в левой панели отображаются потребители событий, то в правой – фильтры, и наоборот, если слева фильтры, то справа потребители событий.
Создание событий таймера
События таймера могут быть двух типов:
- Интервальный тип – событие возникает через заданные интервалы времени, являются экземплярами класса __AbsoluteTimerlnstruction
- Абсолютный тип – событие возникает в заданное время, являются экземплярами класса __IntervalTimerlnstruction
События таймера абсолютного типа
Из выпадающего списка в левой панели вверху выбираем пункт Timers, после чего раскрываем список классов корневого элемента __TimerInstruction
Выбираем класс __AbsoluteTimerInstruction и жмем на кнопку с пиктограммой New Instance или щелкаем правой кнопкой мыши по классу и выбираем одноименный пункт. После этого появится новое диалоговое окно Edit new instance properties.
Тут нам нужно заполнить два поля:
- EventDateTime – щелкаем в столбце Value, после чего откроется диалоговое окно для ввода даты и времени
- TimerID – тут вводим имя таймера, например, Absolute_Timer.
После ввода нужных данных, нажимаем на кнопку ОК, после чего будет создан новый экземпляр класса __AbsoluteTimerInstruction.
Событий таймера интервального типа
Для создания события таймера интервального типа нужно проделать практически те же действия, что и для события таймера абсолютного типа. Только тут нужно создать экземпляр для класса __IntervalTimerInstruction. В диалоговом окне заполним следующие поля:
- IntervalBetweenEvents – задаем интервал в миллисекундах, например, 30000 (30 секунд)
- TimerID – имя таймера, например, Interval_Timer
В конечном итоге у нас должен появится новый экземпляр класса __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.
Не стоит путаться, фильтр сам по себе ничего не решает, уже потом мы может создать потребитель событий и связать его с этим фильтром. Или по простому – определим, что надо делать при запуске программы калькулятор (записать информацию в файл, вывести сообщение и так далее).
Теперь надо взять в разработку созданные ранее события таймера, помним, что у нас есть два события таймера абсолютного (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 Event Registration (Утилита WMI Event Registration — часть 2) мы рассмотри процесс создания постоянных потребителей событий.