阅读:1701回复:2
帮帮忙,DriverWorks中一个内存拷贝的问题!!!
我用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); |
|
沙发#
发布于:2005-05-18 00:09
我试了一下把公共缓冲区m_Buffer映射到用户空间,再拷贝就没有这个问题,不知道为什么?
|
|
板凳#
发布于: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,产生了这个异常? |
|