Функция 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