Na era digital de hoje, a inicialização rápida e a operação eficiente do sistema são extremamente importantes para os usuários. O sistema Windows pode iniciar muitos serviços em um curto período de tempo. Por trás disso, há um processo de sistema chamado Service Control Manager (SCM). A operação do SCM é crucial para melhorar a velocidade de inicialização do sistema. Vamos dar uma olhada mais de perto em como esse processo funciona.
SCM é um processo de sistema especial sob os sistemas operacionais da série Windows NT. Ele é responsável por iniciar, parar e gerenciar processos de serviço do Windows.
O arquivo executável do SCM está localizado em %SystemRoot%\System32\services.exe, e sua principal tarefa é iniciar todos os serviços configurados para iniciar automaticamente. Quando o sistema for iniciado, o processo Wininit iniciará o SCM antecipadamente e iniciará uma série de tarefas de inicialização.
Durante o processo de inicialização, o SCM primeiro lê informações sobre o serviço no registro. Isso envolve duas entradas principais do registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List - Contém os nomes e a ordem de inicialização dos grupos de serviços. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - o banco de dados real de serviços e drivers de dispositivos. Essas informações ajudam o SCM a determinar a ordem de inicialização de cada serviço e suas interdependências. O SCM também verifica se os drivers de dispositivo que devem ser iniciados durante o processo de inicialização foram carregados com sucesso e armazena os drivers com falha em uma lista chamada ScFailedDrivers.
Depois que todos os serviços de inicialização automática não atrasados forem processados, o SCM começará a carregar serviços de inicialização automática atrasados, que é um novo recurso introduzido desde o Windows Vista para acelerar a inicialização do sistema. Normalmente, esses serviços atrasados são inicializados cerca de 120 segundos após a inicialização do sistema.Ao processar cada serviço iniciado automaticamente, o SCM também considerará as dependências da ordem de carregamento para evitar a ocorrência de dependências circulares.
Para cada serviço a ser iniciado, o SCM chama a função ScStartService() para verificar se a conta na qual seu processo está sendo executado corresponde à conta especificada pelo serviço. Durante esse processo, se o serviço não estiver em execução na conta do sistema, o SCM chamará a função LSASS LogonUserEx() para obter as informações de login do usuário necessárias. Essas informações são armazenadas na chave de registro HKLM\SECURITY\Policy\Secrets\, e somente serviços com acesso total podem obter essas senhas "secretas".
O processo de serviço é colocado em um estado suspenso quando é criado e sua execução não será retomada até que a conexão do pipeline seja estabelecida.
Assim que o processo de serviço for iniciado com sucesso, o SCM estabelecerá um canal de comunicação com o processo de serviço criando um pipe nomeado. O processo de serviço se junta a esse canal chamando a função StartServiceCtrlDispatcher(), e o SCM então envia um comando "start" para o serviço.
A existência do serviço de inicialização automática atrasada melhora muito o equilíbrio da inicialização do sistema. Embora esses serviços não sejam tecnicamente muito diferentes dos serviços normais de inicialização automática, eles são projetados para serem inicializados em diferentes estágios da inicialização do sistema para garantir uma operação tranquila do sistema.
O SCM também gerencia drivers de dispositivos. Os tipos de serviço desses serviços são marcados como SERVICE_KERNEL_DRIVER ou SERVICE_FILE_SYSTEM_DRIVER no registro. Nesses casos, o SCM chama a função ScLoadDeviceDriver() para carregar o driver correspondente no sistema, o que geralmente requer a invocação da chamada de sistema NtLoadDriver.
O SCM também pode enviar mensagens para aplicativos GUI, como o Windows Explorer, para notificá-los sobre alterações nas conexões de letras de unidade de rede.
Resumindo, o gerenciador de controle de serviços do sistema Windows desempenha um papel indispensável no processo de inicialização do sistema. Ele carrega serviços e drivers de dispositivos necessários de forma eficiente para manter a resposta rápida e a operação estável do sistema geral. Quando usamos essas tecnologias, consideramos os princípios operacionais e os desafios técnicos por trás delas?