Отключение APC

Система предоставляет три механизма для отключения APC для текущего потока:

  • Критические регионы. Если поток находится внутри критической области, его пользователь APC и обычная APC ядра не выполняются. Специальные APC ядра по-прежнему выполняются. Дополнительные сведения об этих типах APC см. в разделе types of APC.

  • Защищенные регионы. Если поток находится внутри защищенной области, ни один из его APC не выполняется.

  • Повышение уровня текущего IRQL до APC_LEVEL или выше. Поток, выполняющийся на уровне IRQL > = APC_LEVEL выполняется со всеми отключенными APC.

Обратите внимание, что эти параметры применяются к текущему потоку и не влияют на поведение любого другого потока.

Некоторые подпрограммы поддержки драйверов должны вызываться с определенными типами APC. Например, подпрограммы, которые получают ресурс-исполнитель (например, ексаккуирересаурцешаредлите), должны вызываться с нормальным APC ядра. Другие подпрограммы должны вызываться с определенными типами APC. Например, любая подпрограммы, которая зависит от подпрограммы завершения ввода-вывода (например, иоволумедевицетодоснаме), должна вызываться с включенным специальным APC ядра. Документация по каждой подпрограмме указывает, имеют ли подпрограммы определенные ограничения на состояние выполнения APC.

Драйвер может явно ввести критический или защищенный регион, вызвав соответствующую подпрограмму. Дополнительные сведения см. в разделе критические регионы и защищенные регионы. Драйвер также может явно вызвать текущий уровень IRQL для APC_LEVEL путем вызова кераисеиркл. Драйвер должен впоследствии уменьшить уровень IRQL до исходного значения, вызвав келовериркл. использование защищенной области выполняется быстрее, чем повышение уровня текущего IRQL, но защищенные регионы доступны только в Windows Server 2003 и более поздних версиях Windows.

Следующие операции с мьютексом имеют тот же результат, что и ввод или уход критической или защищенной области или повышение или понижение текущего уровня IRQL:

  • Удержание объекта Mutex неявно помещает держатель в критическую область.

  • При удержании защищенного мьютекса он неявно помещает владельца в защищенную область.

  • При удерживаемом быстром мьютексе неявным образом создается текущий уровень IRQL для APC_LEVEL.

Дополнительные сведения об объектах мьютекса см. в разделе объекты Mutex. Дополнительные сведения о быстрых и защищенных мьютексах см. в разделе быстрые мьютексы и защищенные мьютексы.