Método Change de la clase Win32_Service (Mbnapi.h): TerminalService
El método de clase ChangeWMI modifica un Win32_TerminalService.
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 .
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.
0
Ignore. El inicio continúa. No se da ninguna notificación al usuario que produjo un error en el servicio.
1
Normal. El inicio continúa. Antes de que el usuario inicie sesión, el usuario recibe la notificación " Error al menos un servicio o dispositivo durante el inicio".
2
Severa. El equipo intenta reiniciarse con la última configuración correcta conocida. Si se produce un error en el servicio de nuevo, el inicio continúa y se le da una notificación al usuario.
3
Crítico. El equipo intenta reiniciarse con la última configuración correcta conocida. Si se produce un error en el servicio de nuevo, el inicio se detiene.
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.
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
El administrador de control de servicios inicia automáticamente el servicio durante el inicio del sistema. Los servicios de inicio automático se inician antes de que un usuario inicie sesión en el equipo y ejecuten incluso si ningún usuario inicia sesión en el equipo.
Manual
El administrador de control de servicios iniciará el servicio cuando un proceso llama al método StartService . Aunque los servicios manuales deben iniciarse específicamente por un usuario (o por un script), seguirán ejecutándose incluso si el usuario cierra sesión. A menudo, los servicios manuales se conocen como servicios a petición.
Deshabilitado
Servicio que ya no se puede iniciar. Para iniciar un servicio deshabilitado, primero debe cambiar la opción de inicio a Automático o Manual.
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. Dependiendo del 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 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 del 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 nombre principal de usuario (UPN) para especificar el nombre de inicio, por ejemplo, Username@DomainName.
StartPassword [in]
Contraseña al nombre de la 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 pedidos de carga se encuentran en el registro del sistema y determinan la secuencia en la que los servicios se cargan 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 pedidos de carga se inician primero, seguidos de los servicios de los grupos que no están en la lista de grupos de pedidos de carga, seguidos de los 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 pedidos 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, ya que 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 que depende de 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 de WMI o WbemErrorEnum. Para obtener valores HRESULT generales, consulte Códigos de error del sistema.
-
0
-
Se aceptó la solicitud.
-
1
-
No se admite la solicitud.
-
2
-
El usuario no tenía el acceso necesario.
-
3
-
No se puede detener el servicio porque otros servicios que se están ejecutando dependen de él.
-
4
-
El código de control solicitado no es válido o no es aceptable para el servicio.
-
5
-
El código de control solicitado no se puede enviar al servicio porque el estado del servicio (Win32_BaseService. Propiedad State ) es igual a 0, 1 o 2.
-
6
-
El servicio no se ha iniciado.
-
7
-
El servicio no respondió a tiempo a la solicitud de inicio.
-
8
-
Error desconocido al iniciar el servicio.
-
9
-
No se encontró la ruta de acceso del directorio al archivo ejecutable del servicio.
-
10
-
El servicio ya se está ejecutando.
-
11
-
La base de datos para agregar un nuevo servicio está bloqueada.
-
12
-
Una dependencia en la que se basa este servicio se ha quitado del sistema.
-
13
-
El servicio no pudo encontrar el servicio necesario de un servicio dependiente.
-
14
-
El servicio se ha deshabilitado del sistema.
-
15
-
El servicio no tiene la autenticación correcta para ejecutarse en el sistema.
-
16
-
Este servicio se está quitando del sistema.
-
17
-
El servicio no tiene ningún subproceso de ejecución.
-
18
-
El servicio tiene dependencias circulares cuando se inicia.
-
19
-
Un servicio se ejecuta con el mismo nombre.
-
20
-
El nombre del servicio tiene caracteres no válidos.
-
21
-
Se han pasado parámetros no válidos al servicio.
-
22
-
La cuenta con la que se ejecuta este servicio no es válida o carece de los permisos para ejecutar el servicio.
-
23
-
El servicio existe en la base de datos de servicios disponibles del sistema.
-
24
-
El servicio se encuentra en pausa actualmente en el sistema.
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 acciones 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 errores 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 da 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 errores. 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 e 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_TerminalService 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 derecho a 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 no válida. El cambio de 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 llevar mucho tiempo 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 de sistema local a una red, los parámetros StartName e StartPassword deben tener los valores siguientes:
StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL
Ejemplos
El siguiente 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\TerminalServices |
Encabezado |
|
MOF |
|
Archivo DLL |
|