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


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

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

Синтаксис

NTSTATUS FLTAPI FltAllocateExtraCreateParameterList(
  [in]  PFLT_FILTER                  Filter,
  [in]  FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
  [out] PECP_LIST                    *EcpList
);

Параметры

[in] Filter

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

[in] Flags

Определяет параметры выделения пула. Если флаг FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA сочетается с параметром флагов с помощью побитовой операции OR, в любом пуле, выделенном подпрограммой, будет взиматься плата за квоту памяти текущего процесса.

[out] EcpList

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

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

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

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

Замечания

Независимо от того, освобождает ли операционная система память, FltAllocateExtraCreateParameterList, зависит от того, когда вызывается FltAllocateExtraCreateParameterList, как показано в следующих ситуациях:

  • Вызывающий объект может вызывать FltAllocateExtraCreateParameterList, чтобы выделить ECP_LIST и добавить одну или несколько структур контекста ECP перед вызовом процедуры FltCreateFileEx2. В этой ситуации операционная система не освобождает ни одну из структур контекста ECP. Поэтому вызывающий объект может выполнять несколько вызовов для FltCreateFileEx2 с одинаковым набором ECP. Когда вызывающий объект выполняется с ECP_LIST, вызывающий объект должен вызвать процедуру FltFreeExtraCreateParameterList, чтобы освободить ECP_LIST.

  • Хотя драйвер фильтра файловой системы обрабатывает запрос IRP_MJ_CREATE, драйвер фильтра файловой системы может вызывать FltInsertExtraCreateParameter для подключения ECP к существующей ECP_LIST. Если ECP_LIST не существует, вызывающий объект должен вызвать FltAllocateExtraCreateParameterList для создания ECP_LIST. В этой ситуации ECP_LIST и структура контекста ECP автоматически очищаются диспетчером операций ввода-вывода при завершении операции создания. Это позволяет драйверу фильтра правильно распространяться по обработке точек повторного анализа. Для этого процесса может потребоваться создать несколько IRP_MJ_CREATE запросов.

Если флаг FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA используется с параметром флагов, как описано выше, выделяется обычный пул страниц. В противном случае пул страниц выделяется с помощью внутреннего списка lookaside.

структура ECP_LIST

ECP_LIST — это непрозрачная структура, объявленная операционной системой. ECP_LIST содержит список дополнительных записей создания параметров (ECP).

Подпрограмма FltAllocateExtraCreateParameterList должна использоваться для выделения памяти для структуры ECP_LIST. Память, выделенная FltAllocateExtraCreateParameterList, не освобождается операционной системой автоматически; Он должен быть явно освобожден путем вызова подпрограммы FltFreeExtraCreateParameter List. Обратите внимание, что все остальные элементы списка ECP будут автоматически освобождены при вызове FltFreeExtraCreateParameterList.

Тип данных PECP_LIST используется для объявления указателя на переменную типа ECP_LIST.

Синтаксис

struct ECP_LIST {
  ;      // Reserved.
};

Структура ECP_LIST объявлена в Ntifs.h (включая Ntifs.h).

Требования

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

См. также

FltAllocateExtraCreateParameter

FltAllocateExtraCreateParameterFromLookasideList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx