이는 원격 프로세스에 스레드 주입함으로써 그렇게 할 수있다 :
HMODULE hKernel32 = GetModuleHandle("kernel32");
// Procedures in kernel32.dll are loaded at the same address in all processes
// so find the address in our own process, then use it in the target process
FARPROC pSetProcessDEPPolicy = GetProcAddress(hKernel32, "SetProcessDEPPolicy");
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pSetProcessDEPPolicy, 0 /* disable DEP */, 0, NULL);
if (hThread == NULL) {
// handle/report error
}
WaitForSingleObject(hThread);
CloseHandle(hThread);
그러나 이는 일반적으로 좋지이다; 프로세스가 시작될 때와 DEP가 활성화되는 동안 스레드 주입을 수행 할 때 사이에 시간대가 있으며, 치트 방지 또는 DRM 기능이 스레드 주입을 프로그램 해킹 시도로 볼 수 있습니다. 단순히 DEP 예외 목록을 설정하는 것이 훨씬 안정적이며 동일한 효과가 있습니다.
그렇다면 내 프로그램이 출시를 듣고 대신 다른 응용 프로그램을 시작한 것이 가장 좋을까요? (C++에서 응용 프로그램을 시작하는 방법을 모르겠다. C#과 ahk로만 다뤘지만, 아마도 알아낼 것이다.) – Dragonshadow
@Dragonshadow, 응용 프로그램을 시작하면이 작업이 더 쉬워지지 않습니다. 앱의 시작과 동기화하고 스레드를 삽입하는 방법이 있지만 상당히 복잡합니다.) 문제가있는 앱에 대해 DEP 블랙리스트를 설정하지 않는 것에 대해 왜 그렇게 강하게 생각하십니까? – bdonlan
문제의 컴퓨터는 지금 당장 실행할 수없는 하드웨어 문제가 있으므로 다시 시작할지 여부는 도박입니다. DEP 블랙리스트를 설정하려면 컴퓨터를 다시 시작해야합니다. – Dragonshadow