我试图写入另一个进程的内存,我以38h的权限(VM_OPERATION,VM_READ,VM_WRITE)打开它,然后我以4h的权限(PAGE_READWRITE)使用VirtualProtectEx,但是我也尝试了PAGE_EXECUTEREADWRITE-稍后出现相同的错误。

然后,我调用ReadProcessMemory,并成功读出一个修复地址的值。
但是当我尝试使用WriteProcessMemory写入该地址时,我得到了错误代码299-ERROR_PARTIAL_COPY。

有谁知道如何解决这个问题?

编辑:已解决-没有通过缓冲区写作为引用,但作为一个值

最佳答案

WriteProcessMemory给出错误ERROR_PARTIAL_COPY 299,因为第三个参数lpBuffer需要是一个指针。特别是指向包含要写入目标进程的数据的本地缓冲区的指针。例如,如果缓冲区是一个整数,例如:
int x = 5;
然后,您将使用&x作为lpBuffer参数。 &是“运算符的地址”,它返回指向变量的指针。

通常,如果不为该参数传递指针,则会出现编译器错误。无论如何,ERROR_PARTIAL_COPY表示并非将源缓冲区中的所有字节都写入目标进程。发生这种情况可能有多种原因,特别是如果lpBuffer参数未指向具有正确权限的已提交内存地址时。如果您也弄乱了WriteProcessMemory的第二个参数,也会发生同样的事情

与我在这里一样,也建议使用VirtualProtectEx获得对目标内存页的写入权限。

void PatchEx(HANDLE hProcess, char* dst, char* src, int size)
{
    DWORD oldprotect;
    VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
    WriteProcessMemory(hProcess, dst, src, size, NULL);
    VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
}

关于windows - WriteProcessMemory ERROR_PARTIAL_COPY 299,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3799195/

10-10 05:25