函数之ExAllocatePool--内存分配

来源:互联网 发布:directx 11 编程 编辑:程序博客网 时间:2024/04/27 23:07

 

如同C里面的malloc一样,内核模式下的ExAllocatePool也是非常重要的.但是一说到ExAllocatePool函数就不得不提ExAllocatePoolWithTag函数.对比一下两个函数的调用方式:

 

     PVOID p = ExAllocatePool(Pool_Type, Size);

    PVOID p = ExAllocatePoolWithTag(Pool_Type, Size, Tag);

 

    在调用ExAllocatePoolWithTag的时候,系统会在要求的内存大小的基础上再额外多分配4个字节的标签.这个标签占用了开始的4个字节,位于返回指针所指向地址的前面.这样,当调试时这个标签可以帮助你识别有问题的内存块.

   在WDM.H(NTDDK.H)中声明了,内存分配函数无条件受预处理宏POOL_TAGGING控制(POOL_TAGGING被无条件的定义).因此,即便是调用的ExAllocatePool函数,实际执行的却是:ExAllocatePoolWithTag,其加入的标签为"mdW",指明是WDM的内存块.

   又或者你强行关闭POOL_TAGGING宏再去调用ExAllocatePool,实际执行的还是ExAllocatePoolWithTag,并带标签"enoN".

   因此,建议在分配内存时,直接调用ExAllocatePoolWithTag并加上一个自定义的标签.

 

原创粉丝点击