如何让CreateProcessA创建的进程成为自身的父进程
关于Win32进程创建的父进程关系与自定义隔离实现
先澄清两个非常容易踩的观察误区
很多人刚研究CreateProcess的时候都会对父进程关系有误解,先把你看到的异常现象的原因拆清楚:
- 你观察到“从cmd.exe发起调用时新进程父进程为explorer.exe”根本不是CreateProcess的默认行为。正常在cmd里直接运行exe文件时,新进程的父句柄天然是cmd.exe。你看到父进程是explorer,本质是两个工具层面的假象:一是绝大多数可视化工具(包括任务管理器、早期版本的Process Explorer)读取的父PID,是进程PEB块里静态存储的创建时刻的记录值,不会动态更新;二是当原来的cmd.exe已经退出后,工具去查询对应PID的进程对象时拿不到有效句柄,就会兜底把父进程显示成explorer这类系统常驻宿主进程,不是真的父进程被系统替换成了explorer。
- 你看到“从PowerShell调用时新进程父进程是PowerShell”才是CreateProcess的原生默认逻辑:调用方如果没在创建时显式配置自定义父进程参数,内核会直接把当前调用进程标记为新进程的创建者,这个逻辑从早期Windows NT版本到现在的Win11都没有变过,不会因为你用的是哪个控制台程序就自动切换父进程归属。
关于“切断默认父进程依附、不暴露当前调用链路”的实现思路
首先要明确一个内核层面的前提:Windows从设计上就不支持“进程成为自身父进程”的效果。所有用户层能看到的父进程关系,本质是创建新进程时传入的父进程对象引用,一旦EPROCESS对象在内核里创建完成,这个引用关系就无法修改。而且由于对象创建的顺序是先分配EPROCESS内存结构、再绑定父进程引用,刚创建的新进程根本拿不到自身的有效句柄当父进程,强行构造循环引用会直接触发内核的对象一致性检查崩溃。
你说的“不依附默认父进程”的实际需求,完全可以通过官方提供的合规API实现,常见的可落地方案从简单到进阶排列如下:
- 最基础的句柄隔离:调用
CreateProcessA时直接加几个创建标志,从根源上切断生命周期绑定:- 给dwCreationFlags加上
CREATE_BREAKAWAY_FROM_JOB,让新进程脱离当前进程所属的作业对象管控,避免当前进程被终止时新进程被连带杀掉 - 设置bInheritHandles为
FALSE,不让新进程继承当前进程的控制台、管道、令牌等内部句柄 - 新进程创建完成后,立刻把返回的
hProcess、hThread句柄在当前进程里执行CloseHandle,不要在当前进程里保留任何对新进程的强引用,就算当前进程直接崩溃退出,内核也会正常回收已释放的引用,不会影响新进程运行
- 给dwCreationFlags加上
- 完全自定义父进程归属:从Windows Vista开始,系统在
CreateProcess的扩展属性里提供了原生的自定义父进程参数,不需要写NT原生API就能实现父进程替换:- 提前调用
InitializeProcThreadAttributeList初始化一个进程属性列表 - 用
UpdateProcThreadAttribute给列表加上PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性,传入你想要作为新进程父进程的句柄(比如你提前打开的explorer句柄、系统空闲进程句柄) - 调用
CreateProcessA的时候,把dwCreationFlags加上EXTENDED_STARTUPINFO_PRESENT标志,把扩展属性列表绑到STARTUPINFOEX结构里传入 - 整个流程走完后,新进程在PEB里记录的父进程PID就会是你传入的那个目标进程,完全看不到你实际发起调用的初始进程
- 提前调用
- 注意点:传入的自定义父进程句柄必须带
PROCESS_CREATE_PROCESS权限,不然CreateProcess会直接返回访问被拒绝的错误。
入门调试的实用提示
- 不要用自带任务管理器做父进程关系的调试,任务管理器的父进程显示逻辑有非常多兜底的错误场景,建议直接读进程PEB里静态存储的创建PID字段,或者用Process Explorer的内核层查询接口看真实的父进程引用
- 很多老教程说可以通过“把进程句柄复制到explorer空间再启动进程”实现父进程隐藏,本质就是上面说的自定义父进程API的早期实现,现在直接用官方的扩展属性接口就行,兼容性更好
- 如果你只是想让新进程不跟着当前控制台窗口退出,根本不需要折腾自定义父进程,只要创建的时候加
DETACHED_PROCESS标志,就能让新进程完全脱离控制台的会话上下文运行。
内容的提问来源于stack exchange,提问作者reg3x_mr
相关产品推荐
相关产品推荐

