MSDN을 통해 공부한 내용을 바탕으로 개인적으로 정리를 해보려함.


> MSDN

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms682425(v=vs.85).aspx

> example

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms682512(v=vs.85).aspx


1
2
3
4
5
6
7
8
9
10
11
12
BOOL WINAPI CreateProcess(
  _In_opt_    LPCTSTR               lpApplicationName,
  _Inout_opt_ LPTSTR                lpCommandLine,
  _In_opt_    LPSECURITY_ATTRIBUTES lpProcessAttributes,
  _In_opt_    LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_        BOOL                  bInheritHandles,
  _In_        DWORD                 dwCreationFlags,
  _In_opt_    LPVOID                lpEnvironment,
  _In_opt_    LPCTSTR               lpCurrentDirectory,
  _In_        LPSTARTUPINFO         lpStartupInfo,
  _Out_       LPPROCESS_INFORMATION lpProcessInformation
);
cs


1. 다른 Windows API들이 그렇듯 CreateProcess 또한 유니코드가 정의되어 있으면

CreateProcessW 함수로 대체된다.


2. 계산기 프로세스를 생성한다고 가정할 때

첫 번째 파라미터 또는 두 번째 파라미터에 _T("C:\\Windows\\System32\\calc.exe")를 입력해주면 된다.

단, 두 번째 파라미터에 입력해줄 시에는

constant pointer를 사용할 수 없다.

포인터를 선언해서 그 포인터에 문자열을 넣어준 후, 포인터를 두 번째 인자에 주어야 한다.

문자열에 대한 수정이 일어날 수도 있기 때문이라고 한다.


3. 다음으로 중요한 파라미터가 flag다.

> flags

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms684863(v=vs.85).aspx


플래그가 없어도 된다.(0)

디버거 프로그램을 만들 때 쓰이는 플래그가 두 개 있다.


DEBUG_ONLY_THIS_PROCESS : DEBUGGER가 생성한 프로세스만 DEBUGGEE PROCESS로 생성된다.

DEBUG_PROCESS : child processes들도 DEBUGGEE PROCESS로 생성된다.


DEBUGGEE PROCESS는 DEBUGGER에게 이벤트가 발생할 때마다 DEBUG_EVENT를 전송한다.


예제 코드 작성은 나중에 !


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/