fantasyemperor
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2008-02-18
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1311回复:0

应用程序和内核共享内存

楼主#
更多 发布于:2007-07-05 09:36
前台
    UCHAR    szInputBuffer[20];
    UCHAR    szOutputBuffer[20];
    
    DWORD    dw;
    if(!DeviceIoControl(device,IO_GET_SHAREMEMORY_ADDR,szInputBuffer,20,szOutputBuffer,20,&dw,0))    //获取后台内存地址
    {
        LogFile("DeviceIoControl  error");
        return ;
    }
    Sleep(500);
    TRACE("%X",*((PVOID *)szInputBuffer));
    TRACE("%X",*((PVOID *)szOutputBuffer));
    TRACE("%X",szInputBuffer[0]);
    TRACE("%X",szOutputBuffer[0]);
后台

try
    {
        // 分配与应用程序共享的内存
        SystemVirtualAddress = ExAllocatePool(NonPagedPool, HASHSIZE*MAX_LIST_COUNT);
        Mdl = IoAllocateMdl(SystemVirtualAddress, HASHSIZE*MAX_LIST_COUNT, FALSE, FALSE, NULL);
        MmBuildMdlForNonPagedPool(Mdl);
        //
        DbgPrint("申请到内存");
        memcpy(&MemFilter.pHashList,&SystemVirtualAddress,4);                //把申请到的内存放到列表中
    }
    __except(1)
    {
        DbgPrint("申请内存异常");
    }
    MemFilter.iWhiteCount=0;                                //初始化名单数目
。。。
            UserVirtualAddress = MmMapLockedPages(Mdl, UserMode);  
            *((PVOID *)(Irp->AssociatedIrp.SystemBuffer)) = UserVirtualAddress;
就是获取不到后台申请到的地址,郁闷
游客

返回顶部