서비스 레코드 목록

설치된 서비스의 데이터베이스에서 각 서비스 항목을 읽을 때 SCM은 서비스에 대한 서비스 레코드를 만듭니다. 서비스 레코드에는 다음이 포함됩니다.

  • 서비스 이름
  • 시작 유형(자동 시작 또는 수요 시작)
  • 서비스 상태(SERVICE_STATUS 구조 참조)
    형식
    현재 상태
    허용되는 제어 코드
    종료 코드
    대기 힌트
  • 종속성 목록에 대한 포인터

계정의 사용자 이름과 암호는 서비스가 설치될 때 지정됩니다. SCM은 레지스트리에 사용자 이름과 암호를 LSA(로컬 보안 기관)의 보안 부분에 저장합니다. 시스템 관리자는 만료되지 않는 암호를 사용하여 계정을 만들 수 있습니다. 또는 시스템 관리자는 암호를 주기적으로 변경하여 만료되는 암호를 사용하여 계정을 만들고 계정을 관리할 수 있습니다.

SCM은 사용자 계정 암호, 현재 암호 및 백업 암호의 두 복사본을 유지합니다. 서비스를 처음 설치할 때 지정한 암호가 현재 암호로 저장되고 백업 암호가 초기화되지 않습니다. SCM이 사용자 계정의 보안 컨텍스트에서 서비스를 실행하려고 하면 현재 암호를 사용합니다. 현재 암호가 성공적으로 사용되는 경우 백업 암호로도 저장됩니다. 암호가 ChangeServiceConfig 함수 또는 서비스 제어판 유틸리티를 사용하여 수정된 경우 새 암호는 현재 암호로 저장되고 이전 암호는 백업 암호로 저장됩니다. SCM이 서비스를 시작하려고 시도하고 현재 암호가 실패하면 백업 암호를 사용합니다. 백업 암호가 성공적으로 사용되는 경우 현재 암호로 저장됩니다.

SCM은 서비스에서 SetServiceStatus 함수를 사용하여 상태 알림을 보낼 때 서비스 상태 업데이트합니다. SCM은 서비스에서와 마찬가지로 상태 알림을 받는 대신 I/O 시스템을 쿼리하여 드라이버 서비스의 상태 유지 관리합니다.

서비스는 SetServiceBits 함수를 호출하여 추가 형식 정보를 등록할 수 있습니다. NetServerGetInfoNetServerEnum 함수는 지원되는 서비스 유형을 가져옵니다.