Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Программа 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, например одно из следующих:
| Возвращаемый код | Описание |
|---|---|
|
Объект файла, на который указывает параметр FileObject , указывает на то, что параметр в данный момент не открыт. Это код ошибки. |
|
Недопустимое значение было передано для параметра 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 (см. примечания) |
См. также
FltGetDestinationFileNameInformation