Hi,
I see a strange BSOD. I have a manually managed queue, create it this way:
WDF_IO_QUEUE_CONFIG_INIT(&q_cfg, WdfIoQueueDispatchManual);
status = WdfIoQueueCreate(fdx->device, &q_cfg, NULL, &fdx->my_queue);
I store the requests for specific ioctl in the queue, and when I get a notification from device, I complete the request.
When I get a request from the framework, I check it in EvtIoInCallerContext, and then call for WdfDeviceEnqueueRequest.
When I get my EvtIoct function, I call for WdfRequestIsCanceled to check if request is not cancelled yet, and then call for WdfRequestForwardToIoQueue(request, fdx->my_queue).
Then I have the BSOD with PAGE_FAULT_IN_NONPAGED_AREA (50). The address points to request context that, and when running wdfrequest I get the following:
1: kd> !wdfkd.wdfrequest 0x7a352b40
!IRP 0x00000000
irp is NULL, the remaining results may not be correct(Reserved Requests may have a NULL IRP)…
State: Completed, Allocated by WDF for incoming IRP
My questions are:
- Is it possible that the request was cancelled and I didn’t get it from some reason?
- Should I cancel the request by myself if my io queue is manually dispatched? Can’t I count on framework that it will cancel the requests if I didn’t register the EvtIoCanceledOnQueue callback?
Thanks,
S.