阅读:1685回复:6
在应用程序和IM驱动之间如何共享内存?用户被禁言,该主题自动屏蔽! |
|
最新喜欢:antspo... |
沙发#
发布于:2003-06-03 13:31
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-06-03 13:44
这个应该差不多能解决你的问题~
|
|
|
地板#
发布于:2003-06-03 19:29
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2003-06-04 19:48
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2003-06-07 11:29
这段代码,同步有问题会造成驱动阻塞,请参考本版里的另一片帖
《请问IM Driver和Application同步的问题》, 另外,以太网MTU是1500,好像这里的缓冲区只设置了1024。可能会有 问题 |
|
6楼#
发布于:2003-06-15 23:31
感谢你的程序,但有些问题不明白
应用程序中: DeviceIoControl(m_hDevice, IO_GET_SHAREMEMORY_ADDR, NULL, NULL, szOutputBuffer, sizeof(szOutputBuffer), &dwReturn, NULL ) psharememory = *((PVOID *)szOutputBuffer); 驱动中: case IO_GET_SHAREMEMORY_ADDR: try { UserVirtualAddress = MmMapLockedPages(Mdl, UserMode); *((PVOID *)(Irp->AssociatedIrp.SystemBuffer)) = UserVirtualAddress; Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = sizeof(PVOID); } except(EXCEPTION_EXECUTE_HANDLER){} break; 这段共享内存在驱动中申请 SystemVirtualAddress = ExAllocatePool(NonPagedPool, 1024); Mdl = IoAllocateMdl(SystemVirtualAddress, 1024, FALSE, FALSE, NULL); MmBuildMdlForNonPagedPool(Mdl); 那么应用程序访问这段内存的机理什么,一直都不懂 这里是直接通过传地址来访问内存的,这个地址又不像是用户的虚地址,因为是在驱动中定义的,难道这个驱动和应用程序在同个进程上下文空间中,好像又不是,怎么回事??? |
|