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;不過,如果 VolumeGuidName 為 NULL,則它必須是非 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 設定為非 NULL。 FltGetVolumeGuidName 會儲存 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 |