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

См. также раздел

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

FltReadFile

FltWriteFile