Condividi tramite


Funzione LockServiceDatabase (winsvc.h)

[A partire da Windows Vista, questa funzione viene fornita per la compatibilità dell'applicazione e non ha alcun effetto sul database.]

Richiede la proprietà del blocco del database SCM (Service Control Manager). Un solo processo può essere proprietario del blocco in qualsiasi momento specificato.

Sintassi

SC_LOCK LockServiceDatabase(
  [in] SC_HANDLE hSCManager
);

Parametri

[in] hSCManager

Handle per il database SCM. Questo handle viene restituito dalla funzione OpenSCManager e deve avere il diritto di accesso SC_MANAGER_LOCK . Per altre informazioni, vedere Sicurezza del servizio e diritti di accesso.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un blocco al database SCM 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'handle non dispone del diritto di accesso SC_MANAGER_LOCK .
ERROR_INVALID_HANDLE
L'handle specificato non è valido.
ERROR_SERVICE_DATABASE_LOCKED
Il database è bloccato.

Commenti

Un blocco è un protocollo usato dai programmi di configurazione e configurazione e da SCM per serializzare l'accesso all'albero dei servizi nel Registro di sistema. L'unica volta che SCM richiede la proprietà del blocco è quando viene avviato un servizio.

Un programma che acquisisce il blocco del database SCM e non riesce a rilasciarlo impedisce l'avvio di altri servizi da parte di SCM. A causa della gravità di questo problema, i processi non sono più autorizzati a bloccare il database. Per la compatibilità con le applicazioni precedenti, la funzione LockServiceDatabase restituisce un blocco ma non ha alcun altro effetto.

Windows Server 2003 e Windows XP: L'acquisizione del blocco del database SCM impedisce l'avvio di un servizio da parte di SCM fino al rilascio del blocco. Ad esempio, un programma che deve configurare diversi servizi correlati prima che uno di essi inizi potrebbe chiamare LockServiceDatabase prima di configurare il primo servizio. In alternativa, potrebbe assicurarsi che nessuno dei servizi venga avviato fino al completamento della configurazione.

Una chiamata alla funzione StartService per avviare un servizio in un database bloccato ha esito negativo. Nessun'altra funzione SCM è interessata da un blocco.

Il blocco viene mantenuto fino a quando non viene specificato l'handle SC_LOCK in una chiamata successiva alla funzione UnlockServiceDatabase . Se un processo proprietario di un blocco termina, SCM pulisce automaticamente e rilascia la proprietà del blocco.

La mancata rilascio del blocco può causare problemi di sistema. Un processo che acquisisce il blocco deve rilasciarlo il prima possibile.

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

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Configurazione del servizio

Funzioni del servizio

SetServiceObjectSecurity

Startservice

UnlockServiceDatabase