Функция FltAllocateExtraCreateParameterFromLookasideList (fltkernel.h)

Программа FltAllocateExtraCreateParameterFromLookasideList выделяет пул памяти из заданного списка lookaside для дополнительной структуры контекста параметра создания (ECP) и создает указатель на данную структуру.

Синтаксис

NTSTATUS FLTAPI FltAllocateExtraCreateParameterFromLookasideList(
  [in]           PFLT_FILTER                                    Filter,
  [in]           LPCGUID                                        EcpType,
  [in]           ULONG                                          SizeOfContext,
  [in]           FSRTL_ALLOCATE_ECP_FLAGS                       Flags,
  [in, optional] PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
  [in, out]      PVOID                                          LookasideList,
  [out]          PVOID                                          *EcpContext
);

Параметры

[in] Filter

Непрозрачный указатель фильтра на драйвер мини-фильтра. Этот указатель однозначно идентифицирует драйвер минифильтра и остается константой до тех пор, пока драйвер минифильтра загружается.

[in] EcpType

Указатель на GUID, указывающий тип структуры контекста ECP. Дополнительные сведения см. в разделе Использование идентификаторов GUID в драйверах.

[in] SizeOfContext

Размер в байтах структуры контекста ECP.

[in] Flags

Определяет параметры выделения пула. Если значение параметра SizeOfContext больше размера в байтах заданного списка lookaside, структура контекста ECP будет выделена из системного пула вместо списка lookaside. В этом случае, если параметр флагов содержит значение флага FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA бита, системный пул, выделенный подпрограммой, будет взиматься плата за квоту памяти текущего процесса. Дополнительные сведения см. в параметре флаговFltAllocateExtraCreatePara meter. В более типичном случае при выделении памяти для структуры контекста ECP из списка lookaside флаг FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA бит не используется подпрограммой.

[in, optional] CleanupCallback

Необязательный указатель на определяемую мини-фильтром подпрограмму обратного вызова типа PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK. Подпрограмма обратного вызова очистки вызывается при удалении структуры контекста ECP. Присвойте этому параметру значение NULL, если подпрограмма обратного вызова очистки неприменима.

[in, out] LookasideList

Указатель на инициализированный список lookaside, в котором необходимо попытаться выделить пул (для структуры контекста ECP). Чтобы инициализировать список lookaside, используйте подпрограмму FltInitExtraCreateParameterLookasideList.

[out] EcpContext

Получает указатель на выделенную структуру контекста ECP. Если подпрограмма не удалось выделить достаточный пул для структуры контекста ECP, EcpContext будет null, а подпрограмма вернет код состояния STATUS_INSUFFICIENT_RESOURCES.

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

Подпрограмма FltAllocateExtraCreateParameterFromLookasideList может возвращать одно из следующих значений:

Возвращаемый код Описание
STATUS_INSUFFICIENT_RESOURCES Подпрограмма FltAllocateExtraCreateParameterFromLookasideList не удалось выделить достаточную память для структуры контекста ECP. В этом случае EcpContext будет NULL.
STATUS_SUCCESS Структура контекста ECP успешно выделена. В этом случае указатель на выделенную структуру возвращается параметром EcpContext.

Замечания

Эта подпрограмма доступна начиная с Windows Vista.

Подпрограмма FltAllocateExtraCreateParameterFromLookasideList выделяет пул памяти для структуры контекста ECP из заданного инициализированного списка lookaside. Однако если размер структуры контекста ECP (как определено параметром SizeOfContext) больше списка lookaside, подпрограмма аналогично выделяет память из страничного или нестраничного системного пула.

Используйте процедуру FltInitExtraCreateParameterLookasideList, чтобы инициализировать список подстановки или нестраничного пула. Используйте подпрограмму FltAllocateExtraCreateParameterFromLookasideList, чтобы выделить структуру контекста ECP из списка lookaside, а также подпрограмму fltFreeExtraCreateParameter, чтобы освободить структуру контекста ECP.

Используйте процедуру FltDeleteExtraCreateParameterLookasideList, чтобы освободить список lookaside.

Драйверы должны освободить все структуры контекста ECP и списки lookaside, которые они создают перед выгрузками. Однако если драйвер фильтра файловой системы или файловой системы подключает ECP к существующей или недавно созданной ECP_LIST при обработке запроса IRP_MJ_CREATE, этот ECP автоматически очищается после завершения IRP. В результате драйвер фильтра не должен очищать ЕЦП, которые добавляются динамически. Это позволяет правильно распространять ЕЦП драйвера фильтра по точкам повторного анализа, что может потребовать создания нескольких IRP_MJ_CREATE запросов.

Дополнительные сведения об использовании списков lookaside с драйверами см. в использовании списков Lookaside.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки FltMgr.lib
IRQL <= APC_LEVEL

См. также

ECP_LIST

FltAllocateExtraCreateParameter

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltDeleteExtraCreateParameterLookasideList

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInitExtraCreateParameterLookasideList

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK