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

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

旗標 元件
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION 副檔名
FLTFL_FILE_NAME_PARSED_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 字串剖析的磁碟區名稱。 如果 FormatFLT_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 字串剖析的數據流名稱。 如果找不到數據流名稱,或者 FormatFLT_FILE_NAME_SHORT,FltParseFileNameInformation設定 Stream。長度為零。

FinalComponent

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

ParentDir

UNICODE_STRING結構,其中包含 FltParseFileNameInformationName 字串剖析的父目錄名稱。 如果找不到父目錄名稱,或者 FormatFLT_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) 名稱。 因為檔案在開啟時產生,所以簡短名稱不適用於未開啟的檔案物件,而且無法在建立分派 (「預先建立」) 路徑中使用。 它不適用於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) 例程中建立、硬式連結或重新命名作業,則必須從其後置回呼呼叫 FltGetTunneledName (PFLT_POST_OPERATION_CALLBACK) 例程,以擷取檔案的正確檔名資訊。

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

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

迷你篩選負責呼叫 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