Think about how this would be implemented in the OS. To deliver APCs, the OS will maintain some kind of a queue and then dispatch them at a convenient opportunity. Leaving aside the details of the implementation (which differs in different kernel version) you can imagine that when the scheduler runs to reduce the IRQL from dispatch might be a convenient time.
Another way to look at it is just to remember that APC level is still preemptable just like passive. Obviously preemptable code can be pre-empted and something else can run on that physical (or virtual) CPU, but within that thread the context is maintained. This is what they mean by thread local
Sent from Surface Pro
From: xxxxx@gmail.com
Sent: Monday, February 16, 2015 7:04 AM
To: Windows System Software Devs Interest List
“An exception to the rule that raising the IRQL blocks interrupts of that level and
lower relates to APC-level interrupts. If a thread raises the IRQL to APC level and then
is rescheduled because of a dispatch/DPC-level interrupt, the system might deliver an
APC-level interrupt to the newly scheduled thread. Thus, APC level can be considered a
thread-local rather than processor-wide IRQL.”
Can somebody explain this exception? If a thread raises the IRQL to APC level and then
is rescheduled because of a dispatch/DPC-level interrupt…
NTDEV is sponsored by OSR
Visit the list at: http://www.osronline.com/showlists.cfm?list=ntdev
OSR is HIRING!! See http://www.osr.com/careers
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer