El Administrador de control de servicios ( SCM ) es un proceso de sistema especial de la familia de sistemas operativos Windows NT , que inicia, detiene e interactúa con los procesos de servicio de Windows . [ 1 ] Se encuentra en el archivo ejecutable. Los procesos de servicio interactúan con SCM a través de una API bien definida , y la misma API es utilizada internamente por las herramientas interactivas de administración de servicios de Windows, como el complemento MMC y la utilidad de línea de comandos Control de servicios .%SystemRoot%\System32\services.exeServices.mscsc.exe
Implementación
El ejecutable SCM Services.exese ejecuta como un programa de consola de Windows y es iniciado por el proceso Wininit al inicio del sistema . [ 2 ] Su función principal SvcCtrlMain()inicia todos los servicios configurados para el inicio automático. Primero, se inicializa una base de datos interna de servicios instalados leyendo las siguientes dos claves del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List, que contiene los nombres y el orden de los grupos de servicios. La clave de registro de cada servicio contiene unGroupvalor opcional que rige el orden de inicialización de un servicio o controlador de dispositivo respectivo , con respecto a otros grupos de servicios.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, que contiene la base de datos real de servicios y controladores de dispositivos y se lee en la base de datos interna de SCM. [ 3 ] SCM lee el valor de cada servicioGroup, así como las dependencias de orden de carga de susDependOnGroupclavesDependOnServicede registro. [ 4 ]
En el siguiente paso, la función principal de SCM SvcCtrlMain()llama a la función ScGetBootAndSystemDriverState()que comprueba si los controladores de dispositivo que deberían iniciarse durante el arranque o el inicio del sistema se cargaron correctamente, y aquellos que no lo hicieron se almacenan en una lista llamada ScFailedDrivers. Luego se crea una tubería con nombre\Pipe\Ntsvcs como interfaz de llamada a procedimiento remoto entre SCM y los SCP (Procesos de Control de Servicio) que interactúan con servicios específicos.
A continuación, se llama a la ScAutoStartServices()función que recorre todos los servicios marcados como de inicio automático, teniendo en cuenta las dependencias de orden de carga calculadas. En caso de dependencia circular, se detecta un error y se omite el servicio que depende de un servicio que pertenece a un grupo posterior en el orden de carga. Para los servicios de inicio automático diferido, la agrupación no tiene efecto y se cargan en una etapa posterior del arranque del sistema. [ 5 ]
Para cada servicio que desea iniciar, el SCM llama a la ScStartService()función que verifica el nombre del archivo que ejecuta el proceso del servicio, asegurándose de que la cuenta especificada para el servicio sea la misma que la cuenta en la que se ejecuta el proceso del servicio. Cada servicio que no se ejecuta en la Systemcuenta inicia sesión llamando a la función LSASSLogonUserEx() , para lo cual el proceso LSASS busca contraseñas "secretas" almacenadas en la HKLM\SECURITY\Policy\Secrets\clave del registro, que fueron almacenadas por el SCP mediante la LsaStorePrivateData()API, cuando el servicio se configuró originalmente. [ 6 ]
A continuación, ScLogonAndStartImage()se llama a la función para cada servicio cuyo proceso de servicio aún no se haya iniciado. Los procesos de servicio se crean en estado suspendido a través de la CreateProcessAsUser()API. Antes de que se reanude la ejecución del proceso de servicio, \Pipe\Net\NtControlPipeXse crea una tubería con nombre (donde X es un número que se incrementa en cada iteración del servicio) que sirve como canal de comunicación entre el SCM y el proceso de servicio. El proceso de servicio se conecta a la tubería llamando a la StartServiceCtrlDispatcher()función, tras lo cual el SCM envía al servicio un comando de "inicio". [ 7 ]
Servicios de arranque automático retardado
Se han añadido servicios de inicio automático retardado en Windows Vista para solucionar el problema del inicio prolongado del sistema, así como para acelerar el inicio de servicios críticos que no pueden retrasarse. [ 8 ] Originalmente, el método de inicio automático de servicios se diseñó para servicios esenciales del sistema de los que dependen otras aplicaciones y servicios. El SCM inicializa los servicios retardados solo después de procesar todos los servicios de inicio automático no retardado, invocando la ScInitDelayStart()función. Esta función pone en cola un elemento de trabajo retardado (120 segundos por defecto) asociado a un hilo de trabajo correspondiente. Aparte de la inicialización tras un retardo, no hay otras diferencias entre los servicios retardados y los no retardados.
Controladores de dispositivos
Servicios cuyo Typevalor de registro es SERVICE_KERNEL_DRIVERo SERVICE_FILE_SYSTEM_DRIVERse manejan de manera especial: estos representan controladores de dispositivos para los cuales ScStartService()se llama a la ScLoadDeviceDriver()función que carga el controlador apropiado (generalmente un archivo con una extensión .sys) que debe estar ubicado en el %SystemRoot%\System32\Drivers\directorio. Para ese propósito, se invoca la NtLoadDriverllamada al sistema y SeLoadDriverPrivilegese agrega al proceso del SCM.
letras de unidad de red
SCM proporciona una funcionalidad adicional completamente ajena a los servicios de Windows: notifica a las aplicaciones con interfaz gráfica de usuario , como el Explorador de Windows, cuando se ha creado o eliminado una conexión de letra de unidad de red, mediante la difusión de mensajesWM_DEVICECHANGE de Windows .
Véase también
Notas
- ^ Russinovich, Salomón y Ionescu (2009 :79)
- ^ Russinovich, Salomón y Ionescu (2009 :291)
- ↑ "Base de datos de servicios instalados" . Microsoft Developer Network . Consultado el 6 de marzo de 2011 .
- ^ Russinovich, Salomón y Ionescu (2009 :292)
- ^ Russinovich, Salomón y Ionescu (2009 :294)
- ^ Russinovich, Salomón y Ionescu (2009 :295)
- ^ Russinovich, Salomón y Ionescu (2009 :296)
- ^ Russinovich, Salomón y Ionescu (2009 :297)
Referencias
- Russinovich, Mark ; Salomón, David; Ionescu, Alex (2009), Windows® Internals (5.ª ed.), Microsoft Press , ISBN 978-0-7356-2530-3
- Servicios de Windows
- Componentes de Windows