havegone
驱动牛犊
驱动牛犊
  • 注册日期2008-01-17
  • 最后登录2012-03-13
  • 粉丝1
  • 关注1
  • 积分29分
  • 威望229点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:2175回复:3

请教个问题,应用程序和驱动之间共享内存

楼主#
更多 发布于:2008-06-25 15:23
下面是一部分代码,

//分配共享内存

systemvirtualaddress = ExAllocatePool(NonPage,1024);
if(!systemvirtualaddress)
{
.....
}
else
{
     //NdisZeroMemory(SystemVirtualAddress,1024);                              
   Mdl = IoAllocateMdl(systemvirtualaddress,1024,FALSE,FALSE,NULL);
    
   if(!Mdl)
  {
    ...
  }
   else
  {
      MmBuildMdlForNonPagedPool(Mdl);
  }

}

//应用程序请求获取共享内存得操作
......
UserVirtualAddress = MmMapLockedPages(Mdl,UserMode);
*(PVOID *)(Irp->AssociateIrp.SystemBuffer) = UserVirtualAddress;
.......

//下面是写共享内存
.....
memset(SystemVirtualAddress,0 ,1024);
memcpy(SystemVirtualAddress,pLogItem, sizeof(LogData));
.....


问题:
用windbg查看内存,SystemVirtualAddress中已经写入了,但是应用程序读出得值确不对。
用户空间和实际得系统空间得内存没有关联起来嘛?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2008-06-26 11:30
MmMapLockedPagesSpecifyCache
用此接口看看
走走看看开源好 Solaris vs Linux
havegone
驱动牛犊
驱动牛犊
  • 注册日期2008-01-17
  • 最后登录2012-03-13
  • 粉丝1
  • 关注1
  • 积分29分
  • 威望229点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-27 09:21
谢谢,楼上的。自己解决了。
vipfengxiao
驱动牛犊
驱动牛犊
  • 注册日期2009-12-29
  • 最后登录2011-12-21
  • 粉丝1
  • 关注0
  • 积分79分
  • 威望681点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-04-10 11:28
引用第2楼havegone于2008-06-27 09:21发表的  :
谢谢,楼上的。自己解决了。



怎么解决的呢???我现在操作共享内存就蓝平
游客

返回顶部