You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过文件系统驱动追踪网络驱动器到本地的文件复制移动操作

核心遗漏关键点

你无法提取源路径信息的核心问题是对Windows文件复制的I/O路径、Minifilter请求关联逻辑的认知有遗漏,具体缺失的点如下:

  • 你单独过滤的IRP_MJ_CREATE、IRP_MJ_WRITE都属于目标本地文件的I/O请求,和源网络文件没有直接绑定关系:文件复制的本质是上层应用先打开SMB共享的源文件发起IRP_MJ_READ读取数据,再打开本地目标文件发起IRP_MJ_WRITE写入数据,两类请求本身是独立的,单独过滤任意一类都无法直接关联源和目标路径。
  • 没有做同一进程上下文的I/O关联:常规用户态复制逻辑中,同一个进程/线程会在短时间内先后发起源文件读、目标文件写的请求,且读取的数据块大小、偏移和写入的参数高度匹配,你没有基于进程ID、I/O时间窗口、数据块特征做关联,自然无法把源路径和目标路径绑定。
  • 没有识别SMB网络驱动器的文件对象特征:映射盘符的SMB共享对应的FILE_OBJECT,其关联的DeviceObject属于MUP(多UNC提供程序)或SMB重定向器驱动的设备栈,你可以通过设备类型、设备名称前缀快速判断一个文件对象是否属于SMB网络共享,以此筛选出符合要求的源文件读请求。
  • 忽略跨卷移动的特殊逻辑:网络驱动器到本地的移动属于跨卷操作,本质是「复制+源文件删除」的组合逻辑,和复制的I/O路径完全一致,只需要额外监听源文件的IRP_MJ_SET_INFORMATION删除请求即可区分复制和移动操作。
可行实现思路
  • 首先在Minifilter预操作回调中过滤所有IRP_MJ_CREATE请求,记录所有进程打开的文件路径、对应文件对象指针、所属设备类型(是否为SMB网络共享)、打开权限,存入哈希表,键可以用「进程ID+文件对象指针」的组合。
  • 过滤IRP_MJ_READ请求:如果读请求对应的文件对象属于SMB网络共享,且发起进程为常规用户态进程,记录当前进程ID、读取的文件偏移、数据块大小、对应的源文件路径。
  • 过滤IRP_MJ_WRITE请求:如果写请求对应的文件对象属于本地磁盘,匹配同一进程ID下、相同偏移和数据块大小的近期读记录,匹配成功即可关联到对应的源网络文件路径,完成一次复制/移动操作的记录。
  • 适配缓存复制场景:如果是带系统缓存的批量复制,可能出现批量读批量写的错位,可以适当调整时间窗口的匹配阈值,或者通过FLT_PARAMETERS中的I/O标志做更精准的匹配。

内容的提问来源于stack exchange,提问作者Inter Veridium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:48:01