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 | Volume パラメーターは、ネットワーク ボリュームのハンドルです。 これはエラー コードです。 |
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 操作を発行し、デッドロックを引き起こす可能性があるため、 FltGetVolumeGuidName を InstanceSetupCallback ルーチンから安全に呼び出すことはできません。
ボリューム 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 |