세션 관리자 하위 시스템

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

세션 관리자 하위 시스템(SMSS)은 커널에 의해 시작되는 첫 번째 사용자 모드 프로세스이다. SMSS는 시스템 구성 데이터를 사용하여 추가 페이징 파일을 생성하고, 커널 및 Win32 하위 시스템의 사용자 모드를 시작하는 역할을 한다. 또한 세션 시작 시 필요한 작업을 수행하며, Windows Vista 이후에는 Windows 시작 응용 프로그램(wininit.exe)과 두 번째 클라이언트/서버 런타임 하위 시스템(csrss.exe)을 시작하는 자체 임시 인스턴스를 생성한다. 부팅 과정 완료 후 메모리에 상주하며, winlogon.exe 또는 csrss.exe의 종료를 기다린다. SMSS는 새로운 사용자 세션을 시작하고, 로컬 세션 관리자(LSM)와의 통신을 처리한다.

세션 관리자 하위 시스템
📚 더 읽어볼만한 페이지
  • 윈도우 NT 아키텍처 - WoW64
    WoW64는 64비트 윈도우에서 32비트 응용 프로그램을 실행하기 위한 호환성 계층으로, 32비트 코드를 변환하고 시스템 자원을 관리하며 파일 시스템 리디렉션을 제공하지만, 완벽한 호환성을 보장하지 않고 성능 오버헤드 및 API 관련 문제점을 가질 수 있다.
  • 윈도우 NT 아키텍처 - 로컬 보안 인증 하위 시스템 서비스
  • 윈도우 구성 요소 - 인터넷 익스플로러
    마이크로소프트가 개발한 웹 브라우저인 인터넷 익스플로러는 윈도우 운영 체제와의 통합으로 높은 시장 점유율을 유지했으나, 웹 표준 문제와 보안 취약점으로 비판받으며 2015년 엣지에 자리를 내주고 2022년 지원이 종료되었지만, 엣지의 IE 모드로 레거시 호환성을 유지하고 있다.
  • 윈도우 구성 요소 - 원격 데스크톱 서비스
    원격 데스크톱 서비스(RDS)는 네트워크를 통해 원격으로 컴퓨터의 데스크톱 환경에 접근할 수 있게 해주는 기술이며, 클라이언트 소프트웨어, 서버 구성 요소, 다양한 역할을 수행하는 구성 요소로 구성된다.

2. 세션 초기화

세션 관리자 하위 시스템은 커널에 의해 시작되는 첫 번째 사용자 모드 프로세스이다. 시작되면 `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management` 레지스트리 항목과 `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment`에 있는 환경 변수, `HKLM\System\CurrentControlSet\Control\Session Manager\DOS Devices` 레지스트리 키에 나열된 DOS 장치 매핑(예: CON:, NUL:, AUX:, COM1:, COM2:, COM3:, COM4:, PRN:, LPT1:, LPT2:, LPT3: 및 드라이브 문자)으로 구성 데이터를 사용하여 추가 페이징 파일을 생성한다. 이를 사용하여 영구적인 subst 드라이브를 만들 수 있다.

관리자는 커널 및 Win32 하위 시스템의 사용자 모드를 시작하는 역할을 한다. 이 하위 시스템에는 `win32k.sys` (커널 모드), `winsrv.dll` (사용자 모드), `csrss.exe` (사용자 모드)가 포함된다. `HKLM\System\CurrentControlSet\Control\Session Manager\SubSystems` 레지스트리 키의 `Required` 값에 나열된 다른 모든 하위 시스템도 시작된다.

관리자는 또한 세션 시작 시 수행하도록 요청된 모든 작업을 수행하는 역할을 한다. `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute`에 나열된 `autochk` 및 `convert`와 같은 명령이 실행된다. 이러한 명령은 부팅 프로세스의 이후 단계에서 서비스가 로드되기 전에 실행된다. `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations`에서 대기 중인 모든 이름 바꾸기 작업이 수행된다. 이는 이전에 사용 중이던 파일(예: 드라이버)을 재부팅의 일부로 교체할 수 있도록 하는 데 사용된다.

Windows Vista부터 세션 관리자 하위 시스템은 시스템 프로세스에 전용된 세션 0에 대해 Windows 시작 응용 프로그램(wininit.exe)과 두 번째 클라이언트/서버 런타임 하위 시스템(csrss.exe)을 시작하는 자체 임시 인스턴스를 생성한다. 여기서 Windows 시작 응용 프로그램은 "자동 시작"으로 설정된 모든 Windows 서비스를 시작하는 서비스 제어 관리자(services.exe)를 시작한다. 응용 프로그램은 또한 로컬 보안 기관 하위 시스템 서비스(lsass.exe)를 시작한다. Windows Vista 이전에는 이러한 프로세스가 Windows 시작 응용 프로그램 대신 Windows 로그온에 의해 시작되었다.

세션이 구성되면 세션 관리자 하위 시스템은 Windows 시스템에 대한 대화형 로그온(로컬 또는 원격)을 처리하는 역할을 하는 Winlogon (Windows 로그온 응용 프로그램)을 시작한다.

3. 운영

부팅 과정이 완료되면, 해당 프로그램은 메모리에 상주하며, Windows 작업 관리자에서 실행 중인 것을 확인할 수 있다. 그런 다음 `winlogon.exe` 또는 `csrss.exe`의 종료를 기다리며, 이 시점에서 Windows가 종료된다. 프로세스가 예상대로 종료되지 않으면, `smss.exe`가 시스템을 멈추게 하거나 오류 검사가 발생할 수 있다. 또한 필요에 따라 새로운 사용자 세션을 시작한다.

일부 Windows 버전에서는 특수한 도구를 사용하여 `smss.exe`의 중요한 프로세스 상태를 제거할 수 있으며, 이후에는 블루스크린 없이 종료할 수 있지만, `smss.exe`를 사용하는 모든 기능은 다음 재부팅까지 작동을 멈춘다.

로컬 세션 관리자 서비스(`lsm.exe`)는 새로운 세션을 시작하기 위해 비동기 로컬 프로세스 간 통신 (ALPC) 포트 `SmSsWinStationApiPort`를 통해 SMSS에 요청을 보낸다.

사용자가 시스템에 로그인할 때마다 초기 세션 관리자는 새로운 세션을 구성하기 위해 자체의 새로운 인스턴스를 생성한다. 이 새로운 프로세스는 새로운 세션을 위해 Win32 하위 시스템과 Winlogon 프로세스를 시작한다. 이를 통해 Windows Server 시스템에서 여러 사용자가 동시에 로그인할 수 있다.

3.1. 로컬 세션 관리자와의 통신

세션 관리자는 각 세션에 대한 정보를 유지하고, 각 세션의 생성과 종료를 관리한다. 세션 관리자는 또한 로컬 세션 관리자(LSM)와의 통신을 처리한다.