일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OOP
- 악성코드
- C
- meta
- 자료구조
- Sort
- 윈도우즈
- System
- UTF-8
- HTML
- API
- 노드
- 포인터
- request
- c++
- windows
- function
- java
- CLASS
- Call-by-reference
- CSS
- query
- 투자
- jsp
- array
- JavaScript
- algorithm
- WebProgramming
- beans
- Kafka
- Today
- Total
hahahia
프로세스의 생성(CreateProcess 함수 및 STARTUPINFO 구조체) 본문
프로세스의 생성(CreateProcess 함수 및 STARTUPINFO 구조체)
hahahia 2012. 3. 6. 21:19Process A ---------------> Process B
(부모 프로세스) CreateProcess에 의한 생성 (자식 프로세스)
CreateProcess의 구조
Reference : http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
BOOL CreateProcess (
LPCTSTR lpApplicationName, // 생성될 프로세스의 이름
LPTSTR lpCommandLine, // 생성될 프로세스에 인자 전달(변수만 가능)
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 프로세스의 보안 속성 지정 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 쓰레드의 보안 속성 지정
BOOL bInheritHandles, // TRUE : 부모 프로세스가 소유하는 상속 가능한 핸들을 상속한다. DWORD dwCreationFlags, // 생성하는 프로세스의 특성을 결정짓는 옵션(우선순위)
LPVOID lpEnvironment, // 생성하는 프로세스의 Environment Block 지정 NULL : 부모 프로세스의 환경 블록 복사
LPCTSTR lpCurrentDirectory, // 생성하는 프로세스의 현재 디렉터리 설정 NULL : 부모 프로세스의 현재 디렉터리
LPSTARTUPINFO lpStartupInfo, // STARTUPINFO 구조체 변수 초기화한 후 변수의 포인터를 인자로 전달
LPPROCESS_INFORMATION lpProcessInformation
// 생성하는 프로세스의 정보를 얻기 위한 인자
// PROCESS_INFORMATION 구조체 변수의 주소값을 인자로 전달);
물론 저 10개의 매개변수를 외울필요는 없습니다. 외워서 쓰는 사람도 없구요
굵게 표시된 매개변수 정도만 이해해도 좋습니다. 적당히 레퍼런스 하셔서 ㅎㅎ
STARTUPINFO의 구조
Reference : http://msdn.microsoft.com/en-us/library/ms686331(VS.85).aspx
typedef struct _STARTUPINFO {
DWORD cb; // 구조체 변수의 크기
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle; // 콘솔 윈도우의 타이틀 바 제목
DWORD dwX; // 프로세스 윈도우의 x좌표
DWORD dwY; // y 좌표
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;
- 첫번째 인자 cb가 중요한 이유는 CreateProcess함수의 9번째 들어갈 프로세스 정보 구조체에 들어가는 구조체가 혹시나 바뀔 수 있고, 다양한 구조체가 들어가기 위해서 둔 것인데 정보를 전달하는 구조체가 무엇인기 구분짓겠다는 의도로 해석.
- 현재 디렉터리(Current Directory)의 설정
현재 디렉터리 확인 함수(GetCurrentDirectory)
DWORD GetCurrentDirectory(
DWORD nBufferLength, // 현재 디렉터리 정보가 저장될 메모리 버퍼 크기
LPTSTR lpBuffer // 현재 디렉터리 정보가 저장될 메모리 버퍼의 pointer
);
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // 변경하고자 하는 현재 디렉터리 경로명
1. 표준 검색경로 : 실행 중인 프로세스의 실행파일이 존재하는 디렉터리
2. 표준 검색경로 : 실행 중인 프로세스의 현재 디렉터리(Current Directory)
3. 표준 검색경로 : Windows의 시스템 디렉터리(System Directory)
4. 표준 검색경로 : Windows의 디렉터리(Windows Directory)
5. 표준 검색경로 : 환경변수 PATH에 의해 지정되어 있는 디렉터리
3,4 표준 검색경로(시스템, 윈도우즈 디렉터리) 확인 예제 => LINK
출처 : 윈도우즈 시스템 프로그래밍 | 윤성우 저 | 한빛미디어
'Windows Programming > Windows::System' 카테고리의 다른 글
프로세스 생성 소스코드 (0) | 2012.03.06 |
---|---|
시스템 디렉터리와 Windows 디렉터리 예제 소스 (0) | 2012.03.06 |
프로세스와 스케줄링 및 컨텍스트 스위칭 (0) | 2012.03.06 |
명령 프롬프트(cmd) 만들기 (3) | 2012.03.02 |
오류의 확인(GetLastError 함수) (0) | 2012.03.02 |