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 |
|
MOF |
|
Archivo DLL |
|