c++ createprocess 예제

작업 관리자는 실행 중인 모든 프로세스를 암호화하는 프로그램의 예입니다. 성능 레지스트리의 데이터를 사용하여 구현됩니다. 다음 샘플 코드는 EnumProcesses() 함수를 사용하여 시스템의 현재 프로세스를 열거합니다. 이 방법은 성능 레지스트리를 사용하는 것보다 쉽습니다. 프로젝트에 thepsapi.lib 라이브러리를 포함하는 것을 잊지 마십시오. 단계는 다음과 같습니다. 스레드가 동일한 코드를 실행하기 위해 여러 스레드를 만들 수 있는 프로세스에서는 전역 변수를 사용하는 것이 불편합니다. 예를 들어 사용자가 동시에 여러 파일을 열 수 있도록 하는 프로세스는 각 스레드가 동일한 스레드 함수를 실행하면서 각 파일에 대한 새 스레드를 만들 수 있습니다. 생성 스레드는 스레드 함수의 각 인스턴스에 필요한 고유한 정보(예: 파일 이름)를 인수로 전달할 수 있습니다.

이 목적을 위해 단일 전역 변수를 사용할 수는 없지만 동적으로 할당된 문자열 버퍼를 사용할 수 있습니다. 생성 스레드는 CreateThread()에 대한 인수를 사용하여 다음을 지정할 수 있습니다. 예를 들어 =C라는 환경 변수가 있는데, 그 값이 드라이브 C의 현재 디렉토리입니다. 응용 프로그램은 현재 디렉터리 정보를 새 프로세스로 수동으로 전달해야 합니다. 이렇게 하려면 응용 프로그램에서 이러한 환경 변수 문자열을 명시적으로 만들고 사전순으로 정렬해야 합니다(시스템에서 정렬된 환경을 사용하기 때문에). 일반적으로 환경 블록 정렬 순서로 인해 환경 블록의 맨 앞에 이동합니다. 기본적으로 자식 프로세스는 상위 프로세스의 환경 블록 복사본을 상속합니다. 다음 예제에서는 CreateProcess()를 사용하여 자식 프로세스에 전달할 새 환경 블록을 만드는 방법을 보여 줍니다. 이 예제에서는 예제 3의 코드를 자식 프로세스인 EnvironVar3.exe로 사용합니다.

이 경우 세 번째 예제를 먼저 시도해야 합니다. CreateThread() 함수는 프로세스에 대한 새 스레드를 만듭니다. 만들기 스레드는 새 스레드가 실행될 코드의 시작 주소를 지정해야 합니다. 일반적으로 시작 주소는 프로그램 코드에 정의된 함수의 이름입니다. 이 함수는 단일 매개 변수를 사용 하 고 aDWORD 값을 반환 합니다. 프로세스는 동일한 함수를 동시에 실행하는 여러 스레드를 가질 수 있습니다. 다음 예제에서는 로컬로 정의된 함수MyThreadFunction()을 실행하는 새 스레드를 만드는 방법을 보여 줍니다. 간단히 하기 위해 이 예제에서는 함수에 대한 인수로 값에 대한 포인터를 전달합니다. 이것은 모든 유형의 데이터 또는 구조에 대한 포인터일 수도 있고 NULL 포인터를 전달하고 MyThreadFunction()의 매개 변수에 대한 참조를 삭제하여 완전히 생략할 수 있습니다. 포인터가 유효하지 않게 되므로 만드는 스레드가 새 스레드 보다 앞에 종료되는 경우 로컬 변수의 주소를 전달하는 것은 위험합니다.

대신 동적으로 할당된 메모리에 대한 포인터를 전달하거나 만드는 스레드가 새 스레드가 종료될 때까지 기다립니다. 전역 변수를 사용하여 생성 스레드에서 새 스레드로 데이터를 전달할 수도 있습니다. 전역 변수를 사용하면 일반적으로 여러 스레드에서 액세스를 동기화해야 합니다. cmdLine = 와 같은 모든 명령줄 매개 변수로 실행하는 명령은 CreateRemoteThread() 함수를 호출하여 스레드를 만들 수도 있습니다. 이 함수는 디버거 프로세스에서 디버깅중인 프로세스의 주소 공간에서 실행되는 스레드를 만드는 데 사용됩니다.