文件系统在系统启动期间会发生什么情况
注意
为了获得最佳可靠性和性能,请使用支持筛选器管理器的 文件系统微筛选器驱动程序 ,而不是旧版文件系统筛选器驱动程序。 若要将旧驱动程序移植到微筛选器驱动程序,请参阅 移植旧筛选器驱动程序的指南。
文件系统在系统启动过程中初始化;具体而言,在 I/O 系统初始化期间。 I/O 管理器创建全局文件系统队列,并初始化操作系统 (操作系统) 加载器和 PnP 管理器加载的文件系统和旧筛选器驱动程序。
系统启动进程
下面是文件系统和旧筛选器驱动程序开发人员感兴趣的系统启动过程的选定部分的摘要。
在系统启动期间,OS 加载程序将加载启动文件系统、RAW 文件系统和所有类型为 SERVICE_BOOT_START 的驱动程序,然后加载程序将控制权转移到内核。 当内核获得控制权时,这些驱动程序位于内存中。
驱动程序按其分配到的加载顺序组的顺序进行加载。 在文件系统筛选器中,分配给新文件系统筛选器驱动程序加载顺序组之一的那些在所有其他筛选器驱动程序之前加载。 文件系统 筛选器驱动程序的加载顺序组中详细介绍了这些加载顺序组。
然后加载“筛选器”加载顺序组中的所有驱动程序。 请注意,“筛选器”组包括存储筛选器驱动程序和文件系统筛选器驱动程序,它包括第三方和内置筛选器驱动程序。
I/O 管理器创建包含四个段的全局文件系统队列:CD-ROM、磁盘、磁带设备和网络文件系统各一个段。 稍后,注册每个文件系统时,其控制设备对象将添加到此队列的相应段。 但是,此时尚未注册任何文件系统,因此队列为空。
PnP 管理器调用 RAW 文件系统和所有SERVICE_BOOT_START驱动程序的 DriverEntry 例程。
如果SERVICE_BOOT_START驱动程序依赖于其他驱动程序,则也会加载和启动这些驱动程序。
PnP 管理器通过调用启动设备驱动程序的 AddDevice 例程来启动启动设备。 如果启动设备具有子设备,则会枚举这些设备。 如果子设备驱动程序是启动驱动程序,则还会配置和启动子设备。 如果设备的驱动程序不是所有启动驱动程序,则 PnP 管理器会为设备创建开发节点,但不启动设备。
此时,将加载所有启动驱动程序并启动启动设备。
PnP 管理器遍历 PnP 设备树,查找并加载与每个开发节点关联但尚未运行的驱动程序。
当每个 PnP 设备启动时,PnP 管理器会枚举设备的子级(如果有)。 PnP 管理器配置子设备、加载其设备驱动程序并启动设备。
无论驱动程序的 StartType、LoadOrderGroup 或 Dependencies 值如何,PnP 管理器都会加载每个设备的驱动程序。
在此步骤中,PnP 管理器仅配置和启动可枚举的设备。 如果设备不可枚举,则 PnP 管理器将忽略该设备,并且不枚举其子设备,即使子设备是 PnP 枚举的。
PnP 管理器加载并初始化尚未加载SERVICE_SYSTEM_START类型的驱动程序。
此时加载文件系统识别器 (FsRec) 。 请注意,尽管 FsRec 位于“启动文件系统”加载顺序组中,但 FsRec 不是启动文件系统。 实际启动文件系统 , 即装载启动卷的文件系统在启动过程开始时加载。
稍后在SERVICE_SYSTEM_START阶段,将加载“文件系统”加载顺序组中的文件系统。 这包括命名管道文件系统 (NPFS) 和 Mailslot 文件系统 (MSFS) 。 它不包括基于媒体的文件系统,例如 NTFS、FAT、CDFS 或 UDFS。
处于“网络”加载顺序组中的网络文件系统也在此阶段加载。
初始化在启动时加载的所有驱动程序后,I/O 管理器将调用具有这些驱动程序的任何驱动程序的重新初始化例程。 重新初始化例程是由启动驱动程序注册的回调例程,此时在启动过程中需要为该驱动程序提供额外的处理时间。 重新初始化例程是通过调用 IoRegisterBootDriverReinitialization 或 IoRegisterDriverReinitialization 注册的。
服务控制管理器加载尚未加载SERVICE_AUTO_START类型的驱动程序。
文件系统识别器
系统启动后,将加载并启动附加到系统的所有卷的存储设备驱动程序。 但是,并非所有内置文件系统都会加载,并且并非所有文件系统卷都装载。 文件系统识别器 (FsRec) 根据需要执行这些任务,以处理 IRP_MJ_CREATE 请求。
FsRec 在系统启动SERVICE_SYSTEM_START阶段加载。 请注意,尽管 FsRec 位于“启动文件系统”加载顺序组中,但 FsRec 不是启动文件系统。 实际启动文件系统 , 即装载启动卷的文件系统在启动过程开始时加载。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈