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


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

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

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

В бесплатной сборке эти подпрограммы становятся прямыми вызовами к выделению ядра и бесплатным подпрограммам ExAllocatePoolWithTag и ExFreePool.

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

Подпрограмма Описание

_RxAllocatePoolWithTag

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

Рекомендуется вызывать макрос RxAllocatePoolWithTag , а не использовать эту подпрограмму напрямую.

_RxCheckMemoryBlock

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

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

_RxFreePool

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

Рекомендуется вызывать макрос RxFreePool , а не использовать эту подпрограмму напрямую.

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

Макрос Описание

RxAllocatePoolWithTag (тип, размер, тег)

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

В розничных сборках этот макрос становится прямым вызовом ExAllocatePoolWithTag.

RxCheckMemoryBlock (ptr)

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

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

RxFreePool (ptr)

В проверенных сборках этот макрос освобождает пул памяти.

В розничных сборках этот макрос становится прямым вызовом ExFreePool.