Compartir a través de


Función OpenSCManagerA (winsvc.h)

Establece una conexión con el administrador de control de servicio en el equipo especificado y abre la base de datos de Service Control Manager especificada.

Sintaxis

SC_HANDLE OpenSCManagerA(
  [in, optional] LPCSTR lpMachineName,
  [in, optional] LPCSTR 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 control de servicios. 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 SC_MANAGER_CONNECT derecho de acceso 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 servicio especificada.

Si se produce un error en la función, 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.

Observaciones

Cuando un proceso usa la función openSCManager de 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 acceso adecuado al conectarse a un servicio en otro equipo, se produce un error en la llamada de función OpenSCManager. Para conectarse a un servicio de forma remota, llame a 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, consulte servicios de y RPC/TCP.

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

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 Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [solo aplicaciones de escritorio]
servidor mínimo admitido Windows Server 2003 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de winsvc.h (incluya Windows.h)
biblioteca de Advapi32.lib
DLL de Advapi32.dll

Consulte también

closeServiceHandle

CreateService

EnumServicesStatusEx

OpenService

identificadores SCM

Funciones de servicio