Função LockServiceDatabase (winsvc.h)
[A partir do Windows Vista, essa função é fornecida para compatibilidade de aplicativos e não tem efeito no banco de dados.]
Solicita a propriedade do bloqueio de banco de dados do SCM (Service Control Manager). Somente um processo pode ter o bloqueio a qualquer momento especificado.
Sintaxe
SC_LOCK LockServiceDatabase(
[in] SC_HANDLE hSCManager
);
Parâmetros
[in] hSCManager
Um identificador para o banco de dados SCM. Esse identificador é retornado pela função OpenSCManager e deve ter o acesso SC_MANAGER_LOCK correto. Para obter mais informações, consulte Segurança do serviço e Direitos de Acesso.
Retornar valor
Se a função for bem-sucedida, o valor retornado será um bloqueio para o banco de dados SCM especificado.
Se a função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.
Os códigos de erro a seguir podem ser definidos pelo SCM. Outros códigos de erro podem ser definidos por funções do Registro que são chamadas pelo SCM.
Código de retorno | Descrição |
---|---|
|
O identificador não tem o acesso de SC_MANAGER_LOCK correto. |
|
O identificador especificado não é válido. |
|
O banco de dados está bloqueado. |
Comentários
Um bloqueio é um protocolo usado por programas de configuração e configuração e o SCM para serializar o acesso à árvore de serviço no Registro. A única vez que o SCM solicita a propriedade do bloqueio é quando ele está iniciando um serviço.
Um programa que adquire o bloqueio de banco de dados do SCM e falha ao liberá-lo impede que o SCM inicie outros serviços. Devido à gravidade desse problema, os processos não têm mais permissão para bloquear o banco de dados. Para compatibilidade com aplicativos mais antigos, a função LockServiceDatabase retorna um bloqueio, mas não tem outro efeito.
Windows Server 2003 e Windows XP: A aquisição do bloqueio do banco de dados SCM impede que o SCM inicie um serviço até que o bloqueio seja liberado. Por exemplo, um programa que deve configurar vários serviços relacionados antes que qualquer um deles seja iniciado pode chamar LockServiceDatabase antes de configurar o primeiro serviço. Como alternativa, ele pode garantir que nenhum dos serviços seja iniciado até que a configuração seja concluída.
Uma chamada para a função StartService para iniciar um serviço em um banco de dados bloqueado falha. Nenhuma outra função SCM é afetada por um bloqueio.
O bloqueio é mantido até que o identificador SC_LOCK seja especificado em uma chamada subsequente para a função UnlockServiceDatabase . Se um processo que possui um bloqueio for encerrado, o SCM limpará automaticamente e liberará a propriedade do bloqueio.
A falha ao liberar o bloqueio pode causar problemas no sistema. Um processo que adquire o bloqueio deve liberá-lo o mais rápido possível.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winsvc.h (inclua Windows.h) |
Biblioteca | Advapi32.lib |
DLL | Advapi32.dll |