Макрос FsRtlAllocatePoolWithTag (ntifs.h)

Подпрограмма FsRtlAllocatePoolWithTag выделяет память пула.

Синтаксис

void FsRtlAllocatePoolWithTag(
  [in]  PoolType,
  [in]  NumberOfBytes,
  [in]  Tag
);

Параметры

[in] PoolType

Тип пула для выделения. Это может быть:

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned

Типы пулов NonPagedPoolMustSucceed и NonPagedPoolCacheAlignedMustS являются устаревшими и больше не должны использоваться.

[in] NumberOfBytes

Количество выделенных байтов. Этот параметр является обязательным и не может быть равен нулю.

[in] Tag

Указывает тег пула для выделенной памяти. Обычно драйверы указывают тег пула в виде строки из одного-четырех 7-разрядных символов ASCII, разделенных одними кавычками (например, abcd). Этот параметр является обязательным и не может быть равен нулю.

Возвращаемое значение

None

Remarks

При сбое выделения пула FsRtlAllocatePoolWithTag вызывает исключение STATUS_INSUFFICIENT_RESOURCES. Чтобы получить контроль в случае сбоя выделения пула, драйвер должен заключить вызов FsRtlAllocatePoolWithTag в инструкцию try-except или try-finally .

Система связывает тег пула, указанный параметром Tag , с выделенным буфером. Средства программирования, такие как Отладчик Windows (WinDbg), могут отображать тег пула, связанный с каждым выделенным буфером. Значение тега пула обычно отображается в обратном порядке. Например, если вызывающий объект передает "Fred" в качестве значения параметра Tag , это значение будет отображаться как "derF", если пул является дампом или при отслеживании использования пула в отладчике.

Дополнительные сведения об управлении памятью см. в разделе Управление памятью.

Память, выделенная FsRtlAllocatePoolWithTag , не инициализирована. Драйвер режима ядра должен сначала обнулить эту память, если он собирается сделать ее видимой для программного обеспечения в пользовательском режиме (чтобы избежать утечки потенциально привилегированного содержимого).

Вызывающие функции FsRtlAllocatePoolWithTag должны выполняться в IRQL <= DISPATCH_LEVEL. Вызывающий объект в DISPATCH_LEVEL должен указать тип пула, отличный отpagedXxx. В противном случае вызывающий объект должен работать в среде IRQL <= APC_LEVEL.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")

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

ExAllocatePoolWithTag

ExFreePool