http://jrich.tistory.com/2 

출처 


BOOL CreateProcess(

  LPCTSTR lpApplicationName,

  LPTSTR lpCommandLine,

  LPSECURITY_ATTRIBUTES lpProcessAttributes,

  LPSECURITY_ATTRIBUTES lpThreadAttributes,

  BOOL bInheritHandles,

  DWORD dwCreationFlags,

  LPVOID lpEnvironment,

  LPCTSTR lpCurrentDirectory,

  LPSTARTUPINFO lpStartupInfo,

  LPPROCESS_INFORMATION lpProcessInformation

);


- lpApplicationName : 윈도우즈 기반 어플리케이션의 실행 파일 이름 이다. 

파일 이름의 확장자를 반드시 명시해 주어야 한다.

(NULL 설정시 lpCommandLine에서 파일 이름 설정)


- lpCommandLine : 실행 시 전달 할 명령 행 인자 이다. 

lpApplicationName이 NULL일 경우 이 파라메터에서 파일 이름 또는 

파일 이름과 명령행 인자를 설정할 수 있다.

전달할 값을 상수로 설정할 수 없다, 

반드시 배열 변수에 전달할 인자를 입력 후 배열의 시작 주소를 설정 한다.

명령행 인자가 없을 경우 NULL을 줄 수 있으나 lpApplicationName과 함께 둘 다 NULL이 될 수는 없다.



- lpProcessAttributes : 프로세스 보안 속성을 설정 한다. 일반적으로 사용하지 않으며 NULL을 설정 한다.


- lpThreadAttributes :  스레드 보안 속성을 지정 한다. 일반적으로 사용하지 않으며 NULL을 설정 한다.


- bInheritHandles :  프로세스 핸들의 상속 여부를 설정 한다.

( TRUE 면 자식 프로세스에게 상속 가능한 핸들을 생성하고, FALSE 면 상속 불가능한 핸들을 생성 한다.)


- dwCreationFlags : 우선 순위 등급 및 프로세스의 생성을 제어하는 플래그 이다.

Process Creation Flags의 값을 설정 한다. 

일반적인 프로세스 생성 시 0을 설정 한다.


- lpEnvironment : 프로세스의 환경 블록을 설정 한다, 이 값이 NULL이면 부모 프로세스의 환경 블록을 사용 한다.

  일반적으로 NULL값을 설정 한다.


- lpCurrentDirectory : 프로세스의 현재 디렉토리를 설정 한다, NULL값을 설정 하면 부모 프로세스의 현재 디렉토리가 해당 프로세스의 현재 디렉토리로  설정 된다.

일반적으로 NULL값을 설정 한다.



- lpStartupInfo : 프로세스의 초기화 정보를 설정 한다.

STARTUPINFO(또는 STARTUPINFOEX) 구조체 변수의 값을 설정 하여 주소를 전달 한다.

  일반적으로 멤버 값들을 설정하지 않으나 구조체의 크기를 설정하는 cb의 값은 반드시 입력이 되어 있어야 한다.

  설정하지 않은 멤버 들은 0으로 초기화하여 전달 한다. 


- lpProcessInformation : 프로세스의 생성 후 결과 정보를 받기 위한 파라메터이다.

PROCESS_INFORMATION 구조체 변수의 주소를 전달 한다.


-----------------------------------------------------------------------------------------------------------------------------

typedef struct _STARTUPINFO {

  DWORD  cb;

  LPTSTR lpReserved;

  LPTSTR lpDesktop;

  LPTSTR lpTitle;

  DWORD  dwX;

  DWORD  dwY;

  DWORD  dwXSize;

  DWORD  dwYSize;

  DWORD  dwXCountChars;

  DWORD  dwYCountChars;

  DWORD  dwFillAttribute;

  DWORD  dwFlags;

  WORD   wShowWindow;

  WORD   cbReserved2;

  LPBYTE lpReserved2;

  HANDLE hStdInput;

  HANDLE hStdOutput;

  HANDLE hStdError;

} STARTUPINFO, *LPSTARTUPINFO;



typedef struct _PROCESS_INFORMATION {

  HANDLE hProcess;

  HANDLE hThread;

  DWORD  dwProcessId;

  DWORD  dwThreadId;

} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;











'Reversing(리버싱 핵심 원리) > 공부 자료(정리x)' 카테고리의 다른 글

DLL Ejection p339  (0) 2018.06.23
Dll Injection 공부 (injectdll.cpp )  (0) 2018.06.22
Dll Injection 공부  (0) 2018.06.19
Windows 메시지 후킹 공부  (0) 2018.06.19

+ Recent posts