@“Peter_Viscarola_(OSR)”
@Tim_Roberts
(Tim: I was in the middle of writing when you posted - Not a dumb question at all )
I found my answer, after some lunchtime googling:
https://osr.com/blog/2014/04/15/evtioincallercontext-callback-called-even-io-operations-dont-queue/
… The other point of view was getting what are essentially unexpected (and, to your driver, unsupported) Requests in EvtIoInCallerContext was an annoyance…
As Tim pointed out above, the context of when EvtIoInCallerContext was called and MmMapLockedPagesSpecifyCache executed, was not the same context as my User SW.
To ensure MmMapLockedPagesSpecifyCache was executed for my IOCTL_GET_DMA_USER_ADDRESS request I added the below at the beginning of EvtIoInCallerContext:
EvtIoInCallerContext
WDF_REQUEST_PARAMETERS requestParams;
WDF_REQUEST_PARAMETERS_INIT( &requestParams );
WdfRequestGetParameters( request, &requestParams );
if( IOCTL_GET_DMA_SYSTEM_MEMORY != requestParams.Parameters.DeviceIoControl.IoControlCode )
{
WdfDeviceEnqueueRequest( device, request );
return;
}
...
... (see previous posts for more details)
...
WdfDeviceEnqueueRequest( device, request );
I re-ran my driver and the trace prints are printing, with data after the FPGA was configured to run (not sure on quality of the data, but that’s a future topic).
Thank you Tim & Peter
Juan