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


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

Внимание!

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

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

ExAllocatePoolQuotaZero выделяет память пула указанного типа и возвращает указатель на выделенный блок. Он идентичен ExAllocatePoolWithQuotaTag , но ноль инициализирует выделенную память. Если это не нужно, используйте ExAllocatePoolQuotaUninitialized .

Синтаксис

PVOID ExAllocatePoolQuotaZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Параметры

PoolType

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

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

NumberOfBytes

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

Tag

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

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

ExAllocatePoolQuotaZero возвращает указатель на выделенный пул.

Если запрос не может быть выполнен, ExAllocatePoolQuotaZero создает исключение, если не указано POOL_QUOTA_FAIL_INSTEAD_OF_RAISE. Для повышения производительности рекомендуется использовать POOL_QUOTA_FAIL_INSTEAD_OF_RAISE.

Комментарии

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

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

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

Требования

Требование Значение
Минимальная версия клиента Требуется 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, SpNoWait, StorPortStartIo

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

ExAllocatePoolQuotaUninitialized