티스토리 뷰

프로세스 실행 함수

CreateProcessW(
    1)  LPCWSTR lpApplicationName,
    2)  LPWSTR lpCommandLine,
    3)  LPSECURITY_ATTRIBUTES lpProcessAttributes,
    4)  LPSECURITY_ATTRIBUTES lpThreadAttributes,
    5)  BOOL bInheritHandles,
    6)  DWORD dwCreationFlags,
    7)  LPVOID lpEnvironment,
    8)  LPCWSTR lpCurrentDirectory,
    9)  LPSTARTUPINFOW lpStartupInfo,
    10)  LPPROCESS_INFORMATION lpProcessInformation
    );

1 : 생성할 프로세스의 실행파일 이름을 인자로 전달한다. 경로명을 추가로 지정할 수 있으며, 경로명을 지정하지 않을 경우 프로그램의 현재 디렉토리에서 실행파일을 찾게 된다.

2: 함수의 인자전달할때 사용

3 : 프로세스의 보안속성 설정, 기본 NULL

4 : 쓰레드의 보안속성 NULL이 Deafult

5 : True인 경우, 생성되는 자식 프로세스는 부모 프로세스가 소유하는 핸들 중 일부 상속

6: 생성하는 프로세스의 특성을 결정지을 때 사용하는 옵션

7 : 메모리 블록 관리 설정

8 : 프로세스의 현재 디렉토리를 설정하는 인자

9 : STARTUPINFO 구조체 변수를 초기화한 다음에 이 변수의 포인터를 인자로 전달한다.

10 : 생성하는 프로세스의 정보를 얻기 위해 사용되는 인자

 

예제

더보기

Main

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

#define DIR_LEN MAX_PATH+1

int _tmain(int argc, TCHAR argv[]) {
	STARTUPINFO si = { 0, };
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);
	si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
	si.dwX = 100;
	si.dwY = 200;
	si.dwXSize = 300;
	si.dwYSize = 200;
	si.lpTitle = (LPSTR)_T("I am a boy!");

	//프로세스 명령어
	TCHAR command[] = _T("AddrProcess.exe 20 20");

	TCHAR cDir[DIR_LEN];
	BOOL state;

	//현재 디렉토리 정보 얻어오기 ( 크기, Buffer )
	GetCurrentDirectory(DIR_LEN, cDir);
	_fputts(cDir, stdout);
	_fputts(_T("\n"), stdout);

	//현재 디렉토리 변경
	SetCurrentDirectory(_T("C:\\"));

	GetCurrentDirectory(DIR_LEN, cDir);
	_fputts(cDir, stdout);
	_fputts(_T("\n"), stdout);

	//프로세스 생성
	state = CreateProcess(
		NULL,
		command,
		NULL, NULL, TRUE,
		CREATE_NEW_CONSOLE,
		NULL, NULL, &si, &pi);

	if (state != 0)
		_fputts(_T("Creation OK! \n"), stdout);
	else
		_fputts(_T("Creation Error! \n"), stdout);

	return 0;
}

 

AddressProcess.exe

#pragma warning(disable:4996)
#define UNICODE
#define _UNICODE

#include<stdio.h>
#include<tchar.h>
#include<windows.h>

int _tmain(int argc, TCHAR* argv[]) {
	DWORD val1, val2;
	val1 = _ttoi(argv[1]);
	val2 = _ttoi(argv[2]);

	_tprintf(_T("%d + %d = %d\n"), val1, val2, val1 + val2);

	_gettchar();
	return 0;
}

 

'서버 공부 > 시스템 프로그래밍' 카테고리의 다른 글

쓰레드 구현 모델  (0) 2022.07.28
(IPC통신) Named Pipe 통신  (0) 2022.07.27
CMD 창 만들기 ( 6장 )  (0) 2022.07.27
프로세스란?  (0) 2022.07.26
유니코드 형식 프로그래밍  (0) 2022.07.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함