커널 개체 네임스페이스
Windows에는 이벤트, 세마포, 뮤텍스, 대기 가능한 타이머, 파일 매핑 개체, 작업 개체 및 기호 링크 개체와 같은 명명된 커널 개체에 대한 여러 네임스페이스가 있습니다. 클라이언트/서버 애플리케이션의 서비스에서 주로 사용되는 전역 네임스페이스가 있습니다. 또한 각 세션에는 이러한 개체에 대한 별도의 네임스페이스가 있습니다.
별도의 세션 네임스페이스를 사용하면 여러 클라이언트가 서로 간섭하지 않고 동일한 애플리케이션을 실행할 수 있습니다. 클라이언트 세션에서 시작된 프로세스의 경우 시스템은 기본적으로 클라이언트 세션 네임스페이스를 사용합니다. 그러나 이러한 프로세스는 개체 이름 앞에 "Global\" 접두사를 추가하여 전역 네임스페이스를 사용할 수 있습니다. 예를 들어 다음 코드는 CreateEvent 호출하고 전역 네임스페이스에 CSAPP이라는 이벤트 개체를 만듭니다.
CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );
서비스 애플리케이션은 기본적으로 전역 네임스페이스를 사용합니다.
메모
Windows 스토어 앱에는 전역 네임스페이스를 사용할 수 없습니다.
세션 0은 호스팅 서비스에만 사용되며 Windows Vista 이전 버전의 Windows와 달리 콘솔 세션이 없습니다.
전역 네임스페이스를 사용하면 여러 클라이언트 세션의 프로세스가 서비스 애플리케이션과 통신할 수 있습니다. 예를 들어 클라이언트/서버 애플리케이션은 동기화에 뮤텍스 개체를 사용할 수 있습니다. 서버 모듈은 전역 네임스페이스에서 뮤텍스 개체를 만들 수 있습니다. 그런 다음 클라이언트 세션에서 "Global\" 접두사를 사용하여 뮤텍스 개체를 열 수 있습니다.
전역 네임스페이스의 또 다른 사용은 명명된 개체를 사용하여 모든 세션에서 시스템에서 실행 중인 애플리케이션의 인스턴스가 이미 있음을 감지하는 애플리케이션에 대한 것입니다. 이 명명된 개체는 세션별 네임스페이스 대신 전역 네임스페이스에서 만들거나 열어야 합니다. 세션당 한 번 애플리케이션을 실행하는 일반적인 경우는 명명된 개체가 세션 네임스페이스당에 생성되므로 기본적으로 지원됩니다.
클라이언트 프로세스는 "Global\" 접두사 외에도 "Local\" 접두사를 사용하여 세션 네임스페이스에 개체를 명시적으로 만들 수 있습니다. 이러한 키워드는 대/소문자를 구분합니다.
"Session\" 접두사는 시스템 사용을 위해 예약되어 있으므로 커널 개체의 이름에 사용하면 안 됩니다.
빠른 사용자 전환은 세션을 사용하여 구현됩니다. 로그온하는 첫 번째 사용자는 세션 1을 사용하고, 로그온할 다음 사용자는 세션 2 등을 사용합니다. 커널 개체 이름은 애플리케이션이 여러 사용자를 지원할 수 있도록 원격 데스크톱 서비스에 대해 설명된 지침을 따라야 합니다.
세션 0 이외의 세션에서 CreateFileMapping사용하는 것과 같이 전역 네임스페이스에서 파일 매핑 개체 또는 기호 링크 개체를 만드는 것은 권한 있는 작업입니다. 이 때문에 전역 네임스페이스에 파일 매핑 개체 또는 기호 링크 개체를 만들려면 애플리케이션에 SeCreateGlobalPrivilege 사용하도록 설정되어 있어야 합니다. 권한 검사는 이러한 개체를 만드는 것으로 제한되며 기존 개체를 여는 데는 적용되지 않습니다. 예를 들어 서비스 또는 시스템이 전역 네임스페이스에 파일 매핑 개체를 만드는 경우 모든 세션에서 실행되는 모든 프로세스는 프로세스에 필요한 액세스 권한이 있는 경우 해당 파일 매핑 개체에 액세스할 수 있습니다.