I have someone using my driver on a custom card but when attempting DMA transfers they get a ERROR_INVALID_FUNCTION error. I have no problem doing DMA on multiple PCI boards making the same IOCTL call. They are using the same driver and application. What could cause this error? I don’t have access to the hardware so I was hoping to get some ideas to suggest.

The call should setup DMA registers on a PCI bridge chip to start a DMA transfer that will interrupt the driver upon completion. It works perfectly on the devices I have access to but not this device. I do not have access to the device so I can’t run a debug session on it. Any ideas on what I can ask this individual to look for?

My DPC finishes with these calls:

transactionComplete = WdfDmaTransactionDmaCompleted(devCtx->DMAWriteTransaction, &status);
if (transactionComplete)
transferred = WdfDmaTransactionGetBytesTransferred(devCtx->DMAWriteTransaction);

WdfRequestCompleteWithInformation(devCtx->CurrentRequest, status, (NT_SUCCESS(status)) ? transferred/sizeof(ULONG) : 0);

My understanding is that ‘status’ is set as Invalid_Function by WdfDmaTransactionDmaCompleted. If so what could cause this? I’m not sure to look.