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



我曾尝试在任何进程中读取数据并将数据写入内存空间。我使用了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;

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新