So I have a standard app which uses DeviceIoControl with an input buffer and output buffer to my driver. This is a METHOD_BUFFFERED ioctl.
I understand that the input buffer and output buffer in the ioctl handler point to the same address. This is fine.
In error cases, I fill up the output buffer with extended status code and call WdfRequestCompleteWithInformation(Request, , # of bytes). I am careful to not touch the input buffer after the output buffer is written.
In these cases, application is getting 0 as the return value of DeviceIoControl which is correct.
But the dwBytesReturned field of DeviceIoControl is always zero and no bytes are actually copied to the output buffer.
How do I return data in the output buffer in case of error in the ioctl handler?.
I am able to pass data back to the application in the output buffer if I complete the request with STATUS_SUCCESS.
Aneesh