Windows: атомарно приостановить весь процесс?

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

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

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

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


person shoosh    schedule 30.08.2011    source источник


Ответы (1)


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

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

person Justin    schedule 30.08.2011