我曾尝试在任何进程中读取数据并将数据写入内存空间。我使用了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((来进一步诊断问题。