Типы APC
Асинхронный вызов процедуры (APC) — это функция, которая выполняется асинхронно. APC похожи на отложенные вызовы процедур (DPCs), но в отличие от DPC, APC выполняются в контексте определенного потока. Драйверы (кроме файловых систем и драйверов фильтров файловой системы) не используют APC напрямую, но другие части операционной системы, поэтому необходимо знать, как работают APC.
Операционная система Windows использует четыре типа APC:
Специальные APC в пользовательском режиме выполняются строго в пользовательском режиме и всегда выполняются, даже если целевой поток не находится в состоянии ожидания с оповещением. Дополнительные сведения о специальных APC пользовательского режима см. в разделе QueueUserAPC2.
Обычные PPC в пользовательском режиме выполняются строго в пользовательском режиме и только в том случае, если целевой поток находится в состоянии ожидания с возможностью предупреждения. Операционная система использует обычные пользовательские APC для реализации таких механизмов, как перекрывающиеся операции ввода-вывода и подпрограмма Win32 QueueUserApc .
Обычные APC ядра выполняются в режиме ядра в irQL = PASSIVE_LEVEL. Обычный APC ядра вытесняет весь код в пользовательском режиме, включая пользовательские APC. Обычные APC ядра обычно используются файловыми системами и драйверами фильтров файловой системы.
Специальные APC ядра выполняются в режиме ядра в irQL = APC_LEVEL. Специальный APC ядра вытесняет код в пользовательском режиме и код в режиме ядра, который выполняется в IRQL = PASSIVE_LEVEL, включая как пользовательские, так и обычные ПСП ядра. Операционная система использует специальные APC ядра для обработки таких операций, как выполнение запроса ввода-вывода.
Список списков IRQL от самого низкого до самого высокого приоритета см. в разделе Управление приоритетами оборудования.