文件系统在系统启动期间会发生什么情况

注意

为获得最佳可靠性和性能 ,请使用支持 筛选器管理器的文件系统微筛选器驱动程序,而不是旧版文件系统筛选器驱动程序。 若要将旧驱动程序移植到微筛选器驱动程序,请参阅移植旧版 筛选器驱动程序指南

文件系统在系统启动过程中初始化;具体而言,在 I/O 系统初始化期间。 I/O 管理器创建全局文件系统队列,并初始化操作系统 (OS) 加载程序和 PnP 管理器加载的文件系统和旧筛选器驱动程序。

系统启动过程

下面是文件系统和旧版筛选器驱动程序开发人员感兴趣的系统启动过程的选定部分摘要。

  1. 在系统启动期间,OS 加载程序将加载启动文件系统、RAW 文件系统和类型为 SERVICE_BOOT_START驱动程序,然后加载程序将控制权转移到内核。 当内核获得控制时,这些驱动程序在内存中。

    驱动程序按分配给的加载顺序组进行加载。 在文件系统筛选器中,分配给其中一个新的文件系统筛选器驱动程序加载顺序组的筛选器在所有其他筛选器驱动程序之前加载。 文件系统筛选器驱动程序的加载顺序组中详细介绍 了这些加载顺序组

    然后加载"筛选器"加载顺序组的所有驱动程序。 请注意,"筛选器"组包括存储筛选器驱动程序以及文件系统筛选器驱动程序,并且包括第三方和内置筛选器驱动程序。

  2. I/O 管理器创建包含四个段的全局文件系统队列:CD-ROM、磁盘、磁带设备和网络文件系统各有一个段。 稍后,注册每个文件系统时,其控制设备对象将添加到此队列的适当段。 但是,此时尚未注册文件系统,因此队列为空。

  3. PnP 管理器调用 RAW 文件系统的 DriverEntry 例程以及所有SERVICE_BOOT_START驱动程序。

    如果SERVICE_BOOT_START驱动程序依赖于其他驱动程序,则这些驱动程序也加载并启动。

    PnP 管理器通过调用启动设备驱动程序的 AddDevice 例程来启动启动设备。 如果启动设备具有子设备,则枚举这些设备。 如果子设备是启动驱动程序,则子设备也会进行配置和启动。 如果设备的驱动程序并非都是启动启动驱动程序,PnP 管理器会为设备创建 devnode,但不启动设备。

    此时,将加载所有启动驱动程序并启动启动设备。

  4. PnP 管理器遍历 PnP 设备树,定位并加载与每个 devnode 关联但尚未运行的驱动程序。

    每个 PnP 设备启动时,PnP 管理器将枚举设备的子设备(如果有)。 PnP 管理器配置子设备、加载其设备驱动程序并启动设备。

    无论驱动程序的 StartTypeLoadOrderGroupDependencies 值如何,PnP 管理器都会加载每个设备的驱动程序。

    在此步骤中,PnP 管理器仅配置和启动 PnP 可枚举的设备。 如果设备不可 PnP 枚举,则 PnP 管理器将忽略该设备,并且不会枚举其子设备,即使子设备是 PnP 可枚举的。

  5. PnP 管理器加载和初始化尚未加载SERVICE_SYSTEM_START类型的驱动程序。

    此时将加载 (FsRec) 识别器。 请注意,尽管它位于"启动文件系统"加载顺序组中,但 FsRec 不是启动文件系统。 实际启动文件系统 ( 即装载启动卷的文件系统 ) 在启动过程开始时加载。

    在SERVICE_SYSTEM_START阶段,将加载"文件系统"加载顺序组中文件系统。 这包括名为 Pipe File System (NPFS) 和 Mailslot 文件系统 (MSFS) 。 它不包括基于媒体的文件系统,例如 NTFS、FAT、CDFS 或 UDFS。

    在此阶段中,也会加载"网络"加载顺序组中网络文件系统。

  6. 初始化启动时加载的所有驱动程序后,I/O 管理器将调用具有这些驱动程序的任何驱动程序的重新初始化例程。 重新初始化例程是一个回调例程,由启动驱动程序注册,此时需要在启动过程中为它提供额外的处理时间。 重新初始化例程通过调用 IoRegisterBootDriverReinitializationIoRegisterDriverReinitialization 进行注册

  7. 服务控制管理器加载尚未加载SERVICE_AUTO_START类型的驱动程序。

文件系统识别器

系统启动后,将加载并启动附加到系统的所有卷的存储设备驱动程序。 但是,并非所有内置文件系统都加载,并且并非所有文件系统卷都装载。 文件系统识别器 (FsRec) 根据需要执行这些任务 ,以IRP_MJ_CREATE请求。

FsRec 在系统启动SERVICE_SYSTEM_START阶段加载。 请注意,尽管它位于"启动文件系统"加载顺序组中,但 FsRec 不是启动文件系统。 实际启动文件系统 ( 即装载启动卷的文件系统 ) 在启动过程开始时加载。