Функция FltGetFileNameInformationUnsafe (fltkernel.h)

Программа FltGetFileNameInformationUnsafe возвращает сведения о имени для открытого файла или каталога.

Синтаксис

NTSTATUS FLTAPI FltGetFileNameInformationUnsafe(
  [in]           PFILE_OBJECT               FileObject,
  [in, optional] PFLT_INSTANCE              Instance,
  [in]           FLT_FILE_NAME_OPTIONS      NameOptions,
  [out]          PFLT_FILE_NAME_INFORMATION *FileNameInformation
);

Параметры

[in] FileObject

Указатель на объект файла или каталога. Объект файла должен быть открыт в данный момент. Этот параметр является обязательным и не может иметь значение NULL.

[in, optional] Instance

Указатель экземпляра вызывающего объекта. Этот параметр можно задать для null.

[in] NameOptions

Значение FLT_FILE_NAME_OPTIONS, содержащее флаги, указывающие формат возвращаемых сведений об имени, а также метод запроса, используемый диспетчером фильтров. Этот параметр является обязательным и не может иметь значение NULL.

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

Ценность Значение
FLT_FILE_NAME_NORMALIZED Параметр FileNameInformation получает адрес структуры, содержащей нормализованное имя файла.
FLT_FILE_NAME_OPENED Параметр FileNameInformation получает адрес структуры, содержащей имя, которое использовалось при открытии файла.
FLT_FILE_NAME_SHORT Параметр FileNameInformation получает адрес структуры, содержащей короткое имя файла (8.3). Короткое имя состоит из до 8 символов, а затем сразу за периодом и до 3 символов. Короткое имя файла не включает имя тома, путь к каталогу или имя потока.

В следующей таблице описаны значения флага метода запроса. Можно указать только один из флагов.

Ценность Значение
FLT_FILE_NAME_QUERY_DEFAULT FltGetFileNameInformationUnsafe запрашивает кэш имен диспетчера фильтров для сведений о имени файла. Если имя не найдено в кэше, FltGetFileNameInformationUnsafe запрашивает файловую систему и кэширует результат.
FLT_FILE_NAME_QUERY_CACHE_ONLY FltGetFileNameInformationUnsafe запрашивает кэш имен диспетчера фильтров для сведений о имени файла. FltGetFileNameInformationUnsafe не запрашивает файловую систему.
FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY FltGetFileNameInformationUnsafe запрашивает файловую систему для получения сведений о имени файла. FltGetFileNameInformationUnsafe не запрашивает кэш имен диспетчера фильтров и не кэширует результат запроса файловой системы.
FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP FltGetFileNameInformationUnsafe запрашивает кэш имен диспетчера фильтров для сведений о имени файла. Если имя не найдено в кэше, и оно в настоящее время безопасно для этого, FltGetFileNameInformationUnsafe запрашивает файловую систему для сведений о имени файла и кэширует результат.

[out] FileNameInformation

Указатель на выделенную вызывающим переменную, которая получает адрес выделенной системой FLT_FILE_NAME_INFORMATION структуры. FltGetFileNameInformationUnsafe выделяет эту структуру из пула страниц. Если эта информация больше не нужна, вызывающий объект должен освободить структуру, вызвав FltReleaseFileNameInformation. Этот параметр является обязательным и не может иметь значение NULL.

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

FltGetFileNameInformationUnsafe возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например одно из следующих:

Возвращаемый код Описание
STATUS_FLT_INVALID_NAME_REQUEST
Объект файла, на который указывает параметр FileObject , указывает на то, что параметр в данный момент не открыт. Это код ошибки.
STATUS_INVALID_PARAMETER
Недопустимое значение было передано для параметра FileNameInformation. Это код ошибки.

Замечания

Предоставляется подпрограмма FltGetFileNameInformationUnsafe, чтобы можно было запросить имя объекта файла вне контекста операции ввода-вывода в этом объекте файла; в противном случае необходимо вызвать FltGetFileNameInformation.

В отличие от подпрограммы FltGetFileNameInformationFltGetFileNameInformationUnsafe не защищает вызывающий объект от следующих типов обстоятельств, когда запрос файловой системы для сведений об имени может привести к взаимоблокировкам методов запроса, отличных от FLT_FILE_NAME_QUERY_CACHE_ONLY:

  • В пути ввода-вывода на разбиение по страницам.

  • Если поле topLevelIrp текущего потока не NULL. Дополнительные сведения см. в разделе IoGetTopLevelIrp.

  • После завершения операции IRP_MJ_CLEANUP; то есть в пути после очистки, предварительного закрытия или после закрытия (целевой объект файла имеет набор флагов FO_CLEANUP_COMPLETE).

  • В процедуре обратного вызова (PFLT_PRE_OPERATION_CALLBACK) или после операции (PFLT_POST_OPERATION_CALLBACK) для любой из следующих операций:

    • IRP_MJ_ACQUIRE_FOR_CC_FLUSH
    • IRP_MJ_ACQUIRE_FOR_MOD_WRITE
    • IRP_MJ_RELEASE_FOR_CC_FLUSH
    • IRP_MJ_RELEASE_FOR_MOD_WRITE
    • IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
  • В подпрограмме обратного вызова после операции для IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION.

  • Если все API отключены; то есть, если KeAreAllCsDisabled возвращает значение TRUE.

Для Windows Vista или Server 2008 и более поздних версий, если мини-фильтр еще не имеет экземпляра фильтра, например в подпрограмме DriverEntry, он может использовать NULL для параметра экземпляра. Это позволяет подпрограммам DriverEntry доступ к сведениям о имени файла. За исключением этого случая, значение NULL для параметра экземпляра зарезервировано для системного использования.

При создании, жестком связывании и переименовании туннелирование имен файлов может привести к недопустимости окончательного компонента в нормализованных сведениях о имени файла, которые драйвер минифильтра извлекает в подпрограмме обратного вызова перед выполнением. Если драйвер минифильтра извлекает нормализованные сведения о имени файла в подпрограмме обратного вызова (PFLT_PRE_OPERATION_CALLBACK) при вызове подпрограммы, такой как FltGetFileNameInformationUnsafe, он должен вызывать FltGetTunneledName из подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK), чтобы получить правильные сведения о имени файла.

Дополнительные сведения о нормализованных именах файлов см. в FLT_FILE_NAME_INFORMATION.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL (см. примечания)

См. также

FLT_FILE_NAME_INFORMATION

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetTunneledName

FltReferenceFileNameInformation

FltReleaseFileNameInformation

IRP_MJ_CLEANUP

IoGetTopLevelIrp

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK