Макрос FsRtlInitPerStreamContext (ntifs.h)

Макрос FsRtlInitPerStreamContext инициализирует структуру контекста драйвера фильтра.

Синтаксис

void FsRtlInitPerStreamContext(
   _fc,
   _owner,
   _inst,
   _cb
);

Параметры

_fc

Указатель на структуру, выделенную вызывающим объектом FSRTL_PER_STREAM_CONTEXT, которая будет использоваться для хранения контекстных сведений для файлового потока. Эту структуру можно использовать как есть или внедрить в определяемую драйвером структуру контекста для каждого потока. Оба типа структуры обычно выделяются путем вызова ExAllocatePoolWithTag.

_owner

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

_inst

Указатель на драйвер фильтра — выделенную переменную, которую можно использовать для различения структур контекста потока, созданных одним и тем же драйвером фильтра. Формат этой переменной зависит от драйвера фильтра — специфичный. Модули записи фильтров должны выбрать понятное и удобное значение, например адрес объекта контекста потока для файлового потока. (Чтобы получить этот адрес из объекта файла, используйте макрос FsRtlGetPerStreamContextPointer .) Этот параметр является необязательным и может иметь значение NULL.

_cb

Указатель на подпрограмму обратного вызова, которая освобождает структуру контекста каждого потока. Вызывающие операторы должны указать для этого параметра значение, отличное от NULL . Эта подпрограмма и ее параметры определяются следующим образом:

typedef
VOID (*PFREE_FUNCTION) (
          IN PVOID Buffer
          );

Буфера

Указатель на структуру контекста каждого потока, которая должна быть освобождена. Подпрограмма FreeCallback обычно приводит этот указатель к соответствующему типу указателя структуры и освобождает его, вызывая ExFreePool.

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

None

Remarks

Драйвер фильтра файловой системы использует макрос FsRtlInitPerStreamContext для инициализации только что выделенной структуры контекста для каждого потока перед связыванием ее с файловым потоком. Инициализированную структуру контекста можно передать в качестве параметра в FsRtlInsertPerStreamContext.

FsRtlInitPerStreamContext сохраняет адрес подпрограммы FreeCallback в элементе FreeCallback структуры FSRTL_PER_STREAM_CONTEXT.

Подпрограмма FreeCallback вызывается по адресу IRQL <= APC_LEVEL. Обычно он вызывается на PASSIVE_LEVEL IRQL.

Примечание Подпрограмма FreeCallback не может рекурсивно вызывать данные в файловую систему или получать ресурсы файловой системы. Кроме того, эта подпрограмма должна предполагать, что объект файла для потока файлов уже освобожден.
 
Чтобы связать инициализированную структуру контекста для каждого потока с потоком файлов, вызовите FsRtlInsertPerStreamContext.

После связывания структуры контекста с файловым потоком ее можно получить, вызвав FsRtlLookupPerStreamContext или вызвав FsRtlRemovePerStreamContext.

Дополнительные сведения см. в статье Отслеживание Per-Stream контекста в устаревшем драйвере фильтра файловой системы.

Требования

Требование Значение
Минимальная версия клиента Windows XP; Накопительный пакет обновления для Windows 2000 с пакетом обновления 4 (SP4)
Целевая платформа Персональный компьютер
Верхняя часть ntifs.h (включая Ntifs.h)
IRQL Любой уровень

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

ExAllocatePoolWithTag

ExFreePool

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts