Заморозить все потоки стороннего процесса

Рейтинг: 1Ответов: 1Опубликовано: 29.12.2014

Приветствую всех.

Имеется процесс "AB.EXE", он имеет 2 потока, когда ставишь "AB.EXE" на паузу "SUSPEND", то сперва оба потока процесса приостанавливаются, но затем через 1 секунду один из потоков самостоятельно возобновляется.

Необходимо по таймеру с заданны интервалом SUSPEND'ить потоки процесса "AB.EXE".

Помогите, пожалуйста, если кто располагает навыками решения данной задачи!

Ответы

▲ 2

Всё просто. Имея id процесса (вы же знаете, откуда его взять, да?), вы можете обойти все потоки этого процесса, как в этом примере. Каждый из потоков можно заморозить при помощи SuspendThread. У вашего процесса должно быть достаточно прав для этого.

Не забудьте, что процесс в принципе может активно сопротивляться. Поскольку вы замораживаете потоки один за одним, незамороженные потоки могут следить и разморозить остальные потоки в то время, как вы пытаетесь заморозить остальные. Или отдельный процесс, сотрудничающий с тем, который вы замораживаете, может разморозить его. В общем, à la guerre comme à la guerre.


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