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,且 BufferSizeNeededed 未 NULL,FltGetVolumeGuidName 會將要求磁碟區 GUID 所需的緩衝區大小儲存在 BufferSizeNeededed 參數中,並傳回STATUS_BUFFER_TOO_SMALL。 請參閱。
[out, optional] BufferSizeNeeded
呼叫端配置的變數指標,該變數會接收所要求磁碟區 GUID 名稱的大小,以位元組為單位。 這個參數是選擇性的,而且可以 NULL;不過,如果 VolumeGuidNameNULL,FltGetVolumeGuidName 可以儲存要求磁碟區 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 設定為非NULL 。 FltGetVolumeGuidName 會儲存 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
FltGetVolumeGuidName 大致相當於 Win32 GetVolumeNameForVolumeMountPoint 函式。 (GetVolumeNameForVolumeMountPoint 記載於 Microsoft Windows SDK 中。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | fltkernel.h (包括 Fltkernel.h) |
連結庫 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL |