Поделиться через


Основные сведения о перечислениях томов с повторяющимися именами томов

При перечислении томов в итоговом списке сведений о томах могут отображаться повторяющиеся имена томов.

Чтобы понять, почему это может произойти, рассмотрим следующий сценарий: подпрограмма перечисления томов FltEnumerateVolumeInformation используется для перечисления всех системных томов. В результате создается буфер, заполненный информационными структурами томов — по одной для каждого тома, известного диспетчеру фильтров. В этом буфере каждая структура данных тома может иметь тип FILTER_VOLUME_BASIC_INFORMATION или FILTER_VOLUME_STANDARD_INFORMATION, но не оба типа.

Учитывая этот список информационных структур томов, несколько элементов списка могут содержать одно и то же имя тома. То есть элементы FilterVolumeName двух или более элементов списка могут быть идентичными. Это возможно, так как все подпрограммы перечисления диспетчера фильтров, такие как FltEnumerateVolumes, перечисляют тома, включая тома, которые были отключены, но не были снесены (из-за того, что открытые файлы все еще существуют на томе). Таким образом, при отключении тома его имя может отображаться в списке сведений о томе несколько раз — один раз для текущего состояния подключения и один раз для предыдущего отключенного, но неразрывного состояния, в простейшем случае.

Если в списке сведений о томах отображаются повторяющиеся имена томов, каждая группа идентичных имен объясняется приведенным выше описанием. Однако можно подтвердить приведенный выше сценарий с помощью следующих процедур:

  • Если список заполнен структурами типа FILTER_VOLUME_STANDARD_INFORMATION, определите группу структур, члены которых FilterVolumeName равны. Если одна или несколько структур в этой группе имеют флаг FLTFL_VSI_DETACHED_VOLUME, установленный в ее элементе Flags , том, связанный с группой, находился в отключенном, но неразрывном состоянии. Это подтверждает, почему существуют повторяющиеся имена томов. Повторите эту процедуру для всех оставшихся групп, если применимо.

  • Если список заполнен структурами типа 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