Hi,
NDIS Driver need to submit multiple WDFReadrequests to wdfdriver. All these requests need to be submitted in asynchronous IO . First request is being received at wdf bus driver.
Below is the behavior observed
-
Wdfrequestsend is blocked and control is not coming back even though it is submitted asynchronously.
-
A bus driver is able to receive the request but its not completed. It will be completed later.
-
Since the call is not returning on NDIS side , no furthermore requests are submitted to queue.
status = WdfIoTargetOpen(Adapter->UsbTarget,&openParams);
if (!NT_SUCCESS(status))
{
WdfObjectDelete(Adapter->UsbTarget);
DEBUGP(MP_ERROR,“Failed to open SPB target - %!STATUS!”,status);
goto Exit;
}
//
// Create two requests - one for read and one for write.
//
WDF_OBJECT_ATTRIBUTES_INIT(&requestAttributes);
// requestAttributes.ParentObject = Adapter->UsbTarget;
status = WdfRequestCreate(&requestAttributes, Adapter->UsbTarget, &Request);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, “%s %d Failed to create Request\n”, func, LINE);
goto Exit;
}
status = WdfMemoryCreatePreallocated(WDF_NO_OBJECT_ATTRIBUTES,pRcb,sizeof(RCB),&InputMem);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, “%s %d Failed to create Memory\n”, func, LINE);
goto exit_first;
}
status = WdfIoTargetFormatRequestForRead(Adapter->UsbTarget,Request,InputMem,NULL, NULL); // OutputBufferOffset
if (!NT_SUCCESS(status)) {
KdPrint((“WdfIoTargetFormatRequestForRead failed 0x%x\n”, status));
goto exit_first;
}
WDF_REQUEST_SEND_OPTIONS_INIT(&sendOptions, 0);
WdfRequestSetCompletionRoutine(Request,ReadRequestCompletionRoutine,Adapter);
WdfObjectReference(Request);
if (!WdfRequestSend(Request, Adapter->UsbTarget, &sendOptions)) {
status = WdfRequestGetStatus(Request);
WdfRequestCompleteWithInformation(Request, status, 0);
DEBUGP(MP_ERROR, “%s %d Failed to send Request status:%x\n”, func, LINE, status);
}
Is there anything i am missing …?