Función LockServiceDatabase (winsvc.h)

[A partir de Windows Vista, esta función se proporciona para la compatibilidad de aplicaciones y no tiene ningún efecto en la base de datos].

Solicita la propiedad del bloqueo de base de datos del Administrador de control de servicios (SCM). Solo un proceso puede poseer el bloqueo en cualquier momento especificado.

Sintaxis

SC_LOCK LockServiceDatabase(
  [in] SC_HANDLE hSCManager
);

Parámetros

[in] hSCManager

Identificador de la base de datos SCM. La función OpenSCManager devuelve este identificador y debe tener el derecho de acceso SC_MANAGER_LOCK . Para obtener más información, consulte Derechos de acceso y seguridad de servicio.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un bloqueo en la base de datos SCM 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
El identificador no tiene derecho de acceso SC_MANAGER_LOCK .
ERROR_INVALID_HANDLE
El identificador especificado no es válido.
ERROR_SERVICE_DATABASE_LOCKED
La base de datos está bloqueada.

Comentarios

Un bloqueo es un protocolo que usan los programas de instalación y configuración y el SCM para serializar el acceso al árbol de servicio en el registro. La única vez que el SCM solicita la propiedad del bloqueo es cuando se inicia un servicio.

Un programa que adquiere el bloqueo de la base de datos SCM y no lo libera impide que el SCM inicie otros servicios. Debido a la gravedad de este problema, los procesos ya no pueden bloquear la base de datos. Para la compatibilidad con aplicaciones anteriores, la función LockServiceDatabase devuelve un bloqueo pero no tiene ningún otro efecto.

Windows Server 2003 y Windows XP: Adquirir el bloqueo de base de datos SCM impide que el SCM inicie un servicio hasta que se libere el bloqueo. Por ejemplo, un programa que debe configurar varios servicios relacionados antes de que se inicie cualquiera de ellos podría llamar a LockServiceDatabase antes de configurar el primer servicio. Como alternativa, podría asegurarse de que ninguno de los servicios se inicie hasta que se haya completado la configuración.

Se produce un error en una llamada a la función StartService para iniciar un servicio en una base de datos bloqueada. Ninguna otra función SCM se ve afectada por un bloqueo.

El bloqueo se mantiene hasta que se especifica el identificador de SC_LOCK en una llamada posterior a la función UnlockServiceDatabase . Si un proceso que posee un bloqueo finaliza, el SCM limpia y libera automáticamente la propiedad del bloqueo.

Si no se libera el bloqueo, se pueden producir problemas del sistema. Un proceso que adquiere el bloqueo debe liberarlo lo antes posible.

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

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Configuración de servicio

Funciones de servicio

SetServiceObjectSecurity

StartService

UnlockServiceDatabase