Поделиться через


Функция 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 (см. раздел "Примечания")

См. также

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

FltReadFile

FltWriteFile