Windows驱动_文件系统过滤驱动之二

 

           最近的心情有点不好,之前因为很忙,没有时间去想很多事情,现在闲下来,很多事情就开始想了,我应该使用这段时间,好好的利用,可以继续提高一些,我们无法控制明天,那就请抓住今天。加油!

 

 

          今天偶尔看到了,关于一些文件过滤驱动的代码,终于知道了,微软为什么,要把文件驱动,单独拿出来,作为驱动的另外一级。它非常复杂,所以,也给了我一些想征服它的勇气,我喜欢挑战,喜欢做有难度的事情。
 
          今天我们还是看些基础知识,在看,文件系统过滤驱动如何附加在文件系统和文件卷之前,我们先来看一下,存储的设备堆
栈,存储卷,以及文件系统堆栈。

 

          首先来看一下存储设备堆栈,大多数的存储驱动都是PNP的设备驱动,它的装载和管理都是通过PNP管理器,这些设备在PNP管理的设备树上面都有物理设备结点。这里,我们需要强调的是,文件系统和文件系统过滤驱动都不是PNP设备驱动,当然PNP的设备树在也没有结点来代表它们。下面我们用SCSI上面附加着CD-ROM和DISK做为例子,来分析存储设备对象堆栈。

 

 

          我们从最下面往上看:

 

         1,首先PNP管理器创建为PCI创建一个PDO,然后存储总线驱动也就是PCI总线驱动创建一个FDO,附加在PDO上面.

 

         2, PCI总线驱动枚举并创建PDO,来标识PCI总线是枚举到的存储适配器,这里也就是SCSI控制器。SCSI驱动,它是以Port/Miniport一起创建一个FDO,并附加在PDO上面。

 

        3,SCSI Port驱动分别创建两个PDO,分别代表附加在上面的DISK和CD-ROM.

 

        4, 一个或多个过滤设备对象,可以附加在通过存储SCSI Port驱动创建的PDO上面。这些过滤驱动可以修改一些请求的设置等等,比如修复已知的问题,而不用改变硬件。

 

        5,存储的类驱动,这里指disk.sys,创建一个FDO,附加在下次FiDO的上面。这里有2个FDO,分别是CD-ROM设备,还有一个是分区0硬盘设备,分区0代表整个原始磁盘,一直存在,不管是不是格式化了。

 

        6,这个类驱动,也扮演总线驱动,当PNP管理器查询它的子设备的时候,它需要返回信息。比如,一个移动磁盘驱动可能返回一组PDO代表它一共有多少个分区,好让更上层的驱动可以将FDO附加在其上面。对于一个固定的磁盘,磁盘管理器附加FDO到代表整个硬盘的分区0上面,它可以处理所有的PNP行为。

 

        7,一个或多个过滤驱动可以附加在类驱动的上面,不想底层过滤驱动,上层过滤驱动可以解释发送给类驱动的IRP,可以有选择将其传到下层设备对象上,这个过滤驱动,如果需要的话,可以解释所有的读写请求,IOCTL等附加请求,比如,可以使能应用程序提供磁盘访问密码或其他的信息等。这里显示的,过滤驱动只是附加在物理PDO的分区1上面。

 

        再来看一下,存储卷。
  
        一个卷就是一个存储设备,类似与固定的磁盘,软盘,CD-ROM等,它是以一种固定的格式来存储目录和文件。一个大的卷可
以分为很多逻辑卷,也可以叫做分区,每一个逻辑卷都可以格式化为基于NTFS,FAT,CDFS文件系统的媒体存储格式。

 

       一个存储卷,或者存储设备对象都是一个设备,通常使用PDO来表示系统中的一个逻辑卷。存储设备对象在设备堆栈中,但是一般不在设备堆栈的最上层。当一个文件系统绑定在一个存储卷上面,它就创建一个文件卷设备对象,简称VDO来代表文件系统的卷。文件系统的VDO通过共享对象VPB(volume parameter block)的方式被绑定在存储设备对象上。

 

       绑定管理器(Mount Manager):

 

       绑定管理器是I/O系统的一部分,它负责管理卷的信息,比如卷的名字,磁盘的字符,卷绑定的点。卷管理器被下面的方式被通知一个新的存储卷被增加到系统里。

 

       创建存储卷的类驱动调用IoRegisterDeviceInterface注册一个新的接口在MOUNTDEV_MOUNTED_DEVICE_GUID 接口类中,当绑定发生,PNP设备接口通知卷管理器一个新卷被增加到系统里。

 

       存储卷的驱动发送给绑定管理IRP_MJ_DEVICE_CONTROL,  IOCTL 代码是 IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION器,这个请求可以通过IoBuildDeviceIoControlRequest函数创建。

 

       唯一的卷名:
      
       绑定管理器通过查询卷驱动的如下信息来响应一个新到的存储卷:

 

       卷的设备对象的名字,在系统对象树的Device目录下。比如:"\Device\HarddiskVolume1"

 

       卷的GUID,也叫做唯一的卷名。

 

       卷的符号连接名,也就是symbolic link name.(for example, "\DosDevices\D:")


      

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值