Функция ExAllocatePoolQuotaUninitialized (wdm.h)
Подпрограмма ExAllocatePoolQuotaUninitialized выделяет память пула, заряжая квоту на текущий процесс.
Эта подпрограмма — это вариант оболочки и замены для ExAllocatePoolWithQuotaTag. Нет различий в функциональных возможностях.
Синтаксис
PVOID ExAllocatePoolQuotaUninitialized(
__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 (тильды). Каждый путь кода выделения должен использовать уникальный тег пула, чтобы помочь отладчикам и проверятелям определить путь кода.
Возвращаемое значение
ExAllocatePoolQuotaUninitialized возвращает указатель на выделенный пул.
Если запрос не может быть удовлетворен, ExAllocatePoolQuotaUninitialized вызывает исключение, если не указано POOL_QUOTA_FAIL_INSTEAD_OF_RAISE. Использование POOL_QUOTA_FAIL_INSTEAD_OF_RAISE предпочтительнее по соображениям производительности.
Замечания
Эта подпрограмма вызывается драйверами высокого уровня, которые выделяют память для удовлетворения запроса в контексте процесса, который первоначально сделал запрос ввода-вывода. Вместо этого драйверы нижнего уровня вызывают ExAllocatePoolUninitialized.
Память, которая exAllocatePoolQuotaUninitialized выделяется неинициализировано. Драйвер в режиме ядра должен сначала нулю этой памяти, если он будет видимым для программного обеспечения в пользовательском режиме (чтобы избежать утечки потенциально привилегированного содержимого).
Дополнительные инструкции см. в разделеExAllocatePoolWithQuotaTag.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Требуется WDK для Windows 10 версии 2004. Предназначено для Windows 7 и более поздних версий операционной системы Windows. |
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL (см. раздел "Примечания") |
правил соответствия DDI | HwStorPortProhibitedDIs, SpNoWait, StorPortStartIo |