Функция 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 выделяет наименьший объем памяти, соответствующий требованию выравнивания.
Система связывает тег пула, указанный параметром тега с выделенным буфером. Средства программирования, такие как отладчик Windows (WinDbg), могут отображать тег пула, связанный с каждым выделенным буфером. Значение тега пула обычно отображается в обратном порядке. Например, если вызывающий объект передает Fred в качестве значения параметра тега тега, это значение будет отображаться как derF, если пул дампается или при отслеживании использования пула в отладчике.
Дополнительные сведения об управлении памятью см. в управления памятью.
Если буфер, который FltAllocatePoolAlignedWithTag, больше не нужен, вызывающий объект отвечает за освобождение его путем вызова FltFreePoolAlignedWithTag.
Вызывающие FltAllocatePoolAlignedWithTag могут выполняться в IRQL DISPATCH_LEVEL только в том случае, если указанnonPaged XxxPoolType. В противном случае вызывающие элементы должны выполняться в IRQL <= APC_LEVEL.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | fltkernel.h (include Fltkernel.h) |
библиотеки | FltMgr.lib |
IRQL | <= APC_LEVEL (см. раздел "Примечания") |