Не удается открыть сопоставленный файл с адреса

Я не могу открыть карту памяти. Когда я использую OpenFileMappingA(), он возвращает NULL, а GetLastError() возвращает 161 (ERROR_BAD_PATHNAME). Я использую следующий код:

MEMORY_BASIC_INFORMATION mbi = { 0 };
VirtualQuery(image->raw_data, &mbi, sizeof(mbi));

if (mbi.Protect & PAGE_EXECUTE_READWRITE)
    ZeroMemory(image->raw_data, sizeof(IMAGE_DOS_HEADER) +  sizeof(IMAGE_NT_HEADERS)  + sizeof(IMAGE_SECTION_HEADER)* nt_header->FileHeader.NumberOfSections);
else if (mbi.Type & MEM_MAPPED)
{
    char buffer[500];
    size_t count = GetMappedFileNameA(GetCurrentProcess(), image->raw_data, buffer, sizeof(buffer));    
    HANDLE hMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false, buffer);
    std::cout << hMap << std::endl; //0x00000000 
    std::cout << GetLastError() << std::endl; //161
}

0 ответов

"Я хочу отредактировать память в этом месте, но у него есть защита PAGE_READONLY"

OpenFileMappingA не имеет ничего общего с защитой.

Вам необходимо использовать VirtualProtect(), чтобы изменить защиту этой области памяти на PAGE_READWRITE (0x04)

DWORD  curProtection = 0;
VirtualProtect(addr, len, PAGE_READWRITE, &curProtection);

//change the memory

//then restore old protection
VirtualProtect(toHook, len, curProtection, &curProtection);
Другие вопросы по тегам