Поделиться через


Функция NtQueryInformationFile (ntifs.h)

Подпрограмма NtQueryInformationFile возвращает различные виды сведений об объекте файла. См. также ntQueryInformationByName, что может быть более эффективно использовано для нескольких классов сведений о файлах.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryInformationFile(
  [in]  HANDLE                 FileHandle,
  [out] PIO_STATUS_BLOCK       IoStatusBlock,
  [out] PVOID                  FileInformation,
  [in]  ULONG                  Length,
  [in]  FILE_INFORMATION_CLASS FileInformationClass
);

Параметры

[in] FileHandle

Обработка объекта файла. Дескриптор создается с помощью успешного вызова NtCreateFile или NtOpenFileили эквивалентного файла создания или открытия подпрограммы.

[out] IoStatusBlock

Указатель на структуру IO_STATUS_BLOCK, которая получает окончательное состояние завершения и сведения об операции. Элемент Information получает количество байтов, которые эта подпрограмма фактически записывает в буфер FileInformation.

[out] FileInformation

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

[in] Length

Размер буфера в байтах, на который указывает FileInformation.

[in] FileInformationClass

Указывает тип возвращаемых сведений о файле в буфере, на котором FileInformation указывает. Устройства и промежуточные драйверы могут указать любое из следующих FILE_INFORMATION_CLASS значений (перечисленных от наименьшего до самого высокого значения перечисления):

значение FILE_INFORMATION_CLASS Тип возвращаемой информации
FileBasicInformation (4) Структура FILE_BASIC_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_ATTRIBUTES, указанным в параметре DesiredAccess.
FileStandardInformation (5) Структура FILE_STANDARD_INFORMATION. Вызывающий объект может запрашивать эти сведения до тех пор, пока файл открыт, без каких-либо конкретных требований для DesiredAccess.
FileInternalInformation (6) Структура FILE_INTERNAL_INFORMATION. Эта структура задает 64-разрядный идентификатор файла, который однозначно идентифицирует файл в NTFS. В других файловой системе этот идентификатор файла не гарантируется уникальным.
FileEaInformation (7) Структура FILE_EA_INFORMATION. Эта структура указывает размер блока расширенных атрибутов, связанного с файлом.
FileAccessInformation (8) Структура FILE_ACCESS_INFORMATION. Эта структура содержит маску доступа. Дополнительные сведения о масках доступа см. в ACCESS_MASK.
FileNameInformation (9) Структура FILE_NAME_INFORMATION. Структура может содержать полный путь или только часть файла. Вызывающий объект может запрашивать эти сведения до тех пор, пока файл открыт, без каких-либо конкретных требований для DesiredAccess. Дополнительные сведения о синтаксисе имени файла см. в разделе "Примечания" далее в этом разделе.
FilePositionInformation (14) Структура FILE_POSITION_INFORMATION. Вызывающий объект должен открыть файл с флагом DesiredAccess FILE_READ_DATA или флагом FILE_WRITE_DATA, указанным в параметре DesiredAccess, а также флагом FILE_SYNCHRONOUS_IO_ALERT или FILE_SYNCHRONOUS_IO_NONALERT, указанным в параметр е CreateOptions.
FileModeInformation (16) Структура FILE_MODE_INFORMATION. Эта структура содержит набор флагов, указывающий режим, в котором можно получить доступ к файлу. Эти флаги представляют собой подмножество параметров, которые можно указать в параметре CreateOptions подпрограммы IoCreateFile.
FileAlignmentInformation (17) Структура FILE_ALIGNMENT_INFORMATION. Вызывающий объект может запрашивать эти сведения до тех пор, пока файл открыт, без каких-либо конкретных требований для DesiredAccess. Эта информация полезна, если файл был открыт с флагом FILE_NO_INTERMEDIATE_BUFFERING, указанным в параметре CreateOptions.
FileAllInformation (18) Структура FILE_ALL_INFORMATION. Объединение нескольких структур файлов в одну структуру FILE_ALL_INFORMATION сокращает количество запросов, необходимых для получения сведений о файле.
FileAlternateNameInformation (21) Структура FILE_ALL_INFORMATION, в которой возвращаются сведения о альтернативном имени файла (его имя формата 8.3).
FileStreamInformation (22) Буфер FILE_STREAM_INFORMATION структур, в которых перечисляются потоки данных файла или каталога.
FileCompressionInformation (28) Структура FILE_COMPRESSION_INFORMATION, в которой возвращаются сведения о сжатиях для файла.
FileNetworkOpenInformation (34) Структура FILE_NETWORK_OPEN_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_ATTRIBUTES, указанным в параметре DesiredAccess.
FileAttributeTagInformation (35) Структура FILE_ATTRIBUTE_TAG_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_ATTRIBUTES, указанным в параметре DesiredAccess.
FileIoPriorityHintInformation (43) Структура FILE_IO_PRIORITY_HINT_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_DATA, указанным в параметре DesiredAccess.
FileSfioReserveInformation (44) Структура FILE_SFIO_RESERVE_INFORMATION.
FileHardLinkInformation (46) Структура FILE_LINKS_INFORMATION.
FileNormalizedNameInformation (48) Структура FILE_NAME_INFORMATION, в которой возвращается нормализованное имя файла.
FileIsRemoteDeviceInformation (51) Структура FILE_IS_REMOTE_DEVICE_INFORMATION. Вызывающий объект может запрашивать эти сведения до тех пор, пока файл открыт, без каких-либо конкретных требований для DesiredAccess.
FileStandardLinkInformation (54) Структура FILE_STANDARD_LINK_INFORMATION.
FileIdInformation (59) Структура FILE_ID_INFORMATION.
FileDesiredStorageClassInformation (67) Структура FILE_DESIRED_STORAGE_CLASS_INFORMATION.
FileStatInformation (68) FILE_STAT_INFORMATION
FileStatLxInformation (70) FILE_STAT_LX_INFORMATION
FileCaseSensitiveInformation (71) Структура FILE_CASE_SENSITIVE_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_ATTRIBUTES, указанным в параметре DesiredAccess. Это значение доступно начиная с Windows 10 версии 1803.
FileStorageReserveIdInformation (74) Структура FILE_STORAGE_RESERVE_ID_INFORMATION.
FileCaseSensitiveInformationForceAccessCheck (75) Структура FILE_CASE_SENSITIVE_INFORMATION. Вызывающий объект должен открыть файл с флагом FILE_READ_ATTRIBUTES, указанным в параметре DesiredAccess. Это специальная версия операции FileCaseSensitiveInformation, которая используется для принудительного выполнения проверки доступа для драйвера режима ядра, аналогично проверкам, применяемым к вызывающей системе в пользовательском режиме. Эта операция распознается только ioManager, и файловая система никогда не должна получать ее. Это значение доступно начиная с Windows 10 версии 1803.
FileKnownFolderInformation (76) Структура FILE_KNOWN_FOLDER_INFORMATION. Доступно начиная с Windows Server 2022.

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

NtQueryInformationFile возвращает STATUS_SUCCESS или соответствующий код ошибки NTSTATUS.

Замечания

NtQueryInformationFile возвращает сведения о указанном объекте файла. Обратите внимание, что он возвращает ноль в любом элементе структуры FILE_XXX_INFORMATION, которая не поддерживается определенным устройством или файловой системой.

При FileInformationClass = FileNameInformationимя файла возвращается в структуре FILE_NAME_INFORMATION. Точный синтаксис имени файла зависит от ряда факторов:

  • Если вы открыли файл, отправив полный путь к NtCreateFile, NtQueryInformationFile возвращает полный путь.

  • Если маркер ObjectAttributes->RootDirectory был открыт по имени в вызове NtCreateFile, а затем файл был открыт NtCreateFile относительно этого дескриптора корневого каталога, NtQueryInformationFile возвращает полный путь.

  • Если ObjectAttributes->RootDirectory дескриптор был открыт идентификатором файла (с помощью флага FILE_OPEN_BY_FILE_ID) в вызове NtCreateFile, а затем файл был открыт NtCreateFile относительно этого дескриптора корневого каталога, NtQueryInformationFile возвращает относительный путь.

  • Однако если пользователь SeChangeNotifyPrivilege (описано в документации по пакету SDK для Microsoft Windows), NtQueryInformationFile возвращает полный путь во всех случаях.

  • Если возвращается только относительный путь, строка имени файла не начинается с обратной косой черты.

  • Если возвращается полный путь и имя файла, строка начинается с одной обратной косой черты независимо от его расположения. Таким образом файл C:\dir1\dir2\filename.ext будет отображаться как \dir1\dir2\filename.ext, а файл \server\share\dir1\dir2\filename.ext будет отображаться как \server\share\dir1\dir2\filename.ext.

Если NtQueryInformationFile завершается сбоем из-за переполнения буфера, драйверы, реализующие FileNameInformation, должны возвращать столько символов WCHAR имени файла, сколько будет соответствовать буферу, и указать полную длину, необходимую в параметре FileNameLength структуры FILE_NAME_INFORMATION. Необходимо повторно выполнить запрос с помощью длины имени файла, чтобы получить полное имя файла. Драйверы, которые не соответствуют этому шаблону, могут потребовать постепенного увеличения длины, пока они не получают полное имя файла. Дополнительные сведения о работе с файлами см. в использовании файлов в драйвере.

Вызывающие NtQueryInformationFile должны выполняться в IRQL = PASSIVE_LEVEL и со специальными api-интерфейсами ядра, включенными.

Заметка

Если вызов этой функции происходит в пользовательском режиме, следует использовать имя "NtQueryInformationFile" вместо "ZwQueryInformationFile".

Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000.
целевая платформа Всеобщий
заголовка ntifs.h (включая Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (см. раздел "Примечания")
правил соответствия DDI HwStorPortProhibitedDDIs, PowerIrpDDis

См. также

FILE_ACCESS_INFORMATION

FILE_ALIGNMENT_INFORMATION

FILE_ALL_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_EA_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_IO_PRIORITY_HINT_INFORMATION

FILE_IS_REMOTE_DEVICE_INFORMATION

FILE_MODE_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

использование версий собственных системных служб и Zw

NtCreateFile

NtQueryInformationByName

NtSetInformationFile