Функция 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 путем побитового ввода-вывода этого значения с флагом 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 (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (см. раздел "Примечания") |
правил соответствия DDI | HwStorPortProhibitedDIs, IrqlExAllocatePool, IrqlExFree2, SpNoWait, StorPortStartIo |