磁盘驱动相关知识

应用程序(CreateFile,ReadFile)

 

 

I/O子系统(向FS发送I/O请求)

 

 

文件系统设备栈

---------------------------------------------------------------------------------------------------------------

文件过滤 驱动管理器       FltMgr.sys                                                                                   |       

文件系统(在原始卷上强加上文件结构)NTFS                                                                   |

---------------------------------------------------------------------------------------------------------------

 

 

卷管理设备栈

------------------------------------------------------------------------------------------------------------------------------------

卷快照 (管理软件快照) vbp  volsnap.sys                                                                                                 |

                                                                                                                                                                   |         

卷管理器 (FtDisk.sys 总线型驱动程序,负责列举基本的磁盘,以便检测基本卷的存在情况,                    |

并且将他们报告给PnP管理器,当它确定了分区和卷的对应关系并且该卷的所有分区都存在时,                  |

就会创建一个卷设备对象)向用户提供卷的语义(c: d:),支持基本的和动态的磁盘(RAID)                   |

在win7下是volmgr.sys                                                                                                                                 |

------------------------------------------------------------------------------------------------------------------------------------

 

磁盘管理设备栈

-------------------------------------------------------------------------------------------------------------------------------------------

分区管理器(PartMgr.sys)管理磁盘分区,帮FtDisk.sys确定磁盘的基本分区                                                       |

                                                                                                                                                                            |

类   (类驱动,比如磁盘过滤驱动,管理着一种特定的设备类型,比如磁盘、磁带)(disk.sys)                             |

                                                                                                        |

端口|小端口   (端口:管理一种特定的传输设备SCSI,RAID。小端口:实现具体细节,如硬件I/O)                   |

|

磁盘子系统   (最底层了)                                                                                                                                   |

------------------------------------------------------------------------------------------------------------------------------------------|

 

磁盘设备名:\Device\HarddiskX\DRX     (X为数字)              符号连接:\\.\ PhysicalDriveX     (X为数字)

卷设备名:\Device\HarddiskVolumeX    (X为数字)              符号连接:\\.\HarddiskVolumeX (X为数字)或 \\.\D:

每一个卷设备对应一个磁盘分区,但并不是说\Device\HarddiskVolume1就是代表C盘,\Device\HarddiskVolume2就代表D盘。没有这种对应关系。卷的编号都是从1开始的

 

一个应用程序打开类似D:\Temp\Test.txt这样的文件,windows子系统在调用内核文件打开例程NtCreateFile之前,会将名字转换为\Global??\D:\Temp\Test.txt这样的。NtCreateFile会调用对象管理器来解析该名称,对象管理器解析\Global??\D:为\Device\HarddiskVolume2,此时\Temp\Test.txt并未被解析,这时,I/O管理器会检查这个磁盘卷设备的vpb信息,查看其是否引用了一个文件系统,如果没有,管理器就会提示挂载,挂在完后会填充vbp结构,该卷第一个扇区中记录了文件系统的格式。如果有,管理器会将\Temp\Test.txt交给文件系统进行定位,完成相关请求。

 

卷的识别过程是由“一个文件系统声称对于某个分区具有所有权”构成的。首先系统会产生一个CTL_VOLUME_ONLINE的irp使卷处于上线状态,如果此时卷没挂载,当系统或者应用程序第一次打开一个卷的时候(只有online后,才能对卷进行读写操作,boot和系统卷除外,见msdn),windows 挂载管理器执行一个mount操作,然后当用户第一次访问卷上的文件的时候,执行卷识别,在这个过程中,文件系统也挂载上了。

 

疑点:在卷online的时候,文件系统还没有挂载上,所以在boot回调中进行文件系统级别的操作,经过测试,boot回调在online前面,纠结了

 

更多请参见《windows内核原理与实践》 卷相关章节,详细说明了层次关系和磁盘枚举

原文地址:https://www.cnblogs.com/magicdmer/p/4458365.html