Бестер, Альфред
- 1 year ago
- 0
- 0
DPC ( англ. Deferred procedure call — отложенный вызов процедуры ) — специфический механизм вызова процедур в архитектуре Windows .
При возникновении прерывания управление передаётся обработчику прерывания . Существует ряд факторов, ограничивающих возможности кода обработчика прерывания:
Решением этой проблемы является подход, при котором непосредственно в обработчике выполняются лишь самые критические операции, а остальные действия откладываются до тех пор, пока не появится относительно свободное процессорное время, а IRQL не опустится до допустимого значения (
DISPATCH_LEVEL
). Тогда эти действия будут выполнены в рамках вызова отложенной (её выполнение было отложено до этого момента) процедуры.
В отличие от обычного вызова процедуры, при котором, фактически, управление сразу же передаётся коду вызываемой процедуры, при DPC-вызове передачи управления вызываемой процедуре не происходит — вместо этого адрес вызываемой процедуры и параметры помещаются в специальную очередь , называемую DPC Queue . Когда наступает «благоприятное» время, отложенная процедура вызывается по-настоящему.
Таким образом, обработчик прерывания выполняет только самые необходимые действия и осуществляет отложенный вызов процедуры, которая выполнит все остальные действия, нужные в рамках обработки прерывания, но не требующие повышенной срочности.
Поскольку механизм DPC используется главным образом в рамках обработки запросов ввода-вывода, существуют специальные функции-обёртки с префиксом
Io
для управления отложенными вызовами. В частности, обработчики прерываний, согласно документации, должны использовать именно эти функции.