функция обратного вызова WUDF_INTERRUPT_ISR (wudfinterrupt.h)
Предупреждение
UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.
Функция обратного вызова события OnInterruptIsr драйвера обслуживает аппаратное прерывание.
Синтаксис
typedef
BOOLEAN
_Function_class_(WUDF_INTERRUPT_ISR)
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Параметры
[in] Interrupt
Указатель на интерфейс IWDFInterrupt .
[in] MessageID
Если устройство использует прерывания с сигналом сообщения (MSIs), этот параметр является номером сообщения, который идентифицирует сообщение о прерывании оборудования устройства. В противном случае это значение равно 0.
[in] Reserved
Зарезервировано для системного использования.
Возвращаемое значение
None
Remarks
Возвращает значение TRUE, если драйвер подтверждает владение прерыванием и остановился и подтвердил прерывание на своем устройстве. В противном случае возвращает значение FALSE.
Чтобы зарегистрировать функцию обратного вызова OnInterruptIsr , драйвер должен поместить адрес функции обратного вызова в структуру WUDF_INTERRUPT_CONFIG перед вызовом IWDFDevice3::CreateInterrupt.
Функция обратного вызова OnInterruptIsr — это подпрограмма службы прерываний драйвера UMDF, которая вызывается в PASSIVE_LEVEL при прерывании оборудования.
Для прерывания с пограничным триггером или прерывания с сигналом сообщения (MSI) платформа вызывает OnInterruptIsr вне контекста диспетчеризации прерываний операционной системы. Это связано с тем, что UMDF разрешает только прерывания, не активированные на границе, или MSI, и драйверу не нужно взаимодействовать со своим оборудованием в этом контексте.
Для прерывания уровня платформа вызывает OnInterruptIsr в контексте диспетчеризации прерываний операционной системы. В результате поток диспетчеризации прерываний операционной системы блокируется в режиме ядра, ожидая ответа от драйвера.
Как правило, OnInterruptIsr сохраняет все изменчивые сведения, которые могут быть потеряны, и очищает аппаратные прерывания. Для прерывания, активированного на уровне, драйвер должен остановить и подтвердить прерывание на устройстве, а затем вернуть true, если ему принадлежит прерывание. Драйвер должен выполнять дальнейшую обработку в обратном вызове OnInterruptWorkItem . Чтобы поместить рабочий элемент в очередь, драйвер вызывает метод IWDFInterrupt::QueueWorkItemForIsr .
Дополнительные сведения об обработке прерываний в драйверах UMDF см. в разделе Доступ к оборудованию и обработка прерываний.
Примеры
Тип функции объявлен в Wudfinterrupt.h, как показано ниже.
typedef
BOOLEAN
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Чтобы определить функцию обратного вызова OnInterruptIsr с именем MyInterruptIsr, необходимо сначала предоставить объявление функции, которое требуется для SDV и других средств проверки, как показано ниже.
WUDF_INTERRUPT_NOTIFY MyInterruptIsr;
Затем реализуйте функцию обратного вызова следующим образом:
BOOLEAN
MyInterruptIsr (
IN IWDFInterrupt* Interrupt,
IN ULONG MessageID,
IN ULONG Reserved
)
{…}
Требования
Требование | Значение |
---|---|
Дата окончания поддержки | Недоступно в UMDF 2.0 и более поздних версиях. |
Целевая платформа | Персональный компьютер |
Минимальная версия UMDF | 1.11 |
Верхняя часть | wudfinterrupt.h |