CommandLineEventConsumer 클래스
CommandLineEventConsumer 클래스는 이벤트가 전달될 때 로컬 시스템에서 임의의 프로세스를 시작합니다. 이 클래스는 WMI에서 제공하는 표준 이벤트 소비자 중 하나입니다. 자세한 내용은 표준 소비자를 사용하여 이벤트 모니터링 및 응답을 참조하세요.
참고
CommandLineEventConsumer 클래스를 사용하는 경우, 시작할 실행 파일을 보호합니다. 실행 파일이 안전한 위치에 있지 않거나 강력한 ACL(액세스 제어 목록)으로 보호되는 경우, 권한 없는 사용자가 실행 파일을 악의적인 실행 파일로 바꿀 수 있습니다. ACL에 대한 자세한 내용은 Microsoft Windows SDK(소프트웨어 개발 키트)의 보안 섹션에서 새 개체에 대한 보안 설명자 만들기를 참조하세요.
구문
[AMENDMENT]
class CommandLineEventConsumer : __EventConsumer
{
uint8 CreatorSID[];
string MachineName;
uint32 MaximumQueueSize;
string CommandLineTemplate;
boolean CreateNewConsole = False;
boolean CreateNewProcessGroup = True;
boolean CreateSeparateWowVdm = False;
boolean CreateSharedWowVdm = False;
string DesktopName;
string ExecutablePath;
uint32 FillAttributes;
boolean ForceOffFeedback = False;
boolean ForceOnFeedback = False;
uint32 KillTimeout = 0;
string Name;
sint32 Priority = 0x20;
boolean RunInteractively = False;
uint32 ShowWindowCommand;
boolean UseDefaultErrorMode = False;
string WindowTitle;
string WorkingDirectory;
uint32 XCoordinate;
uint32 XNumCharacters;
uint32 XSize;
uint32 YCoordinate;
uint32 YNumCharacters;
uint32 YSize;
uint32 FillAttribute;
};
멤버
CommandLineEventConsumer 클래스에는 다음과 같은 유형의 멤버가 있습니다.
속성
CommandLineEventConsumer 클래스에는 다음 속성이 있습니다.
-
CommandLineTemplate
-
-
데이터 형식: string
-
액세스 형식: 읽기 전용
시작할 프로세스를 지정하는 표준 문자열 템플릿입니다. 이 속성은 NULL일 수 있으며 ExecutablePath 속성은 명령줄로 사용됩니다.
-
-
CreateNewConsole
-
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
사용되지 않습니다. 값이 이 속성에 할당되면 추적 메시지가 생성됩니다. 자세한 내용은 WMI 활동 추적을 참조하세요.
-
-
CreateNewProcessGroup
-
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True인 경우 새 프로세스는 새 프로세스 그룹의 루트 프로세스입니다. 프로세스 그룹에는 이 루트 프로세스의 하위 항목인 모든 프로세스가 포함됩니다. 새 프로세스 그룹의 프로세스 식별자는 이 프로세스 식별자와 동일합니다. 프로세스 그룹은 GenerateConsoleCtrlEvent 메서드에서 Ctrl+C 또는 Ctrl+BREAK 신호를 콘솔 프로세스 그룹에 보내는 데 사용됩니다.
-
-
CreateSeparateWowVdm
-
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True인 경우 새 프로세스는 프라이빗 VDM(Virtual DOS Machine)에서 실행됩니다. 16비트 Windows 운영 체제에서 실행되는 애플리케이션을 시작할 때만 적용됩니다. False로 설정하면 16비트 Windows 운영 체제에서 실행되는 모든 애플리케이션은 단일 공유 VDM에서 스레드로 실행됩니다. 자세한 내용은 이 항목의 “주의” 섹션을 참조하세요.
-
-
CreateSharedWowVdm
-
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True인 경우 CreateProcess 메서드는 공유 VDM(Virtual DOS Machine)에서 새 프로세스를 실행합니다. True로 설정된 경우 이 속성은 Win.ini의 Windows 섹션에 있는 DefaultSeparateVDM 스위치를 재정의할 수 있습니다. 자세한 내용은 이 항목의 “주의” 섹션을 참조하세요.
-
-
CreatorSID
-
-
데이터 형식: uint8 배열
-
액세스 형식: 읽기 전용
필터를 만드는 사용자를 고유하게 식별하는 SID(보안 식별자)입니다. WMI는 운영 체제에 따라 __EventConsumer의 인스턴스 또는 관리자 SID를 만드는 사용자의 SID를 저장합니다. 자세한 내용은 논리적 소비자를 사용하여 이벤트 필터 바인딩 및 표준 소비자를 사용하여 이벤트 모니터링 및 응답을 참조하세요.
이 속성은 __EventConsumer에서 상속됩니다.
-
-
DesktopName
-
-
데이터 형식: string
-
액세스 형식: 읽기 전용
사용되지 않습니다. 값이 이 속성에 할당되면 추적 메시지가 생성됩니다. 자세한 내용은 WMI 활동 추적을 참조하세요.
-
-
ExecutablePath
-
-
데이터 형식: string
-
액세스 형식: 읽기 전용
실행할 모듈입니다. 문자열은 실행할 모듈의 전체 경로 및 파일 이름을 지정하거나, 부분 이름을 지정할 수 있습니다. 부분 이름을 지정하면 현재 드라이브와 현재 디렉터리가 가정됩니다.
ExecutablePath 속성은 NULL일 수 있습니다. 이 경우 모듈 이름은 CommandLineTemplate 속성 값의 첫 번째 공백으로 구분된 토큰이어야 합니다. 공백이 포함된 긴 파일 이름을 사용하는 경우, 따옴표로 묶은 문자열을 사용하여 파일 이름이 끝나고 인수가 파일 이름을 명확히 하기 시작하는 위치를 표시합니다.
참고
CommandLineTemplate 속성은 실행할 모듈이 변수에 의해 제공되는 템플릿일 수 있으므로, NULLExecutablePath 속성은 매개 변수에 지정된 모듈을 실행하도록 허용하며, 사용자가 제어할 수 없습니다. 항상 CommandLineEventConsumer 등록에서 ExecutablePath 속성을 설정하여, 이벤트 매개 변수로 덮어쓰는 일을 방지하는 데 필요한 실행 파일을 포함합니다. 템플릿과 변수를 사용하여 실행할 모듈을 지정해야 하는 경우, 네임스페이스에서 전체 쓰기 권한이 부여된 사용자에 주의해야 합니다.
-
-
FillAttribute
-
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
콘솔 애플리케이션에서 새 콘솔 창을 만드는 경우 초기 텍스트 및 배경색을 지정합니다.
-
-
FillAttributes
-
-
데이터 형식: uint32
-
액세스 형식: 읽기/쓰기
콘솔 애플리케이션에서 새 콘솔 창을 만드는 경우의 초기 텍스트 및 배경색입니다. 이 속성은 GUI 애플리케이션에서는 무시됩니다. 이 값은 다음 값의 조합일 수 있습니다.
-
-
1 (0x1)
-
파란색 전경
-
2 (0x2)
-
녹색 전경
-
4 (0x4)
-
빨간색 전경
-
8 (0x8)
-
전경 강도
-
16 (0x10)
-
파란색 배경
-
32 (0x20)
-
녹색 배경
-
64 (0x40)
-
빨간색 배경
-
128 (0x80)
-
배경 강도
예를 들어 다음 조합을 사용하면 빨간색 텍스트가 흰색 배경 위에 생성됩니다.
0x4 | 0x40 | 0x20 | 0x10
또는
0x74
ForceOffFeedback
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True이면 프로세스가 시작되는 동안 피드백 커서가 강제로 꺼집니다. 일반 커서가 표시됩니다.
ForceOnFeedback
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True이면 CreateProcess가 호출된 후 2초 동안 커서가 피드백 모드에 있습니다. 이 2초 동안 프로세스가 첫 번째 GUI 호출을 수행하면, 시스템은 프로세스에 5초를 더 제공합니다. 이 5초 동안 프로세스에 창이 표시되면, 시스템은 프로세스에서 창 그리기를 완료할 수 있도록 5초를 더 제공합니다.
KillTimeout
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
프로세스 0을 종료하기 전에 WMI 서비스가 대기하는 숫자(초)는 프로세스가 종료되지 않음을 나타냅니다. 프로세스 종료는 프로세스가 무기한 실행되는 일을 방지합니다.
MachineName
-
데이터 형식: 문자열
-
액세스 형식: 읽기 전용
WMI(Windows Management Instrumentation)에서 보낸 이벤트를 수신하는 컴퓨터의 이름입니다.
이 속성은 __EventConsumer에서 상속됩니다.
MaximumQueueSize
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
특정 소비자의 최대 큐(바이트)입니다.
이 속성은 __EventConsumer에서 상속됩니다.
이름
-
데이터 형식: 문자열
-
액세스 형식: 읽기 전용
-
한정자: key
소비자의 고유 이름입니다.
우선 순위
-
데이터 형식: sint32
-
액세스 형식: 읽기 전용
프로세스 스레드의 우선 순위 수준을 예약합니다. 다음 목록에는 사용 가능한 우선 순위 수준이 나열되어 있습니다.
32 (0x20)
예약하지 않아도 되는 정상적인 프로세스를 나타냅니다.
64 (0x40)
시스템이 유휴 상태일 때만 실행되며, 우선 순위가 더 높은 클래스에서 실행되는 모든 프로세스의 스레드에 의해 선점되는 스레드를 나타냅니다. 대표적인 예는 화면 보호기가 있습니다. 자식 프로세스는 유휴 우선 순위 클래스를 상속합니다.
128 (0x80)
우선 순위가 높고 시간이 중요한 작업을 수행하는 프로세스를 나타냅니다. 우선 순위가 높은 클래스 프로세스의 스레드는 정상 우선 순위 또는 유휴 우선 순위 클래스 프로세스의 스레드를 선점합니다. 대표적인 예는 시스템 부하에 관계없이 사용자가 호출할 때 신속하게 응답해야 하는 작업 목록입니다. 우선 순위가 높은 클래스를 사용할 때는 대단히 주의해야 합니다. 우선 순위가 높은 클래스가 있는 CPU 바운드 애플리케이션은 사용 가능한 거의 모든 주기를 사용할 수 있기 때문입니다.
256 (0x100)
우선 순위가 가장 높은 프로세스를 나타냅니다. 실시간 우선 순위 클래스 프로세스의 스레드는 중요 작업을 수행하는 운영 체제 프로세스를 포함한 다른 모든 프로세스의 스레드를 선점합니다. 예를 들어 짧은 간격 이상으로 실행되는 실시간 프로세스 때문에 디스크 캐시가 플러시되지 않거나 마우스가 응답하지 않을 수 있습니다.
RunInteractively
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True인 경우 대화형 WinStation에서 프로세스가 시작됩니다. False인 경우 기본 서비스 WinStation에서 프로세스가 시작됩니다. 이 속성은 DesktopName 속성을 재정의합니다. 이 속성은 로컬로만 사용하며, 대화형 사용자가 소비자를 설정한 사용자인 경우에만 사용합니다.
Windows Vista부터는 CommandLineEventConsumer 인스턴스를 실행하는 프로세스가 LocalSystem 계정에서 시작되고 세션 0에 있습니다. 세션 0에서 실행되는 서비스는 사용자 세션과 상호 작용할 수 없습니다.
ShowWindowCommand
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
창 표시 상태입니다. ShowWindow 함수에 대한 nCmdShow 매개 변수에 지정할 수 있는 값이라면 무엇이든 가능합니다.
UseDefaultErrorMode
-
데이터 형식: boolean
-
액세스 형식: 읽기 전용
True인 경우 기본 오류 모드를 사용합니다.
WindowTitle
-
데이터 형식: string
-
액세스 형식: 읽기 전용
프로세스의 제목 표시줄에 표시되는 제목입니다. 이 속성은 GUI 애플리케이션에서는 무시됩니다.
WorkingDirectory
-
데이터 형식: string
-
액세스 형식: 읽기 전용
이 프로세스에 대한 작업 디렉터리입니다.
XCoordinate
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 창이 생성되는 경우 화면 왼쪽 가장자리에서 창의 왼쪽 가장자리까지의 X 오프셋(픽셀 단위)입니다.
XNumCharacters
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 콘솔 창이 생성되는 경우 화면 버퍼 너비(문자 열 단위)입니다. 이 속성은 GUI 프로세스에서는 무시됩니다.
XSize
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 창이 생성되는 경우 새 창의 너비(픽셀 단위)입니다.
YCoordinate
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 창이 생성되는 경우 화면 상단 가장자리에서 창의 상단 가장자리까지의 Y 오프셋(픽셀 단위)입니다.
YNumCharacters
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 콘솔 창이 생성되는 경우 화면 버퍼 높이(문자 행 단위)입니다. 이 속성은 GUI 프로세스에서는 무시됩니다.
YSize
-
데이터 형식: uint32
-
액세스 형식: 읽기 전용
새 창이 생성되는 경우 새 창의 높이(픽셀 단위)입니다.
설명
CommandLineEventConsumer 클래스는 __EventConsumer 추상 클래스에서 파생됩니다.
CreateSeparateWowVdm 속성은 새 프로세스가 프라이빗 VDM(Virtual DOS Machine)에서 실행되는지 여부를 나타냅니다. 별도 실행의 장점은 충돌 시 단일 VDM만 종료된다는 것입니다. 고유한 VDM에서 실행되는 프로그램은 계속 정상적으로 작동하며, 별도의 VDM에서 실행되는 16비트 Windows 기반 애플리케이션에는 별도의 입력 큐가 존재합니다. 따라서 한 애플리케이션이 일시적으로 응답을 중지하면 별도의 VDM에 있는 애플리케이션이 계속해서 입력을 받습니다. 별도 실행의 단점은 실행 시 메모리가 훨씬 더 많이 필요하다는 것입니다. 사용자가 자체 VDM에서 16비트 Windows 기반 애플리케이션을 실행하도록 요청하는 경우에만 이 속성을 True로 설정해야 합니다.
참고
CommandLineEventConsumer는 the CreateProcess 메서드를 내부적으로 사용하고, ExecutablePath 및 CommandLineTemplate 속성을 lpApplicationName 및 lpCommandLine 속성으로 전달합니다. 다음 MOF(Managed Object Format) 코드 예제에서는 CommandLineEventConsumer를 올바르게 사용하지 않습니다.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};
CreateProcess 메서드는 lpCommandLine을 argv[0]
, argv[1]
등으로 전달합니다. 16비트 애플리케이션용 argv[0]
는 실행 파일 이름에 예약되므로, 이전 MOF 코드는 명령 프롬프트에 다음 명령을 입력했을 때와 동일한 프로세스를 생성합니다. c:\windows\system32\cscript.exe param1 param2
이전 명령은 Cscript.exe가 argv[0]
을 확인하지 않기 때문에 성공하지 못하며, 따라서 자체 이름이 아닌 다른 이름("c:\\scripts\\MyScript.js")을 포함한다는 사실을 인식하지 못합니다. 다음 예제에서는 CommandLineEventConsumer의 권장 사용 방법을 확인할 수 있습니다.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
"C:\\scripts\\MyScript.js param1 param2";
};
이전 CommandLineEventConsumer 사용은 명령 프롬프트에 다음 명령을 입력했을 때와 동일한 프로세스를 생성합니다. c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2
"c:\\scripts\\MyScript.js"이 이제 argv[1]
이므로, Cscript.exe에서 이를 확인하고 명령이 성공하게 됩니다.
자세한 내용은 CreateProcess 함수를 참조하세요.
예제
CommandLineEventConsumer를 사용하여 소비자를 만드는 예제는 이벤트에 따라 명령줄에서 프로그램 실행을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows Vista |
지원되는 최소 서버 |
Windows Server 2008 |
네임스페이스 |
Root\subscription |
MOF |
|
DLL |
|