阅读:1311回复:0
应用程序和内核共享内存
前台
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; 就是获取不到后台申请到的地址,郁闷 |
|