阅读:949回复:0
我想在中断处理下进行dma传送数据可以么?
我的程序如下:
VOID P9054Device::DpcFor_Irq(PVOID Arg1, PVOID Arg2) { ULONG data; t << "interrpt dpc \n"; data=m_MemoryRange0.ind(0x68); if (!(data&0x00008000)) { DbgPrint("%d bytes remained in current dma\n"); m_DmaTr.BytesRemaining(); //唯一的操作,继续进行下一次分割传输 m_DmaTr.Continue(UseTransferSize); } else { KIrp I(m_DriverManagedQueue.CurrentIrp()); m_DmaTr.Initiate(this,&m_Dma,I.Mdl(),FromDeviceToMemory, LinkTo(CallBack_Dma),&m_CommonBuffer,NULL,FALSE); //dma 初始化 m_DriverManagedQueue.PnpNextIrp(I); } // I.Status() = STATUS_SUCCESS; // I.Information() = 0; // PnpNextIrp completes this IRP and starts processing // for the next IRP in the driver managed queue. UNREFERENCED_PARAMETER(Arg1); UNREFERENCED_PARAMETER(Arg2); } 可是不知道为什么程序在m_DmaTr.Initiate时出错好像在第三个参数I.Mdl时,不知道是什么原因,然后出现蓝屏提示说IRQL_NOT_LESS_EQUAL可是我看帮助说DPC在DISPATCH_LEVEL以下,而m_DmaTr.Initiate也是在DISPATCH_LEVEL以下亚,这是为什么呢? |
|