Windows内核模式堆内存分配等价代码及所需头文件咨询
内核态等价于用户态HeapAlloc/HeapFree的实现代码及头文件说明
等价内核态实现代码
对应你提供的用户态内存分配/释放逻辑,内核态下推荐使用ExAllocatePool2(Windows 10 2004及以上版本)完成零初始化内存分配,搭配ExFreePool释放内存,代码示例如下:
// 自定义内存标签(建议用4个可打印ASCII字符,便于调试追踪) #define MEM_TAG 'gAeM' PVOID MsgAttriPtr = ExAllocatePool2(POOL_FLAG_PAGED | POOL_FLAG_ZERO_MEMORY, ulMessageAttributeBufSize, MEM_TAG); // 内核态内存分配可能失败,必须检查返回值 if (MsgAttriPtr == NULL) { // 此处添加分配失败的处理逻辑 } // 释放已分配的内存 ExFreePool(MsgAttriPtr);
若需兼容Windows 10 2004之前的系统,可使用旧版的ExAllocatePoolWithTag(注意该API已被微软标记为弃用),手动完成内存零初始化:
#define MEM_TAG 'gAeM' PVOID MsgAttriPtr = ExAllocatePoolWithTag(PagedPool, ulMessageAttributeBufSize, MEM_TAG); if (MsgAttriPtr != NULL) { RtlZeroMemory(MsgAttriPtr, ulMessageAttributeBufSize); } // 释放内存 ExFreePool(MsgAttriPtr);
所需头文件
内核态内存分配相关的原生Windows API,只需包含核心驱动头文件:
ntddk.h:该头文件涵盖了ExAllocatePool2、ExAllocatePoolWithTag、ExFreePool、RtlZeroMemory等函数声明,以及POOL_FLAG_*、PagedPool等必要宏定义,是内核驱动开发的基础头文件。
内容的提问来源于stack exchange,提问作者Shakti Singh
相关产品推荐
相关产品推荐

