상속

자식 프로세스는 부모 프로세스에서 여러 속성 및 리소스를 상속할 수 있습니다. 자식 프로세스가 부모 프로세스에서 속성을 상속하지 못하도록 방지할 수도 있습니다. 다음을 상속할 수 있습니다.

  • CreateFile 함수에서 반환된 핸들을 엽니다. 여기에는 파일, 콘솔 입력 버퍼, 콘솔 화면 버퍼, 명명된 파이프, 직렬 통신 디바이스 및 메일 슬롯에 대한 핸들이 포함됩니다.
  • 핸들을 열어 처리, 스레드, 뮤텍스, 이벤트, 세마포, 명명된 파이프, 익명 파이프 및 파일 매핑 개체를 처리합니다. 이러한 함수는 각각 CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipeCreateFileMapping 함수에서 반환됩니다.
  • 환경 변수.
  • 현재 디렉터리
  • 프로세스가 분리되거나 새 콘솔이 만들어지지 않는 한 콘솔. 자식 콘솔 프로세스는 부모의 표준 핸들뿐만 아니라 입력 버퍼 및 활성 화면 버퍼에 대한 액세스도 상속할 수 있습니다.
  • SetErrorMode 함수에서 설정한 오류 모드입니다.
  • 프로세서 선호도 마스크입니다.
  • 작업과의 연결입니다.

자식 프로세스는 다음을 상속하지 않습니다.

핸들 상속

자식 프로세스는 부모의 핸들 중 일부를 상속할 수 있지만 다른 핸들은 상속할 수 없습니다. 핸들을 상속하려면 다음 두 가지 작업을 수행해야 합니다.

  • 핸들을 만들거나 열거나 복제할 때 핸들을 상속하도록 지정합니다. 생성 함수는 일반적으로 이 목적을 위해 SECURITY_ATTRIBUTES 구조체의 bInheritHandle 멤버를 사용합니다. DuplicateHandlebInheritHandles 매개 변수를 사용합니다.
  • CreateProcess 함수를 호출할 때 bInheritHandles 매개 변수를 TRUE로 설정하여 상속 가능한 핸들을 상속하도록 지정합니다. 또한 표준 입력, 표준 출력 및 표준 오류 핸들을 상속하려면 STARTUPINFO 구조의 dwFlags 멤버에 STARTF_USESTDHANDLES 포함되어야 합니다.

특정 자식 프로세스에서 상속해야 하는 핸들 목록을 지정하려면 PROC_THREAD_ATTRIBUTE_HANDLE_LIST 플래그를 사용하여 UpdateProcThreadAttribute 함수를 호출합니다.

상속된 핸들은 부모 프로세스에서와 동일한 개체를 자식 프로세스에서 참조합니다. 또한 동일한 값과 액세스 권한이 있습니다. 따라서 한 프로세스가 개체의 상태를 변경하면 변경 내용이 두 프로세스 모두에 영향을 줍니다. 핸들을 사용하려면 자식 프로세스에서 핸들 값을 검색하고 참조하는 개체를 "알고"해야 합니다. 일반적으로 부모 프로세스는 명령줄, 환경 블록 또는 일종의 프로세스 간 통신을 통해 이 정보를 자식 프로세스 에 전달합니다.

SetHandleInformation 함수를 사용하여 기존 핸들을 상속할 수 있는지 여부를 제어합니다.

환경 변수 상속

자식 프로세스는 기본적으로 부모 프로세스의 환경 변수를 상속합니다. 그러나 CreateProcess 를 사용하면 부모 프로세스에서 다른 환경 변수 블록을 지정할 수 있습니다. 자세한 내용은 환경 변수를 참조하세요.

현재 디렉터리 상속

GetCurrentDirectory 함수는 호출 프로세스의 현재 디렉터리를 검색합니다. 자식 프로세스는 기본적으로 부모 프로세스의 현재 디렉터리를 상속합니다. 그러나 CreateProcess 를 사용하면 부모 프로세스에서 자식 프로세스에 대해 다른 현재 디렉터리를 지정할 수 있습니다. 호출 프로세스의 현재 디렉터리를 변경하려면 SetCurrentDirectory 함수를 사용합니다.