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> 的集區也會被呼叫端配置。

如果 VolumeGuidNameNULLBufferSizeNeeded 不是 NULL,FltGetVolumeGuidName 會將要求的磁碟區 GUID 所需的緩衝區大小儲存在 BufferSizeNeeded 參數中,並傳回STATUS_BUFFER_TOO_SMALL。 請參閱<備註>。

[out, optional] BufferSizeNeeded

呼叫端配置的變數指標,該變數會接收所要求磁碟區 GUID 名稱的大小,以位元組為單位。 此參數是選擇性的,可以是 NULL;不過,如果 VolumeGuidNameNULL,則它必須是非 NULL,因此 FltGetVolumeGuidName 可以儲存要求之磁碟區 GUID 所需的緩衝區大小。

傳回值

FltGetVolumeGuidName 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,例如下列其中一項:

傳回碼 Description
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 兩次:

  • 在第一次呼叫時,將 VolumeGuidName 設定為 NULL ,並將 BufferSizeNeeded 設定為非 NULLFltGetVolumeGuidName 會儲存 BufferSizeNeeded 中磁碟區名稱 GUID 所需的位元組數目,並傳回STATUS_BUFFER_TOO_SMALL。
  • 在第二次呼叫時,將 VolumeGuidName 設定為指向結構,這是第一次呼叫中傳回的 BufferSizeNeeded 值大小。

FltGetVolumeGuidName 無法安全地從預先掛接或掛接後回呼呼叫。 無法安全地呼叫,因為即使呼叫掛接后回呼,I/O 管理員尚未完成掛接處理,而且在某些情況下,這會導致掛接管理員死結。

在 Windows Vista 和更新版本上,迷你篩選驅動程式可以從其 InstanceSetupCallback 例程安全地呼叫 FltGetVolumeGuidName (PFLT_INSTANCE_SETUP_CALLBACK) ,因為所有掛接處理完成後,會在第一個 I/O 作業上呼叫新磁碟區的回呼。

在 Windows Vista 之前的 Windows 作業系統上,無法安全地從 InstanceSetupCallback 例程呼叫 FltGetVolumeGuidName,因為掛接管理員可能會在保留鎖定時發出檔案 I/O 作業,這可能會導致死結。

請務必注意,磁碟區 GUID 與磁碟區對象識別碼不同。 磁碟 區 GUID 或唯一磁碟 區名稱是檔案系統無關的值;它是由掛接管理員指派給基礎記憶體磁碟區。 磁碟 區物件標識碼 是由文件系統指派給文件系統磁碟區。

若要取得磁碟區的磁碟區對象標識符,請呼叫 ZwQueryVolumeInformationFile,並指定 FsInformationClass 參數的 FileFsObjectIdInformation

FltGetVolumeGuidName 大致相當於 Win32 GetVolumeNameForVolumeMountPoint 函式。 (GetVolumeNameForVolumeMountPoint 記載於 Microsoft Windows SDK.)

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 FltMgr.lib
Dll Fltmgr.sys
IRQL PASSIVE_LEVEL

另請參閱

FILE_FS_OBJECTID_INFORMATION

PFLT_INSTANCE_SETUP_CALLBACK

UNICODE_STRING

ZwQueryVolumeInformationFile