次の方法で共有


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> のプールも呼び出し元によって割り当てられることに注意してください。

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

[out, optional] BufferSizeNeeded

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

戻り値

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

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

注釈

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

\??\Volume{GUID}

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

BufferSizeNeeded が不明な場合は、FltGetVolumeGuidName を 2 回呼び出します。

  • 最初の呼び出しで、 VolumeGuidNameNULL に設定し、 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 操作を発行し、デッドロックを引き起こす可能性があるため、 FltGetVolumeGuidNameInstanceSetupCallback ルーチンから安全に呼び出すことはできません。

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

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

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

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
[DLL] Fltmgr.sys
IRQL PASSIVE_LEVEL

こちらもご覧ください

FILE_FS_OBJECTID_INFORMATION

PFLT_INSTANCE_SETUP_CALLBACK

UNICODE_STRING

ZwQueryVolumeInformationFile