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 | 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結構,請呼叫 FltGetFileNameInformation、FltGetFileNameInformationUnsafe或 FltGetDestinationFileNameInformation。 這些例程會傳回所有迷你篩選程式所共用之篩選管理員擁有FLT_FILE_NAME_INFORMATION結構的指標。
雖然它包含許多 UNICODE_STRING 結構,但FLT_FILE_NAME_INFORMATION結構在記憶體中不會佔用太多空間,因為FLT_FILE_NAME_INFORMATION結構中的所有UNICODE_STRING結構都會共用單一緩衝區。
若要剖析 Name 字串的內容,請呼叫 FltParseFileNameInformation。 此例程會設定 Extension、Stream、FinalComponent、ParentDir的值,以及 NamesParsed 這個結構的成員。
Minifilters 負責呼叫 FltReleaseFileNameInformation,以在不再需要時釋放FLT_FILE_NAME_INFORMATION結構。
要求
要求 | 價值 |
---|---|
標頭 | fltkernel.h (包括 Fltkernel.h) |
另請參閱
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe