miércoles, 22 de febrero de 2012

Usos del comando SC

  • ¿Qué es el comando SC?
 SC (Service Controller) es una herramienta por línea de comandos que sirve para realizar una administración de los servicios que se ubican en Services.msc.  
  • ¿Qué podemos destacar del comando?
 SC tiene bastantes utilidades para poder administrar los servicios, así como consultar su estado, iniciar, detener, interrumpir, e incluso, eliminar de la consola.

  • Lista de caracteres básicos de SC

    • Query: Consulta los servicios del sistema que están iniciados (Es equivalente a escribir NET START, pero ésta incluye una hoja más completa)
    • Queryex: Extensión de Query (Incluye el PID y el FLAG del servicio)
    • Start: Inicia un servicio
    • Stop: Detiene un servicio
    • Pause: Pausa un servicio
    • Delete: Elimina un servicio del registro de Services
    • Create: Crea un servicio del registro (Fase beta)
    • Description: Cambia la descripción de un servicio.

  •  Sintaxis del programa:
Inicialmente, la sintaxis para los comandos básicos como Start, Stop, Query, Pause, son:

SC <opción> <nombre del servicio>

  • Funciones del comando.


Básicas: Start, Stop, Pause, Query, Queryex.

Si queremos iniciar el servicio de dhcp, escribimos:


sc start dhcp

Y acto seguido aparecerá la query del archivo, marcando su inicio:

SERVICE_NAME: dhcp
        TYPE : 20  WIN32_SHARE_PROCESS
        STATE : 2  START_PENDING
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE : 0  (0x0)
        SERVICE_EXIT_CODE : 0  (0x0)
        CHECKPOINT : 0x0
        WAIT_HINT : 0x7d0
        PID : 1144
        FLAGS:

Para detenerlo:

sc stop dhcp

Aparecerá la siguiente información del servicio: 

SERVICE_NAME: dhcp
        TYPE : 20  WIN32_SHARE_PROCESS
        STATE : 3  STOP_PENDING
                                (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE : 0  (0x0)
        SERVICE_EXIT_CODE : 0  (0x0)
        CHECKPOINT : 0x1
        WAIT_HINT : 0x61a8

Para pausarlo:


sc pause lanmanworkstation

SERVICE_NAME: lanmanworkstation
        TYPE : 20  WIN32_SHARE_PROCESS
        STATE : 7  PAUSED
                                (STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE : 0  (0x0)
        SERVICE_EXIT_CODE : 0  (0x0)
        CHECKPOINT : 0x0
        WAIT_HINT : 0x0

PD: no puedo pausar el servicio DHCP así que pausé otro en su lugar, como ejemplo vale igual.

Consulta del servicio y su estado (Query):

sc query dhcp

Muestra lo mismo que en el sc start dhcp, excepto el PID y el flag.

También puede mostrar otros datos, como los controladores de tipo driver, todos los servicios del sistema. Para ello se puede trastear con otras opciones. A destacar las variables:

- type= Tipo de servicios que se enumerarán (controlador, servicio, todos)
- state= Estado de los servicios que se enumeran (inactivo, todos)
- bufsize= Tamaño (en bytes) del búfer de enumeración (valor predeterminado = 4096)
- ri = El número de índice de reanudación en el que comenzará la enumeración
- group= Grupo de servicio que se enumerará
          
Algunas variables:

sc query - Enumera el estado de controladores y servicios activos
sc query eventlog - Muestra el estado del servicio de registro de eventos
sc queryex eventlog - Muestra el estado extendido del servicio de registro de eventos
sc query type= driver - Enumera sólo los controladores activos
sc query type= service - Enumera sólo los servicios de Win32
sc query state= all - Enumera todos los servicios y controladores
sc query bufsize= 50 - Enumera con un búfer de 50 bytes
sc query ri= 14 - Enumera con índice de reanudación = 14
sc queryex group= "" - Enumera los servicios activos que no están en un grupo
sc query type= interact - Enumera todos los servicios interactivos
sc query type= driver group= NDIS     - Enumera todos los controladores NDIS


PD: Es una copia de los ficheros de ayuda de Windows que aparecen en la consola



sc queryex dhcp

Muestra todo, incluidos PID y flag.


Avanzadillas: Delete, create, description, config

  • Delete.
Los servicios de Windows se pueden eliminar de la pila de servicios que se muestra en Services.msc. Dicha eliminación también acarrea una serie de consecuencias:

  • Eliminar un servicio "a pelo" puede provocar un funcionamiento erróneo. Se recomienda eliminar servicios cuando no se usen, o cuando se haya desinstalado una aplicación y esté mostrada en la pila pero no se usa
  • Eliminar un servicio que contiene dependencias provocará que las mismas no se inicien. Si por ejemplo eliminamos el servicio Llamada a procedimiento Remoto (RPC) y Plug And Play (PlugPlay), el ordenador no funcionará correctamente y su futuro próximo será reinstalarlo.
Para realizar la eliminación, usamos la misma sintaxis anterior. En este caso, vamos a eliminar el Google Registration, uno de los procesos basura de Google cuando desinstalamos Chrome o alguna función dependiente del mismo.

sc delete gregupdate

Una vez introduzcas el comando, mostrará en la pantalla:

[SC] DeleteService SUCCESS

Ahora, el servicio Gregupdate no aparecerá en la pila de Services.msc. Aparecerá una vez, si teníamos abierta la ventana y veíamos el proceso, pero cuando introduzcamos el comando y actualicemos sin salir de la ventana, el servicio se mostrará como deshabilitado. Una vez salgas y entres de nuevo en Services.msc, habrá desaparecido.

  •  Create
La sintaxis del comando es:

SC <nombre del servidor> create {Nombre del servicio a crear} (opción 1) (opción 2)

Las opciones del comando Create de SC con las siguientes:

 type= <own|share|interact|kernel|filesys|rec> (valor predeterminado = own)
 start= <boot|system|auto|demand|disabled|delayed-auto> (valor predeterminado = demand)
 error= <normal|severe|critical|ignore> (valor predeterminado = normal)
 binPath= <Nombre_de_ruta_binaria>
 group= <Grupo_de_orden_de_carga>
 tag= <yes|no>
 depend= <Dependencias(separado por / (barra diagonal))>
 obj= <Nombre_de_cuenta|Nombre_de_objeto> (valor predeterminado = LocalSystem)
 DisplayName= <nombre para mostrar>
 password= <contraseña>

PD: Siempre debe haber un espacio entre el igual y la cláusula.

Por ejemplo, vamos a crear un servicio llamado VMON que se encuentra en la ruta C:\scripts\vmon.bat.

sc create VMON binpath= C:\scripts\vmon.bat

[SC] CreateService CORRECTO

PD 1: Para añadirle una descripción al servicio, utilizar la cláusula Description que explico a continuación

PD 2: Si cambiamos la ruta del archivo de binpath, el servicio no arrancará.
  • Description.
 La sintaxis del comando es:

SC <nombre del servidor> description {nombre del servicio} descripción nueva

Así, por ejemplo:


sc description dhcp Sirve para iniciar el cliente DHCP

Se añadirá la descripción puesta (Sirve para iniciar el cliente DHCP) en la descripción del servicio, machacando la anterior descripción.

PD: El nombre del servidor es por si procede. Si lo vamos a hacer en local, no hace falta especificar.

  • Config
Con este comando, conseguiremos modificar el servicio como deseemos.

Para ello, debemos usar la siguiente sintaxis:

 sc config [nombre del servicio] <opción1> <opción2>

Las opciones que pueden tomar son:


 Type= <own|share|interact|kernel|filesys|rec|adapt> (Tipo de propiedad que adquiere)
 Start= <boot|system|auto|demand|disabled|delayed-auto> (Inicio del servicio en el sistema)
 Error= <normal|severe|critical|ignore> (Errores del servicio)
 BinPath= <Nombre_de_ruta_binaria> (Ruta del servicio, dónde está ubicado)
 Group= <Grupo_de_orden_de_carga> (Grupo de carga)
 Tag=  <yes|no> (Etiqueta)
 Depend= <Dependencias(separado por / (barra diagonal))> (Dependencias del servicio)
 Obj= <Nombre_de_cuenta|Nombre_de_objeto> (Nombres del objeto)
 DisplayName= <nombre para mostrar> (Nombre del servicio)
 Password= <contraseña> (Contraseña para el servicio)

PD: Siempre debe haber un espacio entre el igual y la cláusula.

Si por ejemplo queremos deshabilitar un servicio, podemos usar:

sc config (servicio) start= disabled
  •  AVISOS USANDO LOS COMANDOS


El objetivo principal de la herramienta SC es para comunicarse con el Administrador de servicios y así administrar de forma más potente los servicios de Windows.

Eliminar servicios vitales de Windows no conlleva a que el ordenador al iniciar se quede con la pantalla negra totalmente, es más, seguirá iniciando como si tal cosa, pero sí verá reducida su utilidad, rendimiento y velocidad como aparato al no poder utilizar ninguna función de Windows, teniendo más un uso de pisapapeles que de proceso de datos. Cuidado con lo que se toca.

Adicionalmente, esta herramienta puede traer serias consecuencias si no se utiliza de forma adecuada. Los usos de forma maliciosa con otros usuarios, como borrar servicios de otros usuarios de ordenador, o distribuir ficheros por lotes que contegan líneas de código peligroso con éstos comandos son bajo responsabilidad del usuario lector, y no de mi persona.


Antes de realizar una tarea peligrosa, como eliminar un servicio dudoso, o crear un servicio "a la aventura", realizar las pruebas en una máquina virtual adaptada al sistema que se vaya a utilizar. Las máquinas virtuales están para eso, para hacer pruebas y ver si todo marcha bien, o si se rompen, no producir un desastre considerable en el sistema.

Fuentes:

Experiencia propia.
Algunas pruebas realizadas en clase.
La consola del Windows.

 Fecha de revisión: Diciembre de 2012
Razón: Añadida la opción de crear servicio.

No hay comentarios:

Publicar un comentario

Comenta si te gustó la entrada, algún error que tenga, o simplemente entra a debatir si tienes algún problema, pues recuerda que aquí todo es posible y nada es seguro (Y a lo mejor a mí se me ha podido ir la pinza y escribir algo mal)

Por favor, sé conciso y ten buena escritura, que aquí no se cobra por letras ni palabras a usar. Los comentarios estilo HOYGAN o descalificativos no serán publicados.