共用方式為


FLT_FILE_NAME_INFORMATION結構 (fltkernel.h)

FLT_FILE_NAME_INFORMATION 結構包含檔名資訊。

語法

typedef struct _FLT_FILE_NAME_INFORMATION {
  USHORT                     Size;
  FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
  FLT_FILE_NAME_OPTIONS      Format;
  UNICODE_STRING             Name;
  UNICODE_STRING             Volume;
  UNICODE_STRING             Share;
  UNICODE_STRING             Extension;
  UNICODE_STRING             Stream;
  UNICODE_STRING             FinalComponent;
  UNICODE_STRING             ParentDir;
} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;

成員

Size

FLT_FILE_NAME_INFORMATION 結構的大小,以位元組為單位。

NamesParsed

旗標的位掩碼,指出哪些名稱元件已由 FltParseFileNameInformationName 字串剖析。 請注意,剖析 Name 字串時,FltParseFileNameInformation 為每個元件設定此旗標,該元件是否在字元串中找到。 這些值可以使用 OR 運算符來結合。

元件
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION 擴充功能
FLTFL_FILE_NAME_PARSED_STREAM Stream
FLTFL_FILE_NAME_PARSED_PARENT_DIR ParentDir

Format

Name 成員中儲存的名稱資訊格式。 這個成員可以是下列其中一個值。 (如需這些格式的說明,請參閱下列一節。

價值 意義
FLT_FILE_NAME_NORMALIZED Name 成員包含檔案的標準化名稱。
FLT_FILE_NAME_OPENED Name 成員包含開啟檔案時所使用的名稱。 此名稱字串未正規化。
FLT_FILE_NAME_SHORT Name 成員包含檔案的簡短 (8.3) 名稱。 檔案的簡短名稱不包含磁碟區名稱、目錄路徑或數據流名稱。 此名稱字串未正規化。

Name

包含檔名字串的 UNICODE_STRING 結構,格式為 Format 成員所指定。

Volume

UNICODE_STRING 結構,其中包含從 Name 字串剖析的磁碟區名稱。 如果 Format 為FLT_FILE_NAME_SHORT,Volume.Length 為零。

Share

UNICODE_STRING結構,其中包含從遠端檔案的 Name 字串剖析的網路共享名稱。 如果 Format 是FLT_FILE_NAME_SHORT,Share.Length 為零。

Extension

UNICODE_STRING結構,其中包含從 Name 字串剖析的延伸模組。 如果找不到擴充功能,FltParseFileNameInformation 會將 extension.Length 設為零

Stream

UNICODE_STRING結構,其中包含從 Name 字串剖析的數據流名稱。 如果找不到數據流名稱,或 格式 FLT_FILE_NAME_SHORT,FltParseFileNameInformation會將 Stream.Length 設定為零。

FinalComponent

UNICODE_STRING 結構,其中包含從 Name 字串剖析的最終名稱元件。 如果找不到最終元件名稱,或 格式 FLT_FILE_NAME_SHORT,FltParseFileNameInformation 會將 finalComponent.Length 設定為零。

ParentDir

UNICODE_STRING 結構,其中包含由 fltParseFileNameInformation Name 字串剖析的父目錄名稱。 如果找不到父目錄名稱,或 Format 為FLT_FILE_NAME_SHORT,FltParseFileNameInformation 會將 ParentDir.Length 設為零。

言論

Name 成員包含下列其中一項:

  • 檔案的標準化名稱
  • 檔案的開啟名稱
  • 檔案的簡短名稱
如果下列所有專案都成立,則會將檔名視為 正規化
  • 它包含檔案的完整目錄路徑,包括磁碟區名稱,除非使用者依檔案標識元開啟檔案,但沒有整個路徑的周遊許可權。 (如需詳細資訊,請參閱 FltGetFileNameInformation。)
  • 磁碟區名稱是磁碟區的非永久裝置物件名稱(例如,“\Device\HarddiskVolume1” )。
  • 所有簡短名稱都會擴充為對等的長名稱。
  • 任何尾端 “:$DATA” 或 “::$DATA” 字串都會從數據流名稱中移除。
  • 所有裝入點都會解析。
以下是本機檔案標準化檔名的範例:
\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

以下是遠端檔案標準化檔名的範例:

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

檔案的 開啟名稱 是開啟檔案時所使用的名稱。 如同標準化名稱,它包含檔案的完整目錄路徑,包括磁碟區名稱。 其與正規化名稱不同,方式如下:

  • 檔案的目錄路徑可以包含簡短名稱以及長名稱。
  • 尾端 “:$DATA” 和 “::$DATA” 字串不會從數據流名稱中移除。
  • 無法解析裝入點。
以下是本機檔案開啟的檔名範例:
\Device\HarddiskVolume1\Docume~1\MyUser\MYDOCU~1\Test Results.txt:stream1:$DATA

以下是遠端檔案開啟的檔案名範例:

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

檔案的 簡短名稱 是檔名最終元件的簡短 (8.3) 名稱。 因為檔案開啟時會產生此檔案,所以未開啟的檔案對象無法使用簡短名稱,而且無法在建立分派 (“pre-create”) 路徑中使用。 它不適用於NTFS資料流檔案物件。 並非所有開啟的檔案都有簡短的檔名。 例如,在停用短檔名產生之 NTFS 磁碟分區上,沒有檔案具有簡短的檔名。

以下是檔案簡短名稱的範例:

TestRe~1.txt

若要取得檔案的FLT_FILE_NAME_INFORMATION結構,請呼叫 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation。 這些例程會傳回所有迷你篩選程式所共用之篩選管理員擁有FLT_FILE_NAME_INFORMATION結構的指標。

注意 請勿修改FLT_FILE_NAME_INFORMATION結構的內容,因為這些結構是由篩選管理員快取,因此所有迷你篩選程式都可以使用這些結構。 如果您的迷你篩選必須以某種方式修改這項資訊,它應該先將資訊複製到另一個緩衝區。
 
NTFS 和 FAT 等文件系統會使用個別磁碟區通道快取,簡要保留要重新命名、鏈接或刪除之檔案的檔名和其他元數據。 此檔名通道可能會導致 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation 所傳回的最終元件。 如果小型篩選程式在建立、硬式連結或重新命名作業的預先作回呼 (PFLT_PRE_OPERATION_CALLBACK) 例程中擷取正規化的檔名資訊,則必須從其後續作回呼 (PFLT_POST_OPERATION_CALLBACK) 例程中呼叫 FltGetTunneledName,以擷取檔案的正確檔名資訊。

雖然它包含許多 UNICODE_STRING 結構,但FLT_FILE_NAME_INFORMATION結構在記憶體中不會佔用太多空間,因為FLT_FILE_NAME_INFORMATION結構中的所有UNICODE_STRING結構都會共用單一緩衝區。

若要剖析 Name 字串的內容,請呼叫 FltParseFileNameInformation。 此例程會設定 ExtensionStreamFinalComponentParentDir的值,以及 NamesParsed 這個結構的成員。

Minifilters 負責呼叫 FltReleaseFileNameInformation,以在不再需要時釋放FLT_FILE_NAME_INFORMATION結構。

要求

要求 價值
標頭 fltkernel.h (包括 Fltkernel.h)

另請參閱

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK

UNICODE_STRING