Отключение APC

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

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

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

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

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

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

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

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

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

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

  • Хранение быстрого мьютекса неявно вызывает текущее значение IRQL до APC_LEVEL.

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