리눅스에는 fork();함수도 있고 execl();도 있는데...
윈도우에서 프로세스에서 다른 프로그램을 실행시키려고 하니까 fork();가 없구 그래서 CreateProcess API를 사용해야 한다네요 ㅠㅠ
일단 CreateProcess 함수부터 살펴봅시다.!
BOOL CreateProcess(
LPCTSTR lpApplicationName, //생성프로세스의 실행파일 이름
LPTSTR lpCommandLine, //argc,argv인자 전달, 첫인자를 NULL로 주고 실행파일이름 인자 써도 가능
LPSECURITY_ATTRIBUTES lpProcessAttributes, //보안속성 보통NULL
LPSECURITY_ATTRIBUTES lpThreadAttributes, //쓰레드 보안속성 보통NULL
BOOL blnheritHandles, //전달인자가 TRUE면 자식프로세스는 부모의 핸들중일부상속
DWORD dwCreationFlags, //프로세스의 특성결정
LPVOID lpEnvironment, //메모리 블록관리 문자열저장.
LPCTSTR lpCurrentDirectory, //생성하는 프로세스의 현재 디렉터리 설정
LPSTARTUPINFO lpStartupinfo, //STARTUPINFO 구조체 변수 포인터
LPPROCESS_INFORMATION lpProcessinformation);//PROCESS_INFORMATION 변수의주소값
ex)
#include<windows.h>
#include<stdio.h>
#include<tchar.h>
int main(int argc,char *argv[]){
STARTUPINFO si={0,};
PROCESS_INFORMATION pi;
si.dwX=0;
si.dwY=0;
si.dwXSize=0;
si.dwYSize=0;
si.dwFlags= STARTF_USEPOSITION | STARTF_USESIZE;
si.wShowWindow=SW_HIDE;
CreateProcess(NULL,"bad_code.exe hecked",NULL,NULL,TRUE, DETACHED_PROCESS,NULL,NULL,&si,&pi);
return 0;
}
새로 생성되는 프로세스는 윈도우창을 띄우지 않는다.
'System > Windows' 카테고리의 다른 글
visual studio DLL complie (0) | 2012.08.21 |
---|---|
Message HOOK - Window (0) | 2012.08.20 |
파일복사 api (0) | 2012.08.02 |
WinAPI 레지스트리 (0) | 2012.07.27 |
WinApi MessageBox (0) | 2012.07.26 |