Поделиться через


Функция LockServiceDatabase (winsvc.h)

[В Windows Vista эта функция предоставляется для обеспечения совместимости приложений и не оказывает влияния на базу данных.]

Запрашивает блокировку базы данных диспетчера управления службами (SCM). Только один процесс может владеть блокировкой в любое указанное время.

Синтаксис

SC_LOCK LockServiceDatabase(
  [in] SC_HANDLE hSCManager
);

Параметры

[in] hSCManager

Дескриптор базы данных SCM. Этот дескриптор возвращается функцией OpenSCManager и должен иметь право доступа SC_MANAGER_LOCK . Дополнительные сведения см. в разделе Service Security and Access Rights.

Возвращаемое значение

Если функция выполняется успешно, возвращаемым значением будет блокировка указанной базы данных SCM.

Если функция завершается сбоем, возвращается значение NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

SCM может задать следующие коды ошибок. Другие коды ошибок могут задаваться функциями реестра, которые вызываются SCM.

Код возврата Описание
ERROR_ACCESS_DENIED
Дескриптор не имеет права доступа к SC_MANAGER_LOCK .
ERROR_INVALID_HANDLE
Указанный дескриптор недопустим.
ERROR_SERVICE_DATABASE_LOCKED
База данных заблокирована.

Комментарии

Блокировка — это протокол, используемый программами установки и настройки, а также SCM для сериализации доступа к дереву служб в реестре. Единственный раз, когда SCM запрашивает владение блокировкой, — это запуск службы.

Программа, которая получает блокировку базы данных SCM и не может освободить ее, не позволяет SCM запустить другие службы. Из-за серьезности этой проблемы процессам больше не разрешено блокировать базу данных. Для совместимости со старыми приложениями функция LockServiceDatabase возвращает блокировку, но не оказывает никакого другого эффекта.

Windows Server 2003 и Windows XP: Получение блокировки базы данных SCM предотвращает запуск службы SCM до тех пор, пока блокировка не будет снята. Например, программа, которая должна настроить несколько связанных служб перед запуском любой из них, может вызвать LockServiceDatabase перед настройкой первой службы. Кроме того, он может гарантировать, что ни одна из служб не запущена до завершения настройки.

Сбой вызова функции StartService для запуска службы в заблокированной базе данных. Блокировка не влияет на другие функции SCM.

Блокировка удерживается до тех пор, пока дескриптор SC_LOCK не будет указан в последующем вызове функции UnlockServiceDatabase . Если процесс, владеющий блокировкой, завершается, SCM автоматически очищает и освобождает владение блокировкой.

Сбой снятия блокировки может привести к проблемам в системе. Процесс, который получает блокировку, должен освободить ее как можно скорее.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winsvc.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Конфигурация службы.

Функции службы

SetServiceObjectSecurity

StartService

UnlockServiceDatabase