[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 함수를 사용하여 새로운 프로세스를 실행하는 방법을 보여줍니다.

프로세스 관리하기

생성된 프로세스의 상태를 관리하고 통신하기 위해 다음과 같이 OpenProcessReadProcessMemory, 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++를 사용하는 방법에 대해 배웠습니다.

이러한 기술은 윈도우 환경에서 다양한 프로그램 및 도구를 개발할 때 유용하게 활용될 수 있습니다.

참고 자료