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


Макрос 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.

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

Никакой

Замечания

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

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

Подпрограмма FreeCallback вызывается в IRQL <= APC_LEVEL. Как правило, он вызывается в IRQL PASSIVE_LEVEL.

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP; Накопительный пакет обновления для Windows 2000 с пакетом обновления 4 (SP4)
целевая платформа Настольный
заголовка ntifs.h (include Ntifs.h)
IRQL Любой уровень

См. также

ExAllocatePoolWithTag

ExFreePool

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts