#c #winapi
#c #winapi
Вопрос:
При вызове функции WriteProcessMemory она вызывает код системной ошибки — 5.
Я пробовал PROCESS_VM_OPERATION
и PROCESS_VM_WRITE
то, и другое, но это все равно не работает.
Вот код:
int intToWrite = 123;
HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE, FALSE, /*ProcessId*/);
if (WriteProcessMemory(hProcess, (LPVOID)0x..., amp;intToWrite, 4, 0) != 0)
{
std::cout << "Everything is fine. n";
}
else
{
std::cout << "The problem " << GetLastError() << " is in WPM function. n";
}
Вывод в консоль:
The problem 5 is in WPM function
Итак, где именно моя ошибка в доступе?
Комментарии:
1. Документация вызывает PROCESS_VM_WRITE и PROCESS_VM_OPERATION . Вы не можете выполнить это. Настоятельно рекомендуется проверять возвращаемое значение OpenProcess .
2. @DavidHeffernan Я сделал, как вы сказали, но теперь это показывает эту проблему в функции WPM.
3. @Artemleschukov — начните с кода исправления здесь
OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION
, проверьте его возвращаемое значение и фактический код ошибки после сбоя api4. @RbMm Оооо, это хорошо работает! Удивительно! Но что означает символ «I» между P_V_W и P_V_O?
Ответ №1:
Недостаточно открыть процесс с доступом на запись, необходимо также убедиться, что записываемая память доступна для записи (VirtualProtectEx()).
Комментарии:
1. Нет. WPM позаботится об этом за вас.
2. @DavidHeffernan конечно, нет. «Примечания WriteProcessMemory копирует данные из указанного буфера в текущем процессе в диапазон адресов указанного процесса. Любой процесс, который имеет дескриптор с доступом PROCESS_VM_WRITE и PROCESS_VM_OPERATION к процессу, в который нужно записать, может вызвать функцию. Обычно, но не всегда, процесс с адресным пространством, в которое записывается, отлаживается. Вся область, в которую должна быть записана, должна быть доступна, и если она недоступна, функция завершается с ошибкой «.
3. Вы неправильно прочитали. Под доступным это просто означает, что адреса действительны для этого процесса. О защите заботится WPM. devblogs.microsoft.com/oldnewthing/20181206-00/?p=100415
4. @DavidHeffernan Тем не менее, лучше снять защиту со страниц самостоятельно, чтобы не полагаться на детали реализации.