Partager via


Fonction LockServiceDatabase (winsvc.h)

[À partir de Windows Vista, cette fonction est fournie pour la compatibilité des applications et n’a aucun effet sur la base de données.]

Demande la propriété du verrou de base de données du gestionnaire de contrôle de service (SCM). Un seul processus peut posséder le verrou à un moment spécifié.

Syntaxe

SC_LOCK LockServiceDatabase(
  [in] SC_HANDLE hSCManager
);

Paramètres

[in] hSCManager

Handle de la base de données SCM. Ce handle est retourné par la fonction OpenSCManager et doit avoir le droit d’accès SC_MANAGER_LOCK . Pour plus d’informations, consultez Sécurité du service et droits d’accès.

Valeur retournée

Si la fonction réussit, la valeur de retour est un verrou pour la base de données SCM spécifiée.

Si la fonction échoue, la valeur de retour est NULL. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Les codes d’erreur suivants peuvent être définis par le SCM. D’autres codes d’erreur peuvent être définis par des fonctions de Registre appelées par le SCM.

Code de retour Description
ERROR_ACCESS_DENIED
Le handle n’a pas le droit d’accès SC_MANAGER_LOCK .
ERROR_INVALID_HANDLE
Le handle spécifié n’est pas valide.
ERROR_SERVICE_DATABASE_LOCKED
La base de données est verrouillée.

Remarques

Un verrou est un protocole utilisé par les programmes d’installation et de configuration et le SCM pour sérialiser l’accès à l’arborescence de services dans le Registre. Le seul moment où le SCM demande la propriété du verrou est au démarrage d’un service.

Un programme qui acquiert le verrou de base de données SCM et ne parvient pas à le libérer empêche le SCM de démarrer d’autres services. En raison de la gravité de ce problème, les processus ne sont plus autorisés à verrouiller la base de données. Pour la compatibilité avec les applications plus anciennes, la fonction LockServiceDatabase retourne un verrou, mais n’a aucun autre effet.

Windows Server 2003 et Windows XP : L’acquisition du verrou de base de données SCM empêche le SCM de démarrer un service jusqu’à ce que le verrou soit libéré. Par exemple, un programme qui doit configurer plusieurs services associés avant le démarrage de l’un d’eux peut appeler LockServiceDatabase avant de configurer le premier service. Elle peut également s’assurer qu’aucun des services n’est démarré tant que la configuration n’est pas terminée.

Un appel à la fonction StartService pour démarrer un service dans une base de données verrouillée échoue. Aucune autre fonction SCM n’est affectée par un verrou.

Le verrou est maintenu jusqu’à ce que le handle SC_LOCK soit spécifié dans un appel suivant à la fonction UnlockServiceDatabase . Si un processus propriétaire d’un verrou se termine, le SCM nettoie automatiquement et libère la propriété du verrou.

L’échec de la libération du verrou peut entraîner des problèmes système. Un processus qui acquiert le verrou doit le libérer dès que possible.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winsvc.h (inclure Windows.h)
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Configuration de service

Fonctions de service

SetServiceObjectSecurity

StartService

UnlockServiceDatabase