文件系统筛选器加载顺序

Windows 操作系统基于以下条件加载文件系统筛选器驱动程序:

  • 驱动程序的启动类型,其中每个启动类型表示启动系统的阶段。
  • 系统启动时加载的文件系统筛选器驱动程序的加载顺序组。 文件系统筛选器驱动程序需要加载顺序组的概念,以便与旧文件系统筛选器驱动程序进行互操作性。 请注意,可以随时加载“微筛选器”筛选器驱动程序。

在了解在系统启动序列期间何时以及如何加载文件系统筛选器驱动程序之前,有必要了解驱动程序启动类型和加载顺序组。

驱动程序启动类型

内核模式驱动程序的 启动类型 指定是在系统启动期间还是之后加载驱动程序。 有五种可能的开始类型:

开始类型 说明
SERVICE_BOOT_START (0x00000000) 指示操作系统 (操作系统) 加载程序启动的驱动程序。 文件系统筛选器驱动程序通常使用此启动类型或SERVICE_DEMAND_START。 旧文件系统筛选器必须使用此启动类型;有关详细信息 ,请参阅文件系统筛选器加载顺序组
SERVICE_SYSTEM_START (0x00000001) 指示驱动程序在 OS 初始化期间启动。 文件系统识别器使用此启动类型。 除了下面“SERVICE_DISABLED”下列出的文件系统外,文件系统 (包括网络文件系统组件) 通常使用此启动类型或SERVICE_DEMAND_START。 对于在系统初始化期间枚举但加载系统不需要的 PnP 设备,设备驱动程序也使用此启动类型。
SERVICE_AUTO_START (0x00000002) 指示在系统启动期间由服务控制管理器启动的驱动程序。 很少使用。
SERVICE_DEMAND_START (0x00000003) 指示由设备驱动程序) 的 PnP 管理器 (或文件系统的服务控制管理器 (和文件系统筛选器驱动程序) 按需启动的驱动程序。
SERVICE_DISABLED (0x00000004) 指示操作系统加载程序、服务控制管理器或 PnP 管理器未启动的驱动程序。 由文件系统识别器 (加载的文件系统使用,除非它们是启动文件系统) ,或者在 EFS) 其他文件系统的情况下 (。 此类文件系统包括 CDFS、EFS、FastFat、NTFS 和 UDFS。 也用于在调试期间暂时禁用驱动程序。

所有指定启动类型为 SERVICE_BOOT_START 的驱动程序都将在启动类型为 SERVICE_SYSTEM_START 或 SERVICE_AUTO_START 的驱动程序之前加载。 在每个开始类型类别中,加载顺序组确定何时加载文件系统筛选器驱动程序 (和旧筛选器驱动程序) 。

指定起始类型

驱动程序编写器可以通过以下任一方式在安装时指定驱动程序的开始类型:

  • 通过在驱动程序的 INF 文件中由 AddService 指令引用的 service-install-section 中为 StartType 条目指定所需的开始类型。 为筛选器驱动程序创建 INF 文件的ServiceInstall 部分介绍了此方法。

  • 在从用户模式安装程序调用 CreateServiceChangeServiceConfig 时,传递 dwStartType 参数的所需开始类型。 此方法在 Microsoft Windows SDK 文档中的 CreateServiceChangeServiceConfig 参考条目中介绍。

驱动程序加载顺序组

在SERVICE_BOOT_START和SERVICE_SYSTEM_START启动类型中,加载驱动程序的相对顺序由每个驱动程序的 加载顺序组指定。

启动类型为SERVICE_BOOT_START的驱动程序称为 启动 (或启动) 驱动程序。 在 Microsoft Windows 2000 和更早的系统上,启动驱动程序的大多数筛选器都属于“筛选器”组。 在 Microsoft Windows XP 及更高版本的系统上,启动驱动程序的筛选器通常属于 FSFilter 加载顺序组之一。 文件系统 筛选器驱动程序的加载顺序组中详细介绍了这些加载顺序组

启动类型为SERVICE_SYSTEM_START的驱动程序也会按其所属的加载顺序组的顺序加载。 但是,在加载所有启动驱动程序之前,不会加载任何系统启动驱动程序。

注意

对于启动类型为 SERVICE_AUTO_START、SERVICE_DEMAND_START 或 SERVICE_DISABLED 的驱动程序,将忽略加载顺序组。

可以在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control注册表项的 ServiceGroupOrder 子项下找到加载顺序组的完整有序列表。

SERVICE_BOOT_START和SERVICE_SYSTEM_START驱动程序使用相同的负载组排序。 但是,在加载任何SERVICE_SYSTEM_START驱动程序之前,所有SERVICE_BOOT_START驱动程序都会加载和启动。

指定加载顺序组

驱动程序编写器可以通过以下任一方式在安装时指定驱动程序的加载顺序组:

  • 通过在驱动程序的 INF 文件中由 AddService 指令引用的 service-install-section 中为 LoadOrderGroup 条目指定所需的加载顺序组。 为筛选器驱动程序创建 INF 文件的ServiceInstall 部分介绍了此方法。

  • 从用户模式安装程序调用 CreateServiceChangeServiceConfig 时,传递 lpLoadOrderGroup 参数的所需开始类型。 此方法在 Microsoft Windows SDK 文档中的 CreateServiceChangeServiceConfig 参考条目中介绍。

有关驱动程序加载顺序和加载顺序组的更多常规信息,请参阅 指定驱动程序加载顺序

加载筛选器驱动程序的规则

以下有关开始类型和加载顺序组的规则确定何时加载筛选器驱动程序:

  • 同时加载指定特定开始类型和加载顺序组的筛选器驱动程序,该启动类型和加载顺序组中的其他文件系统筛选器驱动程序和旧筛选器驱动程序。
  • 在每个加载顺序组中,文件系统筛选器驱动程序和旧驱动程序通常按随机顺序加载。 这通常会导致根据驱动程序的安装顺序加载驱动程序。
  • 如果文件系统筛选器驱动程序或旧筛选器驱动程序未指定加载顺序组,则会在指定加载顺序组的相同启动类型的所有其他驱动程序之后加载该组。