Windows: атомно приостановить весь процесс? - PullRequest
3 голосов
/ 30 августа 2011

Используя Win32 API, можно приостановить только один поток, используя SuspendThread(), но не полный процесс за один вызов.
Итерирование потоков процесса и приостановка их по одному не является хорошим вариантом, так как это может привести к зависанию и непредвиденному поведению.

Предполагается, что это возможно в ядре, используя функцию из DDK (название которой я не помню).
Как можно выставить эту функцию в режиме пользователя?

Есть ли другой способ добиться этого, не заходя в ядро?

SysInternals Process Explorer имеет возможность приостановить процесс. Как это сделать?

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Недокументированная функция NtSuspendProcess в ntdll.dll звучит так, как вы ищете. Sysinternals pssuspend и Process Explorer оба используют это.

Применяются обычные предостережения о недокументированных функциях.

В этом ответе есть еще несколько деталей: Как я могу остановить выполнение программы?

2 голосов
/ 30 августа 2011

На самом деле именно это и делает MiniDumpWriteDump - он по отдельности приостанавливает все потоки в процессе (кроме вызывающего потока), прежде чем создает дамп.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...