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


Макрос ExAllocatePoolWithQuota (classpnp.h)

Подпрограмма ExAllocatePoolWithQuotaустаревшейи экспортируется только для существующих двоичных файлов драйверов. Вместо этого используйте ExAllocatePoolWithQuotaTag.

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

Синтаксис

PVOID ExAllocatePoolWithQuota(
  _In_ POOL_TYPE a,
  _In_ SIZE_T b
);

Параметры

a

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

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

b

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

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

Никакой

Замечания

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

Если b (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.
целевая платформа Всеобщий
заголовка classpnp.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)

См. также

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE