Поделиться через


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

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

EvtDeviceD0EntryPostInterruptsEnabled

EvtInterruptDisable

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptEnable

WdfInterruptGetInfo