池分配和免费例程

RDBSS 提供了许多用于池分配的例程。 通常,这些例程是使用宏调用的,而不是直接调用这些例程。 宏会自动处理零售版本和已检查版本之间的差异。

在检查的生成中,这些例程旨在添加围绕正常内核分配和可用例程的包装器。 这些用于池分配和免费例程的包装器提供其他调试信息,并调用一组例程,这些例程在调用内核池分配和可用例程之前执行各种检查和保护。 但是,这些功能目前未在这些分配和免费例程中实现,但可能会在将来的版本中添加。

在免费版本中,这些例程成为对内核分配和免费例程 ExAllocatePoolWithTagExFreePool 的直接调用。

下表列出了 RDBSS 池分配和可用例程。

例程所返回的值 说明

_RxAllocatePoolWithTag

此例程从块开头具有四字节标记的池中分配内存,以帮助捕获内存问题。

建议调用 RxAllocatePoolWithTag 宏,而不是直接使用此例程。

_RxCheckMemoryBlock

此例程检查内存块中是否有特殊的RX_POOL_HEADER标头签名。 请注意,网络微型重定向程序驱动程序需要将此特殊签名块添加到分配的内存中,以便使用例程。

不应使用此例程,因为尚未实现此特殊标头块。

_RxFreePool

此例程释放内存池。

建议调用 RxFreePool 宏,而不是直接使用此例程。

ntrxdef.h 头文件中定义的许多宏调用这些例程。 通常使用以下宏,而不是直接调用上表中列出的例程。

说明

RxAllocatePoolWithTag (类型大小标记)

在已检查的生成中,此宏从块开头具有四字节标记的池中分配内存,这有助于捕获内存回收实例。

在零售版本中,此宏将成为对 ExAllocatePoolWithTag 的直接调用。

RxCheckMemoryBlock (ptr)

在检查的生成中,此宏会检查内存块中是否有特殊的RX_POOL_HEADER标头签名。

在零售版本上,此宏不执行任何作用。

RxFreePool (ptr)

在检查的生成中,此宏释放内存池。

在零售版本中,此宏将成为对 ExFreePool 的直接调用。