Share via


LockServiceDatabase 함수(winsvc.h)

[Windows Vista를 기준으로 이 함수는 애플리케이션 호환성을 위해 제공되며 데이터베이스에 영향을 주지 않습니다.]

SCM(서비스 제어 관리자) 데이터베이스 잠금의 소유권을 요청합니다. 지정된 시간에는 하나의 프로세스만 잠금을 소유할 수 있습니다.

구문

SC_LOCK LockServiceDatabase(
  [in] SC_HANDLE hSCManager
);

매개 변수

[in] hSCManager

SCM 데이터베이스에 대한 핸들입니다. 이 핸들은 OpenSCManager 함수에서 반환되며 SC_MANAGER_LOCK 액세스 권한이 있어야 합니다. 자세한 내용은 서비스 보안 및 액세스 권한을 참조하세요.

반환 값

함수가 성공하면 반환 값은 지정된 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 함수는 잠금의 영향을 받지 않습니다.

잠금은 unlockServiceDatabase 함수에 대한 후속 호출에서 SC_LOCK 핸들이 지정될 때까지 유지됩니다. 잠금을 소유하는 프로세스가 종료되면 SCM은 잠금의 소유권을 자동으로 정리하고 해제합니다.

잠금을 해제하지 못하면 시스템 문제가 발생할 수 있습니다. 잠금을 획득하는 프로세스는 가능한 한 빨리 잠금을 해제해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winsvc.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

서비스 구성

서비스 함수

SetServiceObjectSecurity

StartService

UnlockServiceDatabase