zoukankan      html  css  js  c++  java
  • 磁盘驱动相关知识

    应用程序(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内核原理与实践》 卷相关章节,详细说明了层次关系和磁盘枚举

  • 相关阅读:
    压缩命令
    u盘挂载
    三种不同的空格
    打出圆圈数字①的快捷方法
    循环使用的一个坑
    Python&R:警告信息管理
    Matlab的基本矩阵运算
    R语言-程序执行时间
    Python:n个点的费马问题
    Python网络数据采集(1):博客访问量统计
  • 原文地址:https://www.cnblogs.com/magicdmer/p/4458365.html
Copyright © 2011-2022 走看看