stringtranslate.com

Gerente de control de servicios

Service Control Manager ( SCM ) es un proceso especial del sistema 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 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 de administración de servicios interactivos de Windows, como el complemento MMC y la utilidad de línea de comandos Service Control . La terminación de este archivo se utiliza como método para provocar la pantalla azul de la muerte .%SystemRoot%\System32\services.exeServices.mscsc.exe

Implementación

El ejecutable SCM, Services.exe, se ejecuta como un programa de consola de Windows y es lanzado por el proceso Wininit al inicio del sistema . [2] Su función principal, SvcCtrlMain(), lanza todos los servicios configurados para el inicio automático. Primero se inicializa una base de datos interna de los servicios instalados leyendo las siguientes dos claves de registro:

En el siguiente paso, la función principal del SCM SvcCtrlMain()llama a la ScGetBootAndSystemDriverState()función function que verifica si los controladores de dispositivos que se deben iniciar durante el arranque o el inicio del sistema se cargaron correctamente y los 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 el SCM y los SCP (procesos de control de servicio) que interactúan con servicios específicos.

A continuación, llama a la ScAutoStartServices()función que recorre todos los servicios marcados como de inicio automático, prestando atención a las dependencias calculadas en el orden de carga. En caso de una dependencia circular, se advierte un error y se omite el servicio que depende de un servicio que pertenece a un grupo que aparece más adelante en el orden de carga. En el caso de los servicios de inicio automático retrasado, la agrupación no tiene efecto y se cargan en una etapa posterior del inicio 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 se inicia sesión llamando a la función LSASSLogonUserEx() , para la cual el proceso LSASS busca contraseñas "secretas" almacenadas en la HKLM\SECURITY\Policy\Secrets\clave de registro, que fueron almacenadas por el SCP usando 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 no se haya iniciado aún. 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, después de lo cual el SCM envía al servicio un comando de "inicio". [7]

Servicios de inicio automático retrasado

Se han añadido servicios de inicio automático retrasado en Windows Vista , con el fin de resolver el problema de un inicio prolongado del sistema, así como para acelerar el inicio de servicios críticos que no se pueden retrasar. [8] Originalmente, el método de inicio automático de inicialización de servicios se diseñó para servicios esenciales del sistema de los que dependen otras aplicaciones y servicios. El SCM inicializa los servicios retrasados ​​solo después de gestionar todos los servicios de inicio automático no retrasados, invocando la ScInitDelayStart()función. Esta función pone en cola un elemento de trabajo retrasado (120 segundos de forma predeterminada) asociado con un subproceso de trabajo correspondiente. Aparte de inicializarse después de un retraso, no existen otras diferencias entre los servicios retrasados ​​y no retrasados.

Controladores de dispositivos

Servicios cuyo Typevalor de registro es SERVICE_KERNEL_DRIVERo SERVICE_FILE_SYSTEM_DRIVERson manejados de manera especial: representan controladores de dispositivos para los cuales ScStartService()se llama a la ScLoadDeviceDriver()función que carga el controlador apropiado (generalmente un archivo con extensión .sys) que debe estar ubicado en el %SystemRoot%\System32\Drivers\directorio. Para ello, se invoca la NtLoadDriver llamada del sistema y SeLoadDriverPrivilegese agrega al proceso del SCM.

Letras de unidad de red

SCM proporciona una funcionalidad adicional que no tiene ninguna relación con los servicios de Windows: notifica a las aplicaciones GUI , 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 mensajes WM_DEVICECHANGE de Windows .

Véase también

Notas

  1. ^ Russinovich, Solomon y Ionescu (2009:79) [ cita completa necesaria ]
  2. ^ Russinovich, Salomón y Ionescu (2009:291)
  3. ^ "Base de datos de servicios instalados". Microsoft Developer Network . Consultado el 6 de marzo de 2011 .
  4. ^ Russinovich, Salomón y Ionescu (2009:292)
  5. ^ Russinovich, Salomón y Ionescu (2009:294)
  6. ^ Russinovich, Salomón y Ionescu (2009:295)
  7. ^ Russinovich, Salomón y Ionescu (2009:296)
  8. ^ Russinovich, Salomón y Ionescu (2009:297)

Referencias