C++ WriteProcessMemory()错误998

C++ WriteProcessMemory()错误998,c++,C++,我在C++中的writeprocessmemory中遇到错误998(访问被拒绝)。 我不知道我做错了什么 以下是我的一些代码: DWORD ProcessId; GetWindowThreadProcessId(WindowHandle, &ProcessId); //pID if (ProcessId) {} else { cout << "ERROR! Process ID Could not be

我在
C++
中的writeprocessmemory中遇到
错误998(访问被拒绝)
。 我不知道我做错了什么

以下是我的一些代码:

DWORD ProcessId;
        GetWindowThreadProcessId(WindowHandle, &ProcessId); //pID
        if (ProcessId) {}
        else {
            cout << "ERROR! Process ID Could not be received." << endl;
            return 0;
        }

        //Get the Process Handle
        HANDLE ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessId);
        if (ProcessId) {}
        else {
            cout << "ERROR! Process Handle could not be received." << endl;
            return 0;
        }

        //Get it done with.
        bool MemWritten = WriteProcessMemory(ProcessHandle, Address, &NewValue, sizeof(NewValue), NULL);

        //Close the process handle to prevent memory leak.
        CloseHandle(ProcessHandle);
dwordprocessid;
GetWindowThreadProcessId(WindowHandle和&ProcessId)//pID
if(ProcessId){}
否则{

cout在写入进程内存之前,应使用保留一些内存页

样本:

LPVOID lpRemoteAddress = VirtualAllocEx( hProcess, 0, 4096, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
if( !lpRemoteAddress )
{
  return;
}
WriteProcessMemory( hProcess, lpRemoteAddress, .... /*your params here*/ )

您没有修改可执行内存的权限。您必须以管理员身份运行程序并将对WriteProcessMemory()的调用包装为对VirtualProtectEx()的调用来修改权限

void PatchEx(字节*dst,字节*src,无符号整数大小,句柄hProcess)
{
德沃德·奥尔德普雷特;
VirtualProtectEx(hProcess、dst、size、PAGE_-EXECUTE_-READWRITE和oldprotect);
WriteProcessMemory(hProcess、dst、src、size、nullptr);
VirtualProtectEx(HPProcess、dst、size、oldprotect和oldprotect);
}

使用这样的函数可以确保您始终将其更改为具有写入权限。

如今,写入可执行内存空间受到限制,这可以防止出现大量漏洞类型。我最近见过有人这样做,但事实并非如此。您想做什么?“总之,我很快就要走了”这是一个巨魔吗?我不认为堆栈溢出是你所认为的!!“我最近看到有人这么做,不是”这肯定是。操作系统已经这样做了几十年。这是他们的工作。在当今这个病毒和漏洞不断的世界中,如果没有这样的保护,你的计算机将毫无用处。