2009-08-07 2 views
4

Я могу приостановить поток другого процесса с помощью SuspendThread(). Есть ли способ приостановить выполнение этого процесса? Если да, пожалуйста, отправьте код.Приостановка выполнения удаленного процесса (C, Windows)

Спасибо.

PS: Поскольку вы спросите: «Зачем вы хотите это сделать», я отправлю его здесь. Я имею дело с устаревшим программным обеспечением, которое больше не поддерживается. У меня нет доступа к исходному коду. Сейчас мне нужно, чтобы он остановился, пока файл не заполнился данными, а затем возобновит выполнение.

ответ

2

Единственный способ приостановить все потоки этого процесса.

Если вы хотите увидеть фактический код, проверьте выборку here.

+0

будет ли это приостановить сам процесс? Я попытался приостановить все темы, но основной процесс все еще активен. – wonderer

+0

Процесс включает в себя один или несколько потоков, которые фактически выполняют код в процессе (технически процессы не запускаются, потоки выполняются). –

+0

Отлично. Спасибо за объяснение – wonderer

0

> Единственный способ приостановить все потоки этого процесса.

Номер
Использование недокументированного ядра apis (экспортируется с NT 3.1) для приостановки Pid.

+0

спасибо за комментарии, но просто сказать «использовать недокументированный API» не даст мне ответа. Если вы знаете какой-либо недокументированный API, отправьте его и укажите пример кода. – wonderer

0

Если процесс имеет или порождает много потоков быстро или асинхронно, ваш объект зависит от состояния гонки с SuspendThread().

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