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

[Относится к KMDF и UMDF]

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

Синтаксис

EVT_WDF_INTERRUPT_WORKITEM EvtWdfInterruptWorkitem;

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

Параметры

[in] Interrupt

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

[in] AssociatedObject

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

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

None

Remarks

Функция обратного вызова EvtInterruptWorkItem выполняется в irQL = PASSIVE_LEVEL.

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

Большинство драйверов используют одну функцию обратного вызова EvtInterruptWorkItem для каждого типа прерывания.

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

Если драйвер создает несколько объектов прерываний платформы для каждого устройства, можно использовать отдельный обратный вызов EvtInterruptWorkItem для каждого прерывания.

Драйверы, реализующие обработку прерываний DIRQL или обработку прерываний пассивного уровня, могут ставить в очередь обратный вызов EvtInterruptWorkItem .

Драйвер не может ставить в очередь вызовы EvtInterruptDpc и EvtInterruptWorkItem .

Если драйвер установил для элемента AutomaticSerialization значение TRUE в структуре WDF_INTERRUPT_CONFIG прерывания, платформа синхронизирует выполнение функции обратного вызова EvtInterruptWorkItem объекта прерывания с функциями обратного вызова из других объектов, которые находятся под родительским объектом прерывания. Сведения о блокировках синхронизации обратного вызова см. в разделе Использование блокировок платформы.

Как правило, если драйверу требуется получить пассивную блокировку объекта прерывания из EvtInterruptWorkItem, драйвер должен задать для элемента AutomaticSerializationWDF_INTERRUPT_CONFIG значение FALSE, а затем вызвать WdfInterruptAcquireLock из evtInterruptWorkItem.

Если параметр AutomaticSerialization имеет значение TRUE, функция обратного вызова EvtInterruptWorkItem драйвера не должна вызывать ни один из следующих методов:

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

Требования

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