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