Windows卷挂载流程

Windows卷挂载流程 Windows卷挂载流程学习Windows文件系统过滤的前置知识。两种卷设备1. 存储卷设备Storage Volume Device创建者由存储驱动栈如Disk.sys、FtDisk.sys等创建代表一个逻辑存储单元分区。设备名示例\Device\HarddiskVolume1。作用这是物理磁盘分区在系统内核中的直接表示负责处理底层的块读写请求。2. 文件系统卷设备File System Volume Device Object, VDO创建者文件系统驱动。设备名通常没有名字匿名设备对象。作用这是文件系统驱动为管理特定卷上的文件、目录等逻辑结构而创建的实例对象。它构成了文件系统设备栈的底部所有发往该卷的文件I/O请求最终都会到达这里。完整的卷挂载流程存储卷就绪存储驱动识别到一个新分区如插入U盘并为其创建存储卷设备\Device\HarddiskVolumeX。挂载请求I/O管理器或挂载管理器Mount Manager发现该卷需要被访问并向已注册的文件系统驱动发出卷挂载请求。创建VDO文件系统驱动例如NTFS收到请求后为该卷创建一个文件系统卷设备对象VDO。建立关联文件系统驱动通过一个称为卷参数块VPB的数据结构将新创建的VDO与底层的存储卷设备对象关联起来并设置VPB_MOUNTED标志完成挂载。过滤驱动附加挂载完成后文件系统过滤驱动无论是传统的还是Minifilter便可以将其过滤设备对象附加到这个新创建的文件系统VDO之上从而拦截发往该卷的所有文件I/O操作。对文件过滤驱动的意义这正是为什么在文件过滤驱动中需要监听卷挂载通知并为其创建过滤设备。附加的目标正是文件系统驱动为每个卷创建的VDO而不是存储驱动创建的\Device\HarddiskVolumeX。理解这两层设备的区别是掌握Windows存储栈和文件过滤机制的关键。IO请求如何从文件系统卷设备到存储卷设备文件系统卷设备VDO接收到的文件I/O请求最终是通过I/O请求包IRP在设备栈中层层向下传递到达存储卷设备的。具体过程如下关键桥梁卷参数块VPB文件系统驱动在挂载卷时会创建一个卷参数块Volume Parameter Block, VPB。这个数据结构将文件系统卷设备对象VDO与底层的存储卷设备对象如\Device\HarddiskVolume1关联起来。VPB是两者连接的纽带。请求传递流程接收请求当一个文件I/O请求如读文件到达文件系统VDO时它已被解析为针对特定卷上特定文件的操作。文件系统处理文件系统驱动如NTFS根据请求类型执行其核心逻辑路径解析、权限检查、文件记录查找、将文件偏移转换为磁盘上的簇号等。转换为磁盘操作文件系统驱动将文件的“读/写N个字节”的请求根据簇映射关系转换为一个或多个针对磁盘逻辑块地址LBA的“读/写N个扇区”的请求。向下传递文件系统驱动通过VDO的VPB找到关联的存储卷设备对象。然后它通常会创建新的IRP构建一个全新的IRPIRP_MJ_READ或IRP_MJ_WRITE其参数包含计算出的起始LBA和扇区数量。或重用/转发IRP在某些情况下也可能修改原始IRP的参数后转发。调用IoCallDriver函数将这个新的或修改后的IRP发送给存储卷设备对象。存储栈处理存储卷设备对象属于存储驱动栈可能包含卷管理器、磁盘驱动等。它接收IRP后进一步处理最终将请求发送给磁盘端口驱动和磁盘硬件完成物理读写。设备栈的完整视图从高层到低层一个文件读请求的典型路径是用户态API→I/O管理器→文件系统过滤驱动栈→文件系统驱动VDO→存储卷过滤驱动栈→存储卷设备→磁盘驱动→硬件