子进程能否访问父进程内存?Windows应用开发场景技术问询
Windows子进程访问父进程内存权限说明
默认情况下,主应用启动的exe格式子进程没有直接访问父进程内存的权限,Windows自带的用户态进程内存隔离机制对所有进程生效,和是否为父子进程无关。
核心规则说明
- Windows中每个用户态进程都拥有独立的虚拟地址空间,默认禁止任意进程直接读写其他进程的内存数据。子进程创建时只会继承父进程的环境变量、已打开的兼容句柄、工作目录等属性,不会默认获得父进程的内存访问权限。
- 如果需要实现父子进程的内存数据交互,需要主动实现跨进程通信逻辑,常用方案如下:
- 父进程创建子进程时主动传递自身的
OpenProcess权限句柄,为子进程授予PROCESS_VM_READ、PROCESS_VM_WRITE等内存操作权限,子进程后续可以通过ReadProcessMemory、WriteProcessMemory等API读写父进程内存 - 父子进程共同创建/挂载内存映射文件
CreateFileMapping,通过共享内存块实现数据交互,这是业务场景下最常用的跨进程内存共享方案 - 父进程以调试模式启动子进程,子进程作为调试目标可获得对应内存访问权限,该方案权限过高,仅适合调试场景使用
- 父进程创建子进程时主动传递自身的
- 权限特殊说明:如果子进程的运行权限高于父进程(比如子进程以管理员/System权限运行,父进程为普通用户权限),高权限子进程可主动调用系统API打开父进程获取内存访问权限,开发时需要做好权限边界校验避免安全风险。
内容的提问来源于stack exchange,提问作者Scott Fraser
相关产品推荐
相关产品推荐

