다음을 통해 공유


창 스테이션에 대한 연결 처리

프로세스는 창 스테이션 및 데스크톱 함수가 아닌 USER32 또는 GDI32 함수를 처음 호출할 때 창 스테이션 및 데스크톱에 대한 연결을 자동으로 설정합니다. 시스템은 다음 규칙에 따라 프로세스가 연결되는 창 스테이션을 결정합니다.

  1. 프로세스가 SetProcessWindowStation 함수를 호출한 경우 해당 호출에 지정된 창 스테이션에 연결됩니다.
  2. 프로세스가 SetProcessWindowStation을 호출하지 않은 경우 부모 프로세스에서 상속된 창 스테이션에 연결됩니다.
  3. 프로세스가 SetProcessWindowStation 을 호출하지 않고 창 스테이션을 상속하지 않은 경우 시스템은 MAXIMUM_ALLOWED 액세스를 위해 열고 다음과 같이 창 스테이션에 연결하려고 시도합니다.
    • 프로세스를 만들 때 사용된 STARTUPINFO 구조체의 lpDesktop 멤버에 창 스테이션 이름을 지정한 경우 프로세스는 지정된 창 스테이션에 연결됩니다.
    • 그렇지 않으면 프로세스가 대화형 사용자의 로그온 세션에서 실행되는 경우 프로세스는 대화형 창 스테이션에 연결됩니다.
    • 비대화 로그온 세션에서 프로세스가 실행 중인 경우 로그온 세션 식별자에 따라 창 스테이션 이름이 형성되고 해당 창 스테이션을 열려고 시도합니다. 이 창 스테이션이 없으므로 열린 작업이 실패하면 시스템에서 창 스테이션과 기본 데스크톱을 만들려고 합니다.

이 연결 프로세스 중에 할당된 창 스테이션은 CloseWindowStation 함수를 호출하여 닫을 수 없습니다.

프로세스가 창 스테이션에 연결하는 경우 시스템은 프로세스의 핸들 테이블에서 상속된 핸들을 검색합니다. 시스템은 찾은 첫 번째 창 스테이션 핸들을 사용합니다. 자식 프로세스를 특정 상속된 창 스테이션에 연결하려면 원하는 핸들만 상속 가능한 것으로 표시되어야 합니다. 자식 프로세스가 여러 창 스테이션 핸들을 상속하는 경우 창 스테이션 연결의 결과는 정의되지 않습니다.

프로세스를 창 스테이션에 연결하는 동안 시스템이 열리는 창 스테이션에 대한 핸들은 상속할 수 없습니다.

데스크톱에 대한 스레드 연결