存储设备堆栈、存储卷和文件系统堆栈

注意

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

在探索文件系统旧版筛选器驱动程序如何附加到文件系统和卷之前,有必要了解存储设备堆栈、存储卷和文件系统堆栈之间的关系。

存储设备堆栈

大多数存储驱动程序都是 PnP 设备驱动程序,由 PnP 管理器加载和管理。 存储设备在 PnP 设备树中表示,该树包含计算机上每个物理或逻辑设备的设备节点或 devnode。 请务必注意,文件系统和文件系统筛选器驱动程序不是 PnP 设备驱动程序;因此,PnP 设备树 不包含它们的开发节点。

特定存储设备的开发节点包含设备的 存储设备堆栈 ;这是表示设备的存储设备驱动程序的附加设备对象的链。 由于存储设备(如磁盘)可能包含一个或多个逻辑卷 (分区或动态卷) ,因此存储设备堆栈本身看起来更像是树而不是堆栈。 此树的根是存储适配器或与存储堆栈集成的另一个设备堆栈 (FDO) 的功能设备对象。 此树的叶子是物理设备对象, (PDO) 逻辑卷(也称为 存储卷),可在其中装载文件系统卷。

有关一些典型存储设备堆栈的关系图和说明,请参阅存储设备设计指南的以下部分:

存储卷

是格式化为存储目录和文件的存储设备,例如固定磁盘、软盘或 CD-ROM。 大型卷可以划分为多个 逻辑卷,也称为 分区。 每个逻辑卷都经过格式化,以便由特定基于媒体的文件系统(如 NTFS、FAT 或 CDFS)使用。

存储卷(或存储设备对象)是一个设备对象 , 通常是一个物理设备对象 (PDO) , 表示系统的逻辑卷。 存储设备对象驻留在存储设备堆栈中,但它不一定是堆栈中最顶层的设备对象。

当文件系统装载到存储卷上时,它会创建一个文件系统卷设备对象, (VDO) 表示文件系统的卷。 文件系统 VDO 通过名为 卷参数块 的共享对象装载到存储设备对象上, (VPB) 。

装载管理器

装载管理器是 I/O 系统的一部分,负责管理存储卷信息,例如卷名称、驱动器号和卷装入点。 将新的存储卷添加到系统后,将通过以下方式之一通知装载管理器其到达:

唯一卷名称

装载管理器通过查询卷驱动程序以获取以下信息来响应新存储卷的到来:

  • 卷的非持久性设备对象名称 (或目标名称) ,位于系统对象树的 Device 目录中 (例如:“\Device\HarddiskVolume1”)

  • 卷的全局唯一标识符 (GUID) ,也称为 唯一卷名称

  • 建议的卷的永久性符号链接名称,例如驱动器号 (,例如“\DosDevices\D:”)

有关存储驱动程序与装载管理器之间的交互的详细信息,请参阅 支持存储类驱动程序中的装载管理器请求

文件系统堆栈

文件系统驱动程序创建两种不同类型的设备对象:控制设备对象 (CDO) 和卷设备对象 (VDO) 。 文件系统堆栈由其中一个设备对象以及附加到它的文件系统筛选器驱动程序的任何筛选器设备对象组成。 文件系统的设备对象始终构成堆栈的底部。

文件系统 CDO

文件系统 CDO 表示整个文件系统,而不是单个卷,并存储在全局文件系统队列中。 文件系统在其 DriverEntry 例程中创建一个或多个命名的 CDO。 例如,FastFat 创建两个 CDO:一个用于固定媒体,一个用于可移动媒体。 CDFS 只创建一个 CDO,因为它只有可移动媒体。

文件系统 CDO 需要命名。 这是因为文件系统筛选器驱动程序以及许多内核模式支持例程依赖于 VDO 和 CDO 之间的这种差异来区分它们。

文件系统 VDO

文件系统 VDO 表示文件系统装载的卷。 文件系统在装载卷时创建 VDO,通常是为了响应卷装载请求。 与 CDO 不同,VDO 始终与特定的逻辑或物理存储设备相关联。

注意

与 CDO 不同,永远不能命名 VDO,因为命名卷设备对象会产生安全漏洞。