次の方法で共有


FltGetVolumeGuidName 関数 (fltkernel.h)

FltGetVolumeGuidName は、ボリュームグローバル一意識別子 (GUID) 形式で、特定のボリュームのボリューム名を取得します。

構文

NTSTATUS FLTAPI FltGetVolumeGuidName(
  [in]               PFLT_VOLUME     Volume,
  [in/out, optional] PUNICODE_STRING VolumeGuidName,
  [out, optional]    PULONG          BufferSizeNeeded
);

パラメーター

[in] Volume

ボリュームの不透明なポインター。 ローカル ファイル システム ボリュームである必要があります。 このパラメーターは必須であり、NULLすることはできません。

[in/out, optional] VolumeGuidName

STATUS_SUCCESSが返されたときにボリュームの GUID 名を受け取る呼び出し元によって割り当てられた UNICODE_STRING 構造体へのポインター。 VolumeGuidName->Buffer のプールも呼び出し元によって割り当てられることに注意してください。

VolumeGuidName が NULL であり、BufferSizeNeeded が NULLでない場合 、FltGetVolumeGuidName は、要求されたボリューム GUID に必要なバッファー サイズを BufferSizeNeeded パラメーターに格納し、STATUS_BUFFER_TOO_SMALLを返します。 「解説」を参照してください。

[out, optional] BufferSizeNeeded

要求されたボリューム GUID 名のサイズ (バイト単位) を受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは省略可能であり、NULLできます。ただし、要求されたボリューム GUID に必要なバッファー サイズ FltGetVolumeGuidName が格納できるように、VolumeGuidName が NULL 場合は、以外の NULL である必要があります。

戻り値

FltGetVolumeGuidName 、次のいずれかのSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

リターン コード 形容
STATUS_BUFFER_TOO_SMALL VolumeGuidName 指すバッファーが NULL 、または小さすぎてボリューム GUID を保持できません。 呼び出し元 BufferSizeNeededに対して以外の NULL 値を指定した場合、FltGetVolumeGuidName 、必要なバッファー サイズ BufferSizeNeededに格納されます。 ボリューム GUID 名が取得されていないため、これはエラー コードと見なされます。
STATUS_INSUFFICIENT_RESOURCES FltGetVolumeGuidName プール割り当てエラーが発生しました。 これはエラー コードです。
STATUS_INVALID_DEVICE_REQUEST ボリューム パラメーターは、ネットワーク ボリュームのハンドルです。 これはエラー コードです。
STATUS_FLT_VOLUME_NOT_FOUND 一致するボリュームが見つかりませんでした。 これはエラー コードです。

備考

返されるボリューム GUID 名は、次の形式で表されます。

\??\Volume{GUID}

ここで GUID は、ボリュームを識別するグローバル一意識別子です。 この形式は、マウント マネージャーで使用される形式と同じですが、「記憶域クラス ドライバーでのマウント マネージャー要求のサポート」で説明されています。

BufferSizeNeeded 不明な場合は、FltGetVolumeGuidName 2 回呼び出

  • 最初の呼び出しで、VolumeGuidName NULL を し、BufferSizeNeeded を非NULLします。 FltGetVolumeGuidName は、ボリューム名 GUID に必要なバイト数 BufferSizeNeeded に格納し、STATUS_BUFFER_TOO_SMALLを返します。
  • 2 つ目の呼び出しで、VolumeGuidName を、最初の呼び出しで返される BufferSizeNeeded 値のサイズを指すように設定します。

FltGetVolumeGuidName 、事前マウントコールバックまたはマウント後コールバックから安全に呼び出すことはできません。 マウント後コールバックが呼び出された場合でも、I/O マネージャーによってマウント処理が完了していないため、安全に呼び出すことはできません。これにより、特定の場合にマウント マネージャーでデッドロックが発生します。

Windows Vista 以降では、すべてのマウント処理が完了した後、新しいボリュームの最初の I/O 操作でコールバックが呼び出されるため、ミニフィルター ドライバーは、InstanceSetupCallback ルーチン (PFLT_INSTANCE_SETUP_CALLBACK) から fltGetVolumeGuidName を安全に呼び出すことができます。

Windows Vista より前の Windows オペレーティング システムでは、マウント マネージャーがロックを保持しているときにファイル I/O 操作を発行する可能性があるため、InstanceSetupCallback ルーチンから FltGetVolumeGuidName を安全に呼び出すことはできません。これにより、デッドロックが発生する可能性があります。

ボリューム GUID はボリューム オブジェクト ID と同じではないことに注意してください。 ボリューム GUID(または一意のボリューム名) は、ファイル システムに依存しない値です。これは、マウント マネージャーによって基になるストレージ ボリュームに割り当てられます。 ボリューム オブジェクト ID は、ファイル システムによってファイル システム ボリュームに割り当てられます。

ボリュームのボリューム オブジェクト ID を取得するには、ZwQueryVolumeInformationFileを呼び出し、FsInformationClass パラメーター FileFsObjectIdInformation を指定します。

FltGetVolumeGuidName は、Win32 GetVolumeNameForVolumeMountPoint 関数とほぼ同じです。 (GetVolumeNameForVolumeMountPoint は、Microsoft Windows SDK に記載されています。

必要条件

要件 価値
ターゲット プラットフォーム の 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL

関連項目

FILE_FS_OBJECTID_INFORMATION

PFLT_INSTANCE_SETUP_CALLBACK

UNICODE_STRING

ZwQueryVolumeInformationFile