It’s a bit unclear to me when exactly a DPC is invoked by the I/O Manager. Supposing I’m executing an ISR and i call the IoRequestDpc() function a new DPC object will be inserted in the system’s DPC queue. Now, I suppose the system will continue executing the ISR (at DISPATCH_LEVEL) and my DPC is ready to be executed.
When exactly this will be execued ? As I complete my ISR (that means when the system goes back to PASSIVE_LEVEL) ? So, what triggers the execution of the DPC ?
Thanks
Matteo
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
Your ISR runs at DIRQL (some IRQL level > DISPATCH_LEVEL and less than
PROFILE_LEVEL.) When you queue a DPC from an ISR you are essentially
requesting that your DPC function be called when the target processor
transitions from > DISPATCH_LEVEL to < DISPATCH_LEVEL. This transition
triggers DPC queue processing at DISPATCH_LEVEL before the transition is
completed.
Mark Roddy
Windows 2000/NT Consultant
Hollis Technology Solutions
www.hollistech.com
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of Matteo Pelati
Sent: Saturday, January 27, 2001 7:41 AM
To: NT Developers Interest List
Subject: [ntdev] DPC question
It’s a bit unclear to me when exactly a DPC is invoked by the I/O Manager.
Supposing I’m executing an ISR and i call the IoRequestDpc() function a new
DPC object will be inserted in the system’s DPC queue. Now, I suppose the
system will continue executing the ISR (at DISPATCH_LEVEL) and my DPC is
ready to be executed.
When exactly this will be execued ? As I complete my ISR (that means when
the system goes back to PASSIVE_LEVEL) ? So, what triggers the execution of
the DPC ?
Thanks
Matteo
You are currently subscribed to ntdev as: xxxxx@wattanuck.mv.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>system will continue executing the ISR (at DISPATCH_LEVEL) and my DPC
is ready to be executed.
When exactly this will be execued ? As I complete my ISR (that means when
the system goes back to PASSIVE_LEVEL) ? So, what triggers the execution
of the DPC ?
Trying to drop the IRQL below DISPATCH_LEVEL will trigger the execution of
all DPCs pending on the processor.
This can occur:
- in the ISR epilog (if PASSIVE_LEVEL or APC_LEVEL code was interrupted).
- in KeReleaseSpinLock (which calls KeLowerIrql internally).
- in explicit KeLowerIrql (which is a rare thing).
Max
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com