структура 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

Битовая маска флагов, указывающих, какие компоненты имен были проанализированы из строки Nameметодом FltParseFileNameInformation. Обратите внимание, что при анализе строки NameFltParseFileNameInformation устанавливает этот флаг для каждого компонента независимо от того, присутствует ли компонент в строке. Эти значения можно объединить с помощью оператора OR.

Flag Компонент
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 . Если параметр Format имеет значение FLT_FILE_NAME_SHORT, Volume.Length равен нулю.

Share

UNICODE_STRING структура, содержащая имя сетевого ресурса, проанализированное из строки Имя удаленного файла. Если параметр Format имеет значение FLT_FILE_NAME_SHORT, Share.Length равен нулю.

Extension

UNICODE_STRING структуры, содержащей расширение, проанализированное из строки Name . Если расширение не найдено, параметр FltParseFileNameInformation задает значение Extension.Length равным нулю.

Stream

UNICODE_STRING структуры, содержащей имя потока, проанализированное из строки Name . Если имя потока не найдено или если параметр Format имеет значение FLT_FILE_NAME_SHORT, FltParseFileNameInformation задает Stream. Длина до нуля.

FinalComponent

UNICODE_STRING структура, содержащая окончательный компонент имени, проанализированный из строки Name . Если окончательное имя компонента не найдено или если параметр Format имеет значение FLT_FILE_NAME_SHORT, Параметр FltParseFileNameInformation задает для Параметра FinalComponent.Length значение 0.

ParentDir

UNICODE_STRING структуры, содержащей имя родительского каталога, проанализированное из строки Имяс помощью FltParseFileNameInformation. Если имя родительского каталога не найдено или значение Format FLT_FILE_NAME_SHORT, Параметр FltParseFileNameInformation задает для Параметра ParentDir.Length значение 0.

Комментарии

Элемент 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 для файла, вызовите fltGetFileNameInformation, FltGetFileNameInformationUnsafe или FltGetDestinationFileNameInformation. Эти подпрограммы возвращают указатель на структуру FLT_FILE_NAME_INFORMATION, принадлежающую диспетчеру фильтров, которая является общей для всех минифильтров.

Примечание Не изменяйте содержимое FLT_FILE_NAME_INFORMATION структур, так как эти структуры кэшируются диспетчером фильтров, чтобы все минифильтры могли использовать их. Если минифильтр должен каким-то образом изменить эти сведения, ему следует сначала скопировать их в другой буфер.
 
Файловые системы, такие как NTFS и FAT, используют кэш туннеля для каждого тома для краткого сохранения имен файлов и других метаданных для файлов, которые переименовываются, связаны с и удаляются. Это туннелирование имен файлов может привести к тому, что окончательный компонент в нормализованных сведениях об имени файла, возвращаемых вызовом fltGetFileNameInformation, FltGetFileNameInformationUnsafe или FltGetDestinationFileNameInformation , становится недействительным. Если минифильтр получает нормализованные сведения об имени файла в подпрограмме обратного вызова перед операцией (PFLT_PRE_OPERATION_CALLBACK) для операции создания, жесткой ссылки или переименования, он должен вызвать FltGetTunneledName из подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK), чтобы получить правильные сведения об имени файла.

Хотя она содержит множество UNICODE_STRING структур, структура FLT_FILE_NAME_INFORMATION не занимает много места в памяти, так как все UNICODE_STRING структуры в FLT_FILE_NAME_INFORMATION структуре используют один буфер.

Чтобы проанализировать содержимое строки Name , вызовите FltParseFileNameInformation. Эта подпрограмма задает значения элементов Extension, Stream, FinalComponent, ParentDir и NamesParsed этой структуры.

Минифильтры отвечают за вызов 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