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 del Administrador de control de servicios 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 de 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 para 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. Otras funciones del Registro a las que llama el SCM pueden establecer otros códigos de error.

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 de servicio.

Si el usuario actual no tiene 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, consulte Servicios y RPC/TCP.

Solo los procesos con privilegios de administrador pueden abrir un identificador de base de datos que puede 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 neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en 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 SCM

Funciones de servicio