서비스 컨트롤 매니저

Service Control Manager

Service Control Manager(SCM; 서비스 제어 매니저)는 Windows NT 패밀리 운영체제시스템속하는 [1]특수한 시스템프로세스로 Windows 서비스 프로세스의 기동, 정지 및 상호 작용이 이루어집니다.에 있습니다.%SystemRoot%\System32\services.exe실행 가능.서비스 프로세스는 명확하게 정의된 API를 통해 SCM과 상호 작용하며, MMC 스냅인 의 대화형 Windows 서비스 관리 도구에서 동일한 API를 내부적으로 사용합니다.Services.msc및 명령줄 서비스 제어 유틸리티sc.exe. 이 파일을 종료하는 것은 블루스크린을 사망에 이르게 하는 방법으로 사용됩니다.

실행

SCM 실행 파일,Services.exe는 Windows 콘솔프로그램으로 실행되며 Wininit 프로세스에 의해 시스템 [2]부팅 초기에 실행됩니다.그 주된 기능은,SvcCtrlMain()는 자동 부팅용으로 설정된 모든 서비스를 실행합니다.우선, 인스톨 되어 있는 서비스의 내부 데이타베이스는, 다음의 2개의 레지스트리 키를 읽어 초기화됩니다.

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List서비스 그룹의 이름과 순서가 기재되어 있습니다.각 서비스의 레지스트리 키에는 옵션 포함Group다른 서비스 그룹에 대한 각 서비스 또는 디바이스 드라이버의 초기화 순서를 규정하는 값.
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services서비스 및 디바이스 드라이버의 실제 데이터베이스가 포함되어 SCM의 내부 데이터베이스에 [3]읽혀집니다.SCM은 모든 서비스 읽기Group값 및 부하순서의존관계는DependOnGroup그리고.DependOnService레지스트리 [4]

다음 단계에서는 SCM의 주요 기능SvcCtrlMain()함수를 호출하다ScGetBootAndSystemDriverState()기동 또는 시스템 기동시에 기동할 필요가 있는 디바이스 드라이버가 정상적으로 로드되고 있는지를 체크하는 기능.이러한 드라이버가 로드되지 않은 드라이버는, 「」라고 불리는 리스트에 보존됩니다.ScFailedDrivers그리고 명명된 파이프. \Pipe\Ntsvcs는 특정 서비스와 대화하는SCM과 SCP(Service Control Processes) 사이의 리모트프로시저 콜인터페이스로 작성됩니다.

다음으로, 이것은ScAutoStartServices()계산된 로드 순서 의존성에 주의하여 자동 시작 마크가 붙은 모든 서비스를 루프하는 함수.순환 의존관계인 경우 오류가 발생하고 로드순서의 후반에 오는 그룹에 속하는 서비스에 따라 서비스가 건너뜁니다.지연된 자동 시작 서비스의 경우 그룹화는 영향을 주지 않으며 시스템 [5]시작의 후반 단계에서 로드됩니다.

SCM은 시작하는 각 서비스에 대해ScStartService()서비스 프로세스를 실행하는 파일의 이름을 체크하는 함수로, 서비스에 대해 지정된 계정이 서비스 프로세스가 실행되는 계정과 동일한지 확인합니다.에서 실행되지 않는 모든 서비스System계정은 LSASS 함수를 호출하여 로그인한다.LogonUserEx()LSASS 프로세스에서는 에 저장되어 있는 "비밀" 비밀번호를 검색합니다.HKLM\SECURITY\Policy\Secrets\SCP에 의해 저장되어 있는 레지스트리 키LsaStorePrivateData()서비스가 [6]처음 설정되었을 때의 API.

다음으로는ScLogonAndStartImage()함수는 서비스 프로세스가 아직 시작되지 않은 모든 서비스에 대해 호출됩니다.서비스 프로세스는 를 통해 일시정지 상태로 생성됩니다.CreateProcessAsUser()API. 서비스 프로세스의 실행을 재개하기 전에 명명된 파이프가\Pipe\Net\NtControlPipeX(여기서 X는 서비스 반복마다 증가하는 수)가 작성되어 SCM과 서비스 프로세스 간의 통신 채널로 기능합니다.서비스 프로세스가 파이프에 접속하려면StartServiceCtrlDispatcher()그 후 SCM은 서비스에 "start" [7]명령을 전송합니다.

지연된 자동 시작 서비스

지연된 자동 시작 서비스는 시스템 부팅이 길어지는 문제를 해결하고 [8]지연될 수 없는 중요한 서비스의 시작을 가속화하기 위해 Windows Vista에 추가되었습니다.원래 서비스 초기화 자동 시작 방식은 다른 애플리케이션 및 서비스가 의존하는 필수 시스템 서비스를 위해 설계되었습니다.SCM은 지연되지 않은 모든 자동 시작 서비스를 처리한 후에만 지연된 서비스를 초기화합니다.ScInitDelayStart()기능.이 함수는 대응하는 워커 스레드와 관련된 지연된(기본값으로는 120초) 작업 항목을 큐잉합니다.지연 후에 초기화되는 것 외에 지연된 서비스와 지연되지 않은 서비스 간에 다른 차이는 없습니다.

디바이스 드라이버

다음 서비스Type레지스트리 값은SERVICE_KERNEL_DRIVER또는SERVICE_FILE_SYSTEM_DRIVER특별히 취급됩니다.이것들은, 다음의 디바이스 드라이버를 나타내고 있습니다.ScStartService()를 호출하다ScLoadDeviceDriver()적절한 드라이버(보통 확장자를 가진 파일)를 로드하는 함수.sys)에 배치해야 합니다.%SystemRoot%\System32\Drivers\디렉토리로 이동합니다.그 때문에,NtLoadDriver 시스템 콜이 호출되고SeLoadDriverPrivilegeSCM 프로세스에 추가됩니다.

네트워크 드라이브 문자

SCM은 Windows 서비스와는 전혀 무관한 추가 기능을 제공합니다.네트워크 드라이브 문자 접속이 생성 또는 삭제되면 Windows 메시지를 브로드캐스트하여 Windows 탐색기 의 GUI 응용 프로그램에 알립니다. WM_DEVICECHANGE.

「 」를 참조해 주세요.

메모들

  1. ^ Russinovich, Solomon & Ionescu (2009:79)[full citation needed]
  2. ^ Russinovich, Solomon & Ionescu (2009:291)
  3. ^ "Database of Installed Services". Microsoft Developer Network. Retrieved 2011-03-06.
  4. ^ Russinovich, Solomon & Ionescu (2009:292)
  5. ^ Russinovich, Solomon & Ionescu (2009:294)
  6. ^ Russinovich, Solomon & Ionescu (2009:295)
  7. ^ Russinovich, Solomon & Ionescu (2009:296)
  8. ^ Russinovich, Solomon & Ionescu (2009:297)

레퍼런스