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


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

Подпрограмма IoCreateStreamFileObjectEx создает новый объект файла потока.

Синтаксис

PFILE_OBJECT IoCreateStreamFileObjectEx(
  [in, optional]  PFILE_OBJECT   FileObject,
  [in, optional]  PDEVICE_OBJECT DeviceObject,
  [out, optional] PHANDLE        FileHandle
);

Параметры

[in, optional] FileObject

Указатель на объект файла, к которому связан новый файл потока. Этот параметр является необязательным и может быть null.

[in, optional] DeviceObject

Указатель на объект устройства, на котором должен быть открыт файл потока. Если вызывающий объект задает значение, отличное отNULL для FileObject, значение DeviceObject игнорируется. В противном случае вызывающий объект должен указать значение, отличное отNULL для DeviceObject.

[out, optional] FileHandle

Указатель на дескриптор файла для потока в выходных данных. Этот параметр является необязательным и может быть null.

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

IoCreateStreamFileObjectEx возвращает указатель на созданный объект файла потока.

Замечания

Файловые системы вызывают IoCreateStreamFileObjectEx для создания объекта файла потока. Объект потокового файла идентичен обычному объекту файла, за исключением того, что установлен флаг объекта FO_STREAM_FILE файла.

Объект файла потока обычно используется для представления внутреннего потока для тома, подключенного файловой системой. Этот файл виртуального тома позволяет файловой системе просматривать, изменять и кэшировать структуру тома на диске, как если бы это был обычный файл. В этом случае параметр DeviceObject в вызове IoCreateStreamFileObjectEx указывает объект устройства тома (VDO) для тома.

Объект файла потока также можно использовать для представления альтернативного потока данных для доступа к метаданным файла, таким как расширенные атрибуты или дескрипторы безопасности. В этом случае параметр FileObject в вызове IoCreateStreamFileObjectEx указывает существующий объект файла. Созданный объект потока позволяет файловой системе просматривать, изменять и кэшировать метаданные файла, как если бы это был обычный файл.

Если объект файла потока больше не нужен, вызывающий объект должен уменьшать количество ссылок путем вызова ObDereferenceObject. Когда число ссылок объекта потока достигает нуля, запрос IRP_MJ_CLOSE отправляется в стек драйверов файловой системы для тома.

Записи драйверов фильтров файловой системы должны отметить, что IoCreateStreamFileObjectEx приводит к отправке запроса IRP_MJ_CLEANUP в стек драйверов файловой системы для тома. Так как файловые системы часто создают потоковые объекты файлов в качестве побочных эффектов операций, отличных от IRP_MJ_CREATE, трудно надежно обнаруживать создание объекта файла потока. Таким образом, драйвер фильтра должен ожидать получения IRP_MJ_CLEANUP и IRP_MJ_CLOSE запросов на ранее невидимые объекты файлов.

Если происходит сбой выделения пула, IoCreateStreamFileObjectEx вызывает исключение STATUS_INSUFFICIENT_RESOURCES.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL ПАССИВНЫЙ

См. также

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

ObDereferenceObject