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 |
---|---|
|
Le handle n’a pas le droit d’accès SC_MANAGER_LOCK . |
|
Le handle spécifié n’est pas valide. |
|
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 |