Compartir a través de


Método Change de la clase Win32_Service (Mbnapi.h)

El método declase Change WMI modifica un Win32_Service.

En este tema se usa la sintaxis de Managed Object Format (MOF). Para obtener más información sobre el uso de este método, vea Llamar a un método.

Sintaxis

uint32 Change(
  [in] string  DisplayName,
  [in] string  PathName,
  [in] uint32  ServiceType,
  [in] uint32  ErrorControl,
  [in] string  StartMode,
  [in] boolean DesktopInteract,
  [in] string  StartName,
  [in] string  StartPassword,
  [in] string  LoadOrderGroup,
  [in] string  LoadOrderGroupDependencies[],
  [in] string  ServiceDependencies[]
);

Parámetros

DisplayName [in]

Nombre para mostrar del servicio. Esta cadena tiene una longitud máxima de 256 caracteres. El nombre se conserva entre mayúsculas y minúsculas en el administrador de control de servicios. Las comparaciones de DisplayName siempre no distinguen mayúsculas de minúsculas.

Restricciones: acepta el mismo valor que la propiedad Name .

Por ejemplo, "Atdisk".

PathName [in]

Ruta de acceso completa al archivo ejecutable que implementa el servicio, por ejemplo, "\SystemRoot\System32\drivers\afd.sys".

ServiceType [in]

Tipo de servicios proporcionados a procesos que los llaman.

1 (0x1)

Controlador de kernel

2 (0x2)

Controlador del sistema de archivos

4 (0x4)

Adapter (Adaptador)

8 (0x8)

Controlador recognizer

16 (0x10)

Propio proceso

32 (0x20)

Compartir proceso

256 (0x100)

Proceso interactivo

ErrorControl [in]

Gravedad del error si este servicio no se inicia durante el inicio. El valor indica la acción realizada por el programa de inicio si se produce un error. El sistema registra todos los errores.

Omitir (0)

No se notifica al usuario.

Normal (1)

Normal. Se notifica al usuario.

Grave (2)

El sistema se reinicia con la última configuración correcta.

Crítico (3)

El sistema intenta reiniciarse con una configuración válida.

StartMode [in]

Modo de inicio del servicio base de Windows. Para obtener más información, vea la sección Comentarios.

Arranque

Controlador de dispositivo iniciado por el cargador del sistema operativo. Este valor solamente es válido para servicios de controladores.

Sistema

Controlador de dispositivo iniciado por el proceso de inicialización del sistema operativo. Este valor solamente es válido para servicios de controladores.

Automático

Servicio que el Administrador de control de servicios iniciará automáticamente durante el inicio del sistema.

Manual

Servicio que va a iniciar el Administrador de control de servicios cuando un proceso llama al método StartService .

Disabled

Servicio que ya no se puede iniciar.

DesktopInteract [in]

Si es True, el servicio puede crear o comunicarse con una ventana en el escritorio.

StartName [in]

Nombre de cuenta en el que se ejecuta el servicio. Según el tipo de servicio, el nombre de la cuenta puede tener el formato DomainName\Username o .\Username. El proceso de servicio se registrará con uno de estos dos formularios cuando se ejecute. Si la cuenta pertenece al dominio integrado, se puede especificar .\Username. Si se especifica NULL , el servicio se iniciará sesión como la cuenta LocalSystem. En el caso de los controladores de nivel de sistema o kernel, StartName contiene el nombre del objeto de controlador (es decir, \FileSystem\Rdr o \Driver\Xns) que usa el sistema de entrada y salida (E/S) para cargar el controlador de dispositivo. Si se especifica NULL, el controlador se ejecuta con un nombre de objeto predeterminado creado por el sistema de E/S basado en el nombre del servicio, por ejemplo, "DWDOM\Administración".

También puede usar el formato De nombre principal de usuario (UPN) para especificar el NombreDeInstancia, por ejemplo, Username@DomainName.

StartPassword [in]

Contraseña al nombre de cuenta especificado por el parámetro StartName . Especifique NULL si no cambia la contraseña. Especifique una cadena vacía si el servicio no tiene contraseña.

Nota

Al cambiar un servicio de un sistema local a una red o de una red a un sistema local, StartPassword debe ser una cadena vacía ("") y no NULL.

LoadOrderGroup [in]

Nombre de grupo al que está asociado. Los grupos de orden de carga se encuentran en el registro del sistema y determinan la secuencia en la que se cargan los servicios en el sistema operativo. Si el puntero es NULL o si apunta a una cadena vacía, el servicio no pertenece a un grupo. Para obtener más información, vea la sección Comentarios.

Las dependencias entre grupos deben aparecer en el parámetro LoadOrderGroupDependencies . Los servicios de la lista de grupos de ordenación de carga se inician primero, seguidos de servicios en grupos que no están en la lista de grupos de ordenación de carga, seguidos de servicios que no pertenecen a un grupo. El registro del sistema tiene una lista de grupos de ordenación de carga ubicados en:

HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Control\ServiceGroupOrder

LoadOrderGroupDependencies [in]

Lista de grupos de ordenación de carga que deben iniciarse antes de que se inicie este servicio. La matriz termina doblemente en null. Si el puntero es NULL o si apunta a una cadena vacía, el servicio no tiene dependencias. Los nombres de grupo deben tener el prefijo SC_GROUP_IDENTIFIER (definido en el archivo Winsvc.h) para diferenciarlos de los nombres de servicio porque los servicios y los grupos de servicios comparten el mismo espacio de nombres. La dependencia de un grupo significa que este servicio se puede ejecutar si al menos un miembro del grupo se está ejecutando después de un intento de iniciar todos los miembros del grupo.

ServiceDependencies [in]

Lista que contiene los nombres de los servicios que deben iniciarse antes de que se inicie este servicio. La matriz termina doblemente en NULL. Si el puntero es NULL o si apunta a una cadena vacía, el servicio no tiene dependencias. La dependencia de un servicio indica que este servicio solo se puede ejecutar si el servicio del que depende está en ejecución.

Valor devuelto

Devuelve uno de los valores enumerados en la lista siguiente o cualquier otro valor para indicar un error. Para obtener códigos de error adicionales, consulte Constantes de error WMI o WbemErrorEnum. Para obtener valores HRESULT generales, consulte Códigos de error del sistema.

Success

0

Se aceptó la solicitud.

No compatible

1

No se admite la solicitud.

Acceso denegado

2

El usuario no tenía el acceso necesario.

Servicios dependientes en ejecución

3

No se puede detener el servicio porque otros servicios que se están ejecutando dependen de él.

Control de servicio no válido

4

El código de control solicitado no es válido o no es aceptable para el servicio.

El servicio no puede aceptar el control

5

El código de control solicitado no se puede enviar al servicio porque el estado del servicio (Win32_BaseService. Propiedad de estado ) es igual a 0, 1 o 2.

Servicio no activo

6

El servicio no se ha iniciado.

Tiempo de espera de solicitud de servicio

7

El servicio no respondió a tiempo a la solicitud de inicio.

Error desconocido

8

Error desconocido al iniciar el servicio.

Ruta de acceso no encontrada

9

No se encontró la ruta de acceso del directorio al archivo ejecutable del servicio.

El servicio ya se está ejecutando

10

El servicio ya se está ejecutando.

Base de datos de servicio bloqueada

11

La base de datos para agregar un nuevo servicio está bloqueada.

Dependencia de servicio eliminada

12

Una dependencia en la que se basa este servicio se ha quitado del sistema.

Error de dependencia del servicio

13

El servicio no pudo encontrar el servicio necesario de un servicio dependiente.

Servicio deshabilitado

14

El servicio se ha deshabilitado del sistema.

Error de inicio de sesión del servicio

15

El servicio no tiene la autenticación correcta para ejecutarse en el sistema.

Servicio marcado para su eliminación

16

Este servicio se está quitando del sistema.

Servicio sin subproceso

17

El servicio no tiene ningún subproceso de ejecución.

Dependencia circular de estado

18

El servicio tiene dependencias circulares cuando se inicia.

Nombre duplicado de estado

19

Un servicio se ejecuta con el mismo nombre.

Estado Nombre no válido

20

El nombre del servicio tiene caracteres no válidos.

Parámetro no válido de estado

21

Se han pasado parámetros no válidos al servicio.

Estado Cuenta de servicio no válida

22

La cuenta con la que se ejecuta este servicio no es válida o carece de los permisos para ejecutar el servicio.

El servicio de estado existe

23

El servicio existe en la base de datos de servicios disponibles del sistema.

El servicio ya está en pausa

24

El servicio se encuentra en pausa actualmente en el sistema.

Otros

25 4294967295

Observaciones

Cuando se inicia un equipo, también se inician todos los servicios de inicio automático. En ocasiones, uno de estos servicios podría no iniciarse junto con el equipo. Cuando se produce un error en un servicio durante el inicio del sistema, el equipo realiza una acción en función del valor del código de control de errores del servicio.

la mayoría de los servicios se instalan mediante el código de control de error Normal. Algunas de las excepciones, que se instalan mediante el código de error Ignore, incluyen:

  • Servicio de replicación de archivos
  • Tarjeta inteligente
  • Inicio de sesión secundario
  • WMI

En el caso de los servicios instalados mediante el código de error Omitir, no se envía ninguna notificación al usuario que el servicio ha producido un error. Si prefiere la notificación en pantalla de que un servicio no se pudo iniciar, puede usar WMI para cambiar el código de control de error. Los códigos de control de error solo se aplican al inicio del equipo; los códigos de control de error no se usan si se detiene y, a continuación, se intenta reiniciar un servicio después de ejecutar el equipo.

En ocasiones, es posible que tenga que cambiar la cuenta con la que se ejecuta un servicio determinado. Por ejemplo, puede ejecutar un servicio en una cuenta administrativa. Dado que esto puede crear una vulnerabilidad de seguridad, puede cambiar el servicio a una cuenta con menos privilegios. Como alternativa, es posible que tenga servicios que se ejecuten en una cuenta que está a punto de eliminarse, o que quiera asegurarse de que, en todos los servidores, determinados servicios se ejecutan en determinadas cuentas. Puede usar el método Change de la clase Win32_Service para configurar los servicios que se ejecutarán en una cuenta de usuario especificada. Al seleccionar una cuenta, tenga en cuenta lo siguiente:

  • La cuenta que se usa como cuenta de servicio debe tener el derecho de iniciar sesión como servicio. Este derecho se puede conceder mediante directiva de grupo.

  • La cuenta que se usa como cuenta de servicio no debe ser miembro de un grupo local, de dominio o de administradores de empresa.

  • Cada instancia de un servicio debe ejecutarse en una cuenta de usuario única. Esto proporciona seguridad adicional y habilita la auditoría de instancias de servicio individuales.

  • Si el servicio es interactivo, el servicio debe ejecutarse en la cuenta LocalSystem.

    LocalSystem es necesario porque solo una estación de ventana (WinSta0) puede ser visible e interactiva a la vez. Si un servicio se ejecuta en una cuenta distinta de LocalSystem, se ejecuta en la estación de ventana Service-0x03e7$\Default, que es una ventana invisible. Los servicios que se ejecutan en esta estación de ventanas no pueden recibir la entrada ni la salida de visualización.

Al asignar una cuenta a un servicio, el SCM requiere la contraseña correcta para esa cuenta antes de realizar la asignación. Si proporciona una contraseña incorrecta, el SCM rechaza la cuenta. Si configura una cuenta de servicio mediante la cuenta LocalSystem, LocalService o NetworkService, no es necesario proporcionar una contraseña de cuenta porque estas cuentas no tienen contraseñas.

El SCM almacena la contraseña de la cuenta en la base de datos de servicios. Sin embargo, después de asignar la contraseña, el SCM no garantiza que la contraseña almacenada en la base de datos de servicios y la contraseña asignada a la cuenta de usuario de Active Directory sigan coincidendo. Por lo tanto, podría producirse una situación similar a la siguiente:

  • Configure un servicio para que se ejecute en una cuenta de usuario determinada.
  • El servicio se inicia en esa cuenta mediante la contraseña de la cuenta actual.
  • Cambia la contraseña de la cuenta de usuario.
  • El servicio continúa ejecutándose. Sin embargo, si el servicio se detiene, no puede reiniciarlo porque el SCM sigue usando la contraseña antigua y no válida. Cambiar la contraseña en Active Directory no cambia la contraseña almacenada en la base de datos de servicios.

Si ejecuta servicios en cuentas de usuario normales, debe actualizar esas contraseñas de servicio cada vez que cambie la contraseña de la cuenta de usuario. Esto puede ser especialmente lento si no está seguro de qué servicios se ejecutan en esa cuenta o qué equipos tienen servicios que se ejecutan en esa cuenta. Afortunadamente, puede usar WMI para comprobar las cuentas de servicio en todos los equipos y, si es necesario, cambiar la contraseña de la cuenta de servicio.

El parámetro Win32_LoadOrderGroup representa un grupo de servicios del sistema que definen las dependencias de ejecución. Los servicios deben iniciarse en el orden especificado por el grupo de pedidos de carga porque los servicios dependen entre sí. Estos servicios dependientes requieren la presencia de los servicios antecedentes para funcionar correctamente.

Para cambiar un servicio de un servicio de red a un sistema local, los parámetros StartName e StartPassword deben tener los valores siguientes:

StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL

Para cambiar un servicio de un servicio del sistema local a una red, los parámetros StartName e StartPassword deben tener los siguientes valores:

StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL

Ejemplos

A continuación, VBScript cambia la cuenta de servicio de los servicios de que se ejecutan en una cuenta de usuario especificada a LocalSystem.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
 errServiceChange = objService.Change( , , , , , , ".\LocalSystem" , "")
Next

El siguiente VBScript cambia la contraseña de la cuenta de servicio para todos los scripts que se ejecutan en Netsvc.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
 errReturn = objService.Change( , , , , , , , "password")
Next

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Espacio de nombres
Root\CIMV2
Encabezado
Mbnapi.h
MOF
CIMWin32.mof
Archivo DLL
CIMWin32.dll

Vea también

Clases de sistema operativo

Win32_Service

Tareas de WMI: servicios