I'm currently writing a lower filter disk driver to capture SCSI commands, and to measure the performance of each command. Currently, my driver is capable of capturing the SCSI request, and passing it down to the next driver. However, when I tried to register a completion routine, I get the following status: 0xc0000010(STATUS_INVALID_DEVICE_REQUEST).
Working code without completion routine:
WDF_REQUEST_SEND_OPTIONS_INIT(&options, WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET);
WdfRequestSend(Request, Target, &options);
Failing code with completion routine:
WdfRequestFormatRequestUsingCurrentType(Request);
WdfRequestSetCompletionRoutine(Request, CompletionRoutine, CompletionContext);
WdfRequestSend(Request, Target, WDF_NO_SEND_OPTIONS);
Any help would be appreciated. Thanks.
NOTES:
- WdfRequestSend() is the failing routine.
- The code with the completion routine works, for an upper filter disk driver.
As per this discussion on NTDEV, it turns out that if
CompletionRoutine
isNULL
, you must use theWDF_REQUEST_SEND_OPTION_SEND_AND_FORGET
option.