Выделение пула и бесплатные подпрограммы

RDBSS предоставляет ряд подпрограмм, используемых для выделения пула. Обычно эти подпрограммы вызываются с помощью макросов, а не путем вызова этих подпрограмм напрямую. Макросы автоматически обрабатывают различия между розничными и проверенными сборками.

В проверенной сборке эти подпрограммы были разработаны для добавления оболочки вокруг нормального выделения ядра и бесплатных подпрограмм. Эти оболочки для выделения пула и бесплатные подпрограммы предоставляют дополнительные сведения об отладке и вызывают набор подпрограмм, которые выполняют различные виды проверки и защиты перед вызовом выделения пула ядра и бесплатных подпрограмм. Однако эти функции в настоящее время не реализованы в этих подпрограммах выделения и бесплатных, но могут быть добавлены в будущих выпусках.

On a free build, these routines become direct calls to the kernel allocation and free routines, ExAllocatePoolWithTag and ExFreePool.

В следующей таблице перечислены выделение пула RDBSS и бесплатные подпрограммы.

Routine Description

_RxAllocatePoolWithTag

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

It is recommended that the RxAllocatePoolWithTag macro be called instead of using this routine directly.

_RxCheckMemoryBlock

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

Эта подпрограмма не должна использоваться, так как этот специальный блок заголовка не реализован.

_RxFreePool

Эта подпрограмма освобождает пул памяти.

It is recommended that the RxFreePool macro be called instead of using this routine directly.

A number of macros, which are defined in the ntrxdef.h header file, call these routines. Вместо вызова подпрограмм, перечисленных в предыдущей таблице напрямую, обычно используются следующие макросы.

Macro Description

RxAllocatePoolWithTag (type, size, tag)

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

On retail builds, this macro becomes a direct call to ExAllocatePoolWithTag.

RxCheckMemoryBlock (ptr)

При проверенных сборках этот макрос проверяет блок памяти для специальной подписи заголовка RX_POOL_HEADER.

В розничных версиях этот макрос ничего не делает.

RxFreePool (ptr)

При проверке сборки этот макрос освобождает пул памяти.

On retail builds, this macro becomes a direct call to ExFreePool.