Actually DISPATCH_LEVEL completion handling is the normal mode of operation, as completion
processing is generally triggered by some form of interrupt driven event, either a timer or a
hardware device interrupt.
The other problem noted is more serious, that the driver below you may not expect
DISPATCH_LEVEL entry in his DispatchXXX routines, and if that is the case then you are forced
into worker thread/work item solutions.
The third problem, which may or may not have been made explicit here is that of recursion
between upper/lower drivers within completion handling, which can result in fatal stack
overflow errors. You can test the amount of call stack remaining, and use your own heuristics
to decide when you don’t have enough room left, or you can use some other algorithm to
understand that you are recursing through your completion handler. Again the solution is a
worlk item or worker thread.
===========================
Mark Roddy
Consultant, Microsoft DDK MVP
Hollis Technology Solutions
xxxxx@hollistech.com
www.hollistech.com
603-321-1032
-----Original Message-----
From: “Don Burn”
To: “NT Developers Interest List”
Date: Sun, 9 Feb 2003 17:42:59 -0500
Subject: [ntdev] Re: Calling a completion routine from within a completion routine
>
> ----- Original Message -----
> From:
> To: “NT Developers Interest List”
> Sent: Sunday, February 09, 2003 3:35 PM
> Subject: [ntdev] Calling a completion routine from within a completion
> routine
>
>
> > I have a completion routine, in which I wish to call
> > IoSetCompletionRoutine() and IoCallDriver(), after creating my own
> fresh
> > irp for the operation. The second completion routine finishes the new
> irp,
> > the old one goes back up the stack.
> >
> > Can I do this? Caveats?
> >
>
> Yes you can do this, be aware there is the possibility of the
> completion
> routine being called at DISPATCH_LEVEL, if your code, or the code
> to be executed due to the IoCallDriver has a problem with that, you may
> need to change your design.
>
> Don Burn
> Egenera, Inc
>
>
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@hollistech.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com