LISTORY

[윈도우즈 시스템 프로그래밍] 프로그래밍을 통한 프로세스의 생성 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 프로그래밍을 통한 프로세스의 생성

LiStoryTeller 2018. 6. 2. 17:49


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.


오늘 정리할 내용은 프로그래밍을 통한 프로세스의 생성 부분이다.


⊙ YouTube 주소 ⊙ ☞ 프로그래밍을 통한 프로세스의 생성



프로그래밍을 통한 프로세스의 생성


⊙ CreateProcess


BOOL CreateProcess(

LPCTSTR lpApplicationName

LPSTR lpCommandLine

LPSECURITY_ATTRIBUTES lpProcessAttributes

LPSECURITY_ATTRIBUTES lpThreadAttributes

BOOL binheritHandles

DWORD dwCreationFlags

LPVOID lpEnvironment

LPCTSTR lpCurrentDirectory

LPSTARTUPINFO lpStartupInfo

LPPROCESS_INFORMATION lpProcessInformation

);


전체적으로 구조를 이해해야 하지만, 지금 구체적으로 봐야할 부분은 두껍게 표시한 부분이다.


이 함수를 호출하려면 두개의 구조체를 선언해야 한다.


- LPSTARTUPINFO                 : 생성하려는 프로세스 정보 전달하기 위한 구조체

- LPPROCESS_INFORMATION   : 생성된 프로세스의 정보 반환받기 위한 구조체


프로세스에서 CreateProcess를 호출하여 새로운 프로세스가 생성된다면,


함수를 호출한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라 한다.



lpApplicationName 변수에는 실행 파일의 이름을 지정해준다.


lpCommandLine에는 매개 변수를 전달해준다. 무슨 매개 변수냐 하면 main 함수 실행 시, 전달하는 매개변수


lpCommandLine 변수에는 실행파일의 이름과 매개변수를 묶어서 표현할 수도 있다. 


앞서 말한 것 처럼 CreateProcess에는 두개의 구조체가 필요한데


lpStartupInfo, lpProcessInformation 변수에 각각의 구조체를 지정해준다.



⊙ LPSTARTUPINFO


생성될 프로세스 정보 전달을 위한 구조체


typedef struct _STARTUPINFO {

DWORD cb;     // 구조체 변수의 크기

LPTSRT    lpReserved;

LPTSRT    lpDesktop;

LPTSRT    lpTitle;      // 콘솔 윈도우의 타이틀 바 제목

DWORD  dwX;        // 프로세스 윈도우의 x 좌표

DWORD  dwY;        // 프로세스 윈도우의 y 좌표

DWORD  dwXsize;    // 프로세스 윈도우의 가로 길이

DWORD  dwYsize;    // 프로세스 윈도우의 세로 길이

DWORD  dwXCountChars;

DWORD  dwYCountChars;

DWORD  dwFillAttribute;

DWORD  dwFlags;    // 설정된 멤버의 정보

WORD    wShowWindow;

WORD    cbReserved2;

LPBYTE   lpReserved2;

HANDLE hStdInput;

HANDLE hStdOutput;

HANDLE hStdErrorl

} STARTUPINFO, *LPSTARTUPINFO;



⊙ LPPROCESS_INFORMATION


프로세스 정보 반환을 위한 구조체


typedef struct _PROCESS_INFORMATION

{

HANDLE  hProcess;     // 프로세스의 핸들

HANDLE  hThread;     // 쓰레드 핸들

DWORD  dwProcessId; // 프로세스의 ID

DWORD  dwThreadId; // 쓰레드 ID

} PROCESS_INFORMATION;



Comments