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


Функция 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 путем побитового ввода-вывода этого значения с флагом 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 перед вызовом этой функции.

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Требуется 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, SpNoWait, StorPortStartIo

См. также

ExAllocatePoolQuotaUninitialized