다음을 통해 공유


상속

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

  • CreateFile 함수에서 반환된 핸들을 엽니다. 여기에는 파일, 콘솔 입력 버퍼, 콘솔 화면 버퍼, 명명된 파이프, 직렬 통신 디바이스 및 mailslot에 대한 핸들이 포함됩니다.
  • 처리, 스레드, 뮤텍스, 이벤트, 세마포, 명명된 파이프, 익명 파이프 및 파일 매핑 개체를 처리할 핸들을 엽니다. 이러한 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 함수를 사용합니다.