dmzhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-16
  • 最后登录2003-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1491回复:5

共享内存问题求助

楼主#
更多 发布于:2003-10-20 02:32
下面是我的分配内存且共享的代码:
pComm->pKernelMemory = ExAllocatePoolWithTag(PagedPool, uiSize, _TagUtility);



    if(pComm->pKernelMemory == NULL)
    {
        DBGPRINT((\"CreateAndShareMemory: ExAllocatePoolWithTag));
         Status = STATUS_UNSUCCESSFUL;
        return Status;
    }
    
pComm->pMdl = IoAllocateMdl(pComm->pKernelMemory, uiSize, FALSE, FALSE, NULL);


    if(pComm->pMdl == NULL)
    {
        DBGPRINT((\"CreateAndShareMemory: IoAllocateMdl failed\\n\"));
        
        ExFreePoolWithTag(pComm->pKernelMemory, _TagUtility);
        pComm->pKernelMemory = NULL;

        Status = STATUS_UNSUCCESSFUL;
        return Status;
    }
    
    MmProbeAndLockPages(pComm->pMdl, KernelMode, IoWriteAccess);
    
pComm->pAppMemory = MmMapLockedPagesSpecifyCache(pComm->pMdl, UserMode, MmCach


ed, NULL, FALSE, NormalPagePriority);
if(pComm->pAppMemory == NULL)
{
   DBGPRINT((\"CreateAndShareMemory: MmMapLockedPagesSpecifyCache failed\\n\"));

    
   IoFreeMdl(pComm->pMdl);
   ExFreePoolWithTag(pComm->pKernelMemory, _TagUtility);    
        
   Status = STATUS_UNSUCCESSFUL;
   return Status;
}
return Status;    

我用softice看了,几个函数的调用都是成功的,内存也分配到了,然后在用户态
的程序里面也得到了正确的指针(pComm->pAppMemory),但是,我用vc看得到的
指针里面的值时候,监视窗口里面显示“错误的指针”,我试图输出指针指向的内存
的内容的时候也出错,完全不能访问指针指向的地址,请问,这怎么回事啊?

最新喜欢:

antspowerantspo...
kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-27 08:57
dmzhao:
我现在遇到的问题和遇到的一样,在应用中我也映射了正确的地址,可是就是不能访问它。我是在ioctl中映射的内存,不知道问题出在哪?能帮帮忙忙么?
 
 
cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-26 12:42
请问在DS中如何实现同样的功能?
dmzhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-16
  • 最后登录2003-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-20 14:17
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了.


呵呵,你说的对,给你分!
dmzhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-16
  • 最后登录2003-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-20 14:07
哦?是这样啊!我改改试试
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了.
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2003-10-20 13:56
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部