Share via


DebugActiveProcess 함수(debugapi.h)

디버거가 활성 프로세스에 연결하고 디버그할 수 있도록 합니다.

구문

BOOL DebugActiveProcess(
  [in] DWORD dwProcessId
);

매개 변수

[in] dwProcessId

디버그할 프로세스의 식별자입니다. 디버거는 DEBUG_ONLY_THIS_PROCESS 플래그를 사용하여 프로세스를 만든 것처럼 프로세스에 대한 디버깅 액세스 권한을 부여합니다. 자세한 내용은 이 항목의 ‘주의’ 섹션을 참조하세요.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

프로세스 디버깅을 중지하려면 프로세스를 종료하거나 DebugActiveProcessStop 함수를 호출해야 합니다. 디버그SetProcessKillOnExit 함수를 사용하지 않는 한 디버거를 종료하면 프로세스도 종료됩니다.

디버거는 대상 프로세스에 대한 적절한 액세스 권한이 있어야 하며 PROCESS_ALL_ACCESS 대한 프로세스를 열 수 있어야 합니다. 디버거에 모든 액세스 권한을 부여하는 보안 설명자를 사용하여 대상 프로세스를 만들면 DebugActiveProcess가 실패할 수 있습니다. 디버깅 프로세스에 SE_DEBUG_NAME 권한이 부여되고 사용하도록 설정된 경우 모든 프로세스를 디버그할 수 있습니다.

시스템에서 프로세스 식별자를 확인하고 유효한 디버깅 첨부 파일이 만들어지고 있는지 확인한 후 함수는 TRUE를 반환 합니다. 그런 다음, 디버거는 WaitForDebugEvent 함수를 사용하여 디버깅 이벤트를 대기해야 합니다. 시스템은 프로세스의 모든 스레드를 일시 중단하고 프로세스의 현재 상태를 나타내는 디버거 이벤트를 보냅니다.

시스템은 dwProcessId 매개 변수로 지정된 프로세스를 나타내는 단일 CREATE_PROCESS_DEBUG_EVENT 디버깅 이벤트를 디버거에 보냅니다. CREATE_PROCESS_DEBUG_INFO 구조체의 lpStartAddress 멤버는 NULL입니다.

현재 프로세스의 일부인 각 스레드에 대해 시스템은 CREATE_THREAD_DEBUG_EVENT 디버깅 이벤트를 보냅니다. CREATE_THREAD_DEBUG_INFO 구조체의 lpStartAddress 멤버는 NULL입니다.

현재 대상 프로세스의 주소 공간에 로드된 각 DLL(동적 연결 라이브러리)에 대해 시스템은 LOAD_DLL_DEBUG_EVENT 디버깅 이벤트를 보냅니다. 시스템은 프로세스의 첫 번째 스레드가 다시 시작되면 중단점 명령을 실행하도록 정렬합니다. 이 스레드를 계속하면 디버거가 연결되기 전과 동일한 작업을 수행하게 됩니다.

이 모든 작업이 완료되면 시스템에서 프로세스의 모든 스레드를 다시 시작합니다. 프로세스의 첫 번째 스레드가 다시 시작되면 EXCEPTION_DEBUG_EVENT 디버깅 이벤트가 디버거로 전송되도록 하는 중단점 명령을 실행합니다. 이후의 모든 디버깅 이벤트는 일반 메커니즘 및 규칙을 사용하여 디버거로 전송됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 debugapi.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CREATE_PROCESS_DEBUG_INFO

CREATE_THREAD_DEBUG_INFO

CreateProcess

DebugActiveProcessStop

디버깅 함수

실행 중인 프로세스 디버깅

WaitForDebugEvent