OpenSCManagerA 함수(winsvc.h)
지정된 컴퓨터에서 서비스 제어 관리자에 대한 연결을 설정하고 지정된 서비스 제어 관리자 데이터베이스를 엽니다.
구문
SC_HANDLE OpenSCManagerA(
[in, optional] LPCSTR lpMachineName,
[in, optional] LPCSTR lpDatabaseName,
[in] DWORD dwDesiredAccess
);
매개 변수
[in, optional] lpMachineName
대상 컴퓨터의 이름입니다. 포인터가 NULL이거나 빈 문자열을 가리키는 경우 함수는 로컬 컴퓨터의 서비스 제어 관리자에 연결됩니다.
[in, optional] lpDatabaseName
서비스 제어 관리자 데이터베이스의 이름입니다. 이 매개 변수는 SERVICES_ACTIVE_DATABASE 설정해야 합니다. NULL인 경우 기본적으로 SERVICES_ACTIVE_DATABASE 데이터베이스가 열립니다.
[in] dwDesiredAccess
서비스 제어 관리자에 대한 액세스 권한입니다. 액세스 권한 목록은 서비스 보안 및 액세스 권한을 참조하세요.
요청된 액세스 권한을 부여하기 전에 시스템은 서비스 제어 관리자와 연결된 보안 설명자의 임의 액세스 제어 목록에 대해 호출 프로세스의 액세스 토큰을 확인합니다.
SC_MANAGER_CONNECT 액세스 권한은 이 함수를 호출하여 암시적으로 지정됩니다.
반환 값
함수가 성공하면 반환 값은 지정된 서비스 제어 관리자 데이터베이스에 대한 핸들입니다.
함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
다음 오류 코드는 SCM에서 설정할 수 있습니다. 다른 오류 코드는 SCM에서 호출하는 레지스트리 함수에서 설정할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
요청된 액세스가 거부되었습니다. |
|
지정된 데이터베이스가 없습니다. |
설명
프로세스에서 OpenSCManager 함수를 사용하여 서비스 제어 관리자 데이터베이스에 대한 핸들을 열면 시스템은 요청된 액세스 권한을 부여하기 전에 보안 검사 수행합니다. 자세한 내용은 서비스 보안 및 액세스 권한을 참조하세요.
다른 컴퓨터의 서비스에 연결할 때 현재 사용자에게 적절한 액세스 권한이 없는 경우 OpenSCManager 함수 호출이 실패합니다. 원격으로 서비스에 연결하려면 LOGON32_LOGON_NEW_CREDENTIALS 사용하여 LogonUser 함수를 호출한 다음, OpenSCManager를 호출하기 전에 ImpersonateLoggedOnUser를 호출합니다. 원격으로 서비스에 연결하는 방법에 대한 자세한 내용은 서비스 및 RPC/TCP를 참조하세요.
관리자 권한이 있는 프로세스만 CreateService 함수에서 사용할 수 있는 데이터베이스 핸들을 열 수 있습니다.
반환된 핸들은 OpenSCManager 함수를 호출한 프로세스에 대해서만 유효합니다. CloseServiceHandle 함수를 호출하여 닫을 수 있습니다.
예제
예제는 서비스의 구성 변경을 참조하세요.
참고
winsvc.h 헤더는 OPENSCManager를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winsvc.h(Windows.h 포함) |
라이브러리 | Advapi32.lib |
DLL | Advapi32.dll |