Win32_Service 클래스의 메서드 변경(Mbnapi.h)
변경WMI 클래스 메서드는 Win32_Service 수정합니다.
이 항목에서는 MOF(Managed Object Format) 구문을 사용합니다. 이 메서드를 사용하는 방법에 대한 자세한 내용은 메서드 호출을 참조하세요.
구문
uint32 Change(
[in] string DisplayName,
[in] string PathName,
[in] uint32 ServiceType,
[in] uint32 ErrorControl,
[in] string StartMode,
[in] boolean DesktopInteract,
[in] string StartName,
[in] string StartPassword,
[in] string LoadOrderGroup,
[in] string LoadOrderGroupDependencies[],
[in] string ServiceDependencies[]
);
매개 변수
-
DisplayName [in]
-
서비스의 표시 이름입니다. 이 문자열의 최대 길이는 256자입니다. 이름은 서비스 제어 관리자에 유지되는 대/소문자입니다. DisplayName 비교는 항상 대/소문자를 구분하지 않습니다.
제약 조건: Name 속성과 동일한 값을 허용합니다.
예: "Atdisk".
-
PathName [in]
-
서비스를 구현하는 실행 파일의 정규화된 경로입니다(예: "\SystemRoot\System32\drivers\afd.sys").
-
ServiceType [in]
-
호출하는 프로세스에 제공되는 서비스 유형입니다.
-
1(0x1)
-
커널 드라이버
-
2(0x2)
-
파일 시스템 드라이버
-
4(0x4)
-
어댑터
-
8(0x8)
-
Recognizer 드라이버
-
16(0x10)
-
자체 프로세스
-
32(0x20)
-
프로세스 공유
-
256 (0x100)
-
대화형 프로세스
ErrorControl [in]
시작 중에 이 서비스가 시작되지 않는 경우 오류의 심각도입니다. 값은 오류가 발생하는 경우 시작 프로그램에서 수행한 작업을 나타냅니다. 모든 오류는 시스템에 의해 기록됩니다.
무시 (0)
사용자에게 오류를 알리지 않습니다.
보통 (1)
일반 파일입니다. 사용자에게 오류를 알립니다.
심각 (2)
시스템이 마지막으로 양좋은 구성으로 다시 시작됩니다.
위험 (3)
올바른 구성으로 시스템을 다시 시작합니다.
StartMode [in]
Windows 기본 서비스의 시작 모드입니다. 자세한 내용은 주의 섹션을 참조하세요.
부팅
운영 체제 로더에서 시작한 디바이스 드라이버입니다. 이 값은 드라이버 서비스에 대해서만 유효합니다.
시스템
운영 체제 초기화 프로세스에서 시작된 디바이스 드라이버입니다. 이 값은 드라이버 서비스에 대해서만 유효합니다.
자동
시스템 시작 중에 Service Control Manager에서 자동으로 시작하는 서비스입니다.
수동
프로세스가 StartService 메서드를 호출할 때 Service Control Manager에서 시작할 서비스입니다.
사용 안 함
더 이상 시작할 수 없는 서비스입니다.
DesktopInteract [in]
True이면 서비스가 바탕 화면의 창을 만들거나 통신할 수 있습니다.
StartName [in]
서비스가 실행되는 계정 이름입니다. 서비스 유형에 따라 계정 이름은 DomainName\Username 또는 .\Username 형식일 수 있습니다. 서비스 프로세스는 실행될 때 이러한 두 가지 양식 중 하나를 사용하여 기록됩니다. 계정이 기본 제공 도메인에 속하는 경우 .\Username을 지정할 수 있습니다. NULL을 지정하면 서비스가 LocalSystem 계정으로 로그온됩니다. 커널 또는 시스템 수준 드라이버의 경우 StartName 에는 I/O(입력 및 출력) 시스템이 디바이스 드라이버를 로드하는 데 사용하는 드라이버 개체 이름(즉, \FileSystem\Rdr 또는 \Driver\Xns)이 포함됩니다. NULL을 지정하면 드라이버가 서비스 이름(예: "DWDOM\관리")을 기반으로 I/O 시스템에서 만든 기본 개체 이름으로 실행됩니다.
UPN(사용자 계정 이름) 형식을 사용하여 StartName(예: Username@DomainName)을 지정할 수도 있습니다.
StartPassword [in]
StartName 매개 변수로 지정된 계정 이름에 대한 암호입니다. 암호를 변경하지 않는 경우 NULL 을 지정합니다. 서비스에 암호가 없으면 빈 문자열을 지정합니다.
참고
로컬 시스템에서 네트워크로 또는 네트워크에서 로컬 시스템으로 서비스를 변경하는 경우 StartPassword 는 NULL이 아닌 빈 문자열("")이어야 합니다.
LoadOrderGroup [in]
연결된 그룹 이름입니다. 로드 순서 그룹은 시스템 레지스트리에 포함되며 서비스가 운영 체제에 로드되는 순서를 결정합니다. 포인터가 NULL이거나 빈 문자열을 가리키는 경우 서비스는 그룹에 속하지 않습니다. 자세한 내용은 주의 섹션을 참조하세요.
그룹 간의 종속성은 LoadOrderGroupDependencies 매개 변수에 나열되어야 합니다. 부하 순서 그룹 목록의 서비스가 먼저 시작되고, 그 다음에는 부하 순서 그룹 목록에 없는 그룹의 서비스, 그룹에 속하지 않는 서비스가 차례로 시작됩니다. 시스템 레지스트리에는 다음 위치에 있는 부하 순서 그룹 목록이 있습니다.
Hkey_local_machine\시스템\CurrentControlSet\컨트롤\ServiceGroupOrder
LoadOrderGroupDependencies [in]
이 서비스가 시작되기 전에 시작해야 하는 부하 순서 그룹 목록입니다. 배열은 이중 null로 종료됩니다. 포인터가 NULL이거나 빈 문자열을 가리키는 경우 서비스에 종속성이 없습니다. 서비스 및 서비스 그룹이 동일한 네임스페이스를 공유하므로 서비스 이름과 구분하려면 그룹 이름 앞에 SC_GROUP_IDENTIFIER (Winsvc.h 파일에 정의됨) 문자가 접두사로 지정되어야 합니다. 그룹에 대한 종속성은 그룹의 모든 멤버를 시작하려고 시도한 후 그룹의 구성원 중 하나 이상이 실행되는 경우 이 서비스를 실행할 수 있음을 의미합니다.
ServiceDependencies [in]
이 서비스가 시작되기 전에 시작해야 하는 서비스 이름이 포함된 목록입니다. 배열은 두 배로 NULL로 종료됩니다. 포인터가 NULL이거나 빈 문자열을 가리키는 경우 서비스에 종속성이 없습니다. 서비스에 대한 종속성은 종속된 서비스가 실행 중인 경우에만 이 서비스를 실행할 수 있음을 나타냅니다.
반환 값
다음 목록에 나열된 값 중 하나 또는 오류를 나타내는 다른 값을 반환합니다. 추가 오류 코드는 WMI 오류 상수 또는 WbemErrorEnum을 참조하세요. 일반적인 HRESULT 값은시스템 오류 코드를 참조하세요.
-
Success
-
0
요청이 수락되었습니다.
-
지원 안 됨
-
1
요청이 지원되지 않습니다.
-
액세스 거부됨
-
2
사용자에게 필요한 액세스 권한이 없습니다.
-
실행 중인 종속 서비스
-
3
실행 중인 다른 서비스가 이 서비스에 종속되어 있어서 이 서비스를 중지할 수 없습니다.
-
잘못된 서비스 제어
-
4
요청한 제어 코드가 잘못되었거나 서비스에 사용할 수 없습니다.
-
서비스에서 제어를 수락할 수 없음
-
5
요청된 제어 코드는 서비스 상태(Win32_BaseService 때문에 서비스로 보낼 수 없습니다. State 속성)은 0, 1 또는 2와 같습니다.
-
서비스가 활성화되지 않음
-
6
서비스가 시작되지 않았습니다.
-
서비스 요청 시간 제한
-
7
서비스가 시작 요청에 시기 적절하게 응답하지 않았습니다.
-
알 수 없는 오류
-
8
서비스를 시작할 때 알 수 없는 오류입니다.
-
경로를 찾을 수 없음
-
9
서비스 실행 파일의 디렉터리 경로를 찾을 수 없습니다.
-
이미 실행 중인 서비스
-
10
서비스가 이미 실행되고 있습니다.
-
서비스 데이터베이스 잠금
-
11
새 서비스를 추가할 데이터베이스가 잠겨 있습니다.
-
서비스 종속성 삭제됨
-
12
이 서비스가 사용하는 종속성이 시스템에서 제거되었습니다.
-
서비스 종속성 오류
-
13
종속 서비스에서 필요한 서비스를 찾지 못했습니다.
-
서비스 사용 안 함
-
14
서비스가 시스템에서 비활성화되었습니다.
-
서비스 로그온 실패
-
15
서비스에 시스템에서 실행하기 위한 올바른 인증이 없습니다.
-
삭제로 표시된 서비스
-
16
이 서비스는 시스템에서 제거되고 있습니다.
-
서비스 스레드 없음
-
17
서비스에 실행 스레드가 없습니다.
-
상태 순환 종속성
-
18
서비스가 시작될 때 순환 종속성이 있습니다.
-
상태 중복 이름
-
19
서비스가 동일한 이름으로 실행되고 있습니다.
-
상태가 잘못된 이름
-
20
서비스 이름에 잘못된 문자가 있습니다.
-
상태가 잘못된 매개 변수
-
21
잘못된 매개 변수가 서비스에 전달되었습니다.
-
상태가 잘못된 서비스 계정
-
22
이 서비스가 실행되는 계정이 잘못되었거나 서비스를 실행할 수 있는 권한이 없습니다.
-
상태 서비스 존재
-
23
서비스가 시스템에서 사용할 수 있는 서비스 데이터베이스에 있습니다.
-
서비스가 이미 일시 중지됨
-
24
서비스가 현재 시스템에서 일시 중지되었습니다.
-
기타
-
25 4294967295
설명
컴퓨터가 시작되면 모든 자동 시작 서비스도 시작됩니다. 경우에 따라 이러한 서비스 중 하나가 컴퓨터와 함께 시작되지 않을 수 있습니다. 시스템 시작 중에 서비스가 실패하면 컴퓨터는 서비스 오류 제어 코드의 값에 따라 작업을 수행합니다.
대부분의 서비스는 일반 오류 제어 코드를 사용하여 설치됩니다. 오류 무시 코드를 사용하여 설치되는 몇 가지 예외는 다음과 같습니다.
- 파일 복제 서비스
- 스마트 카드
- 보조 타일
- WMI
오류 무시 코드를 사용하여 설치된 서비스의 경우 사용자에게 서비스가 실패했음을 알리는 알림이 제공되지 않습니다. 서비스를 시작할 수 없다는 화면 알림을 선호하는 경우 WMI를 사용하여 오류 제어 코드를 변경할 수 있습니다. 오류 제어 코드는 컴퓨터 시작에만 적용됩니다. 컴퓨터를 실행한 후 서비스를 중지하고 다시 시작하려고 하면 오류 제어 코드가 사용되지 않습니다.
경우에 따라 지정된 서비스가 실행되는 계정을 변경해야 할 수 있습니다. 예를 들어 관리 계정으로 서비스를 실행할 수 있습니다. 이로 인해 보안 취약성이 발생할 수 있으므로 권한이 적은 계정으로 서비스를 전환할 수 있습니다. 또는 삭제할 계정으로 실행되는 서비스가 있거나 모든 서버에서 특정 서비스가 특정 계정에서 실행되도록 할 수 있습니다. Win32_Service 클래스의 Change 메서드를 사용하여 지정된 사용자 계정으로 실행되도록 서비스를 구성할 수 있습니다. 계정을 선택할 때 다음 사항에 유의하세요.
서비스 계정으로 사용되는 계정에는 서비스로 로그온할 수 있는 권한이 있어야 합니다. 이 권한은 그룹 정책 사용하여 부여할 수 있습니다.
서비스 계정으로 사용되는 계정은 로컬, 도메인 또는 엔터프라이즈 관리자 그룹의 구성원이 아니어야 합니다.
서비스의 각 instance 고유한 사용자 계정으로 실행되어야 합니다. 이렇게 하면 추가 보안이 제공되고 개별 서비스 인스턴스를 감사할 수 있습니다.
서비스가 대화형인 경우 서비스는 LocalSystem 계정으로 실행되어야 합니다.
한 번에 하나의 창 스테이션(WinSta0)만 표시하고 대화형으로 표시할 수 있으므로 LocalSystem이 필요합니다. 서비스가 LocalSystem 이외의 계정으로 실행되는 경우 보이지 않는 창인 Service-0x03e7$\Default 창 스테이션에서 실행됩니다. 이 창 스테이션에서 실행되는 서비스는 입력 또는 표시 출력을 받을 수 없습니다.
서비스에 계정을 할당할 때 SCM은 할당하기 전에 해당 계정에 대한 올바른 암호가 필요합니다. 잘못된 암호를 제공하면 SCM에서 계정을 거부합니다. LocalSystem, LocalService 또는 NetworkService 계정을 사용하여 서비스 계정을 구성하는 경우 이러한 계정에는 암호가 없으므로 계정 암호를 제공할 필요가 없습니다.
SCM은 서비스 데이터베이스에 계정 암호를 저장합니다. 그러나 암호가 할당된 후 SCM은 서비스 데이터베이스에 저장된 암호와 Active Directory의 사용자 계정에 할당된 암호가 계속 일치하도록 보장하지 않습니다. 따라서 다음과 유사한 상황이 발생할 수 있습니다.
- 특정 사용자 계정으로 실행되도록 서비스를 구성합니다.
- 서비스는 현재 계정 암호를 사용하여 해당 계정에서 시작됩니다.
- 사용자 계정의 암호를 변경합니다.
- 서비스가 계속 실행됩니다. 그러나 서비스가 중지되면 SCM이 이전의 잘못된 암호를 계속 사용하기 때문에 서비스를 다시 시작할 수 없습니다. Active Directory에서 암호를 변경해도 서비스 데이터베이스에 저장된 암호는 변경되지 않습니다.
일반 사용자 계정으로 서비스를 실행하는 경우 사용자 계정 암호가 변경 될 때마다 해당 서비스 암호를 업데이트해야 합니다. 해당 계정으로 실행 중인 서비스 또는 해당 계정으로 실행되는 서비스가 있는 컴퓨터를 잘 모르는 경우 특히 시간이 오래 걸릴 수 있습니다. 다행히 WMI를 사용하여 모든 컴퓨터에서 서비스 계정을 검사 필요한 경우 서비스 계정 암호를 변경할 수 있습니다.
Win32_LoadOrderGroup 매개 변수는 실행 종속성을 정의하는 시스템 서비스 그룹을 나타냅니다. 서비스는 서로 의존하기 때문에 부하 주문 그룹에서 지정한 순서대로 서비스를 시작해야 합니다. 이러한 종속 서비스를 사용하려면 선행 서비스가 올바르게 작동해야 합니다.
네트워크 서비스에서 로컬 시스템으로 서비스를 변경하려면 StartName 및 StartPassword 매개 변수에 다음 값이 있어야 합니다.
StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL
로컬 시스템 서비스에서 네트워크로 서비스를 변경하려면 StartName 및 StartPassword 매개 변수에 다음 값이 있어야 합니다.
StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL
예제
다음 VBScript는 서비스에 대한 서비스 계정을 지정된 사용자 계정으로 실행 중에서 LocalSystem으로 변경합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
errServiceChange = objService.Change( , , , , , , ".\LocalSystem" , "")
Next
다음 VBScript는 Netsvc에서 실행되는 모든 스크립트의 서비스 계정 암호를 변경합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , , , "password")
Next
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows Vista |
지원되는 최소 서버 |
Windows Server 2008 |
네임스페이스 |
Root\CIMV2 |
헤더 |
|
MOF |
|
DLL |
|