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

Sept/Oct 2019 Issue of The NT Insider available


Download PDF here: http://insider.osr.com/2019/ntinsider_2019_01.pdf

It’s a particularly BIG issue, too: 40 pages of technical goodness, ranging from WDF to Minifilters. Check it out.
Before Posting...
Please check out the Community Guidelines in the Announcements and Administration Category.

Question about IoMarkIrpPending() in completion routine

jguo5258jguo5258 Member Posts: 22

so I watched a video tutorial on a filter driver using this code in the completion routine:
if (Irp->pendingreturned)
{
IoMarkPending(Irp);
}

If the bottom driver returns STATUS_PENDING, and the IRP is marked as pending on its way up, then how does the IRP get completed? What happens to the IRP after it is marked as pending? Does it just hang there?

Comments

  • Peter_Viscarola_(OSR)Peter_Viscarola_(OSR) Administrator Posts: 7,443

    When the IRP is left pending, it’s a contract that SOMEBODY handling the IRP, eventually, in the future will call IoCompleteRequest on it.

    Marking the IRP pending, and returning STATUS_PENDING are ways we tell the I/O Manager “I am not completing the IRP now... somebody will complete it later”... this lets the issuing continue running (optionally) while the I/O is in progress.

    Peter

    Peter Viscarola
    OSR
    @OSRDrivers

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Upcoming OSR Seminars
Writing WDF Drivers 21 Oct 2019 OSR Seminar Space & ONLINE
Internals & Software Drivers 18 Nov 2019 Dulles, VA
Kernel Debugging 30 Mar 2020 OSR Seminar Space
Developing Minifilters 27 Apr 2020 OSR Seminar Space & ONLINE