Compartilhar via


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
ERROR_ACCESS_DENIED
O identificador não tem o acesso de SC_MANAGER_LOCK correto.
ERROR_INVALID_HANDLE
O identificador especificado não é válido.
ERROR_SERVICE_DATABASE_LOCKED
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

Confira também

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Configuração de serviço

Funções de serviço

SetServiceObjectSecurity

Startservice

UnlockServiceDatabase