pphust
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2006-09-13
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1059回复:0

####如何生成指向 MDL 的指针问题!!!

楼主#
更多 发布于:2005-05-05 15:53
请问如下程序生成一个新的指向MDL的PMDL 指针是否正确:
方法1:
   KMemory Mem(I.Mdl());
   PULONG viraddrstart=Mem.VirtualAddress();//缓冲区启始地址
   PULONG coutebyes=Mem.Size();//缓冲区大小
   viraddrstart+=8; //将启始地址偏移8bytes
   coutebyes=coutebyes-8;//因为启始地址偏移8bytes,所以数据大小减8bytes。
   KMemory NewMem(viraddrstart,coutebyes);
   PMDL NewPMDL = NewMem;
  
方法2:
   KMemory Mem(I.Mdl());
   PULONG viraddrstart=Mem.VirtualAddress();//缓冲区启始地址
   PULONG coutebyes=Mem.Size();//缓冲区大小
   viraddrstart+=8; //将启始地址偏移8bytes
   coutebyes=coutebyes-8;//因为启始地址偏移8bytes,所以数据大小减8bytes。
   PMDL NewPMDL = MmCreateMdl(NULL,viraddrstart,coutebye);

 在启动DMA将 用上面方法一,生成的NewPMDL给下面的pMDL参数时,驱动调试死机。
   用方法2,没有出现 死机 但是数据传输错误。
   但是。把I.MDL()给下面的pMDL参数时数据传输正确。

KDmaTransfer::Initiate(
PMDL pMdl,
DMA_DIRECTION dir,
DMAREADY_CALLBACK OnAdapterReady,
PVOID pContext,
BOOLEAN BusMasterKeepAdapter
)
   望大家赐教。!!!thanks!!!





















新手上路
游客

返回顶部