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


Функция ExAllocatePoolPriorityZero (wdm.h)

Внимание!

Корпорации Майкрософт известно о проблеме с ExAllocatePoolPriorityZero, которая может привести к тому, что выделение не обнуляется в Windows 10 версии 1909. Эта проблема была исправлена при обновлении системы безопасности WDK для Windows 10 версии 2004 и Enterprise WDK (EWDK) для Windows 10 версии 2004 16 декабря 2020 г. Сведения о скачивании последней версии WDK см. в разделе Скачивание пакета драйверов Windows (WDK).

Эта подпрограмма является оболочкой и рекомендуемым вариантом замены для ExAllocatePoolWithTagPriority.

ExAllocatePoolPriorityZero выделяет память пула указанного типа.

Он идентичен ExAllocatePoolWithTagPriority , но ноль инициализирует выделенную память. Если это нежелательно, используйте вместо него ExAllocatePoolPriorityUninitialized .

Синтаксис

PVOID ExAllocatePoolPriorityZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag,
  EX_POOL_PRIORITY                               Priority
);

Параметры

PoolType

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

Значение перечисления можно изменить, выполнив побитовое или с флагом POOL_RAISE_IF_ALLOCATION_FAILURE, определенным в wdm.h. Этот флаг вызывает исключение, если запрос не может быть удовлетворен. Использовать этот флаг не рекомендуется, так как он является дорогостоящим.

Аналогичным образом можно изменить значение PoolType путем побитового ORing это значение с флагом POOL_COLD_ALLOCATION (также определенным в ) в wdm.hкачестве указания для ядра, чтобы выделить память из страниц, которые, скорее всего, будут быстро выгружаться. Чтобы максимально уменьшить объем памяти постоянного пула, не следует часто ссылаться на эти выделения. Флаг POOL_COLD_ALLOCATION является только рекомендацией.

NumberOfBytes

Количество байтов, которые необходимо выделить.

Tag

Тег пула, используемый для выделенной памяти. Укажите тег пула в виде ненулевого символьного литерала от одного до четырех символов, разделенных одними кавычками (например, Tag1). Строка обычно указывается в обратном порядке (например, 1gaT). Каждый символ ASCII в теге должен быть значением в диапазоне 0x20 (пробел) для 0x7E (тильда). Каждый путь кода выделения должен использовать уникальный тег пула, чтобы помочь отладчикам и проверятелям идентифицировать путь к коду.

Priority

Значение перечисления EX_POOL_PRIORITY , указывающее приоритет этого запроса.

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

ExAllocatePoolPriorityZero возвращает значение NULL, если в свободном пуле недостаточно памяти для удовлетворения запроса, если не указано POOL_RAISE_IF_ALLOCATION_FAILURE. В противном случае подпрограмма возвращает указатель на выделенную память.

Комментарии

Для запуска в версиях Windows до Windows 10 версии 2004 драйвер должен определить POOL_ZERO_DOWN_LEVEL_SUPPORT и вызвать ExInitializeDriverRuntime перед вызовом этой функции.

Дополнительные рекомендации см. в разделе Примечания в ExAllocatePoolWithTagPriority .

Требования

Требование Значение
Минимальная версия клиента Требуется WDK для Windows 10 версии 2004. Предназначен для Windows 7 и более поздних версий операционной системы Windows.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")
Правила соответствия DDI HwStorPortProhibitedDIs, IrqlExAllocatePool, IrqlExFree2, SpNoWait, StorPortStartIo

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

ExAllocatePoolWithTagPriority

ExAllocatePoolPriorityUninitialized