baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1685回复:6

在应用程序和IM驱动之间如何共享内存?

楼主#
更多 发布于:2003-06-03 00:16
用户被禁言,该主题自动屏蔽!

最新喜欢:

antspowerantspo...
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-03 13:31
用户被禁言,该主题自动屏蔽!
Songzh
驱动牛犊
驱动牛犊
  • 注册日期2001-12-29
  • 最后登录2011-03-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-03 13:44
这个应该差不多能解决你的问题~
附件名称/大小 下载次数 最后更新
2003-06-03_FireWall-01.rar (136KB)  34
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-03 19:29
用户被禁言,该主题自动屏蔽!
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-04 19:48
用户被禁言,该主题自动屏蔽!
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-07 11:29
这段代码,同步有问题会造成驱动阻塞,请参考本版里的另一片帖
《请问IM Driver和Application同步的问题》,
另外,以太网MTU是1500,好像这里的缓冲区只设置了1024。可能会有
问题
hawkllq
驱动牛犊
驱动牛犊
  • 注册日期2003-01-06
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);
那么应用程序访问这段内存的机理什么,一直都不懂
这里是直接通过传地址来访问内存的,这个地址又不像是用户的虚地址,因为是在驱动中定义的,难道这个驱动和应用程序在同个进程上下文空间中,好像又不是,怎么回事???
游客

返回顶部