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

Подпрограмма FsRtlAllocatePoolWithQuotaTag выделяет память пула, взимая квоту на текущий процесс.

Синтаксис

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

Параметры

[in] PoolType

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

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned

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

[in] NumberOfBytes

Число выделенных байтов.

[in] Tag

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

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

None

Remarks

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

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

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

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

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

Требования

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

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

ExAllocatePoolWithQuotaTag

ExFreePool

FsRtlAllocatePoolWithQuota