Función ChangeServiceConfigA (winsvc.h)
Cambia los parámetros de configuración de un servicio.
Para cambiar los parámetros de configuración opcionales, use la función ChangeServiceConfig2 .
Sintaxis
BOOL ChangeServiceConfigA(
[in] SC_HANDLE hService,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in, optional] LPCSTR lpBinaryPathName,
[in, optional] LPCSTR lpLoadOrderGroup,
[out, optional] LPDWORD lpdwTagId,
[in, optional] LPCSTR lpDependencies,
[in, optional] LPCSTR lpServiceStartName,
[in, optional] LPCSTR lpPassword,
[in, optional] LPCSTR lpDisplayName
);
Parámetros
[in] hService
Identificador del servicio. La función OpenService o CreateService devuelve este identificador y debe tener el derecho de acceso SERVICE_CHANGE_CONFIG . Para obtener más información, consulte Derechos de acceso y seguridad de servicio.
[in] dwServiceType
Tipo de servicio. Especifique SERVICE_NO_CHANGE si no cambia el tipo de servicio existente; De lo contrario, especifique uno de los siguientes tipos de servicio.
Si especifica SERVICE_WIN32_OWN_PROCESS o SERVICE_WIN32_SHARE_PROCESS, y el servicio se ejecuta en el contexto de la cuenta LocalSystem, también puede especificar el tipo siguiente.
Valor | Significado |
---|---|
|
El servicio puede interactuar con el escritorio.
Para obtener más información, consulte Interactive Services. |
[in] dwStartType
Las opciones de inicio del servicio. Especifique SERVICE_NO_CHANGE si no cambia el tipo de inicio existente; de lo contrario, especifique uno de los valores siguientes.
Valor | Significado |
---|---|
|
Un servicio iniciado automáticamente por el administrador de control de servicios durante el inicio del sistema. |
|
Un controlador de dispositivo iniciado por el cargador del sistema. Este valor solamente es válido para servicios de controladores. |
|
Un servicio iniciado por el administrador de control de servicios cuando un proceso llama a la función StartService . |
|
Un servicio que no se puede iniciar. Los intentos de iniciar el servicio dan como resultado el código de error ERROR_SERVICE_DISABLED. |
|
Un controlador de dispositivo iniciado por la función IoInitSystem . Este valor solamente es válido para servicios de controladores. |
[in] dwErrorControl
Gravedad del error y acción realizada, si este servicio no se inicia. Especifique SERVICE_NO_CHANGE si no cambia el control de error existente; de lo contrario, especifique uno de los valores siguientes.
[in, optional] lpBinaryPathName
Ruta de acceso completa al archivo binario del servicio. Especifique NULL si no va a cambiar la ruta de acceso existente. Si la ruta de acceso contiene un espacio, se debe citar para que se interprete correctamente. Por ejemplo, "d:\my share\myservice.exe" debe especificarse como ""d:\my share\myservice.exe"".
La ruta de acceso también puede incluir argumentos para un servicio de inicio automático. Por ejemplo, "d:\myshare\myservice.exe arg1 arg2". Estos argumentos se pasan al punto de entrada de servicio (normalmente la función principal ).
Si especifica una ruta de acceso en otro equipo, el recurso compartido debe ser accesible para la cuenta de equipo del equipo local porque se trata del contexto de seguridad que se usa en la llamada remota. Sin embargo, este requisito permite que las posibles vulnerabilidades del equipo remoto afecten al equipo local. Por lo tanto, es mejor usar un archivo local.
[in, optional] lpLoadOrderGroup
Nombre del grupo de pedidos de carga del que este servicio es miembro. Especifique NULL si no va a cambiar el grupo existente. Especifique una cadena vacía si el servicio no pertenece a un grupo.
El programa de inicio usa grupos de ordenación de carga para cargar grupos de servicios en un orden especificado con respecto a los demás grupos. La lista de grupos de ordenación de carga se incluye en el valor ServiceGroupOrder de la siguiente clave del Registro:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
[out, optional] lpdwTagId
Puntero a una variable que recibe un valor de etiqueta que es único en el grupo especificado en el parámetro lpLoadOrderGroup . Especifique NULL si no va a cambiar la etiqueta existente.
Puede usar una etiqueta para ordenar el inicio del servicio dentro de un grupo de pedidos de carga especificando un vector de orden de etiqueta en el valor GroupOrderList de la siguiente clave del Registro:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
Las etiquetas solo se evalúan para los servicios de controladores que tienen SERVICE_BOOT_START o SERVICE_SYSTEM_START tipos de inicio.
[in, optional] lpDependencies
Puntero a una matriz doble terminada en null de nombres separados por null de servicios o grupos de ordenación de carga que el sistema debe iniciar antes de que se pueda iniciar este servicio. (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). Especifique NULL si no va a cambiar las dependencias existentes. Especifique una cadena vacía si el servicio no tiene dependencias.
Debe prefijar los nombres de grupo con SC_GROUP_IDENTIFIER para que se puedan distinguir de un nombre de servicio, ya que los servicios y los grupos de servicios comparten el mismo espacio de nombres.
[in, optional] lpServiceStartName
Nombre de la cuenta en la que se debe ejecutar el servicio. Especifique NULL si no cambia el nombre de la cuenta existente. Si el tipo de servicio es SERVICE_WIN32_OWN_PROCESS, use un nombre de cuenta con el formato DomainName\UserName. El proceso de servicio se iniciará como usuario. Si la cuenta pertenece al dominio integrado, puede especificar .\UserName (tenga en cuenta que la cadena de C/C++ correspondiente es ".\\UserName"). Para obtener más información, vea Cuentas de usuario de servicio y la advertencia en la sección Comentarios.
Un proceso compartido se puede ejecutar como cualquier usuario.
Si el tipo de servicio es SERVICE_KERNEL_DRIVER o SERVICE_FILE_SYSTEM_DRIVER, el nombre es el nombre del objeto de controlador que el sistema usa para cargar el controlador de dispositivo. Especifique NULL si el controlador va a usar un nombre de objeto predeterminado creado por el sistema de E/S.
Un servicio se puede configurar para usar una cuenta administrada o una cuenta virtual. Si el servicio está configurado para usar una cuenta de servicio administrada, el nombre es el nombre de la cuenta de servicio administrada. Si el servicio está configurado para usar una cuenta virtual, especifique el nombre como NT SERVICE\ServiceName. Para obtener más información sobre las cuentas de servicio administradas y las cuentas virtuales, consulte la Guía paso a paso de cuentas de servicio.
Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Las cuentas de servicio administradas y las cuentas virtuales no se admiten hasta Windows 7 y Windows Server 2008 R2.
[in, optional] lpPassword
Contraseña del nombre de la cuenta especificado por el parámetro lpServiceStartName . Especifique NULL si no cambia la contraseña existente. Especifique una cadena vacía si la cuenta no tiene contraseña o si el servicio se ejecuta en la cuenta LocalService, NetworkService o LocalSystem. Para obtener más información, vea Service Record List.
Si el nombre de cuenta especificado por el parámetro lpServiceStartName es el nombre de una cuenta de servicio administrada o un nombre de cuenta virtual, el parámetro lpPassword debe ser NULL.
Las contraseñas se omiten para los servicios de controladores.
[in, optional] lpDisplayName
Nombre para mostrar que usarán las aplicaciones para identificar el servicio para sus usuarios. Especifique NULL si no cambia el nombre para mostrar existente; de lo contrario, 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 nombres para mostrar siempre no distinguen mayúsculas de minúsculas.
Este parámetro puede especificar una cadena localizada con el formato siguiente:
@[path]dllname,-strID
La cadena con identificador strID se carga desde dllname; la ruta de acceso es opcional. Para obtener más información, vea RegLoadMUIString.
Windows Server 2003 y Windows XP: Las cadenas localizadas no se admiten hasta Windows Vista.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
El administrador de control de servicios puede establecer los siguientes códigos de error. Otros códigos de error pueden establecerse mediante las funciones del Registro a las que llama el administrador de control de servicios.
Código devuelto | Descripción |
---|---|
|
El identificador no tiene el derecho de acceso SERVICE_CHANGE_CONFIG . |
|
Se especificó una dependencia de servicio circular. |
|
El nombre para mostrar ya existe en la base de datos de Service Controller Manager, ya sea como nombre de servicio o como otro nombre para mostrar. |
|
El identificador especificado no es válido. |
|
Un parámetro especificado no es válido. |
|
El nombre de la cuenta no existe o se especifica un servicio para compartir el mismo archivo binario que un servicio ya instalado, pero con un nombre de cuenta que no es el mismo que el servicio instalado. |
|
El servicio se ha marcado para su eliminación. |
Comentarios
La función ChangeServiceConfig cambia la información de configuración del servicio especificado en la base de datos del administrador de control de servicios. Puede obtener la información de configuración actual mediante la función QueryServiceConfig .
Si se cambia la configuración de un servicio que se está ejecutando, con la excepción de lpDisplayName, los cambios no surten efecto hasta que se detenga el servicio. Para actualizar las credenciales sin tener que reiniciar el servicio, use la función LsaCallAuthenticationPackage .
Comentarios de seguridad
Al establecer el parámetro lpServiceStartName , se cambia la cuenta de inicio de sesión del servicio. Esto puede causar problemas. Si ha registrado un nombre de entidad de seguridad de servicio (SPN), ahora se registraría en la cuenta incorrecta. Del mismo modo, si ha usado una ACE para conceder acceso a un servicio, ahora concedería acceso a la cuenta incorrecta.Ejemplos
Para obtener un ejemplo, consulte Cambio de la configuración de un servicio.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winsvc.h (incluye Windows.h) |
Library | Advapi32.lib |
Archivo DLL | Advapi32.dll |
Consulte también
QueryServiceDynamicInformation