技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 420|回复: 2
收起左侧

【C】windows驱动中的 几种内存池

[复制链接]

25

主题

77

帖子

1030

积分

用户组: 版主

UID
1821
精华
6
威望
57 点
宅币
778 个
贡献
31 次
宅之契约
0 份
在线时间
190 小时
注册时间
2016-7-12
发表于 2017-6-12 14:00:18 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
本帖最后由 Ayala 于 2017-6-12 14:01 编辑

有时候我们需要在驱动中使用内存池

用的比较多的可能是这个 ExAllocatePoolWithTag 之后自己定义内存结构来自己维护
伪代码
[C] 纯文本查看 复制代码

typedef struct _heap{
  ...
}heap,pheap;

pheap g_heap_p;
init(size_t n)
{
  g_heap_p = ExAllocatePoolWithTag(paged,n,0);
}

alloc(size_t n)
{

}

free(void* p)
{
  
}


然后是mdl 自带的内存管理结构 MmAllocatePagesForMdl
之前发过ramdisk就是使用的这种方式 不过汇编写的

接下来就是ring3 ring0可以源代码兼容的 RtlCreateHeap RtlAllocateHeap RtlFreeHeap
[C] 纯文本查看 复制代码
void* g_heap_p;
init(size_t n)
{
 g_heap_p= RtlCreateHeap(HEAP_CLASS_1,NULL,n,n,0,NULL);
}
alloc(size_t n)
{
 return RtlAllocateHeap(g_heap_p,0,n);
}

free(void* p)
{
 RtlFreeHeap(g_heap_p,0,p);
}



本帖被以下淘专辑推荐:

20

主题

54

帖子

1225

积分

用户组: 上·技术宅

UID
1043
精华
6
威望
23 点
宅币
1078 个
贡献
17 次
宅之契约
0 份
在线时间
210 小时
注册时间
2015-8-15
发表于 2017-7-14 02:00:07 | 显示全部楼层
还有啥MmAllocateContiguousMemory,可以分配物理地址连续的内存,不过不知道MmAllocateNonCachedMemory可不可以。
flowers for Broken spirits - a woman turned into stake will hold the world in the basin of fire.

5

主题

47

帖子

181

积分

用户组: 小·技术宅

UID
167
精华
0
威望
3 点
宅币
117 个
贡献
11 次
宅之契约
0 份
在线时间
28 小时
注册时间
2014-3-30
发表于 2017-12-28 16:20:51 | 显示全部楼层
Lookaside Lists  也算一个吧

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-6-22 13:47 , Processed in 0.110447 second(s), 15 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表