Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма 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 (см. раздел "Примечания") |