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

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

В прошлой части по утилите WMI Event Registration пакета WMI Tools мы рассмотрели основные аспекты по описанию процесса создания таймера событий и фильтра событий, а также сделали обзор панели управления. В этой (второй0 части мы рассмотрим процесс создания постоянных потребителей событий.

Приступим…

Постоянные потребители событий WMI

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

Потребитель событий – желание, которое нужно выполнить при наступлении заданного события, например, запустить программу каждый 10 секунд, записать информацию в файл при переполнении диска, закрыть игру при ее запуске и так далее.

Конечно, сказать легко, а вот как это реализовать? За реализацию желаний отвечает набор классов, так, LogFileEventConsumer позволяет записывать информацию в файл, CommandLineEventConsumer отвечает за запуск процесса при наступлении события, и так далее.

В той или иной степени все постоянные потребители событий являются потомками экземпляров системного абстрактного класса __EventConsumer. И как упоминалось выше, для создания заданного потребителя события используется соответствующий класс. Сразу после установки пакета WMI Tools доступны только два таких класса – EventViewerConsumer и CmdTriggerConsumer, которые используются для функционирования утилиты WMI Event Viewer, являющейся постоянным потребителем событий. Но это не помеха, так как в папке %SystemRoot%System32Wbem находятся MOF-файлы с описанием остальных классов:

  • ActiveScriptEventConsumerScrcons.mof
  • ScriptingStandardConsumerSettingScrcons.mof
  • LogFileEventConsumerWbemcons.mof
  • NTEvent Log Event ConsumerWbemcons.mof
  • SMTP Event ConsumerSmtpcons.mof
  • CommandLineEventConsumerWbemcons.mof

Для компиляции MOF-файлов можно воспользоваться стандартной утилитой Mofcomp.exe, прописав в командной строке или в окне “ПускВыполнить”:

mofcomp -N:RootCIMV2 %SYSTEMROOT%System32Wbem<имя_файла>.mof
Расширеный список потребителей событий утилиты WMI Event Registration пакета WMI Tools

После того, как мы скомпилируем все вышележащие MOF-файлы, то список классов для формирования постоянных потребителей событий расширится.

Потребитель класса LogFileEventConsumer

Для примера рассмотрим такую ситуацию – при запуске программы калькулятор (процесс calc.exe) в текстовый документ D:WorkStartCalc.log будет записываться сообщение “Запущена программа калькулятор”. Для реализации поставленной задачи создадим экземпляр класса LogFileEventConsumer. Щелкаем правой кнопкой по данному классу и выбираем пункт New instance, или же нажимаем соответствующую кнопку в виде пиктограммы.

В появившемся диалоговом окне Edit new instance properties заполняем три поля:

  • Name – тут вводим имя потребителя событий, например, Start_Calc_Consumer
  • FileName – прописываем путь к документу, в которой будем записывать сообщение при наступлении события, в нашем случае — D:WorkStartCalc.log
  • Text – собственно, текст сообщения, например, Запущена программа калькулятор
Заполнение свойств для потребителя событий Windows Management Instrumentation

Нажимаем ОК, теперь у нас появился экземпляр класса LogFileEventConsumer

Потребитель класса CommandLineEventConsumer

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

Заполняем три поля:

  • Name – прописываем имя потребителя событий, например, Interval_Timer_Consumer.
  • CommandLineTemplate – тут указываем имя процесса, который должен запуститься при наступлении события, например, calc.exe.
  • RunInteractively — выберем значение True, что бы наш процесс запускался в интерактивном режиме.
CommandLineEventConsumer - класс для создания постоянного потребителя собий

Нажимаем ОК, теперь у нас уже два потребите событий, для полного наслаждения результатом, нужно связать их с фильтрами, созданными ранее.

Формирование связи между фильтром и потребителем событий

И так, давайте подведем итоги, мы создали три фильтра:

  • Absolute_Timer_Filter – задает точное время, когда потребитель событий должен сработать
  • Interval_Timer_Filter – задает промежутки времени (30 секунд), через которые произойдет выполнение потребителя событий
  • Start_Calc_Filter – данный фильтр запускает процесс Calc.exe (калькулятор), на запуск калькулятора будет реагировать потребитель событий.

Также у нас есть два потребите событий:

Interval_Timer_Consumer – запускает программу калькулятор

Start_Calc_Consumer – производит запись в файл

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

Давайте рассмотрим такие комбинации:

  • Потребитель событий Interval_Timer_Consumer + фильтр событий Interval_Timer_Filter – произойдет запуск calc.exe каждые 30 секунд
  • Потребитель событий Interval_Timer_Consumer + фильтр событий Start_Calc_Consumer – произойдет запуск calc.exe при запуске calc.exe, фактически, бесконечный цикл запуска программы калькулятор. Но так как опрос события проходит с задержкой, то и повторный запуск программы произойдет с задержкой в 3-5 секунд.
  • Потребитель событий Interval_Timer_Consumer + (фильтрs событий Interval_Timer_Filter и Start_Calc_Consumer) – тут произойдет комбинация, так как каждый 30 секунд будет запускаться калькулятор и с задержкой еще одна копия программы калькулятор.
Фильтры WMI и потребители событий WMI
  • Потребитель событий Start_Calc_Consumer + фильтр событий Interval_Timer_Filter – произойдет запись сообщения в файл каждые 30 секунд
  • Потребитель событий Start_Calc_Consumer + фильтр событий Start_Calc_Consumer – произойдет запись сообщения в файл при запуске calc.exe.
  • Потребитель событий Start_Calc_Consumer + (фильтрs событий Interval_Timer_Filter и Start_Calc_Consumer) – тут произойдет комбинация, так как каждый 30 секунд будет происходить запись в log файл и при запуске программы калькулятор.
Утилита Event registration пакета WMI Tools

Для установки связи между потребителем событий и фильтром инструментария Windows Management Instrumentation, в левой панели выберите пункт Consumers из выпадающего списка, выберите нужный потребителей событий. В правой панели будут отображаться фильтры, просто выбираем один или группу нужных фильтров и отмечаем их галочкой, или щелкаем правой кнопкой мыши и выбираем пункт Register. Для отмены связи аналогичным образом снимаем галочку или выбираем пункт Unregister.

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