Share via


OpenSCManagerA, fonction (winsvc.h)

Établit une connexion au gestionnaire de contrôle de service sur l’ordinateur spécifié et ouvre la base de données du gestionnaire de contrôle de service spécifiée.

Syntaxe

SC_HANDLE OpenSCManagerA(
  [in, optional] LPCSTR lpMachineName,
  [in, optional] LPCSTR lpDatabaseName,
  [in]           DWORD  dwDesiredAccess
);

Paramètres

[in, optional] lpMachineName

Nom de l'ordinateur cible. Si le pointeur a la valeur NULL ou pointe vers une chaîne vide, la fonction se connecte au gestionnaire de contrôle de service sur l’ordinateur local.

[in, optional] lpDatabaseName

Nom de la base de données du gestionnaire de contrôle de service. Ce paramètre doit être défini sur SERVICES_ACTIVE_DATABASE. Si elle a la valeur NULL, la base de données SERVICES_ACTIVE_DATABASE est ouverte par défaut.

[in] dwDesiredAccess

Accès au gestionnaire de contrôle de service. Pour obtenir la liste des droits d’accès, consultez Sécurité des services et droits d’accès.

Avant d’accorder les droits d’accès demandés, le système vérifie le jeton d’accès du processus appelant par rapport à la liste de contrôle d’accès discrétionnaire du descripteur de sécurité associé au gestionnaire de contrôle de service.

Le droit d’accès SC_MANAGER_CONNECT est implicitement spécifié en appelant cette fonction.

Valeur retournée

Si la fonction réussit, la valeur de retour est un handle pour la base de données du gestionnaire de contrôle de service 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 les fonctions de Registre appelées par le SCM.

Code de retour Description
ERROR_ACCESS_DENIED
L’accès demandé a été refusé.
ERROR_DATABASE_DOES_NOT_EXIST
La base de données spécifiée n’existe pas.

Remarques

Lorsqu’un processus utilise la fonction OpenSCManager pour ouvrir un handle à une base de données du gestionnaire de contrôle de service, le système effectue une case activée de sécurité avant d’accorder l’accès demandé. Pour plus d’informations, consultez Sécurité du service et droits d’accès.

Si l’utilisateur actuel ne dispose pas d’un accès approprié lors de la connexion à un service sur un autre ordinateur, l’appel de fonction OpenSCManager échoue. Pour vous connecter à un service à distance, appelez la fonction LogonUser avec LOGON32_LOGON_NEW_CREDENTIALS, puis appelez ImpersonateLoggedOnUser avant d’appeler OpenSCManager. Pour plus d’informations sur la connexion aux services à distance, consultez Services et RPC/TCP.

Seuls les processus disposant de privilèges d’administrateur peuvent ouvrir un handle de base de données qui peut être utilisé par la fonction CreateService .

Le handle retourné est valide uniquement pour le processus qui a appelé la fonction OpenSCManager . Il peut être fermé en appelant la fonction CloseServiceHandle .

Exemples

Pour obtenir un exemple, consultez Modification de la configuration d’un service.

Notes

L’en-tête winsvc.h définit OpenSCManager en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

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

CloseServiceHandle

CreateService

EnumServicesStatusEx

OpenService

SCM Handles

Fonctions de service