라이브 User-Mode 대상

이 항목에 나열된 프로세스를 만들고 연결하는 방법은 로컬 컴퓨터 및 프로세스 서버를 실행하는 원격 컴퓨터에 사용할 수 있습니다.

사용자 모드 프로세스는 지정된 명령을 실행하여 프로세스를 만드는 Create Process 또는 CreateProcess2를 사용하여 만들 수 있습니다. AttachProcess 메서드를 사용하여 디버거 엔진을 기존 사용자 모드 프로세스에 연결할 수 있습니다. CreateProcessAndAttachCreateProcessAndAttach2 는 새 사용자 모드 프로세스를 만들고 동일한 컴퓨터에서 또는 다른 사용자 모드 프로세스에 연결합니다. 요청 작업 DEBUG_REQUEST_GET_ADDITIONAL_CREATE_OPTIONS, DEBUG_REQUEST_SET_ADDITIONAL_CREATE_OPTIONSDEBUG_REQUEST_SET_LOCAL_IMPLICIT_COMMAND_LINE 사용하여 프로세스를 만들기 위한 기본 옵션 중 일부를 설정할 수 있습니다.

참고WaitForEvent 메서드가 호출될 때까지 엔진이 프로세스에 완전히 연결되지 않습니다. 프로세스에서 이벤트(예: 프로세스 만들기 이벤트)를 생성한 후에만 디버거 세션에서 사용할 수 있게 됩니다. 자세한 내용은 디버깅 세션 및 실행 모델을 참조하세요.

GetRunningProcessSystemIds 메서드는 컴퓨터에서 실행 중인 모든 프로세스의 프로세스 ID를 반환합니다. 특정 프로그램의 프로세스 ID는 GetRunningProcessSystemIdByExecutableName을 사용하여 찾을 수 있습니다. 프로세스 ID가 지정되면 GetRunningProcessDescription에서 프로세스에 대한 설명이 반환됩니다.

프로세스 옵션

프로세스 옵션은 디버거 엔진이 대상 프로세스에서 만든 자식 프로세스에 자동으로 연결되는지 여부와 엔진이 종료될 때 대상 프로세스에서 수행하는 작업을 포함하여 사용자 모드 프로세스에 연결할 때 엔진 동작의 일부를 결정합니다. 프로세스 옵션에 대한 설명은 DEBUG_PROCESS_XXX 참조하세요.

GetProcessOptions를 사용하여 프로세스 옵션을 쿼리할 수 있습니다. AddProcessOptions, RemoveProcessOptionsSetProcessOptions를 사용하여 변경할 수 있습니다.

프로세스에서 연결 끊기

엔진이 프로세스에서 연결을 끊는 방법에는 세 가지가 있습니다.

  1. 분리. 더 이상 디버그되지 않고 계속 실행되도록 프로세스의 모든 스레드를 다시 시작합니다. DetachCurrentProcess 는 현재 프로세스에서 엔진을 분리하고 DetachProcesses 는 모든 프로세스에서 엔진을 분리합니다. 모든 대상이 분리를 지원하는 것은 아닙니다. 요청 작업 DEBUG_REQUEST_TARGET_CAN_DETACH 대상에서 분리를 지원하는 경우 검사 데 사용할 수 있습니다.

  2. 종료합니다. 프로세스를 종료하려고 시도합니다. TerminateCurrentProcess 는 현재 프로세스를 종료하고 TerminateProcesses 는 디버거 세션의 모든 프로세스를 종료합니다.

  3. 포기하십시오. 디버그 중인 프로세스 목록에서 프로세스를 제거합니다. 운영 체제는 여전히 프로세스를 디버그하는 것으로 간주하며 다른 디버거가 연결되거나 종료될 때까지 일시 중단된 상태로 유지됩니다. AbandonCurrentProcess 는 현재 프로세스를 중단합니다.