Выделение пула и бесплатные подпрограммы
RDBSS предоставляет ряд процедур, используемых для выделения пула. Как правило, эти подпрограммы вызываются с помощью макросов, а не путем вызова этих подпрограмм напрямую. Макросы автоматически обрабатывают различия между розничными и проверенными сборками.
В проверенной сборке эти подпрограммы были разработаны для добавления оболочек вокруг нормального выделения ядра и бесплатных подпрограмм. Эти оболочки для выделения пула и бесплатных подпрограмм предоставляют дополнительные сведения об отладке и вызывают набор подпрограмм, которые выполняют различные виды проверки и защиты перед вызовом выделения пула ядра и бесплатных подпрограмм. Однако эти функции в настоящее время не реализованы в этих подпрограммах выделения и бесплатных подпрограмм, но могут быть добавлены в будущих выпусках.
В бесплатной сборке эти подпрограммы становятся прямыми вызовами к выделению ядра и бесплатным подпрограммам ExAllocatePoolWithTag и ExFreePool.
В следующей таблице перечислены процедуры выделения пула RDBSS и бесплатные процедуры.
Подпрограмма | Описание |
---|---|
Эта подпрограмма выделяет память из пула с четырехбайтным тегом в начале блока, который может помочь перехватывать проблемы с памятью. Рекомендуется вызывать макрос RxAllocatePoolWithTag , а не использовать эту подпрограмму напрямую. |
|
Эта подпрограмма проверяет блок памяти на наличие специальной сигнатуры заголовка RX_POOL_HEADER. Обратите внимание, что драйвер сетевого мини-перенаправления должен добавить этот специальный блок сигнатуры в память, выделенную для использования подпрограммы. Эту подпрограмму не следует использовать, так как этот специальный блок заголовков не реализован. |
|
Эта процедура освобождает пул памяти. Рекомендуется вызывать макрос RxFreePool , а не использовать эту подпрограмму напрямую. |
Некоторые макросы, определенные в файле заголовка ntrxdef.h , вызывают эти подпрограммы. Вместо непосредственного вызова процедур, перечисленных в предыдущей таблице, обычно используются следующие макросы.
Макрос | Описание |
---|---|
RxAllocatePoolWithTag (тип, размер, тег) |
В проверенных сборках этот макрос выделяет память из пула с четырехбайтным тегом в начале блока, который может помочь перехватывать экземпляры корзины памяти. В розничных сборках этот макрос становится прямым вызовом ExAllocatePoolWithTag. |
RxCheckMemoryBlock (ptr) |
В проверенных сборках этот макрос проверяет блок памяти на наличие специальной сигнатуры заголовка RX_POOL_HEADER. В розничных сборках этот макрос ничего не делает. |
RxFreePool (ptr) |
В проверенных сборках этот макрос освобождает пул памяти. В розничных сборках этот макрос становится прямым вызовом ExFreePool. |