重複するボリューム名がある場合のボリュームの列挙について
ボリュームを列挙すると、ボリューム名が重複して結果のボリューム情報リストに表示される可能性があります。
これが発生する理由を理解するために、次のシナリオを検討してください。ボリューム列挙ルーチン FltEnumerateVolumeInformation を使用して、すべてのシステム ボリュームを列挙します。 これにより、ボリューム情報構造が格納されたバッファーが作成されます。これは、フィルター マネージャーに認識されているボリュームごとに 1 つずつです。 このバッファーでは、各ボリューム情報構造は FILTER_VOLUME_BASIC_INFORMATION または FILTER_VOLUME_STANDARD_INFORMATION の種類にすることができますが、両方を指定することはできません。
このボリューム情報構造のリストを考えると、複数のリスト要素に同じボリューム名を含めることができます。 つまり、2 つ以上の リスト要素の FilterVolumeName メンバーは同じにすることができます。 これは FltEnumerateVolumes などのすべてのフィルター マネージャー列挙ルーチンが、マウント解除されたが、取り壊されていないボリュームを含むボリュームを列挙するためです (開いているファイルがまだボリュームに存在するため)。 したがって、ボリュームがマウント解除されると、その名前はボリューム情報リストに複数回出現する可能性があります (最も単純な場合は、現在マウントされている状態に対して 1 回、以前のマウント解除された状態では 1 回)。
ボリューム情報リストに重複するボリューム名が表示される場合は、同じ名前の各グループについて上記の説明で説明します。 ただし、次の手順を使用して、上記のシナリオを確認できます。
リストに FILTER_VOLUME_STANDARD_INFORMATION 型の構造体が設定されている場合は、 FilterVolumeName メンバーが等しい構造体のグループを識別します。 このグループ内の 1 つ以上の構造体に Flags メンバーに FLTFL_VSI_DETACHED_VOLUME フラグが設定されている場合、グループに関連付けられているボリュームはマウント解除されたが、破損していない状態でした。 これにより、重複するボリューム名が存在する理由が確認されます。 該当する場合は、このようなメイングループすべてに対してこの手順を繰り返します。
リストに FILTER_VOLUME_BASIC_INFORMATION 型の構造体が設定されている場合は、このリストを等価の FILTER_VOLUME_STANDARD_INFORMATION 構造形式に変換し、前の箇条書きのように進めます。
注: FILTER_VOLUME_STANDARD_INFORMATION 構造は、Windows Vista 以降でのみ使用できます。
このトピックの影響を受けるルーチンと構造体は次のとおりです。
FILTER_VOLUME_BASIC_INFORMATION