共用方式為


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

如果 VolumeGuidNameNULL,且 BufferSizeNeedededNULLFltGetVolumeGuidName 會將要求磁碟區 GUID 所需的緩衝區大小儲存在 BufferSizeNeededed 參數中,並傳回STATUS_BUFFER_TOO_SMALL。 請參閱。

[out, optional] BufferSizeNeeded

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

傳回值

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

傳回碼 描述
STATUS_BUFFER_TOO_SMALL VolumeGuidName 所指向的緩衝區 NULL 或太小,無法保存磁碟區 GUID。 如果呼叫端為 BufferSizeNeeded提供非NULL 值,FltGetVolumeGuidName 會將所需的緩衝區大小儲存在 bufferSizeNeededed中。 這被視為錯誤碼,因為未擷取磁碟區 GUID 名稱。
STATUS_INSUFFICIENT_RESOURCES FltGetVolumeGuidName 發生集區配置失敗。 這是錯誤碼。
STATUS_INVALID_DEVICE_REQUEST Volume 參數是網路磁碟區的句柄。 這是錯誤碼。
STATUS_FLT_VOLUME_NOT_FOUND 找不到相符的磁碟區。 這是錯誤碼。

言論

傳回的磁碟區 GUID 名稱會以下列格式表示:

\??\Volume{GUID}

其中 GUID 是識別磁碟區的全域唯一標識碼。 這個格式與掛接管理員所使用的格式相同,如 在記憶體類別驅動程式支援掛接管理員要求中所述。

如果 BufferSizeNeededed 未知,請呼叫 FltGetVolumeGuidName 兩次:

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

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

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

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

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

若要取得磁碟區的磁碟區對象標識符,請呼叫 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