Пытаюсь с помощью ntapi функций выделить память и записать в нее массив байт.
hProcess = GetCurrentProcess();
status = mem.nAllocateVirtualMemory(hProcess, &rBuffer, 0, &shellSize, (MEM_COMMIT | MEM_RESERVE), PAGE_READWRITE); // пробовал PAGE_EXECUTE_READWRITE, ведь ошибка 8000000d указывает на то, что что произошел конфликт с защитой памяти
if (!NT_SUCCESS(status)) {
error("failed to allocate virtual memory | ");
cout << "NTSTATUS code: " << hex << (int)status << endl;
cout << "GetLastError code: " << GetLastError() << endl << endl;
}
else {
okay("memory was allocated successfully | address: ");
cout << rBuffer << endl << endl;
}
status = mem.nWriteVirtualMemory(hProcess, rBuffer, shellCode, shellSize, &bytesWritten);
if (!NT_SUCCESS(status)) {
error("failed to write virtual memory | ");
cout << "NTSTATUS code: " << hex << (int)status << endl;
cout << "GetLastError code: " << GetLastError() << endl << endl;
}
else {
okay("memory was wrote successfully | address : ");
cout << rBuffer << " bytes written " << bytesWritten << endl << endl;
}
при попытке записать какие-либо данные с помощью функции NtWriteVirtualMemory я получаю код ошибки 0x8000000d. Из документации Microsoft ясно, что речь идет о конфликте защиты региона памяти, но проблема в том, что функция NtAllocateVirtualMemory вызывается с AllocationType PAGE_READWRITE или же PAGE_EXECUTE_READWRITE
несколько раз перепроверял прототипы функций и методы которыми я те самые Nt функции получаю, все верно
из-за чего возникает подобная ошибка я даже не могу предположить, ведь при использовании стандартной функции WINAPI VirtualAlloc таких проблем не наблюдается (следовательно никаких проблем с функцией записи нету)
надеюсь на помощь