функция обратного вызова EVT_WDF_INTERRUPT_DPC (wdfinterrupt.h)

[Применимо к KMDF и UMDF]

Функция обратного вызова события EvtInterruptDpc драйвера обрабатывает сведения о прерываниях, сохраненные функцией обратного вызова EvtInterruptIsr драйвера.

Синтаксис

EVT_WDF_INTERRUPT_DPC EvtWdfInterruptDpc;

void EvtWdfInterruptDpc(
  [in] WDFINTERRUPT Interrupt,
  [in] WDFOBJECT AssociatedObject
)
{...}

Параметры

[in] Interrupt

Дескриптор объекта прерывания платформы.

[in] AssociatedObject

Дескриптор объекта устройства платформы, который драйвер передал в WdfInterruptCreate.

Возвращаемое значение

None

Remarks

Чтобы зарегистрировать функцию обратного вызова EvtInterruptDpc , драйвер должен поместить адрес функции обратного вызова в структуру WDF_INTERRUPT_CONFIG перед вызовом WdfInterruptCreate.

Драйверы обычно выполняют запросы ввода-вывода в функциях обратного вызова EvtInterruptDpc .

Функция обратного вызова EvtInterruptDpc выполняется в DISPATCH_LEVEL и не должна обращаться к коду с доступом к страницам . Если функция обратного вызова EvtInterruptDpc должна выполнять операции в IRQL = PASSIVE_LEVEL, она может использовать рабочие элементы платформы.

В KMDF версии 1.11 и более поздних драйвер может поддерживать прерывания пассивного уровня и предоставлять функцию обратного вызова EvtInterruptWorkItem или EvtInterruptDpc . Если драйвер поддерживает прерывания пассивного уровня и предоставляет функцию обратного вызова EvtInterruptDpc , драйвер не может получить блокировку прерываний пассивного уровня из обратного вызова.

Большинство драйверов используют одну функцию обратного вызова EvtInterruptDpc для каждого типа прерывания. Если драйвер создает несколько объектов очередей платформы для каждого устройства, можно использовать отдельный объект DPC и функцию обратного вызова EvtDpcFunc для каждой очереди.

Чтобы запланировать выполнение функции обратного вызова EvtInterruptDpc , драйвер должен вызвать WdfInterruptQueueDpcForIsr из функции обратного вызова EvtInterruptIsr .

Когда драйвер планирует выполнение функции обратного вызова EvtInterruptDpc , система добавляет объект DPC в очередь DPC системы. Если система не выполняет задачи с более высоким приоритетом, она удаляет объект из очереди и вызывает функцию обратного вызова EvtInterruptDpc .

Система не добавляет объект DPC в очередь DPC, если объект уже находится в очереди. Функция обратного вызова EvtInterruptIsr может вызываться несколько раз, прежде чем система вызовет функцию обратного вызова EvtInterruptDpc . Таким образом, функция обратного вызова EvtInterruptDpc должна иметь возможность обрабатывать сведения из нескольких прерываний и обрабатывать все прерывания, произошедшие с момента последнего вызова.

Как правило, необходимо синхронизировать выполнение функции обратного вызова EvtInterruptDpc драйвера с выполнением других функций обратного вызова. Дополнительные сведения см. в разделе Синхронизация кода прерывания.

Дополнительные сведения об обработке прерываний в драйверах на основе платформы см. в разделе Обработка аппаратных прерываний.

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfinterrupt.h (включая Wdf.h)
IRQL (См. раздел примeчаний).

См. также раздел

EvtDpcFunc

EvtInterruptIsr

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptQueueDpcForIsr