доступ к памяти чужого процесса

Я читал по всему сайту и гуглил, чтобы попытаться найти окончательный ответ на то, что я пытаюсь сделать, но я не нашел тот, который отвечает на все мои вопросы.

у меня есть два процесса. у одного есть целочисленная переменная, которую я хочу изменить вторым процессом. я знаю, как читать / записывать в определенные области памяти, но я знаю, как это сделать только по собственным адресам процессов.

Я не понимаю, создать удаленную тему. возможно ли получить самый чистый и простой пример манипулирования памятью процесса, не являющегося родным для работающей программы? при условии, что обе программы работают, конечно.

заранее спасибо

РЕДАКТИРОВАТЬ: я получил некоторые ответы на мой вопрос из других источников. я просто хочу понять, как мне записать переменную в память, скажем:

WriteProcessMemory (phandle, (недействительный *) адрес, вал, SizeOf (Val), NULL);

это, кажется, не имеет никакого эффекта, предполагая, что val — это bool:

while(true){
key=getch();
if(key=='1'){
if(val)val=false;
else val=true;
WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);
}
bool val2;
ReadProcessMemory(phandle, (void*)address, &val2, sizeof(val2), NULL);
cout<<val2<<endl;
}

всегда показывает 0. почему?

2

Решение

попробуйте прочитать об общей памяти и мьютексе, чтобы убедиться, что два процесса не манипулируют одной и той же областью памяти одновременно.

BOOL WINAPI WriteProcessMemory(
_In_   HANDLE hProcess,
_In_   LPVOID lpBaseAddress,
_In_   LPCVOID lpBuffer,
_In_   SIZE_T nSize,
_Out_  SIZE_T *lpNumberOfBytesWritten
);

если вы передали правильные параметры, как указано выше, вам понадобятся как минимум первые 4 параметра для работы

сделать следующее

WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);

обратите внимание на val передать адрес val

0

Другие решения

проблема решена, мне пришлось использовать
HANDLE phandle = OpenProcess (PROCESS_ALL_ACCESS, 0, pid)

вместо
HANDLE phandle = OpenProcess (PROCESS_VM_READ, 0, pid)

0