Функция FltAllocatePoolAlignedWithTag (fltkernel.h)
FltAllocatePoolAlignedWithTag выделяет выровненный по устройству буфер для использования в операции ввода-вывода без кэширования.
Синтаксис
PVOID FLTAPI FltAllocatePoolAlignedWithTag(
[in] PFLT_INSTANCE Instance,
[in] POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes,
[in] ULONG Tag
);
Параметры
[in] Instance
Указатель непрозрачного экземпляра для экземпляра драйвера минифильтра вызывающего объекта, подключенного к тому. Этот параметр является обязательным и не может иметь значение NULL.
[in] PoolType
Тип пула для выделения. Это может быть:
NonPagedPool
PagedPool
NonPagedPoolCacheAligned
PagedPoolCacheAligned
Описание доступных типов памяти пула см. в POOL_TYPE .
[in] NumberOfBytes
Число выделенных байтов. Этот параметр является обязательным и может быть равен нулю.
[in] Tag
Указывает тег пула для выделенной памяти. Драйверы обычно указывают тег пула в виде строки из одного-четырех 7-разрядных символов ASCII, разделенных одними кавычками (например, abcd). Этот параметр является обязательным и не может быть равен нулю.
Возвращаемое значение
Если для удовлетворения запроса недостаточно свободного пула, FltAllocatePoolAlignedWithTag возвращает указатель NULL . В противном случае Функция FltAllocatePoolAlignedWithTag возвращает указатель на только что выделенный буфер.
Комментарии
FltAllocatePoolAlignedWithTag выделяет буфер, который выравнивается в соответствии с базовым устройством для заданного тома. Такие буферы, выровненные по устройству, требуются для операций ввода-вывода без кэширования. (Их также можно использовать для кэшированных операций ввода-вывода.) Таким образом, при вызове подпрограмм, выполняющих некэшированные операции ввода-вывода, такие как FltReadFile и FltWriteFile, драйверы минифильтра должны вызывать FltAllocatePoolAlignedWithTag вместо ExAllocatePoolWithTag.
Если вызывающий объект задает нулевое значение для параметра NumberOfBytes , FltAllocatePoolAlignedWithTag выделяет наименьший объем памяти, соответствующий требованиям к выравниванию.
Система связывает тег пула, указанный параметром Tag , с выделенным буфером. Средства программирования, такие как отладчик Windows (WinDbg), могут отображать тег пула, связанный с каждым выделенным буфером. Значение тега пула обычно отображается в обратном порядке. Например, если вызывающий объект передает "Fred" в качестве значения параметра Tag , это значение будет отображаться как "derF", если пул является дампом или при отслеживании использования пула в отладчике.
Дополнительные сведения об управлении памятью см. в разделе Управление памятью.
Если буфер, выделенный FltAllocatePoolAlignedWithTag , больше не нужен, вызывающий объект отвечает за его освобождение путем вызова FltFreePoolAlignedWithTag.
Вызывающие функции FltAllocatePoolAlignedWithTag могут выполняться в IRQL DISPATCH_LEVEL только в том случае, если указан параметрNonPaged XxxPoolType . В противном случае вызывающие средства должны выполняться в irQL <= APC_LEVEL.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
IRQL | <= APC_LEVEL (см. раздел "Примечания") |