Функция 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 объединен с параметром Flags с помощью побитовой операции 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 автоматически очищаются диспетчером ввода-вывода после завершения операции создания. Это позволяет правильно распространять ECP драйвера фильтра по обработке точек повторного анализа. Для этого процесса может потребоваться создать несколько запросов IRP_MJ_CREATE.

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

структура ECP_LIST

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

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

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

Синтаксис

struct ECP_LIST {
  ;      // Reserved.
};

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

Требования

Требование Значение
Минимальная версия клиента Эта подпрограмма доступна начиная с Windows Vista.
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
IRQL <= APC_LEVEL

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

FltAllocateExtraCreateParameter

FltAllocateExtraCreateParameterFromLookasideList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx