如何改变映射和提交的内存空间的权限?

问题描述 投票:1回答:1

我曾尝试在任何进程中向内存空间读写数据,我使用了以下方法 VirtualProtect()VirtualProtectEx() 函数来改变内存区域的权限。

if(!VirtualProtect(dwAddr, dwSize, PAGE_EXECUTE_READWRITE, &dwOldProtect))
{
    printf("VirtualProtect failed error %d", GetLastError());
}

CopyMemory(dwAddr, pBuffer, dwSize);

但是我得到了错误5(访问被拒绝)代码,而不是好的结果。

所以我用 VirtualQuery() 功能。

MEMORY_BASIC_INFORMATION info;

VirtualQuery(dwAddr, &info, sizeof(info));

结果如下。

info.Type = MEM_MAPPED;
info.State = MEM_COMMITED;
info.AllocationProtect = PAGE_WRITECOPY;
info.Protect = PAGE_READ;

因此我无法改变映射和提交内存的权限。

如果有其他方法,请告诉我。

c++ winapi memory-management win32-process
1个回答
0
投票

如果是外部进程,你必须以管理员身份运行你的应用程序,并且你必须使用VirtualQueryEx()。

你的问题似乎是你没有以管理员身份运行。 如果你以管理员身份运行并使用VirtualQueryEx(),但仍然失败,那么你需要检查OpenProcess()返回的句柄并确保它是好的。

检查返回值,并在调用API后使用GetLastError()来进一步诊断问题。

© www.soinside.com 2019 - 2024. All rights reserved.