функция обратного вызова EVT_WDF_INTERRUPT_ENABLE (wdfinterrupt.h)
[Применимо к KMDF и UMDF]
Функция обратного вызова события EvtInterruptEnable драйвера включает указанное аппаратное прерывание.
Синтаксис
EVT_WDF_INTERRUPT_ENABLE EvtWdfInterruptEnable;
NTSTATUS EvtWdfInterruptEnable(
[in] WDFINTERRUPT Interrupt,
[in] WDFDEVICE AssociatedDevice
)
{...}
Параметры
[in] Interrupt
Дескриптор объекта прерывания платформы.
[in] AssociatedDevice
Дескриптор объекта устройства платформы, который драйвер передал в WdfInterruptCreate.
Возвращаемое значение
Функция обратного вызова EvtInterruptEnable должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE , если функция не обнаруживает ошибок. В противном случае эта функция должна возвращать значение состояния, для которого NT_SUCCESS(status) равно FALSE.
Комментарии
Чтобы зарегистрировать функцию обратного вызова EvtInterruptEnable , драйвер должен поместить адрес функции обратного вызова в структуру WDF_INTERRUPT_CONFIG перед вызовом WdfInterruptCreate.
Платформа вызывает функцию обратного вызова EvtInterruptEnable драйвера каждый раз, когда устройство переходит в рабочее состояние (D0). Кроме того, драйвер может вызвать функцию обратного вызова EvtInterruptEnable , вызвав WdfInterruptEnable. Обратите внимание, что большинство драйверов на основе платформы не должны вызывать WdfInterruptEnable, так как платформа вызывает функцию обратного вызова EvtInterruptEnable драйвера каждый раз, когда устройство переходит в рабочее состояние (D0).
Перед вызовом функции обратного вызова EvtInterruptEnable платформа вызывает IRQL процессора в DIRQL устройства и получает блокировку спина, указанную драйвером в структуре WDF_INTERRUPT_CONFIG объекта прерывания.
Начиная с kmdf версии 1.11, драйвер может обеспечить обработку прерываний пассивного уровня. Если драйвер запросил обработку прерываний пассивного уровня, то перед вызовом функции EvtInterruptEnable в IRQL = PASSIVE_LEVEL платформа получает блокировку прерываний пассивного уровня, настроенную драйвером в структуре WDF_INTERRUPT_CONFIG объекта прерывания.
После возврата функции обратного вызова EvtInterruptEnable платформа вызывает функцию обратного вызова события EvtDeviceD0EntryPostInterruptsEnabled драйвера в IRQL = PASSIVE_LEVEL.
Не следует предполагать, что устройство будет использовать одни и те же ресурсы прерываний каждый раз, когда платформа вызывает функцию обратного вызова EvtInterruptEnable драйвера. Иногда диспетчер PnP перераспределяет системные ресурсы и может назначать новые ресурсы прерываний устройству. Драйвер может вызвать WdfInterruptGetInfo , чтобы определить ресурсы прерывания устройства.
Дополнительные сведения об обработке прерываний в драйверах на основе платформы см. в разделе Обработка аппаратных прерываний.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfinterrupt.h (включая Wdf.h) |
IRQL | (См. раздел примeчаний). |