Manejadores de SCM

Service Control Manager es compatible con manejadores o puntos de entrada que permiten el acceso a:

  • La base de datos de servicios instalados.
  • Un servicio.
  • La base de datos de bloqueo.

La base de datos de servicios instalados está representada por un objeto contenedor interno que mantiene objetos servicio. Este manejador o punto de entrada se utiliza cuando se instalan, eliminan, abren y enumeran servicios y cuando se bloquea la base de servicios.

Un servicio instalado está representado por un objeto servicio. La solicitud de acceso se da o niega dependiendo del token de acceso del proceso de llamada y del descriptor asociado con el servicio u objeto interno. Este nivel de acceso se asocia entonces con todas las llamadas subsecuentes que usan este manejador. Si una de ellas necesita un nivel de acceso que no fue originalmente solicitado para el manejador, la llamada fallará, a pesar de si el usuario actual pudiera haber solicitado un manejador que permita dicho nivel de acceso. Una practica adecuada para clientes de las APIs de SCM es solicitar sólo el nivel de acceso que será necesario.

La base de datos de bloqueo está representada por un objeto bloqueado que se crea durante la inicialización de SCM para serializar el acceso a la base de datos de servicios. SCM adquiere el bloqueo antes del inicio de un servicio o controlador. De esta manera si un instalador ha adquirido un bloqueo, un inicio-por-demanda no podrá continuar hasta que el bloqueo se libere. Es importante para instaladores liberar el bloqueo tan pronto como puedan. Cualquier instalador que seguidamente intente adquirir el bloqueo recibirá un error ERROR_SERVICE_DATABASE_LOCKED, y lo reintentará al cabo de un tiempo corto de espera.

 

Registrando un servicio con SCM

Un programa que registra un servicio mediante la API CreateService realiza lo siguiente:

  1. El instalador del programa envía un mensaje al SCM en el equipo donde el servicio residirá.
  2. SCM crea una clave de registro para el servicio bajo HKLMSYSTEMCurrentControlSetServices. Las claves individuales para cada servicio definen la ruta de la imagen ejecutable que contiene el servicio, además de opciones de configuración y parámetros.
  3. Después SCM crea la clave del registro para el servicio, una instalación o administrador de aplicación puede iniciar el sevicio mediante la función StartService. Ya que algunos servicios basados en aplicaciones deben iniciarse durante el proceso de arranque para funcionar, no es usual que un programa de instalación registre un servicio como auto-start, la instalación se completará al reiniciar el equipo y dejar que SCM inicie el servicio del equipo reiniciado.

Los servicios auto-start tienen un impacto significante en el tiempo de arranque.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *