Does special kernel-mode APC cause thread switching?

“A kernel-mode APC is required because the thread in question is not in an alertable wait state. A special APC is required because the thread is actually ineligible to run at the time we need to deliver the APC. In fact, the APC routine is the mechanism for awakening the thread.”
Programming the Microsoft Windows Driver Model

I know, User-mode APCs also make threads run. (Waitforxxx returns WAIT_IO_COMPLETION.)

So does

“special APC is required because the thread is actually ineligible to run at the time we need to deliver the APC”

mean (when IRQL= APC_LEVEL) special kernel mode APCs cause thread switching to be able to run in a particular thread context? If not why is it special?

>run in a particular thread context? If not why is it special?

The only difference between special kernel APC and the usual kernel APC is that KeEnterCriticalRegion does not block the special ones and does block the usual ones.

BTW, looks like IopCompleteRequest is the only special kernel APC in the OS.


Maxim S. Shatskih
Windows DDK MVP
xxxxx@storagecraft.com
http://www.storagecraft.com