首页
社区
课程
招聘
如何在驱动中分配用户态内存
发表于: 2010-1-25 11:00 5000

如何在驱动中分配用户态内存

2010-1-25 11:00
5000
如何在驱动程序中分配进程上下文中的用户态内存,不要使用在用户进程分配空间然后把地址传给驱动程序的方法, 如果用ExAllocatePool函数分配的内存是就会是0x80000000以后的内核地址空间内存,如何在调用驱动程序的进程上下文中分配一段0x00000000-0x7FFFFFFF地址空间的内存供用户进程和驱动程序共用呢?

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 30
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人回答自己顶
2010-1-25 22:24
0
雪    币: 30
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没人回答继续顶
2010-1-26 10:32
0
雪    币: 131
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知楼主分配这段内存有何用?我也是刚入门,看看这个对你有没有帮助?IoAllocateMdl( Irp->UserBuffer, BufferLength, FALSE, FALSE, Irp );
2010-1-26 14:46
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
5
你试试文件映射。然后修改文件,做为数据共享。
2010-1-26 14:58
0
雪    币: 75
活跃值: (698)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
我也刚入门..
用这个  IoAllocateMdl(
    IN PVOID  VirtualAddress,
    IN ULONG  Length,
    IN BOOLEAN  SecondaryBuffer,
    IN BOOLEAN  ChargeQuota,
    IN OUT PIRP  Irp  OPTIONAL
    );应该可以,
但可能要确保用户进程空间VirtualAddress~VirtualAddress+Length是没用过的,而且是可读可写属性.驱动对通过创建的这个mdl来完成用户空间到内核空间的映射,那驱动读写这部分地址时中断级别可能<DISPATCH level
2010-1-26 16:30
0
雪    币: 30
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这种方法需要驱动的调用程序调用驱动之前分配一段固定大小的用户地址空间, 有没有直接在驱动程序中动态随意大小的分配用户地址空间的内存的方法呢?
2010-1-26 17:38
0
雪    币: 75
活跃值: (698)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
那是正常搞法"这种方法需要驱动的调用程序调用驱动之前分配一段固定大小的用户地址空间".
我说的意思是,根本就不管"调用驱动之前分配一段固定大小的用户地址空间",直接拿这个函数强行映射....,你想映射到用户空间的那里就是那里...
2010-1-26 23:28
0
雪    币: 30
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我明白你的意思了, 不过映射之前要检测用户地址空间的某个地址范围是否有数据吧 ,要不然会覆盖已有的数据也是挺危险的
2010-1-27 09:54
0
游客
登录 | 注册 方可回帖
返回
//