функция обратного вызова PFLT_NORMALIZE_NAME_COMPONENT_EX (fltkernel.h)

Драйвер минифильтра, предоставляющий имена файлов для кэша имен диспетчера фильтров, может зарегистрировать подпрограмму типа PFLT_NORMALIZE_NAME_COMPONENT_EX в качестве подпрограммы обратного вызова NormalizeNameComponentExCallback драйвера мини-фильтра.

Синтаксис

PFLT_NORMALIZE_NAME_COMPONENT_EX PfltNormalizeNameComponentEx;

NTSTATUS PfltNormalizeNameComponentEx(
  [in]      PFLT_INSTANCE Instance,
  [in]      PFILE_OBJECT FileObject,
  [in]      PCUNICODE_STRING ParentDirectory,
  [in]      USHORT VolumeNameLength,
  [in]      PCUNICODE_STRING Component,
  [out]     PFILE_NAMES_INFORMATION ExpandComponentName,
  [in]      ULONG ExpandComponentNameLength,
  [in]      FLT_NORMALIZE_NAME_FLAGS Flags,
  [in, out] PVOID *NormalizationContext
)
{...}

Параметры

[in] Instance

Указатель непрозрачного экземпляра для экземпляра драйвера минифильтра, для который зарегистрирована эта подпрограмма обратного вызова.

[in] FileObject

Указатель на объект file для файла, имя которого запрашивается, или на файл, который является целевым объектом операции IRP_MJ_SET_INFORMATION , если установлен флаг FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME. Дополнительные сведения см. в описании параметра Flags ниже.

[in] ParentDirectory

Указатель на структуру UNICODE_STRING , содержащую имя родительского каталога для этого компонента имени.

[in] VolumeNameLength

Длина (в байтах) имени родительского каталога, хранящегося в структуре, на которую указывает параметр ParentDirectory .

[in] Component

Указатель на UNICODE_STRING структуру, содержащую развертываемый компонент имени.

[out] ExpandComponentName

Указатель на структуру FILE_NAMES_INFORMATION , которая получает развернутые (нормализованные) сведения об имени файла для компонента имени.

[in] ExpandComponentNameLength

Длина (в байтах) буфера, на который указывает параметр ExpandComponentName .

[in] Flags

Флаги нормализации имен. FLTFL_NORMALIZE_NAME_CASE_SENSITIVE указывает, что имя для нормализации учитывает регистр. FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME указывает, что подпрограмма обратного вызова была вызвана для обслуживания вызова подпрограммы FltGetDestinationFileNameInformation . Если установлен флаг FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME, FileObject представляет файл или каталог, который является целевым объектом операции IRP_MJ_SET_INFORMATION. Если флаг FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME не задан, FileObject представляет файл или каталог, имя которого запрашивается.

[in, out] NormalizationContext

Указатель на предоставленные драйвером минифильтра сведения о контексте, передаваемые в последующих вызовах этой подпрограммы обратного вызова, которые выполняются для нормализации оставшихся компонентов в том же пути к файлу.

Возвращаемое значение

Эта подпрограмма обратного вызова возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS. Если компонент имени, указанный в параметре Component , не существует в родительском каталоге, который указывает параметр ParentDirectory , эта подпрограмма обратного вызова должна возвращать STATUS_NO_SUCH_FILE. Если эта подпрограмма обратного вызова отправляет запрос IRP_MN_QUERY_DIRECTORY (FileNamesInformation) к родительскому каталогу, файловая система возвращает правильный код состояния. В этом случае обратный вызов может просто возвращать код состояния, возвращаемый файловой системой.

Комментарии

Драйвер минифильтра, предоставляющий имена файлов для кэша имен диспетчера фильтров, может зарегистрировать подпрограмму типа PFLT_NORMALIZE_NAME_COMPONENT_EX в качестве подпрограммы обратного вызова NormalizeNameComponentExCallback драйвера мини-фильтра.

Основное различие между подпрограммой обратного вызова NormalizeNameComponentExCallback и подпрограммой обратного вызова NormalizeNameComponentCallback (типа PFLT_NORMALIZE_NAME_COMPONENT) заключается в том, что подпрограмма обратного вызова NormalizeNameComponentExCallback поддерживает дополнительный параметр FileObject . Файловый объект (FileObject) может использоваться драйвером минифильтра для получения структуры TXN_PARAMETER_BLOCK для операции, в которую участвует файл или каталог, путем вызова подпрограммы IoGetTransactionParameterBlock . Драйвер мини-фильтра может использовать структуру TXN_PARAMETER_BLOCK для выдачи собственных запросов на создание в контексте транзакции, в которую участвует этот файловый объект.

Чтобы зарегистрировать эту подпрограмму обратного вызова, драйвер минифильтра сохраняет адрес подпрограммы типа PFLT_NORMALIZE_NAME_COMPONENT_EX в элементе NormalizeNameComponentExCallbackструктуры FLT_REGISTRATION , которую драйвер мини-фильтра передает в качестве параметра FltRegisterFilter.

Диспетчер фильтров вызывает эту подпрограмму обратного вызова, чтобы запросить у драйвера минифильтра нормализованные имена компонентов в пути к имени файла, имена которых изменены драйвером минифильтра. Если путь к имени файла содержит несколько таких компонентов, диспетчер фильтров может вызывать эту подпрограмму обратного вызова несколько раз в процессе нормализации всех компонентов в пути. Драйвер минифильтра может использовать параметр NormalizationContext для передачи сведений о контексте последующим вызовам этой процедуры обратного вызова.

Если драйвер минифильтра использует параметр NormalizationContext , он также должен зарегистрировать подпрограмму обратного вызова очистки контекста нормализации. Дополнительные сведения см. в справочной записи по PFLT_NORMALIZE_CONTEXT_CLEANUP.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть fltkernel.h (включая Fltkernel.h)
IRQL PASSIVE_LEVEL

См. также раздел

FILE_NAMES_INFORMATION

FLT_REGISTRATION

FltGetDestinationFileNameInformation

FltRegisterFilter

IRP_MJ_SET_INFORMATION

IoGetTransactionParameterBlock

PFLT_GENERATE_FILE_NAME

PFLT_NORMALIZE_CONTEXT_CLEANUP

PFLT_NORMALIZE_NAME_COMPONENT

TXN_PARAMETER_BLOCK

UNICODE_STRING