Как дать разрешения RPM / WPM на дескриптор без OPENPROCESS? - PullRequest
0 голосов
/ 14 мая 2018

Я хочу читать и записывать память процесса. С помощью этой программы мне приходится каждый раз вводить 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 голосов
/ 14 мая 2018

FindWindow возвращает дескриптор окна, который, кстати, должен быть объявлен как HWND. OpenProcess возвращает дескриптор процесса. ReadProcessMemory ожидает передачи дескриптора процесса.

Вы передаете дескриптор окна на ReadProcessMemory, а не на дескриптор процесса. ReadProcessMemory, следовательно, потерпит неудачу и сообщит, что дескриптор недействителен. Передайте hProcess на ReadProcessMemory.

Если вы собираетесь запросить PID у пользователя, вам не нужен дескриптор окна, и вы можете удалить вызов на FindWindow. Если вы хотите получить PID из дескриптора окна, используйте FindWindow для получения дескриптора окна, а затем вызовите GetWindowThreadProcessId для получения идентификатора процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...