阅读:1059回复:0
####如何生成指向 MDL 的指针问题!!!
请问如下程序生成一个新的指向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!!! |
|
|