谁可以写入分配的地址?

我在Delphi中使用VirtualAllocEx在外部进程中保留内存,如下所示:

var p : pointer; begin p := VirtualAllocEx(Process, nil, SizeOf(Integer), MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); end; 

ProcessHandle之前已经用PROCESS_ALL_ACCESS

之后,我的程序写一个简单的整数值,像这样分配的地址:

 WriteProcessMemory(Process, p, @MyInteger, SizeOf(Integer), BytesWritten); 

由于地址是存储在p – 我可以保存地址使用它的另一个应用程序。 另一个应用程序必须再次打开外部进程来访问/写入外部进程中的地址。

现在我的问题是:在外国过程中,谁能够读写这个地址?

是否允许每个进程写入? 每个进程都允许读取吗? 只有拥有pipe理员权限的进程才有权读/写?

感谢您的回答。

Solutions Collecting From Web of "谁可以写入分配的地址?"

任何拥有授予读写权限的进程句柄的人都可以读写内存。 请参阅: PROCESS_VM_READ和PROCESS_VM_WRITE 。 所以,最终,这取决于你如何处理流程和DACL。

如果您创建了进程,或者您已启用SeDebugPrivilege,则通常会获得所有访问权限。 当你调用OpenProcess ,你必须指定你想要的访问类型,它会根据进程的安全描述符来检查请求。

如果内存服务,Windows会将其分类为调试。

无论如何,您都可以调试自己的进程。

如果您被授予(并启用) SeDebugPrivilege您可以调试其他用户的进程。

请注意,将SeDebugPrivilege授予某个帐户基本上也是一个管理员帐户 – 也就是说,如果SeDebugPrivilege已被授予,那么使用该帐户的人可以基本上执行任何他们想要的任何操作,并启用他们自己选择的任何其他权限。 Ergo:除非你真的需要(除非你正在调试系统服务进程或类似的东西,否则你可能不需要),否则不要授予它。

默认情况下,具有兼容完整性级别的任何内容都可以使用ReadProcessMemoryWriteProcessMemory 。 这意味着完整性级别大于或等于目标进程的完整性级别。