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

                  突然的计划改变,又临时的打乱了我的计划,成熟的程序员,应该处事不惊,尽快的调整自己,感觉,目前公司的氛围不太好,太悠闲了,我应该趁着这个悠闲的时候,尽快的提高自己,继续努力。时刻的告诫自己,不要浮躁,厚积薄发,总有一天,我也会,破茧成蝶,飞向成功。

 

                 接下来,我会用十篇左右的篇幅,介绍文件过滤驱动的开发的方方面面,最终,通过一个完整的文件过滤驱动进行展示。

 

                 什么是文件过滤驱动了,文件过滤驱动有什么用了,这样说好了,现在的Windows杀毒软件都是在文件过滤驱动作为基础,加上服务,进程,线程的HOOK,比如,我们从网络上面拷贝了一个文件,或者临时创建了一个文件,文件过滤驱动都可以得到通知,在这上面,可以进一步进行操作,进行病毒文件的侦测,识别等动作。

 

                  既然是杀毒软件,必须在病毒的前面运行起来,才能起到杀毒的作用,据说,新的病毒已经可以寄生在BIOS,OptionRom里面,我觉得这样的病毒基本无解的。我们首先来看一下驱动启动的标志位,这个标志位,标识驱动什么时候启动,比如是在Loader阶段,还是服务阶段等。这个一般是由一个注册表项进行控制的,我们打开任何一个INF文件都可以找到这个项,这个项是StartType,它有如下可取的值:

                 

                   SERVICE_BOOT_START (0x00000000):                                             标识由OS Loader启动这个驱动,一般来说,文件系统过滤驱动使用这种启动方式或者SERVICE_DEMAND_START,在XP以后的操作系统中,过滤驱动为了适应适应最新的文件系统过滤驱动启动顺序组,必须使用这个标志。                                        SERVICE_SYSTEM_START (0x00000001)                                             标识启动在系统初始化的时候启动,文件系统识别器使用这个标识,除了SERVICE_DISABLE外,所有的文件系统,包含网络文件系统都使用这个标志或者SERVICE_DEMAND_START,这个标志也是给那些需要在系统初始化阶段被枚举的PNP设备的驱动使用,这些PNP设备驱动不装载系统。

                     

                   SERVICE_AUTO_START (0x00000002)                                            标识驱动在系统启动的过程中,被服务控制管理器启动,一般很少使用。                                            SERVICE_DEMAND_START (0x00000003)                                             标识驱动,可以被PNP管理器启动,或者被服务管理器启动。                                                                SERVICE_DISABLED (0x00000004)                                             标识驱动的启动,不是由OS Loader,服务控制管理器,或PNP管理器控制。文件系统驱动使用它,来标识,文件系统驱动的启动由文件系统识别器或者另外一种文件系统控制,比如CDFS, EFS, FastFat, NTFS, and UDFS,这个标志也经常在调试阶段,禁止驱动。                                         这里要强调一点的是,使用同一种的启动方式,相对的启动顺序是由驱动所在的组决定的。启动顺序组是对SERVICE_BOOT_START and SERVICE_SYSTEM_START有作用                                     

                   文件在系统启动的过程中被初始化,在IO系统的初始化过程中,IO管理器创建一个全局的文件系统队列,并初始化,由OS Loader和PNP管理器启动的文件系统和文件系统过滤驱动。

 

                  下面列举了一些关于系统启动流程,这些流程对文件系统和过滤驱动的开发很有用。
 
                  1,在系统启动的过程中,OS Loader在将控制权传递给内核之前,启动用于启动的文件系统,也可称做为RAW文件系统,和那些标识了SERVICE_BOOT_START标志的所有驱动,在内核得到控制权的时候,这些驱动都已经在内存中,
       

                 驱动的启动顺序的分配是通过load order groups,在文件系统过滤驱动中,一个新的文件系统过滤驱动在load order groups启动比其他的驱动要更前面一些。这些order groups 在Load Order Groups for File System Filter Drivers中描述。

 

                然后,在load order groups标识为filter的所有驱动开始启动,"filter" group 包含所有的存储的过滤驱动和文件系统过滤驱动,也包含第三方的过滤驱动。

 

                2,IO管理器创建一个包含4个段的全局文件系统队列,CD-ROM,DISK,TAPE DEVICE,和网络文件系统,后面,当其中的某一个注册的时候,就将它的控制设备对象(CDO)放进这个全局队列的相应的段中,在这个时候,还没有文件系统注册,所以队列还是空的。


                3,PNP管理器调用RAW文件系统和所有标识SERVICE_BOOT_START的驱动的DriverEntry例程。如果标识了 SERVICE_BOOT_START的驱动依赖于其他驱动,这些驱动也将被装载并启动。
                PNP管理器通过调用启动设备驱动的AddDevice例程来启动设备,如果启动设备有子设备,这些子设备也将被枚举。如果这些设备驱动的标识也为 SERVICE_BOOT_START驱动,这些子设备也将被装载并启动。如果设备驱动不都是 SERVICE_BOOT_START驱动,PNP管理器为这个设备创建一个设备结点,但是不启动设备。
                在这个点上,所有的启动驱动都被装载,设备被启动。


               4,PNP管理器沿着PNP设备树,定位并装载那些没有运行的每个设备结点的驱动。当每一个PNP设备启动了,PNP管理器枚举设备的子设备,如果有,PNP管理器配置这些子设备,装载它的设备驱动,并启动设备。PNP管理器装载驱动,都是通过驱动的StartType,LoadOrderGroup或Dependencies值。在这个点上,PNP管理器仅仅是负责配置并启动PNP设备枚举,如果设备不是PNP的,PNP管理器将省略设备,即使它的子设备是PNP设备。


 

              5,PNP管理器装载并初始那些驱动启动类型是 SERVICE_SYSTEM_START还没有装载的驱动。
              文件系统识别器(FsRec)在这个时候被装载。虽然文件系统识别器是"Boot File System"load order group,但是FsRec 不是启动文件系统。实际上启动的文件系统是,文件系统被mounted了启动卷,在启动过程中被装载。在SERVICE_SYSTEM_START 的后半阶段,被标识了"File System" load order group 的文件系统被装载。这包括Named Pipe File System (NPFS)和Mailslot File System (MSFS).这里不包含媒体文件系统比如NTFS, FAT, CDFS, or UDFS等。

 


              6,所有在启动阶段被装载的驱动并进行初始化之后,IO管理器将调用这些驱动注册的重新初始化的例程,重新初始化例程是一个回调函数,给所有注册的启动驱动一个机会,在这个时间点上进行额外的处理。重新初始化函数通过IoRegisterBootDriverReinitialization or IoRegisterDriverReinitialization来注册。

 

              7,服务控制管理器装载启动方式为SERVICE_AUTO_START 还没有被装载的驱动。

 

              File System Recognizer:我称为文件识别器。
              系统启动以后,存储的设备驱动都已经附加在系统上,已经被加载并启动,然而,文件系统还没有被装载,文件系统卷也没有被绑定。文件系统识别器(FsRec)在处理IRP_MJ_CREATE请求执行这些任务。
        
              FsRec在 SERVICE_SYSTEM_START 的系统开始阶段被装载,虽然它是 "Boot File System" load order group,但是FsRec不是一个启动文件系统,实际的启动文件系统,是一个绑定了启动卷,在系统开始阶段被装载的文件系统。

                          

                        

 

 

 

 

                 

 

                

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值