[c++] C++를 사용한 윈도우 프로세스 제어 프로그래밍
윈도우 환경에서 프로세스를 제어하고 상호작용하는 프로그램을 C++를 사용하여 개발하는 방법을 알아보겠습니다. 이 프로그램은 다른 프로세스를 생성하거나 관리하고 통신하기 위해 사용될 수 있습니다.
프로세스 생성하기
다음은 C++를 사용하여 새로운 프로세스를 생성하는 간단한 예제입니다.
#include <windows.h>
int main() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi);
// 새로운 프로세스 생성
CreateProcess(TEXT("C:\\Windows\\System32\\notepad.exe"), // 실행할 프로그램 경로
NULL, // 커맨드 라인 인자
NULL, // 보안 속성
NULL, // 보안 속성
FALSE, // 핸들 상속 여부
0, // 생성 플래그
NULL, // 환경 변수
NULL, // 현재 디렉토리
&si, // STARTUPINFO 구조체
&pi); // PROCESS_INFORMATION 구조체
// 생성된 프로세스 핸들을 닫음
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
이 예제는 CreateProcess
함수를 사용하여 새로운 프로세스를 실행하는 방법을 보여줍니다.
프로세스 관리하기
생성된 프로세스의 상태를 관리하고 통신하기 위해 다음과 같이 OpenProcess
및 ReadProcessMemory
, WriteProcessMemory
함수를 사용할 수 있습니다.
#include <windows.h>
#include <iostream>
int main() {
DWORD processId;
HANDLE hProcess;
SIZE_T bytesRead;
int value = 0;
// 프로세스 ID로 핸들을 열기
processId = GetCurrentProcessId();
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
// 프로세스 메모리 읽기
ReadProcessMemory(hProcess, (LPCVOID)0x00400000, &value, sizeof(value), &bytesRead);
std::cout << "Read value: " << value << std::endl;
// 프로세스 메모리 쓰기
value = 12345;
WriteProcessMemory(hProcess, (LPVOID)0x00400000, &value, sizeof(value), &bytesRead);
// 프로세스 핸들 닫기
CloseHandle(hProcess);
return 0;
}
이 예제는 OpenProcess
, ReadProcessMemory
, WriteProcessMemory
함수를 사용하여 현재 프로세스의 메모리를 읽고 쓰는 방법을 보여줍니다.
결론
C++를 사용하여 윈도우 프로세스를 제어하고 상호작용하는 프로그램을 만들기 위해서는 windows.h
헤더 파일에 정의된 함수들을 활용할 수 있습니다. 프로세스 생성, 관리, 통신 등의 작업을 수행할 수 있도록 C++를 사용하는 방법에 대해 배웠습니다.
이러한 기술은 윈도우 환경에서 다양한 프로그램 및 도구를 개발할 때 유용하게 활용될 수 있습니다.
참고 자료
- Microsoft Docs: CreateProcess function
- Microsoft Docs: OpenProcess function
- Microsoft Docs: ReadProcessMemory function
- Microsoft Docs: WriteProcessMemory function