Во всех примерах, которые я видел, третий параметр или buffer
является целым числом, но я не совсем уверен, что это значение должно представлять или как оно полезно в любом случае, поэтому я попробовал массив char
и получил случайный мусор, поэтому Мне любопытно, как это значение может быть использовано для лучшего контейнера, и если тип данных зависит от значения, которое мы запрашиваем.Какой тип данных должен быть для буфера для ReadProcessMemory?
После того, как я просмотрел свой код, я понял, что совершил действительно тупую ошибку, не инициализируя дескриптор процесса при его объявлении. Вот мой код, хотя и теперь я получаю ERROR_PARTIAL_COPY
. И dwRead
0. WTF
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
system("tasklist");
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
DWORD proc_Id = 0;
cin >> proc_Id;
HANDLE hProc = INVALID_HANDLE_VALUE;
char value[500];
SIZE_T dwRead;
hProc = OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc_Id);
if(hProc == NULL)
{
cout << "Error when trying to retrieve process handle" << endl;
}
void *baseAddr = (void*)hProc;
if(VirtualAllocEx(hProc, NULL, SysInfo.dwPageSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READ) == NULL)
{
cout << "VirtualAllocEx error" << endl;
}
if(ReadProcessMemory(hProc, baseAddr, &value, sizeof(value), &dwRead) == 0)
{
cout << "ReadProcessMemory failed: " << GetLastError() << endl;
}
cout << "Value is: " << value << endl;
cout << "Amount read successfully: " << dwRead << endl;
}
Похоже, вы зависите от [этого ответа] (http://stackoverflow.com/a/11564232/886887), который, к сожалению, является полной бессмыслицей. Попробуйте [этот] (http://stackoverflow.com/a/25355713/886887). –