- UID
- 1821
- 精华
- 积分
- 3249
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
本帖最后由 Ayala 于 2017-6-12 14:01 编辑
有时候我们需要在驱动中使用内存池
用的比较多的可能是这个 ExAllocatePoolWithTag 之后自己定义内存结构来自己维护
伪代码
- 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
- 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);
- }
复制代码
|
|