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 함수를 사용하여 서비스 제어 관리자 데이터베이스에 대한 핸들을 열면 요청된 액세스 권한을 부여하기 전에 시스템에서 보안 검사를 수행합니다. 자세한 내용은 Service Security and Access Rights참조하세요.
다른 컴퓨터의 서비스에 연결할 때 현재 사용자에게 적절한 액세스 권한이 없으면 OpenSCManager 함수 호출이 실패합니다. 서비스에 원격으로 연결하려면 LOGON32_LOGON_NEW_CREDENTIALS LogonUser 함수를 호출한 다음 OpenSCManager호출하기 전에 ImpersonateLoggedOnUser 호출합니다. 원격으로 서비스에 연결하는 방법에 대한 자세한 내용은 Services 및 RPC/TCP참조하세요.
관리자 권한이 있는 프로세스만 CreateService 함수에서 사용할 수 있는 데이터베이스 핸들을 열 수 있습니다.
반환된 핸들은 OpenSCManager 함수를 호출한 프로세스에만 유효합니다. CloseServiceHandle 함수를 호출하여 닫을 수 있습니다.
예제
예를 들어 서비스의 구성변경합니다.
메모
winsvc.h 헤더는 OPENSCManager를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winsvc.h(Windows.h 포함) |
라이브러리 | Advapi32.lib |
DLL | Advapi32.dll |
참고 항목
CloseServiceHandle
CreateService
OpenService