Función OpenSCManagerW (winsvc.h)

Establece una conexión con el administrador de controles de servicio en el equipo especificado y abre la base de datos del Administrador de control de servicios especificada.

Sintaxis

SC_HANDLE OpenSCManagerW(
  [in, optional] LPCWSTR lpMachineName,
  [in, optional] LPCWSTR lpDatabaseName,
  [in]           DWORD   dwDesiredAccess
);

Parámetros

[in, optional] lpMachineName

Nombre del equipo de destino. Si el puntero es NULL o apunta a una cadena vacía, la función se conecta al administrador de control de servicio en el equipo local.

[in, optional] lpDatabaseName

Nombre de la base de datos del administrador de controles de servicio. Este parámetro debe establecerse en SERVICES_ACTIVE_DATABASE. Si es NULL, la base de datos SERVICES_ACTIVE_DATABASE se abre de forma predeterminada.

[in] dwDesiredAccess

Acceso al administrador de control de servicios. Para obtener una lista de los derechos de acceso, consulte Derechos de acceso y seguridad del servicio.

Antes de conceder los derechos de acceso solicitados, el sistema comprueba el token de acceso del proceso de llamada en la lista de control de acceso discrecional del descriptor de seguridad asociado al administrador de control de servicios.

El derecho de acceso SC_MANAGER_CONNECT se especifica implícitamente mediante una llamada a esta función.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador de la base de datos del Administrador de control de servicios especificada.

Si la función no se realiza correctamente, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.

El SCM puede establecer los siguientes códigos de error. Otros códigos de error se pueden establecer mediante las funciones del Registro a las que llama el SCM.

Código devuelto Descripción
ERROR_ACCESS_DENIED
Se denegó el acceso solicitado.
ERROR_DATABASE_DOES_NOT_EXIST
La base de datos especificada no existe.

Comentarios

Cuando un proceso usa la función OpenSCManager para abrir un identificador en una base de datos de Service Control Manager, el sistema realiza una comprobación de seguridad antes de conceder el acceso solicitado. Para obtener más información, consulte Derechos de acceso y seguridad del servicio.

Si el usuario actual no tiene el acceso adecuado al conectarse a un servicio en otro equipo, se produce un error en la llamada a la función OpenSCManager . Para conectarse a un servicio de forma remota, llame a la función LogonUser con LOGON32_LOGON_NEW_CREDENTIALS y, a continuación, llame a ImpersonateLoggedOnUser antes de llamar a OpenSCManager. Para obtener más información sobre cómo conectarse a servicios de forma remota, vea Servicios y RPC/TCP.

Solo los procesos con privilegios de administrador pueden abrir un identificador de base de datos que la función CreateService puede usar.

El identificador devuelto solo es válido para el proceso que llamó a la función OpenSCManager . Se puede cerrar llamando a la función CloseServiceHandle .

Ejemplos

Para obtener un ejemplo, consulte Cambio de la configuración de un servicio.

Nota

El encabezado winsvc.h define OpenSCManager como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

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

CloseServiceHandle

CreateService

EnumServicesStatusEx

OpenService

Identificadores de SCM

Funciones de servicio