관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

CreateProcess(A) 본문

API 관련/Win32 API 함수

CreateProcess(A)

님투 2007. 11. 8. 22:44
반응형

CreateProcess(A)

새롭다 1 개의 프로세스와 그 프라이마리스렛드를 작성합니다.새로운 프로세스는, 지정된 실행 가능 파일을 실행합니다.

BOOL CreateProcessA(
    PCTSTR pszApplicationName,       // 실행 파일명
    PTSTR  pszCommandLine,           // 커멘드 라인 파라미터
    PSECURITY_ATTRIBUTES psaProcess, // 프로세스의 보호 속성
    PSECURITY_ATTRIBUTES psaThread,  // 스렛드의 보호 속성
    BOOL   bInheritHandles,          // 오브젝트 핸들 계승의 플래그
    DWORD  fdwCreate,                // 속성 플래그
    PVOID  pvEnvironment,            // 환경 변수 정보에의 포인터
    PCTSTR pszCurDir,                // 기동시 커런트 디렉토리
    LPSTARTUPINFO  psiStartInfo,     // 윈도우 표시 설정
    PPROCESS_INFORMATION ppiProcInfo // 프로세스·스렛드의 정보
);

KERNEL32.DLL

인수

pszApplicationName

기동하는 실행 가능 파일의 파일명을 나타내는 문자열의 주소 지정을 합니다.실행 가능 파일로서 Windows 베이스의 실행 가능 모듈을 지정할 수 있습니다.또, 적절한 하부조직이 로컬 컴퓨터로 이용 가능한 경우는, 다른 타입의 실행 가능 모듈(예를 들면,MS-DOS (이)나 OS/2 )도 지정할 수 있습니다.

파일명이 풀 패스로 지정되어 있지 않을 때는 커런트 디렉토리로부터 로드합니다.검색 패스는 사용되지 않습니다.또, 파일명에 확장자(extension)가 포함되지 않은 경우는, .exe 하지만 부가됩니다.따라서 파일명의 확장자(extension)가 .com 인 경우에는, 확장자(extension)를 포함하지 않으면 안됩니다.

이 파라미터에 0 (NULL) (을)를 지정할 수도 있습니다.이 때는 pszCommandLine 파라미터의 최초의 토큰을 실행 파일명으로서 취급합니다.

16비트의 어플리케이션을 실행하는 경우, 이 파라미터에 0 (NULL) (을)를 지정해,pszCommandLine 파라미터의 최초의 토큰에 실행 가능 모듈의 파일명을 지정하지 않으면 안됩니다.

pszCommandLine

커멘드 라인 파라미터로서 새로운 프로세스에 건네주는 문자열의 주소를 지정합니다.

pszApplicationName 파라미터에 0 (NULL) 하지만 지정되어 있을 때는 이 파라미터의 최초의 토큰이 실행 가능 파일명으로서 다루어집니다.이 경우, 지정한 실행 가능 파일이 풀 패스 지정이 아니면, 어플리케이션이 로드 된 디렉토리, 커런트 디렉토리, 시스템 디렉토리, Windows 디렉토리, 환경 변수 PATH 그리고 지정된 디렉토리의 순서에 검색해, 로드합니다.실행 파일명에 확장자(extension)가 포함되지 않은 경우는 ".EXE" (을)를 부가합니다.다만, 파일명의 최후가 1 개의 피리오드(.)(으)로 끝나 있고 확장자(extension)가 포함되지 않은 경우나, 파일명에 패스가 포함되어 있는 경우에는, ".EXE" (은)는 부가되지 않습니다.

파일명에 직접 패스가 포함되지 않은 경우에는, 이하의 순서로 실행 가능 파일이 검색됩니다.

  1. 어플리케이션이 로드 된 디렉토리
  2. parent process의 커런트 디렉토리
  3. GetSystemDirectory 함수로 취득된다32비트Windows시스템 디렉토리

    Windows 95/98/Me: Windows 시스템 디렉토리

  4. 16비트Windows시스템 디렉토리
  5. GetWindowsDirectory 함수로 취득된다Windows디렉토리
  6. PATH 환경 변수에 포함되는 디렉토리

시스템은, 커멘드 라인 문자열을 파일명과 인수로 나누기 위해서 눌 문자를 추가합니다.이것에 의해, 원의 문자열이 2개의 문자열에 분할되게 됩니다.

psaProcess

돌려주어지는 프로세스 핸들을 child process에 계승할 수 있도록 할지를 지정하기 위한 SECURITY_ATTRIBUTES 구조체에의 포인터를 지정합니다. 0 (NULL) (을)를 지정하면, 핸들은 계승되지 않습니다.

SECURITY_ATTRIBUTES 구조체의 lpSecurityDescriptor 멤버로 시큐러티 기술자를 설정합니다. 0 (NULL) (을)를 지정하면 디폴트의 시큐러티 기술자가 사용됩니다.

psaThread

돌려주어지는 프라이마리스렛드한돌을 child process에 계승할 수 있도록 할지를 지정하기 위한 SECURITY_ATTRIBUTES 구조체에의 포인터를 지정합니다. 0 (NULL) (을)를 지정하면, 핸들은 계승되지 않습니다.

SECURITY_ATTRIBUTES 구조체의 lpSecurityDescriptor 멤버로 시큐러티 기술자를 설정합니다. 0 (NULL) (을)를 지정하면 디폴트의 시큐러티 기술자가 사용됩니다.

bInheritHandles

호출측 프로세스가 가지는 오브젝트의 계승 가능한 핸들을 새로운 프로세스에 계승시킬지를 지정합니다.계승시키는 경우는 1 (TRUE) (을)를, 계승시키지 않는 경우는 0 (FALSE) (을)를 지정합니다.계승된 핸들은, 원의 핸들과 같은 값과 액세스권을 가집니다.

fdwCreate

프로세스의 속성을 지정하기 위한 플래그를 지정합니다.

프로세스 작성에 관한 제어 플래그를 이하의 값의 편성으로 지정합니다.

의미
0x00000001 (DEBUG_PROCESS)

호출 프로세스가 디버거 때 사용합니다.자손 프로세스(디버그 대상)로 디버그 이벤트가 일어나면, parent process(디버거)에 통지됩니다.

Windows 95/98/Me: 새로운 프로세스가16비트 어플리케이션인 경우는, 이 플래그는 무효입니다.

0x00000002 (DEBUG_ONLY_THIS_PROCESS)

이 플래그가 지정되지 않는 경우, 한편, 호출측 프로세스가 디버그 되고 있는 경우에는, 새로운 프로세스도 또 호출해 옆프로세스의 디버거에 의한 디버그 대상이 됩니다.

0x00000004 (CREATE_SUSPENDED)

새로운 프로세스의 프라이마리스렛드를 중지 상태로 기동합니다.중지 상태의 스렛드를 실행시키려면 ResumeThread 함수를 사용합니다.

0x00000008 (DETACHED_PROCESS)

새로운 캐릭터 베이스의 프로세스가 parent process의 콘솔 윈도우를 이용할 수 없게 합니다.이 플래그를 CREATE_NEW_CONSOLE 플래그와 함께 지정할 수 없습니다.

0x00000010 (CREATE_NEW_CONSOLE)

새로운 프로세스를 위해서 새로운 콘솔 윈도우를 작성합니다.이 플래그를 DETACHED_PROCESS 플래그와 함께 지정할 수 없습니다.

0x00000200 (CREATE_NEW_PROCESS_GROUPE)

새로운 캐릭터 베이스의 프로세스를 새로운 프로세스 그룹의 루트 프로세스로 합니다.프로세스 그룹에는, 루트 프로세스의 모든 자손 프로세스가 포함됩니다.새로운 프로세스 그룹의 프로세스ID(은)는, ppiProcInfo 파라미터로 나타난다 PROCESS_INFORMATION 구조체에 돌려주어지는 프로세스ID(와)과 같게 됩니다.프로세스 그룹은, 콘솔 프로세스의 그룹에 [Ctrl]+[Break] 시그널 송신을 가능하게 하기 위해서 GenerateConsoleCtrlEvent 함수에 의해서 사용됩니다.

이 플래그가 지정되면, 새로운 프로세스 그룹의 모든 그룹에 대한다 [Ctrl]+[C] 시그널이 무효가 됩니다.

0x00000400 (CREATE_UNICODE_ENVIRONMENT)

pvEnvironment 파라미터가 가리키는 환경 블록이 Unicode (을)를 사용하고 있는 것을 나타냅니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

0x00000800 (CREATE_SEPARATE_WOW_VDM)

이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다.새로운 프로세스를 별개의 가상DOS머신(VDM) 중(안)에서 실행시킵니다.이 플래그를 지정하지 않고 개시된다16비트Windows베이스의 어플리케이션은 모두, 단일의 공유VDM중(안)에서 스렛드로서 실행됩니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

0x00001000 (CREATE_SHARED_WOW_VDM)

이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다. WIN.INI 의 Windows 섹션(레지스트리의 HKEY_LOCAL_MACHINE\ System\CurrentConsoleSet\Control\WOW 키)에 있다 DefaultSeparateVDM 스윗치가 TRUE (으)로 설정되어 있는 경우에서도, 새로운 프로세스를 공유VDM위에서 실행시키도록(듯이) 합니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

0x00002000 (CREATE_FORCEDOS)

16비트 OS/2 어플리케이션에 파묻혔다MS-DOS어플리케이션을 강제적으로 실행시킵니다.

0x01000000 (CREATE_BREAKAWAY_FROM_JOB)

어느 작업에 속하고 있는 프로세스로부터 기동되는 child process이 그 작업에 속하지 않게 합니다.호출측 프로세스를 작업에 관련지을 수 있지 않은 경우는, 이 플래그는 효과를 가지지 않습니다.호출측 프로세스를 작업에 관련지을 수 있고 있는 경우는 작업에 JOB_OBJECT_LIMIT_BREAKAWAY_OK 제한이 설정되어 있을 필요가 있습니다.

Windows 95/98/Me/NT 4.0 이전: 이 플래그는 서포트되지 않습니다.

0x04000000 (CREATE_DEFAULT_ERROR_MODE)

새로운 프로세스에, 호출측 프로세스의 에러 모드를 계승시키지 않습니다.새로운 프로세스에는, 디폴트의 에러 모드를 적용합니다.

0x08000000 (CREATE_NO_WINDOW)

이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다.콘솔 프로그램을 콘솔 윈도우 없이 실행시킵니다.

Windows 95/98/Me: 이 플래그는 서포트되지 않습니다.

프로세스의 우선도의 클래스를 이하의 값으로부터 지정합니다.지정하지 않는 경우는 NORMAL_PRIORITY_CLASS (이)가 됩니다.다만, 호출측 프로세스의 우선도가 IDLE_PRIORITY_CLASS 또는 BELOW_NORMAL_PRIORITY_CLASS 의 경우는, 각각의 우선도클래스가 됩니다.

우선도
0x00000020 (NORMAL_PRIORITY_CLASS) 통상
0x00000040 (IDLE_PRIORITY_CLASS) 아이돌
0x00000080 (HIGH_PRIORITY_CLASS) 우선
0x00000100 (REALTIME_PRIORITY_CLASS) 리얼타임
0x00004000 (BELOW_NORMAL_PRIORITY_CLASS) Windows 2000 이후: 통상 이하
0x00008000 (ABOVE_NORMAL_PRIORITY_CLASS) Windows 2000 이후: 통상 이상
pvEnvironment

새로운 프로세스에 건네주는 환경 변수를 격납한 메모리브록크의 주소를 지정합니다. 0 (NULL) (을)를 지정하면 parent process의 것이 사용됩니다.

환경 변수 블록은1개이상의 눌 문자로 단락지어진 문자열이 포함됩니다.마지막 문자열의 뒤에는2개가 연속한 눌 문자가 없으면 안됩니다.각각의 문자열은

이름=치

의 형식이 됩니다.환경 변수의 이름에는 separator로서 사용되는 「=」(등호) 이외의 임의의 문자를 사용할 수 있습니다.

fdwCreate 파라미터에 CREATE_UNICODE_ENVIRONMENT 플래그가 포함되어 있는 경우에는, 환경 변수 블록에는Unicode문자열을 격납합니다.그 이외의 경우에는ANSI문자열을 격납합니다.

pszCurDir

새로운 프로세스의 기동시의 커런트 디렉토리의 문자열의 주소를 지정합니다.이 문자열은, 드라이브 문자를 포함한 풀 패스로 지정하지 않으면 안됩니다.이 파라미터에 0 (NULL) (을)를 지정하면 parent process의 커런트 디렉토리가 됩니다.

psiStartInfo

기동할 때의 정보를 격납했다 STARTUPINFO 구조체의 주소를 지정합니다.

ppiProcInfo

기동한 프로세스에 대한 정보를 격납한다 PROCESS_INFORMATION 구조체의 주소를 지정합니다.

반환값

성공하면 0 이외의 값이 돌아갑니다.

실패하면 0 하지만 돌아갑니다.확장 에러 정보를 취득하려면 , GetLastError 함수를 사용합니다.

해설

ppiProcInfo 파라미터로 나타난다 PROCESS_INFORMATION 구조체에 격납된 프로세스 핸들과 스렛드한돌은 불필요하게 되면 CloseHandle 함수로 파기하지 않으면 안됩니다.

프로세스 및 스렛드에는, 각각32비트의 프로세스 ID 및 스렛드 ID 하지만 할당할 수 있습니다.이러한 값은 PROCESS_INFORMATION 구조체에 격납됩니다.프로세스 ID (은)는 프로세스가 종료할 때까지, 스렛드 ID (은)는 스렛드가 종료할 때까지, 모든 프로세스로 유효합니다.

대응 정보

Windows 95 이후 / Windows NT 3.1 이후

반응형

'API 관련 > Win32 API 함수' 카테고리의 다른 글

CreateRoundRectRgn  (0) 2007.11.08
CreateRectRgn  (0) 2007.11.08
CreatePopupMenu  (0) 2007.11.08
CreatePolygonRgn  (0) 2007.11.08
CreateMutex(A)  (0) 2007.11.08
Comments