ewater168
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1702回复:2

帮帮忙,DriverWorks中一个内存拷贝的问题!!!

楼主#
更多 发布于:2005-05-16 20:30
我用Rtlmemorycopy在驱动程序中进行内存拷贝,8k都没什么问题,大一点系统就重起,是虚拟地址不连续的原因吗?请高手指点一下!
应用程序用malloc函数分配,然后映射到驱动程序空间。m_Buffer是用KCommonDmaBuffer类分配的64k大小的公共缓存区用来做DMA.

KMemory Mem(I.Mdl());
PUCHAR pDBuffer = (PUCHAR)Mem.MapToSystemSpace();
PUCHAR pSBuffer = (PUCHAR)m_Buffer.VirtualAddress();
ULONG   dwTotalSize =64*1024;
RtlCopyMemory(pDBuffer, pSBuffer,dwTotalSize);
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-17 11:37
没有用过driverworks,可以提供一点参考意见
1。PUCHAR pDBuffer = (PUCHAR)Mem.MapToSystemSpace();
这个函数是否就把内存lock了?
2。RtlCopyMemory(pDBuffer, pSBuffer,dwTotalSize);
是否在dpc level?

3 m_Buffer是否分配自nonpaged pool

4.是否用ice调试了,错误是否0e? 当时所访问的地址
是destBuf,还是srcBuf,产生了这个异常?
ewater168
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-18 00:09
我试了一下把公共缓冲区m_Buffer映射到用户空间,再拷贝就没有这个问题,不知道为什么?
游客

返回顶部