100 likes | 213 Views
Windows System Programming. -Process Ⅱ-. Tutor: 20060106 배문희. contents. 프로세스 생성 CreateProcess 함수. 프로세스의 생성. 프로세스생성 CreateProcess 함수. ㅡㅡ ;. If you can, create process!. ㅡㅡ ;. “ 아무 프로그램 ( 예 : 계산기 ) 을 실행시켜봐라 ! 그것이 바로 프로세스를 생성 시킨 것이다 .”. ㅡㅡ ;. 프로세스 생성하기. CreateProcess. Process A.
E N D
Windows System Programming -Process Ⅱ- Tutor: 20060106 배문희
contents • 프로세스 생성 • CreateProcess함수 호남대학교 정보통신공학과
프로세스의 생성 프로세스생성 CreateProcess함수 호남대학교 정보통신공학과
ㅡㅡ; If you can, create process! ㅡㅡ; “아무 프로그램(예: 계산기)을 실행시켜봐라! 그것이 바로 프로세스를 생성 시킨 것이다.” ㅡㅡ; 호남대학교 정보통신공학과
프로세스 생성하기 CreateProcess Process A CreateProcess에 의한 생성! 프로세스 간의 관계 Process B • CreateProcessW( • LPCWSTR lpApplicationName, • LPWSTR lpCommandLine, • LPSECURITY_ATTRIBUTES lpProcessAttributes, • LPSECURITY_ATTRIBUTES lpThreadAttributes, • BOOL bInheritHandles, • DWORD dwCreationFlags, • LPVOID lpEnvironment, • LPCWSTR lpCurrentDirectory, • LPSTARTUPINFOW lpStartupInfo, • LPPROCESS_INFORMATION lpProcessInformation • ); 호남대학교 정보통신공학과
프로세스 생성하기 CreateProcess • CreateProcessW( • LPCWSTR lpApplicationName, // 생성할 프로세스의 실행파일 이름을 인자로 전달 • LPWSTR lpCommandLine, // 생성할 프로세스에 인자를 전달할 때 사용 • // 첫 번째 전달인자에 NULL을 전달하고, • // 이 두 번째 전달인자에 실행파일의 이름을 더불어 전달할 수도 있다. • LPSECURITY_ATTRIBUTES lpProcessAttributes, // 보안속성 보통 NULL • LPSECURITY_ATTRIBUTES lpThreadAttributes, // 쓰레드의보안속성 NULL • BOOL bInheritHandles, • // TRUE: 자식 프로세스는 부모 프로세스가 소유하는 핸들의 일부를 상속 • DWORD dwCreationFlags, // 프로세스의 특성(특히 우선순위)을 결정지을 때 사용 • LPVOID lpEnvironment, // Environment Block(환경 블록)을 지정 • LPCWSTR lpCurrentDirectory, //생성하는 프로세스의 현재 디렉터리를 설정하는 인자 • LPSTARTUPINFOW lpStartupInfo, // STARTUPINFO 구조체 변수의 포인터 전달 • // 생성하는 프로세스의 속성을 지정할 때 사용 • LPPROCESS_INFORMATION lpProcessInformation • // PROCESS_INFORMATION 구조체 변수의 포인터 전달 • // 프로세스 정보를 얻기 위해 사용되는 인자 • ); 호남대학교 정보통신공학과
프로세스 생성하기 예제 STARTUPINFO si = {0,}; PROCESS_INFORMATION pi; // 1단계: STARTUPINFO 구조체변수의생성및초기화 si.cb =sizeof(si); // 구조체변수의크기 si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE; // 설정된멤버의정보 si.dwX = 100; // 프로세스윈도우의x좌표 si.dwY = 200; // 프로세스윈도우의y좌표 si.dwXSize = 300; // 프로세스윈도우의가로길이 si.dwYSize = 200; // 프로세스윈도우의세로길이 si.lpTitle = _T("I am boy!");// 콘솔윈도우의타이틀바제목 //--------------------------------------------------------------- TCHAR command[] = _T("AdderProcess.exe 10 20"); TCHAR cDir[DIR_LEN]; BOOL state; // 2단계: 현재디렉터리의설정 SetCurrentDirectory(_T("E:\\Tutor\\WinSystemProgramming_Tutor\\Debug")); // 3단계: CreateProcess함수의호출 state = CreateProcess( NULL, command, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ); // CreateProcess if(state != 0) _fputts(_T("Creation OK! \n"), stdout); else _fputts(_T("Creation Error! \n"), stdout); #include <stdio.h> #include <tchar.h> #include <windows.h> int_tmain(intargc,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; } AdderProcess CreateProcess 호남대학교 정보통신공학과
프로세스 생성하기 실행 화면 호남대학교 정보통신공학과
ㅡㅡ; 실습: 명령 프롬프트 기능 추가 ㅡㅡ; “notepad” 를입력하면 ‘메모장’이 실행하도록 기능을 추가하시오. ㅡㅡ; 호남대학교 정보통신공학과
참고문헌 • 뇌를 자극하는 윈도우 시스템 프로그래밍 • 한빛미디어 • 윤성우 저 호남대학교 정보통신공학과