首页
社区
课程
招聘
[求助]如何在驱动和特定进程间共享内存?
发表于: 2009-8-18 20:19 5429

[求助]如何在驱动和特定进程间共享内存?

2009-8-18 20:19
5429
正在写个东西,因为驱动和应用程序间要频繁的交换数据,而且数据很杂,所以想通过共享内存的方法实现,有一个特殊的要求,就是共享的内存要不受进程环境的影响,也就是说这段内存永远是指向我指定的进程空间中的那段,而不会因为进程上下文的改变而变成其他进程空间里的地址。
      我是使用这个方法:
PHYSICAL_ADDRESS PhysicalAdress =  MmGetPhysicalAddress(in_buffer);
			g_MonitBuffer = (PMONIT_INFO)MmMapIoSpace(PhysicalAdress, sizeof(MONIT_INFO), MmNonCached);

但是有问题,对g_MonitBuffer的引用好像和进程上下文有关,不是指定进程中的那段共享的内存,请问这个问题应当如何解决

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
double map
app:
     alloc a buffer
driver:
    [probe and lock the buffer get an MDL
then map it to kernel address space
2009-8-18 21:36
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=leftup;673090]double map
app:
     alloc a buffer
driver:
    [probe and lock the buffer get an MDL
then map it to kernel address space[/QUOTE]

我是按照这个方法,不过没有效果,还是和进程上下文有关,不是我指定的那个进程的共享内存:
PMDL pMdl = IoAllocateMdl(in_buffer, sizeof(MONIT_INFO), FALSE, FALSE, FALSE);
			if(!pMdl)
			{
				ntStatus = STATUS_INSUFFICIENT_RESOURCES;
				break;
			}
			MmProbeAndLockPages(pMdl, KernelMode,IoWriteAccess);
			g_MonitBuffer = (PMONIT_INFO)MmGetSystemAddressForMdlSafe(pMdl, HighPagePriority);

其中in_buffer是通过IOCTL传递的,是应用程序中的一个全局的数组
不知道为什么不行?
2009-8-19 17:17
0
雪    币: 107
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
使用缓冲区读写方式就行了。
2009-8-20 23:27
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
IOCTRL_CODE是怎么定义的?in_buffer传的对不对?
2009-8-20 23:57
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
谢谢各位关注,我已经换了另一种方法了,就是在驱动中分配内存然后映射到用户空间,然后把该地址传递给APP
2009-8-21 00:04
0
游客
登录 | 注册 方可回帖
返回
//