共用方式為


FltGetTunneledName 函式 (fltkernel.h)

FltGetTunneledName 例程會擷取檔案的通道名稱,因為先前 呼叫 fltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation傳回的標準化名稱。

語法

NTSTATUS FLTAPI FltGetTunneledName(
  [in]  PFLT_CALLBACK_DATA         CallbackData,
  [in]  PFLT_FILE_NAME_INFORMATION FileNameInformation,
  [out] PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation
);

參數

[in] CallbackData

I/O 作業的回呼數據結構的指標(FLT_CALLBACK_DATA)。 這是必要參數,而且無法 NULL

[in] FileNameInformation

FLT_FILE_NAME_INFORMATION 結構的指標,其中包含先前呼叫 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation 所傳回的標準化名稱資訊。

[out] RetTunneledFileNameInformation

呼叫端配置的變數指標,該變數會接收包含通道檔名之新配置結構的位址。 如果找不到通道名稱,此變數會收到 NULL。 這是必要參數,無法在輸入上 NULL

傳回值

FltGetTunneledName 如果找到通道名稱,或檔案沒有通道名稱,則會傳回STATUS_SUCCESS。 否則,它會傳回NTSTATUS值,例如:

傳回碼 描述
STATUS_INSUFFICIENT_RESOURCES FltGetTunneledName 發生集區配置失敗。 這是錯誤碼。

言論

文件系統,例如NTFS和FAT,會使用個別磁碟區通道快取,針對要重新命名、鏈接或刪除的檔案,簡短保留檔名和其他元數據。 檔名通道可能會導致正規化檔名資訊中的最終元件由預先操作呼叫 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation 無效。

如果迷你篩選驅動程式擷取建立 (IRP_MJ_CREATEPFLT_PRE_OPERATION_CALLBACK) 預先操作回呼例程中的標準化檔名資訊,則硬式連結 (IRP_MJ_SET_INFORMATION,且 FILE_INFORMATION_CLASS 設為 fileLinkInformation),或重新命名作業 IRP_MJ_SET_INFORMATION (FILE_INFORMATION_CLASS設定為 FileRenameInformation), 它必須從後置回呼例程 (PFLT_POST_OPERATION_CALLBACK) 呼叫 FltGetTunneledName,以擷取檔案的正確檔名資訊。

只有標準化的檔名資訊會受到通道的影響。 篩選管理員無法確保最終元件在建立、硬式連結或重新命名作業發生之後才會正常化,因為通道可能會導致簡短名稱變更為長名稱。 因此,小型篩選驅動程式必須從其後置回呼例程呼叫 FltGetTunneledName,以判斷在預先操作回呼例程中擷取的標準化檔名資訊是否有效。

如需標準化檔名資訊的詳細資訊,請參閱 FLT_FILE_NAME_INFORMATION

只擷取簡短或已開啟檔名資訊的迷你篩選驅動程式不應該 呼叫 fltGetTunneledName

呼叫 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation 預先操作回呼例程中, 迷你篩選驅動程式必須將傳回的 fileNameInformation 指標儲存在 preoperation 回呼例程的 CompletionContext 結構中,讓後續操作回呼可以在 fileNameInformation 參數中傳遞此指標,以 FltGetTunneledName

注意

檔名通道只會以這種方式影響建立、硬連結和重新命名作業。 它不會影響其他 I/O 作業,例如讀取和寫入。

下列配對作業可能會導致檔案名 名稱 通道:

  • delete(name)/create(name
  • delete(name)/rename(來源名稱
  • rename(名稱newname)/create(名稱
  • rename(名稱newname)/rename(來源名稱

如果找不到檔案的通道名稱,RetTunneledFileNameInformation 參數會收到 NULL

成功呼叫 FltGetTunneledName之後,呼叫者會負責釋放 RetTunneledFileNameInformation,並在呼叫 fltReleaseFileNameInformation不再需要時,FileNameInformation 指標。

FltGetTunneledName 只能從小型篩選驅動程式的後置回呼例程呼叫IRP_MJ_CREATE或IRP_MJ_SET_INFORMATION。 針對任何其他類型的 I/O 作業,或從預先操作回呼例程呼叫 FltGetTunneledName 是程式設計錯誤。

呼叫端不得修改在 RetTunneledFileNameInformation 參數中傳回的結構內容,因為此結構是由篩選管理員快取,因此所有迷你篩選驅動程式都可以使用它。

檔案通道可讓您與依賴文件系統的程式相容,以在短時間內保留檔案元數據;例如,針對安全儲存程式。 通道會保留檔案長和短 (8.3) 名稱之間的關聯。 從目錄移除檔名時(重新命名或刪除),其簡短和長名稱組和建立時間會儲存在通道快取中,並以移除的名稱作為索引鍵。 當名稱新增至目錄(重新命名或建立)時,會搜尋快取,以判斷是否有要還原的資訊。 快取會根據目錄的實例生效。 如果刪除目錄,則會移除其快取。

要求

要求 價值
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
連結庫 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK