0

ゲーム (具体的には Sims 3) のコーディングが不十分であり、ランダムにクラッシュするのを止める方法の 1 つは、それを DEP 例外リストに追加することです。必要がない場合は本当にやりたくないので、外部プロセスで SetProcessDEPPolicy を使用して DEP を無効にする方法があるかどうか疑問に思っていましたか? 私は決して優秀なプログラマーではないので、提供できる情報が多ければ多いほどよいでしょう。

4

1 に答える 1

0

リモート プロセスにスレッドを挿入することで、これを行うことができます。

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 例外リストを設定する方がはるかに信頼性が高く、同じ効果があります。

于 2011-08-22T16:21:40.510 に答える