如何在没有OPENPROCESS的情况下为句柄提供RPM / WPM权限?

时间:2018-05-14 07:08:04

标签: c++ winapi

我想读写进程内存。有了这个程序,我每次都要输入PID。我希望这是自动化的,所以我使用FindWindow来获取" Dummy"的窗口。并返回一个句柄。但该句柄没有RPM / WPM权限。任何想法该怎么做?

DWORD PID = 0;
int Read = 0;
uintptr_t pRead;
bool flag;
cout << "Enter PID of Process: " << endl;
cin >> PID;
cout << "Enter Address to Read " << endl;
cin >> hex >> pRead;

HANDLE fProcess = FindWindow(NULL, "Dummy");

HANDLE hProcess = OpenProcess(PROCESS_VM_READ, false, PID);
if (hProcess == NULL)
{
    cout << "Something went wrong. Getting last Error." << GetLastError() << endl;
    system("PAUSE");
    CloseHandle(hProcess);
    return (EXIT_FAILURE);
}

flag = ReadProcessMemory(fProcess, (LPCVOID)pRead, &Read, sizeof(Read), NULL);

1 个答案:

答案 0 :(得分:0)

FindWindow返回一个窗口句柄,顺便说一下应该声明为HWNDOpenProcess返回一个进程句柄。期望ReadProcessMemory传递一个流程句柄。

您将窗口句柄传递给ReadProcessMemory而不是进程句柄。因此ReadProcessMemory将失败并报告句柄无效。将hProcess传递给ReadProcessMemory

如果您要向用户询问PID,则不需要窗口句柄,您可以删除对FindWindow的调用。如果要从窗口句柄获取PID,请使用FindWindow获取窗口句柄,然后调用GetWindowThreadProcessId以获取进程ID。