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


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

Предупреждение

Подпрограмма exAllocatePoolWithQuota устарела и устарела в Windows 10 версии 2004 и заменена ExAllocatePool2. Дополнительные сведения см. в разделе Обновление устаревших вызовов ExAllocatePool к ExAllocatePool2 и ExAllocatePool3.

При разработке драйверов для версии Windows до Windows 10 версии 2004 используйте ExAllocatePoolQuotaZero.

ExAllocatePoolWithQuota выделяет память пула, квоту зарядки для текущего процесса.

Синтаксис

PVOID ExAllocatePoolWithQuota(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

Параметры

[in] PoolType

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

Вы можете изменить PoolType с помощью побитового ИЛИ с флагом POOL_COLD_ALLOCATION в качестве указания ядра, чтобы выделить память из страниц, которые, скорее всего, будут выстраиваться быстро. Чтобы уменьшить объем памяти пула резидентов максимально возможно, не следует часто ссылаться на эти выделения. Флаг POOL_COLD_ALLOCATION доступен только для Windows XP и более поздних версий операционной системы Windows.

[in] NumberOfBytes

Указывает количество выделенных байтов.

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

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

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

Замечания

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

Если NumberOfBytes PAGE_SIZE или больше, выделяется буфер с выравниванием страницы. Квота не взимается в процесс выделения PAGE_SIZE или более поздней версии.

Выделение памяти меньше PAGE_SIZE выделяется на странице и не пересекает границы страницы. Выделения памяти PAGE_SIZE или меньше не обязательно выровнены по страницам, но выровнены по 8-байтовой границе в 32-разрядных системах и 16-байтовых границах в 64-разрядных системах.

Не устанавливайте NumberOfBytes = 0. Избегайте выделения нулевой длины, так как они занимают место заголовка пула отходов и, во многих случаях, указывают на потенциальную проблему проверки в вызывающем коде. По этой причине проверяющего драйвера флаги таких выделений, как возможные ошибки.

Система автоматически задает определенные стандартные объекты событий, если объем пула (страницы или непагированные) имеет высокий или низкий уровень. Драйверы могут ждать, пока эти события будут настроены на использование пула. Дополнительные сведения см. в разделе Стандартные объекты событий.

Память, которая exAllocatePoolWithQuota выделяется неинициализировано. Драйвер в режиме ядра должен сначала ноль этой памяти, если он будет отображаться в программном обеспечении в пользовательском режиме (чтобы избежать утечки потенциально привилегированного содержимого).

Вызывающие ExAllocatePoolWithQuota должны выполняться в IRQL <= DISPATCH_LEVEL. Вызывающий объект, выполняющийся в DISPATCH_LEVEL, должен указать значение NonPagedXxx для PoolType. Вызывающий объект, выполняющийся в IRQL <= APC_LEVEL может указывать любое POOL_TYPE значение, но для определения типа пула также следует учитывать irQL и среду.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Устаревший. Эта подпрограмма экспортируется только для существующих двоичных файлов драйверов. Вместо этого используйте ExAllocatePoolWithQuotaTag.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")
правил соответствия DDI HwStorPortProhibitedDDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

См. также

ExAllocatePoolWithQuotaTag

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE