Мониторинг запущенных процессов Windows

Обновлено: 21.11.2024

Монитор процессов Windows – это инструмент, с помощью которого ИТ-администраторы могут отслеживать критические процессы в конечных точках ИТ-инфраструктуры Windows и обеспечивать их постоянную доступность, стабильное состояние и оптимальную производительность. Благодаря упреждающему мониторингу основных служб монитор процессов Windows помогает ИТ-администраторам гарантировать, что их процессы Windows не будут отключены или неожиданно завершены.

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

Мониторинг процессов Windows

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

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

Преимущества использования инструмента мониторинга процессов Windows

Наблюдение за процессами Windows – это сложная деятельность, которая включает в себя определение критических процессов, которые необходимо отслеживать, и отслеживание показателей их производительности. Крайне важно инвестировать в монитор процессов Windows, поскольку он:

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

OpManager: мощное и надежное программное обеспечение для мониторинга процессов Windows

ManageEngine OpManager – это комплексный инструмент для мониторинга процессов Windows, который отслеживает процессы Windows и позволяет получать подробные сведения о производительности различных процессов на ваших сетевых устройствах. Некоторые из ключевых возможностей OpManager по мониторингу процессов Windows включают:

Углубленное представление о производительности процессов Windows с помощью центральной панели управления

OpManager – это эффективный инструмент Windows Process Monitor, в котором возможности мониторинга производительности сочетаются со встроенной централизованной панелью мониторинга, которая помогает вам получить единое представление о производительности различных критически важных процессов Windows в вашей сети. Это поможет вам понять общую картину и лучше спланировать стратегию оптимизации производительности сети.

Отслеживайте эффективность процессов круглосуточно

OpManager поставляется с различными возможностями, такими как мониторинг процессов Windows, включая среду выполнения клиентского сервера, реестр, узел службы безопасности, узел службы и т. д. Вы можете отслеживать работоспособность, доступность и производительность процессов круглосуточно, а также получать оповещения о потенциальных проблемах, используя Многоуровневое оповещение OpManager на основе пороговых значений.

Мгновенно получайте уведомления о факторах, снижающих производительность процесса

OpManager поставляется с поддержкой многоуровневых многоканальных уведомлений, которые можно использовать для мгновенного оповещения вашей команды о любых проблемах, которые могут повлиять на производительность ваших процессов Windows. Вы также можете преобразовать оповещения в элементы, требующие действий, благодаря интеграции с ServiceDesk Plus и ServiceNow.Помимо обычных средств уведомления, таких как электронная почта и SMS, OpManager также поддерживает уведомления через Slack и интеграцию с веб-перехватчиками, чтобы обеспечить связь с популярными инструментами, такими как Telegram и MS Teams.

Автоматизация операций управления сбоями процессов Windows с помощью рабочих процессов

OpManager позволяет автоматизировать основные действия по мониторингу и управлению процессами Windows, такие как запуск процесса; завершение процесса; и перечисление всех процессов на устройствах Windows в порядке их использования ЦП, использования памяти, чтения/записи диска и т. д. Это значительно помогает избежать ручных операций и обеспечивает лучшее соответствие SLA при возникновении проблем с процессами в вашей сетевой инфраструктуре.< /p>

Хотите узнать, как OpManager, монитор процессов Windows, может помочь оптимизировать производительность устройств Windows в вашей сети? Запланируйте бесплатную демонстрацию сегодня!

Часто ли вы используете Диспетчер задач на ПК с Windows 10, чтобы отслеживать различные процессы в вашей системе и то, сколько ресурсов ЦП или памяти они используют? Если это так, вы можете обнаружить, что предпочитаете два альтернативных варианта: Process Monitor или Process Explorer.

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

Что такое монитор процессов?

Process Monitor — это бесплатное расширенное средство мониторинга, входящее в набор утилит Windows Sysinternals для Windows. Он позволяет просматривать подробную информацию обо всех процессах, запущенных в вашей системе.

В частности, это сведения о событиях, вызванных определенными процессами.

Следующие поля информации о процессе выбираются по умолчанию при первом запуске приложения.

  • Имя процесса
  • Путь
  • Подробнее
  • Результат
  • Операция
  • Время суток
  • Идентификатор процесса (PID)

Есть 20 дополнительных полей, которые вы можете выбрать, чтобы увидеть еще больше информации о каждом процессе.

С помощью этого инструмента вы не ограничены только просмотром информации о процессе. Вы также можете установить фильтры для любого поля, чтобы ограничить отображаемые данные, записывать события процесса для устранения неполадок и дерево процессов, которое позволяет увидеть взаимосвязь между родительскими и дочерними процессами.

Что такое обозреватель процессов?

Process Explorer — лучший инструмент для понимания того, как различные приложения работают в вашей системе. Благодаря инновационной древовидной структуре он покажет вам, какие файлы, каталоги и другие процессы контролируются каждым родительским процессом.

Вы можете использовать Process Explorer в «режиме дескриптора», который помогает вам увидеть, какое окно обрабатывает каждый процесс, открытый, или в «режиме DLL», который показывает вам библиотеки DLL и файлы с отображением памяти, открытые каждым процессом.

Это делает Process Explorer чрезвычайно полезным при устранении неполадок или отладке приложений, работающих на вашем компьютере.

Теперь, когда вы знаете, для чего используется каждая из этих бесплатных утилит SysInternals, давайте подробнее рассмотрим, как вы можете использовать каждую из них на своем ПК с Windows 10.

Как использовать монитор процессов

После извлечения файлов Process Monitor вы увидите разные файлы для запуска утилиты. Если вы используете 64-разрядную систему Windows, выберите файл с именем Procmon64.exe. Если нет, выберите файл Procmon.exe.

Из главного окна Process Monitor можно запустить представление, аналогичное приложению Process Explorer. Это представление дерева процессов. Чтобы просмотреть это, просто выберите небольшой значок документа с изображением древовидной схемы на нем.

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

Он не такой информативный, как Process Explorer, но позволяет быстро просмотреть большую часть той же информации.

Создать фильтр монитора процесса

Вернувшись на главный экран (окно событий процесса), щелкните правой кнопкой мыши любой из процессов и выберите «Редактировать фильтр», чтобы обновить фильтр процесса.

В этом окне показано, как работает фильтрация в Process Monitor. Первый раскрывающийся список позволяет выбрать объект для вашего фильтра. В данном случае это имя процесса. Следующее раскрывающееся меню — это оператор типа «есть», «нет», «меньше» и т. д. В этом поле вы можете ввести или выбрать свой фильтр, а также указать, хотите ли вы включить или исключить эти записи.

Когда вы выберете "Добавить", он добавит этот новый фильтр в ваш список и соответствующим образом изменит общее представление процессов.

Чтобы создать новый фильтр, откройте меню "Фильтр" и выберите "Фильтр".

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

После того как вы нажмете "ОК", ваш основной вид обновится, чтобы включить новый фильтр.

Самая полезная функция Process Monitor — регистрация системных событий во время выполнения некоторых действий. Вы можете регистрировать системные события следующим образом:

  1. Нажмите значок "Захват" в виде увеличительного стекла, чтобы остановить запись.
  2. Выберите ластик на значке очистки бумаги, чтобы очистить журнал.
  3. Нажмите значок "Захват" еще раз, чтобы начать запись.
  4. Выберите «Фильтровать» и «Включить расширенный вывод».
  5. Создайте проблему заново.
  6. Чтобы остановить регистрацию, еще раз нажмите значок "Захват".
  7. Нажмите значок сохранения на диске, чтобы сохранить журнал на свой компьютер.

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

Углубленное изучение событий

Выбирая определенные события в Process Monitor, вы можете просмотреть дополнительные сведения в меню "Событие".

Выберите событие, которое хотите изучить. Затем откройте меню «Событие» и выберите «Свойства».

Показывает все свойства события. На вкладке «Событие» в основном отображается то, что было в главном окне «Монитор процессов». На вкладке «Процесс» показаны такие вещи, как путь к приложению и командная строка запуска, а также модули, используемые процессом. На вкладке Stack представлены модули, хранящиеся в памяти процессом, и их сведения.

Вы можете получить доступ только к вкладке "Стек", выбрав "Стек" в меню "События".

Если вы хотите внимательно следить за каким-либо отдельным событием, выберите его, а затем выберите меню «Событие» и выберите «Переключить закладку».

Событие будет выделено, чтобы его было легче отслеживать.

Вы также можете просмотреть записи реестра для любого процесса, выбрав меню "Событие" и выбрав "Перейти к".

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

Справа от панели инструментов вы увидите пять значков, которые можно использовать для точной настройки фильтров по умолчанию.

Вы можете использовать их для включения или выключения каждого из следующих фильтров:

  • Действия в реестре
  • Активность файловой системы
  • Сетевая активность
  • Активность процессов и потоков
  • Профилирование событий

Как использовать Process Explorer

Используйте тот же подход для 32-разрядной или 64-разрядной версии при запуске Process Explorer.

В меню "Вид" можно настроить, какая информация о процессе будет отображаться на каждой панели.

Используйте представление нижней панели, чтобы изменить отображаемые там данные с дескрипторов на библиотеки DLL.

Самое важное меню здесь — «Процесс». Ниже показано, что каждый пункт меню покажет вам и позволит вам управлять.

Set Affinity показывает, на каких процессорах может выполняться выбранный процесс. Вы можете включить или отключить любой из процессоров, если хотите.

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

Следующие четыре параметра позволяют управлять каждым процессом.

  • Убить процесс: принудительно остановить отдельный процесс
  • Убить дерево процессов: принудительно остановить процесс и все дочерние процессы.
  • Перезапустить: остановить и запустить выбранный процесс.
  • Приостановить: подозревать выбранный процесс

Вы можете создать файлы дампа или минидампа, связанные с выбранным процессом, выбрав меню «Процесс» и выбрав «Создать дамп». Затем выберите, хотите ли вы мини-дамп или полный дамп.

Наконец, если вы выберете «Свойства» в меню «Процесс», вы сможете просмотреть множество свойств выбранного процесса.

Это включает информацию о производительности, использовании графического процессора, общем количестве потоков, сетевой активности и многом другом.

Что лучше использовать: Process Monitor или Process Explorer?

Несмотря на то, что эти две утилиты похожи, они не одинаковы. Process Monitor лучше использовать, если вам нужно отслеживать, как ваши процессы взаимодействуют с вашей системой. Он позволяет отслеживать и регистрировать события, запускаемые каждым процессом.

Это может помочь вам увидеть, вызывает ли взаимодействие между вашими процессами и вашей системой ошибки или ненормальное поведение.

Process Explorer, с другой стороны, в значительной степени сосредоточен на процессах. Это помогает вам увидеть отношения между родительскими процессами и его дочерними процессами. Кроме того, она позволяет гораздо глубже изучить параметры и свойства каждого процесса, чем любая другая доступная утилита Windows.

Выберите нужную утилиту в зависимости от того, что именно вы устраняете.

Райан пишет инструкции и другие статьи о технологиях в Интернете с 2007 года. Он имеет степень бакалавра наук в области электротехники, 13 лет работал в области автоматизации, 5 лет — в ИТ, а сейчас работает инженером по приложениям. Прочитать полную биографию Райана

Понравился ли вам этот совет? Если это так, загляните на наш канал YouTube на нашем родственном сайте Online Tech Tips. Мы охватываем Windows, Mac, программное обеспечение и приложения, а также предлагаем множество советов по устранению неполадок и обучающих видеороликов. Нажмите кнопку ниже, чтобы подписаться!

Как описано здесь, SAM включает в себя несколько "типов мониторов компонентов", которые используют различные методы для фокусировки на таких элементах, как службы, журналы или процессы. Мониторы процессов для Windows проверяют, запущен ли указанный процесс Windows, и сообщают об использовании ЦП, виртуальной и физической памяти всеми экземплярами процесса.

Одним из примеров монитора процессов является монитор статистики рабочего процесса, включенный в шаблон AppInsight для IIS. Этот монитор компонента собирает данные и состояние службы активации рабочего процесса для пула приложений.

Обратите внимание на следующие детали, применимые к большинству мониторов процессов для Windows:

  • Они поддерживают методы опроса WinRM, WMI, агента Orion для Windows, ICMP и внешнего узла.
  • Они не вычисляют статистику.
  • Через пять секунд после извлечения образца из класса Win32_PerfRawData_PerfProc_Process (свойства PercentProcessorTime и TimeStamp_Sys100NS) извлекается второй образец; монитор использует оба образца для расчета загрузки ЦП.

Советы по отслеживанию нескольких процессов на разных серверах для приложения см. в этой публикации THWACK: Мониторинг процессов с помощью SAM.

Описания полей

Если вы создаете монитор процессов для Windows в мастере мониторов компонентов, вам будет предложено указать несколько значений, как описано ниже.

Описание монитора по умолчанию. Чтобы переопределить описание по умолчанию, добавьте существующий текст или замените его. Изменения сохраняются автоматически. Переменная для доступа к этому полю: $ .

Настройте описания, чтобы указать, что будет отслеживаться, чтобы связанные оповещения и уведомления были более содержательными позже.

Определяет, включен ли компонент. Отключение компонента оставляет его в приложении в деактивированном состоянии, что не влияет на доступность или статус приложения, отображаемый в веб-консоли Orion.

Учетные данные для мониторинга

Выберите учетные данные Windows с правами WMI на целевом узле. Обычно это учетные данные уровня администратора Windows.

Нажмите учетные данные в списке или воспользуйтесь параметром. Если необходимых вам учетных данных нет в списке учетных данных, добавьте их в библиотеку учетных данных SAM.

Настройте, как SAM собирает данные с целевых систем.

  • WMI (WinRM/DCOM): используйте WinRM с DCOM в качестве резервного метода. См. раздел Использование WinRM для опроса монитора приложений в SAM.
  • RPC (удаленный вызов процедур): используйте связь RPC.

Механизм аутентификации WinRM

Если переключатель SAM WinRM включен для опроса приложений на сервере Orion и целевых узлах, выберите метод проверки подлинности для подключения. По умолчанию установлено значение «Переговоры».

Фильтр командной строки

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

Например, чтобы отслеживать только экземпляры, запущенные с –myOption=NorthAmerica , используйте –myOption=NorthAmerica . Чтобы отслеживать любые экземпляры, запущенные с Америкой в ​​любом аргументе, используйте Америку

Укажите имя процесса для мониторинга. Если вы не знаете имя процесса, SAM может помочь вам найти процессы для мониторинга.

Установите пороговые значения на основе процента ресурсов ЦП, используемых отслеживаемым процессом. Когда загрузка ЦП находится в пределах пороговых значений, монитор переключается в состояние предупреждения или критического состояния. См. Пороговые значения Application Monitor.

Порог физической памяти

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

Порог виртуальной памяти

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

Пороговое значение операций чтения ввода/вывода в секунду

Установите пороговые значения на основе количества операций чтения ввода-вывода, выполняемых в секунду отслеживаемым процессом. Когда опрос операций чтения находится в пределах пороговых значений, монитор переходит в состояние предупреждения или критического состояния.

Пороговое значение операций записи ввода/вывода в секунду

Установите пороговые значения на основе количества операций записи ввода-вывода, выполняемых в секунду отслеживаемым процессом. Когда опрос операций записи находится в пределах пороговых значений, монитор переходит в состояние предупреждения или критического состояния.

Порог общего количества операций ввода-вывода в секунду

Установите пороговые значения на основе общего количества операций ввода-вывода, выполняемых в секунду отслеживаемым процессом. Когда общее количество операций опроса находится в пределах пороговых значений, монитор переходит в состояние предупреждения или критического состояния.

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

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

Группа сетевой безопасности

Содержание:

Введение

Мы разработаем инструмент мониторинга процессов Windows, отвечающий за установку драйвера для мониторинга запуска процессов. Драйвер будет уведомлять приложение пользовательского режима о каждом запуске нового процесса Windows, а также предоставлять PID и имя процесса и запрашивать, разрешить или запретить запуск этого процесса. А пока процесс ждет и не начинает работать.

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

Использование кода

В этой статье описываются решения для мониторинга процессов Windows, а также методы мониторинга процессов Windows. Представленный здесь код иллюстрирует технику блокировки процессов, поэтому его нельзя использовать как коммерческое решение, готовое к реализации в реальных проектах.

Структура проекта

.\bin - папка с бинарными файлами
.\lib - папка с файлами библиотек
.\obj - папка с объектными файлами
.\procmon - папка с исходными файлами
>|-> .\Common — Общие файлы и проекты
|-> .\DrvCppLib — Библиотека ядра для разработки драйвера на C++.
|-> .\ DrvSTLPort - Каталог с STLPort 4.6, портированный для
использования в драйверах Windows.
|-> .\ include — включает общие для пользователя и драйвера
|-> .\ processdll — основная DLL, содержащая все API
|-> .\ procmon — проект драйвера < br />|-> .\ ProcMonGUI — графический интерфейс, написанный с использованием MFC

Описанный проект разработки средства мониторинга процессов Windows поддерживает архитектуры Windows x86 и x64. Кроме того, он предоставляет все необходимые конфигурации сборки.

Загрузка процесса Windows

Чтобы создать процесс Windows, вы должны вызвать одну из следующих функций:

  • Создать процесс
  • Создатьпроцесс от имени пользователя
  • Создатьпроцесс с токеномW
  • Создатьпроцесс с входом в систему

Разработка состоит из нескольких шагов, выполняемых следующими компонентами ОС:

  • Kernel32.dll (библиотека клиентской части Windows)
  • Эффективная система
  • Процесс подсистемы среды Windows (Csrss)

Мы можем разделить операции для создания объекта исполняющего системного процесса (другие подсистемы среды могут использовать его позже) и операции для создания процесса Windows. Это возможно, поскольку архитектура Windows поддерживает разные подсистемы среды.

Таким образом, некоторые действия Windows-функции CreateProcess специфичны для семантики Windows.

Ниже приведены общие шаги по созданию процесса с помощью функции Windows CreateProcess:

  1. Открыть файл изображения (EXE), который будет выполняться в процессе.
  2. Создать рабочий объект системного процесса.
  3. Создайте начальный поток (стек, контекст и объект выполнения системного потока).
  4. Подсистема Windows получает уведомление о создании процесса и потока.
  5. Запустить начальный поток, если флаг CREATE_SUSPENDED не установлен.
  6. Инициализируйте адресное пространство в контексте нового процесса и потока (например, загрузите необходимые библиотеки DLL), а затем запустите программу.

Подробнее о схеме запуска процесса расскажет «Microsoft Windows Internals» Марка Руссиновича.

Уведомления — полезная функция технологии создания и загрузки процессов. Разработчики драйверов могут получать оповещения о создании процессов и сопоставлении файлов образов с памятью.

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

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

Технические аспекты

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

Подписка на уведомления о создании процессов и сопоставлении образов — это первый шаг нашего драйвера на этапе инициализации. Ниже приведен соответствующий код:

Во-первых, мы должны создать список уже запущенных процессов. Согласно архитектуре решения, как только происходит событие, пользовательское приложение запрашивает список запущенных процессов, а драйвер предоставляет его. Приходится отделять разрешенные к запуску процессы от уже запущенных, чтобы в список попали не все процессы. Для этого в проект включена структура ProcessHelper. Его экземпляр, созданный при создании процесса, берет на себя ответственность за этот процесс. Эта структура включает информацию о том, разрешен ли запуск этого процесса, а также предоставляет его имя, PID и некоторые дополнительные данные.

Следующая функция запускает начальное построение списка процессов: StartupProcessManagerList();

Затем мы запускаем и инициализируем драйвер.

Режим пользователя

Функция DeviceIoControl() отвечает за связь между драйвером и пользовательским режимом. Тем не менее, используя функцию Init(), приложение пользовательского режима помогает драйверу вызывать пользовательский режим при запуске процесса. Вы можете найти соответствующий код ниже:

DeviceIoControl вместе с кодом IOCTL_REGISTER_EVENT помогают нам создать и инициализировать объект Event, а также отправить его драйверу. Драйвер получает это событие и «записывает» его, чтобы потом установить в сигнальное состояние, и, таким образом, уведомить часть пользовательского режима о запуске нового процесса. Ниже приведен код драйвера для получения события:

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

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

Запуск процесса Windows

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

Примеры кода помогут нам детально изучить эту схему.

Мы должны выполнить следующий код после получения уведомления о создании процесса:

Обратите внимание, что при создании процесса мы также создаем помощника для хранения следующей информации об идентификаторе процесса:

  • Имя
  • Состояние (показывает, приостановлен ли процесс)
  • Маркер (показывает, рассматривал ли пользователь уже этот процесс относительно его разрешения или нет, или это новый процесс)

После этого мы получаем уведомление о сопоставлении изображений. Отображение выполняется в контексте процесса, PID которого мы также получаем. После этого проверяем, есть ли уже процесс в списке (если уведомление уже получено) или нет. Если он есть, продолжаем заполнять данные о процессе.

Проверка осуществляется таким образом:

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

После прохождения всех проверок и проверки правильности процесса мы инициализируем событие процесса и уведомляем процесс пользовательского режима об этом событии. Затем мы ждем инициализированного ранее события процесса. Событие процесса является частью ProcessHelper и связано с конкретным процессом.

Вы можете задаться вопросом: «Почему это так сложно? Почему бы нам не выполнить все, что указано в уведомлении о создании процесса?». Ответ прост. Уведомление о создании процесса приходит асинхронно, так что наше ожидание ни к чему не приведет. Процесс запустится и выполнит все свои действия. Что касается уведомления об отображении изображения, оно приходит синхронно, поэтому, если мы остановим выполнение внутри функции, процесс будет «заморожен». Это то, что нам нужно для мониторинга процессов Windows. Следующий код демонстрирует все описанные действия:

Когда драйвер отправляет уведомление о запуске нового процесса, приложение пользовательского режима прекращает ожидание и начинает обработку запроса.

Вот как выглядит ожидание приложения пользовательского режима:

С помощью функции Dispatch() мы запрашиваем у драйвера список новых запущенных процессов после последнего запроса. Затем пользователь должен выбрать процессы, которые будут разрешены, и те, которые будут заблокированы. После этого просматриваем список, отправляя соответствующие коды разрешения/блокировки процесса.

Каждая функция разрешения и блокировки вызывает функцию DeviceIoControl с кодом IOCTL_ALLOW или IOCTL_BLOCK соответственно. Выполняется в драйвере. Сначала мы выполняем поиск по PID процесса. Мы освобождаем процесс, если он приостановлен, и если маркер процесса указывает, что он должен быть заблокирован, то мы устанавливаем флаг bTerminate в значение TRUE и принудительно завершаем процесс.

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

Рассмотрим графическое представление схемы:

Пример установки и использования драйвера

Приведенный пример разработки средства мониторинга процессов Windows имеет главное окно со следующими параметрами:

  • Установить драйвер
  • Запустить драйвер
  • Остановить водителя
  • Удалить драйвер

Главное окно также содержит кнопки «Пуск» и «Стоп» для включения и выключения мониторинга.

После установки и запуска драйвера нужно нажать кнопку «Пуск», которая находится в группе «Мониторинг». Затем, как вы можете видеть на картинке ниже, при каждом запуске нового процесса появляется новое окно.

Заключение

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

  • Отображать несколько окон одновременно
  • Отложить запуск процесса на неограниченное время
  • Правила, разрешающие или блокирующие определенные типы процессов

Вы можете сделать это самостоятельно, чтобы детально изучить эту тему.

Дополнительная информация

Для создания проекта вам потребуются следующие глобальные ценности:

BOOST_ROOT должен содержать путь к корню, в котором установлен Boost.

BASEDIR должен содержать путь к корню, где установлен WDK 7.1.0.

Ссылки

  1. Марк Руссинович, Дэвид Соломон. Microsoft Windows Internals ((Четвертое издание) ред.)
  2. Деккер, новичок. Разработка драйверов устройств Windows
  3. MSDN

Готовы нанять команду разработчиков, имеющую опыт программирования процессов и разработки драйверов, для работы над вашим проектом, например, для мониторинга и управления процессами Windows? Просто свяжитесь с нами, и мы предоставим вам все детали!

Читайте также: