首页
社区
课程
招聘
[求助]驱动分配大内存后使用的问题
发表于: 2010-6-10 15:58 5920

[求助]驱动分配大内存后使用的问题

2010-6-10 15:58
5920
我在驱动中,需要开辟很大一块内存。大的程度:可用的物理内存有多少,我就希望尽可能开辟完。
ExAllocatePoolWithTag这个函数开辟是有上限的,无法达到目的。
MmAllocatePagesForMdl这个函数可以分配很大的内存,返回一个PMDL的指针,我想使用这块已经分配出来的内存的时候,想通过MmMapLockedPagesSpcifyCache来锁定内存,并返回内核下的虚拟地址。但是使用这个函数的时候,如果前面开辟的内存过大,调用MmMapLockedPagesSpcifyCache就会失败,返回不了需要的地址。

MmAllocatePagesForMdl开辟的大内存,我想要使用,应该如何操作
望高手指点!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
系统用于mdl映射的虚存空间好像也是有限制的吧,有个位图专门管理用于mdl映射的虚存页面
2010-6-10 18:27
0
雪    币: 442
活跃值: (107)
能力值: ( LV9,RANK:350 )
在线值:
发帖
回帖
粉丝
3
你无法占用所有的物理内存,缓存管理器,内核自身都会事先保留一定的PM
2010-6-11 09:47
0
雪    币: 121
活跃值: (121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个我知道的。
我的意思是,尽量大;
微软的文档说过的,每个操作系统分配空间都是有限制的。
偶在网上看见不少驱动,可以突破这个限制,开辟很大的内存。
采用常规的分配内存方式,不行;

求一非常规分配内存的方式。
2010-6-11 10:32
0
雪    币: 538
活跃值: (259)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
地址窗口扩展?
2010-6-13 19:53
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
MmAllocatePagesForMdl分配,然后按需去MmMapLockedPagesSpcifyCache,控制好自己Map出来的总量即可。超过总量一定要UnMap,否则会将地址空间占光的(也就无法再Map出来了)。
2010-6-19 12:35
0
游客
登录 | 注册 方可回帖
返回
//