我曾尝试在任何进程中向内存空间读写数据,我使用了以下方法 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()来进一步诊断问题。