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


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

Подпрограмма ExFreePool2 освобождает ранее выделенный блок памяти пула. Он расширяет ExFreePool , принимая необязательные расширенные параметры для свободного выделения, связанного с безопасным пулом, созданным через ExCreatePool.

Синтаксис

VOID ExFreePool2(
  [in]           PVOID                     P,
  [in]           ULONG                     Tag,
  [in, optional] PCPOOL_EXTENDED_PARAMETER ExtendedParameters,
  [in]           ULONG                     ExtendedParametersCount
);

Параметры

[in] P

Указатель на начало выделения на бесплатный. Должен быть точным адресом, возвращаемым подпрограммой выделения пула, например ExAllocatePool2 или ExAllocatePool3. Этот параметр не должен иметь значение NULL.

[in] Tag

Тег пула первоначально предоставлен при выделении.

[in, optional] ExtendedParameters

Указатель на массив дескрипторов расширенных параметров (тип POOL_EXTENDED_PARAMETER). См. примечания.

[in] ExtendedParametersCount

Число записей в массиве ExtendedParameters . См. примечания.

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

Никакой

Замечания

В следующей таблице показаны требования к использованию ExFreePool2 с различными типами выделений:

Тип выделения ExtendedParametersCount ExtendedParameters
Обычный (небезопасный) 0 НЕДЕЙСТВИТЕЛЬНЫЙ
Secure 1 Указатель на структуру POOL_EXTENDED_PARAMS_SECURE_POOL

Для защиты пула свободного пула соответствующая структура POOL_EXTENDED_PARAMS_SECURE_POOL должна:

  • Содержит допустимый дескриптор безопасного пула, полученный из успешного выделения, связанного с безопасным пулом.
  • Укажите правильный файл cookie для освобождения выделения.
  • У всех зарезервированных полей (например, Buffer, SecurePoolFlags) задано значение NULL/0.
  • Быть единственной записью (ExtendedParametersCount == 1).

Сбои проверки (неправильное число, неподдерживаемый тип параметров, ненулевых зарезервированных полей, недопустимый дескриптор или сбой безопасного взаимодействия с ядром) вызывают проверку ошибок (BAD_POOL_CALLER), а не возвращают состояние ошибки.

Эта подпрограмма не возвращает значение NTSTATUS; он всегда завершает бесплатные или ошибочные проверки. Двойной бесплатный, поврежденный заголовок, несоответствие тегов или освобождение неправильных метаданных безопасного пула также может активировать проверки целостности пула в зависимости от системы диагностики.

ExFreePool2 должен вызываться в IRQL <= DISPATCH_LEVEL. Если выделение произошло из пула страниц, вызывающий объект должен находиться в IRQL <= APC_LEVEL. Безопасные выделения пула находятся в непагаченной памяти и могут быть освобождены на DISPATCH_LEVEL.

Используйте ExFreePool2 для кода, который может освободить стандартные или безопасные выделения пула, чтобы избежать ветвления по источнику выделения.

Требования

Требование Ценность
минимальный поддерживаемый сервер Windows Server 2022
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
Библиотека dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")

См. также

ExFreePool

ExFreePoolWithTag

ExAllocatePool2

ExAllocatePool3

ExCreatePool