Windows下能否获取程序启动的子进程创建的文件列表?有无相关API?
在Windows中追踪自启动进程创建的文件列表
可以实现,主要有两类技术方案,分别对应Win32原生API和.NET框架的能力:
一、Win32原生API方案
- ETW(Event Tracing for Windows):这是轻量级且高效的首选方案,无需驱动。通过订阅
Microsoft-Windows-Kernel-File事件提供者,捕获FileCreate、FileRename等核心文件操作事件,再通过事件中的进程ID(PID)筛选出你方启动的进程所创建的文件。核心API包括OpenTrace、EnableTraceEx2、ProcessTrace,解析事件数据即可提取文件路径。 - 文件系统过滤驱动:如果需要监控所有文件操作(包括绕过标准API的底层操作),可以开发WDM过滤驱动,注册回调函数拦截文件创建请求,并关联到目标进程的PID。但该方案门槛较高,需要驱动签名(64位系统强制要求),仅适合对监控精度要求极高的场景。
- Job对象辅助:配合Job对象(
CreateJobObject、AssignProcessToJobObject)可以将目标进程及其子进程纳入统一管控,再结合ETW或过滤驱动,能更精准地锁定需要监控的进程树,避免遗漏子进程创建的文件。
二、.NET实现方式
-.NET原生可以通过System.Diagnostics.Tracing命名空间的EventListener类,订阅Microsoft-Windows-Kernel-File的事件,解析事件负载(Payload)获取文件路径和进程ID,筛选出目标进程的记录。
- 也可以通过P/Invoke直接调用Win32的ETW相关API,实现更灵活的事件过滤和控制逻辑,适合需要定制化监控规则的场景。
注意事项
- 监控操作需要足够权限:ETW捕获内核事件通常需要管理员权限;
- 需覆盖子进程:如果目标进程会启动子进程,要同时监控子进程的PID,避免遗漏文件;
- 性能差异:ETW性能开销极低,适合大多数生产场景;过滤驱动性能影响稍大,但监控范围更全面;
内容的提问来源于stack exchange,提问作者user8649828
相关产品推荐
相关产品推荐

