функция обратного вызова 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 |