了解具有重复卷名称的卷枚举

枚举卷时,生成的卷信息列表中可能会出现重复的卷名称。

为了帮助了解发生此情况的原因,请考虑以下方案:卷枚举例程 FltEnumerateVolumeInformation 用于枚举所有系统卷。 这会导致缓冲区填充有卷信息结构 - 筛选器管理器已知的每个卷一个。 在此缓冲区中,每个卷信息结构的类型可以是 FILTER_VOLUME_BASIC_INFORMATIONFILTER_VOLUME_STANDARD_INFORMATION,但不能同时为两者。

给定此卷信息结构列表后,多个列表元素可以包含相同的卷名称。 也就是说,两个或多个列表元素的 FilterVolumeName 成员可以相同。 这是可能的,因为所有筛选器管理器枚举例程(如 FltEnumerateVolumes)枚举卷,包括已卸载但尚未 (的卷,因为打开的文件仍然存在于卷) 。 因此,当卷被卸除时,其名称可以在卷信息列表中多次出现 - 一次用于其当前装载状态,一次用于其先前的已卸除但未拆毁状态(最简单的情况)。

如果卷信息列表中出现重复的卷名称,上述说明将解释每组相同名称。 但是,可以通过使用以下过程来确认上述方案:

  • 如果列表中填充了 FILTER_VOLUME_STANDARD_INFORMATION 类型的结构,请标识 FilterVolumeName 成员相等的一组结构。 如果此组中的一个或多个结构在其 Flags 成员中设置了FLTFL_VSI_DETACHED_VOLUME标志,则与该组关联的卷处于已卸载但未拆解的状态。 这确认存在重复卷名称的原因。 对所有剩余的组重复此过程(如果适用)。

  • 如果列表中填充了 FILTER_VOLUME_BASIC_INFORMATION 类型的结构,请将此列表转换为其等效FILTER_VOLUME_STANDARD_INFORMATION结构形式,并按照前面的项目符号中所示继续操作。

注意 FILTER_VOLUME_STANDARD_INFORMATION结构仅从 Windows Vista 开始可用。

受本主题影响的例程和结构包括:

FILTER_VOLUME_BASIC_INFORMATION

FILTER_VOLUME_STANDARD_INFORMATION

FilterVolumeFindFirst

FilterVolumeFindNext

FltEnumerateVolumeInformation

FltEnumerateVolumes

FltGetVolumeInformation