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


Макрос ExAllocatePoolWithQuota (classpnp.h)

Подпрограмма ExAllocatePoolWithQuota устарела и экспортируется только для существующих двоичных файлов драйверов. Вместо этого используйте ExAllocatePoolWithQuotaTag .

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

Синтаксис

PVOID ExAllocatePoolWithQuota(
  _In_ POOL_TYPE a,
  _In_ SIZE_T b
);

Параметры

a

Указывает тип памяти пула для выделения. Описание доступных типов памяти пула см. в разделе POOL_TYPE.

Вы можете изменить (PoolType) с помощью побитового или с флагом POOL_COLD_ALLOCATION в качестве указания для ядра, чтобы выделить память из страниц, которые, скорее всего, будут быстро выгруированы. Чтобы как можно больше уменьшить объем памяти резидентного пула, не следует часто ссылаться на эти выделения. Флаг POOL_COLD_ALLOCATION доступен только для Windows XP и более поздних версий операционной системы Windows.

b

Указывает число байтов для распределения.

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

None

Remarks

Эта подпрограмма вызывается драйверами самого высокого уровня, которые выделяют память для удовлетворения запроса в контексте процесса, который изначально сделал запрос ввода-вывода. Драйверы более низкого уровня вместо этого вызывают ExAllocatePoolWithTag .

Если значение b (NumberOfBytes) PAGE_SIZE или больше, выделяется буфер, выравниваемый по страницам. Квота не взимается с процесса при выделении PAGE_SIZE или более.

Выделение памяти менее PAGE_SIZE выделяется в пределах страницы и не пересекает границы страницы. Выделение памяти PAGE_SIZE или менее не обязательно выравнивается по страницам, но выравнивается по 8-байтовой границе в 32-разрядных системах и 16-байтовой границе в 64-разрядных системах.

Примечание

Не устанавливайте значение NumberOfBytes = 0. Избегайте выделения нулевой длины, так как они тратят пространство заголовков пула и во многих случаях указывают на потенциальную проблему проверки в вызывающем коде. По этой причине средство проверки драйверов помечает такие выделения как возможные ошибки.

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

Примечание

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

Вызывающие экземпляры ExAllocatePoolWithQuota должны выполняться в IRQL <= DISPATCH_LEVEL. Вызывающий объект, выполняющийся на DISPATCH_LEVEL, должен указать значение Непагрегированногоxxx для poolType. Вызывающий объект, выполняющий команду IRQL <= APC_LEVEL, может указать любое значение POOL_TYPE, но при определении типа пула также необходимо учитывать IRQL и среду.

Требования

Требование Значение
Минимальная версия клиента Является устаревшей. Эта подпрограмма экспортируется только для существующих двоичных файлов драйверов. Вместо этого используйте ExAllocatePoolWithQuotaTag.
Целевая платформа Универсальное
Верхняя часть classpnp.h (включая Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")
Правила соответствия DDI HwStorPortProhibitedDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

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

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE