Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results

Home NTDEV

Before Posting...

Please check out the Community Guidelines in the Announcements and Administration Category.

More Info on Driver Writing and Debugging


The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.


Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/


Returning data when completing with WdfRequestCompleteWithInformation() fails.

AneeshSAneeshS Member Posts: 12

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

Comments

  • Tim_RobertsTim_Roberts Member - All Emails Posts: 14,832

    If you return an error, nothing is copied, There's one exception, and I forget whether it's ERROR_BUFFER_OVERFLOW or one of the other "too small" errors.

    Tim Roberts, [email protected]
    Software Wizard Emeritus

  • Scott_Noone_(OSR)Scott_Noone_(OSR) Administrator Posts: 3,678

    You want to complete with STATUS_BUFFER_OVERFLOW. That's a warning code so the DeviceIoControl call returns FALSE but the output data is still copied.

    -scott
    OSR

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. Sign in or register to get started.

Upcoming OSR Seminars
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead!
Kernel Debugging 13-17 May 2024 Live, Online
Developing Minifilters 1-5 Apr 2024 Live, Online
Internals & Software Drivers 11-15 Mar 2024 Live, Online
Writing WDF Drivers 20-24 May 2024 Live, Online