Condividi tramite


Funzione OpenSCManagerA (winsvc.h)

Stabilisce una connessione al gestore di controllo del servizio nel computer specificato e apre il database di gestione del controllo del servizio specificato.

Sintassi

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

Parametri

[in, optional] lpMachineName

Il nome del computer di destinazione. Se il puntatore è NULL o punta a una stringa vuota, la funzione si connette alla gestione controllo del servizio nel computer locale.

[in, optional] lpDatabaseName

Nome del database di gestione controllo del servizio. Questo parametro deve essere impostato su SERVICES_ACTIVE_DATABASE. Se è NULL, il database SERVICES_ACTIVE_DATABASE viene aperto per impostazione predefinita.

[in] dwDesiredAccess

Accesso al gestore del controllo del servizio. Per un elenco dei diritti di accesso, vedere Sicurezza del servizio e diritti di accesso.

Prima di concedere i diritti di accesso richiesti, il sistema controlla il token di accesso del processo chiamante rispetto all'elenco di controllo degli accessi discrezionali del descrittore di sicurezza associato al gestore del controllo del servizio.

Il diritto di accesso SC_MANAGER_CONNECT viene specificato in modo implicito chiamando questa funzione.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle per il database di gestione controllo del servizio specificato.

Se la funzione ha esito negativo, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.

I codici di errore seguenti possono essere impostati da SCM. Altri codici di errore possono essere impostati dalle funzioni del Registro di sistema chiamate da SCM.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'accesso richiesto è stato negato.
ERROR_DATABASE_DOES_NOT_EXIST
Il database specificato non esiste.

Commenti

Quando un processo usa la funzione OpenSCManager per aprire un handle a un database di gestione controllo del servizio, il sistema esegue un controllo di sicurezza prima di concedere l'accesso richiesto. Per altre informazioni, vedere Sicurezza del servizio e diritti di accesso.

Se l'utente corrente non ha accesso appropriato durante la connessione a un servizio in un altro computer, la chiamata di funzione OpenSCManager ha esito negativo. Per connettersi a un servizio in remoto, chiamare la funzione LogonUser con LOGON32_LOGON_NEW_CREDENTIALS e quindi chiamare ImpersonateLoggedOnUser prima di chiamare OpenSCManager. Per altre informazioni sulla connessione ai servizi in remoto, vedere Servizi e RPC/TCP.

Solo i processi con privilegi di amministratore sono in grado di aprire un handle di database che può essere usato dalla funzione CreateService .

L'handle restituito è valido solo per il processo che ha chiamato la funzione OpenSCManager . Può essere chiuso chiamando la funzione CloseServiceHandle .

Esempio

Per un esempio, vedere Modifica della configurazione di un servizio.

Nota

L'intestazione winsvc.h definisce OpenSCManager come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winsvc.h (include Windows.h)
Libreria Advapi32.lib
DLL Advapi32.dll

Vedi anche

CloseServiceHandle

CreateService

EnumServicesStatusEx

Openservice

Handle SCM

Funzioni del servizio