Quando você inicia o sistema Windows, muitos serviços são executados silenciosamente em segundo plano, o que é um pilar importante da estabilidade do sistema operacional. A inicialização e o gerenciamento desses serviços são, em grande parte, responsabilidade do Service Control Manager (SCM). SCM é um processo especial do sistema localizado no sistema operacional Windows NT, responsável por iniciar, parar e interagir com processos de serviço do Windows.
A principal funcionalidade do SCM começa com sua função principal SvcCtrlMain(), que inicia todos os serviços configurados para iniciar automaticamente.
O arquivo executável do SCM services.exe está localizado em %SystemRoot%\System32\ e é iniciado pelo processo Wininit no início da inicialização do sistema. Quando o SCM começa a funcionar, ele primeiro inicializa seu banco de dados interno de serviços instalados, o que envolve a leitura de chaves de registro específicas.
Especificamente, ele inicializa o banco de dados interno lendo as duas chaves de registro a seguir:
O SCM determina a ordem de carregamento dos serviços com base no valor do Grupo e nas dependências de cada serviço. Durante esse processo, se uma dependência circular for encontrada, o SCM registrará um erro e ignorará o serviço que depende do grupo carregado tardiamente.
A próxima etapa no SCM é verificar se os drivers de dispositivo que devem ser iniciados durante a inicialização do sistema foram carregados com sucesso e salvar os drivers com falha em uma lista chamada ScFailedDrivers.
O SCM então chama a função ScAutoStartServices(), que percorre todos os serviços marcados para início automático e os inicia adequadamente. Para cada serviço, o SCM chama a função ScStartService() para garantir que o processo do serviço seja executado na conta correta. Se o serviço não estiver em execução na conta do sistema, o SCM chamará a função LSASS LogonUserEx() para obter a senha "secreta" que foi armazenada com segurança quando o serviço foi configurado inicialmente.
Além disso, há também um tipo especial de serviço: o serviço de inicialização automática retardada. Este tipo de serviço foi introduzido no Windows Vista para resolver o problema de inicialização lenta do sistema. O SCM não começará a inicializar os serviços de início automático atrasado até que todos os serviços de início automático não atrasados tenham sido processados.
Embora haja um atraso no início desses serviços, eles não são muito diferentes de outros serviços, exceto pela ordem em que são iniciados.
Vale a pena notar que o SCM também lida especificamente com serviços de driver de dispositivo. O valor de registro de tipo desses serviços é SERVICE_KERNEL_DRIVER ou SERVICE_FILE_SYSTEM_DRIVER. Quando o SCM chama ScStartService(), ele chama a função ScLoadDeviceDriver() para carregar o driver correspondente.
Por meio da chamada de sistema NtLoadDriver, o SCM garante que o driver seja carregado corretamente. Durante o processo de inicialização, o SCM é responsável até mesmo por notificar outros aplicativos, como o Windows Explorer, quando o status da conexão de uma unidade de rede muda, transmitindo a mensagem do Windows WM_DEVICECHANGE.
Este design permite que os usuários gerenciem melhor os recursos e serviços do sistema, garantindo o bom funcionamento do sistema operacional.
No entanto, apesar do papel crítico que o SCM desempenha na inicialização de um sistema, muitos usuários não entendem realmente como ele funciona. Por trás de cada operação do SCM, há uma tecnologia complexa e eficiente. De fato, ela permite que os usuários usem aqueles aplicativos e serviços aparentemente comuns sem quaisquer obstáculos.
Nas versões futuras do Windows, como o SCM evoluirá para atender às necessidades cada vez mais diversas dos usuários?