프로세스 만들기 플래그

다음 프로세스 만들기 플래그는 CreateProcess, CreateProcessAsUser, CreateProcessWithLogonWCreateProcessWithTokenW 함수에서 사용됩니다. 명시된 경우를 제외하고 모든 조합으로 지정할 수 있습니다.

예제

     BOOL creationResult;
    
    creationResult = CreateProcess(
        NULL,                   // No module name (use command line)
        cmdLine,                // Command line
        NULL,                   // Process handle not inheritable
        NULL,                   // Thread handle not inheritable
        FALSE,                  // Set handle inheritance to FALSE
        NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, // creation flags
        NULL,                   // Use parent's environment block
        NULL,                   // Use parent's starting directory 
        &startupInfo,           // Pointer to STARTUPINFO structure
        &processInformation);   // Pointer to PROCESS_INFORMATION structure

GitHub의 Windows 클래식 샘플 예제입니다.

플래그

상수/값 설명
CREATE_BREAKAWAY_FROM_JOB
0x01000000
작업과 연결된 프로세스의 자식 프로세스는 작업과 연결되지 않습니다.
호출 프로세스가 작업과 연결되지 않은 경우 이 상수는 영향을 주지 않습니다. 호출 프로세스가 작업과 연결된 경우 작업은 JOB_OBJECT_LIMIT_BREAKAWAY_OK 제한을 설정해야 합니다.
CREATE_DEFAULT_ERROR_MODE
0x04000000
새 프로세스는 호출 프로세스의 오류 모드를 상속하지 않습니다. 대신 새 프로세스는 기본 오류 모드를 가져옵니다.
이 기능은 하드 오류가 사용하지 않도록 설정된 상태에서 실행되는 다중 스레드 셸 애플리케이션에 특히 유용합니다.
기본 동작은 새 프로세스가 호출자의 오류 모드를 상속하는 것입니다. 이 플래그를 설정하면 기본 동작이 변경됩니다.
CREATE_NEW_CONSOLE
0x00000010
새 프로세스에는 부모의 콘솔(기본값)을 상속하는 대신 새 콘솔이 있습니다. 자세한 내용은 콘솔 만들기를 참조하세요.
이 플래그는 DETACHED_PROCESS 사용할 수 없습니다.
CREATE_NEW_PROCESS_GROUP
0x00000200
새 프로세스는 새 프로세스 그룹의 루트 프로세스입니다. 프로세스 그룹에는 이 루트 프로세스의 하위 항목인 모든 프로세스가 포함됩니다. 새 프로세스 그룹의 프로세스 식별자는 lpProcessInformation 매개 변수에 반환되는 프로세스 식별자와 동일합니다. 프로세스 그룹은 GenerateConsoleCtrlEvent 함수에서 Ctrl +BREAK 신호를 콘솔 프로세스 그룹으로 보낼 수 있도록 하는 데 사용됩니다.
이 플래그를 지정하면 새 프로세스 그룹 내의 모든 프로세스에 대해 Ctrl+C 신호가 비활성화됩니다.
이 플래그는 CREATE_NEW_CONSOLE 사용하여 지정한 경우 무시됩니다.
CREATE_NO_WINDOW
0x08000000
이 프로세스는 콘솔 창 없이 실행되는 콘솔 애플리케이션입니다. 따라서 애플리케이션에 대한 콘솔 핸들이 설정되지 않았습니다.
이 플래그는 애플리케이션이 콘솔 애플리케이션이 아니거나 CREATE_NEW_CONSOLE 또는DETACHED_PROCESS 함께 사용되는 경우 무시됩니다.
CREATE_PROTECTED_PROCESS
0x00040000
프로세스는 보호된 프로세스로 실행되어야 합니다. 시스템은 보호된 프로세스 및 보호된 프로세스의 스레드에 대한 액세스를 제한합니다. 프로세스가 보호된 프로세스와 상호 작용하는 방법에 대한 자세한 내용은 프로세스 보안 및 액세스 권한을 참조하세요.
보호된 프로세스를 활성화하려면 이진 파일에 특별한 서명이 있어야 합니다. 이 서명은 Microsoft에서 제공되지만 현재 타사 이진 파일에는 사용할 수 없습니다. 현재 미디어 파운데이션, 오디오 엔진, Windows 오류 보고 및 시스템의 네 가지 보호된 프로세스가 있습니다. 이러한 이진 파일에 로드하는 구성 요소도 서명해야 합니다. 멀티미디어 회사는 처음 두 개의 보호된 프로세스를 활용할 수 있습니다. 자세한 내용은 보호된 미디어 경로 개요를 참조하세요.
Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
호출자가 일반적으로 프로세스에 자동으로 적용되는 프로세스 제한을 무시하는 자식 프로세스를 실행할 수 있습니다.
CREATE_SECURE_PROCESS
0x00400000
이 플래그를 사용하면 Virtualization-Based 보안 환경에서 실행되는 보안 프로세스를 시작할 수 있습니다.
CREATE_SEPARATE_WOW_VDM
0x00000800
이 플래그는 16비트 Windows 기반 애플리케이션을 시작할 때만 유효합니다. 설정되면 새 프로세스가 프라이빗 VDM(Virtual DOS Machine)에서 실행됩니다. 기본적으로 모든 16비트 Windows 기반 애플리케이션은 단일 공유 VDM에서 스레드로 실행됩니다. 별도로 실행하면 크래시가 단일 VDM만 종료된다는 장점이 있습니다. 고유한 VDM에서 실행되는 다른 모든 프로그램은 정상적으로 작동합니다. 또한 별도의 VDM에서 실행되는 16비트 Windows 기반 애플리케이션에는 별도의 입력 큐가 있습니다. 즉, 한 애플리케이션이 일시적으로 응답을 중지하는 경우 별도의 VDM의 애플리케이션은 계속해서 입력을 받습니다. 별도 실행의 단점은 실행 시 메모리가 훨씬 더 많이 필요하다는 것입니다. 사용자가 16비트 애플리케이션이 자체 VDM에서 실행되도록 요청하는 경우에만 이 플래그를 사용해야 합니다.
CREATE_SHARED_WOW_VDM
0x00001000
플래그는 16비트 Windows 기반 애플리케이션을 시작할 때만 유효합니다. WIN.INI Windows 섹션의 DefaultSeparateVDM 스위치가 TRUE이면 이 플래그가 스위치를 재정의합니다. 새 프로세스는 공유 Virtual DOS 컴퓨터에서 실행됩니다.
CREATE_SUSPENDED
0x00000004
새 프로세스의 기본 스레드는 일시 중단된 상태로 만들어지고 ResumeThread 함수가 호출될 때까지 실행되지 않습니다.
CREATE_UNICODE_ENVIRONMENT
0x00000400
이 플래그가 설정되면 lpEnvironment 에서 가리키는 환경 블록은 유니코드 문자를 사용합니다. 그렇지 않으면 환경 블록은 ANSI 문자를 사용합니다.
DEBUG_ONLY_THIS_PROCESS
0x00000002
호출 스레드가 시작되고 새 프로세스를 디버그합니다. WaitForDebugEvent 함수를 사용하여 모든 관련 디버그 이벤트를 수신할 수 있습니다.
DEBUG_PROCESS
0x00000001
호출 스레드는 새 프로세스와 새 프로세스에서 만든 모든 자식 프로세스를 시작하고 디버그합니다. WaitForDebugEvent 함수를 사용하여 모든 관련 디버그 이벤트를 수신할 수 있습니다.
DEBUG_PROCESS 사용하는 프로세스는 디버깅 체인의 루트가 됩니다. 이 작업은 체인의 다른 프로세스가 DEBUG_PROCESS 사용하여 생성될 때까지 계속됩니다.
이 플래그가 DEBUG_ONLY_THIS_PROCESS 결합된 경우 호출자는 자식 프로세스가 아닌 새 프로세스만 디버그합니다.
DETACHED_PROCESS
0x00000008
콘솔 프로세스의 경우 새 프로세스는 부모의 콘솔(기본값)을 상속하지 않습니다. 새 프로세스는 나중에 AllocConsole 함수를 호출하여 콘솔을 만들 수 있습니다. 자세한 내용은 콘솔 만들기를 참조하세요.
이 값은 CREATE_NEW_CONSOLE 사용할 수 없습니다.
EXTENDED_STARTUPINFO_PRESENT
0x00080000
프로세스는 확장된 시작 정보를 사용하여 만들어집니다. lpStartupInfo 매개 변수는 STARTUPINFOEX 구조를 지정합니다.
Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.
INHERIT_PARENT_AFFINITY
0x00010000
프로세스는 부모의 선호도를 상속합니다. 부모 프로세스에 둘 이상의 프로세서 그룹에 스레드가 있는 경우 새 프로세스는 부모가 사용 중인 임의의 그룹의 그룹 상대 선호도를 상속합니다.
Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.

설명

32비트 Windows에서 16비트 애플리케이션은 개별 프로세스로 실행되지 않고 ntvdm.exe 시뮬레이션됩니다. 따라서 프로세스 만들기 플래그는 ntvdm.exe에 적용됩니다. ntvdm.exe 처음 16비트 애플리케이션을 실행한 후에도 유지되므로 다른 16비트 애플리케이션을 시작하면 새 ntvdm.exe 만드는 CREATE_NEW_CONSOLECREATE_SEPARATE_WOW_VDM 제외하고 새 만들기 플래그가 적용되지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2003 [데스크톱 앱만 해당]
헤더
WinBase.h(Windows.h 포함)