2011-08-30 6 views
3

Win32 API를 사용하면 SuspendThread()을 사용하여 단일 스레드를 일시 중단 할 수 있지만 한 번의 호출로 전체 프로세스를 일시 중단 할 수는 없습니다.
프로세스 스레드를 반복하고 일시 중단하려면 데드 록 및 예기치 않은 동작이 발생할 수 있으므로 좋은 옵션이 아닙니다.Windows : 전체 프로세스를 원자 적으로 일시 중단 하시겠습니까?

이는 DDK (나는 ​​그것의 이름을 기억하지 않는)에서 함수를 사용하여 커널에서 가능한 무언가 있어야한다.
이 기능을 사용자 모드에 어떻게 노출시킬 수 있습니까?

커널을 사용하지 않고이 작업을 수행 할 수있는 다른 방법이 있습니까?

시스 인 터널 프로세스 탐색기 프로세스를 일시 중단하는 옵션이 있습니다. 어떻게 그럴 수 있습니까?

+2

창문 스케줄러는 프로세스 무작위로 모든 시간에 스레드를 일시 중단합니다. 교착 상태에 빠지면 스레딩 버그를 수정해야합니다. 또는 다른 방법으로 넣으려면 프로그램이 올바른 경우 교착 상태가 발생하지 않습니다. –

답변

2

문서화되지 않은 기능 NtSuspendProcess. Sysinternals pssuspend와 프로세스 탐색기는 모두 이것을 사용합니다.

문서화되지 않은 기능에 대한 일반적인주의 사항이 적용됩니다.

이 대답은 좀 더 자세한 내용이 있습니다 How can I freeze the execution of a program?

+0

pssuspend.exe 내 나쁜의 ntdll – shoosh

+0

죄송합니다, 당신은 정적 NTDLL에 링크 할 수 없습니다에서 직접 아무것도 가져하지 않는 것, 그것은에 도착하는'GetProcAddress' 사용합니다. – shoosh

+0

GetmoduleHandle ("ntdll.dll")/GetProcAddress ("NtSuspendProcess") – John

2

사실 MiniDumpWriteDump 할 것으로 보인다 정확히 이잖아 - 그것은 덤프를 생성하기 전에 개별적으로 (호출 스레드를 제외하고) 그 과정에서 모든 스레드를 일시 중단합니다. 별도의 프로세스에서이 작업을 수행 분명히 그 아마도 최선을 다하지만 혼자

는 교착 상태 또는 예기치 않은 동작이 발생할해서는 안된다. 당신이 찾고있는 것을 같은 NTDLL.DLL 소리에