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

Зарезервировано для использования системы.

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

Никакой

Замечания

Возвращает значение TRUE, если драйвер признает владение прерыванием и остановил и признал прерывание на своем устройстве. В противном случае возвращает значение FALSE.

Чтобы зарегистрировать функцию обратного вызова OnInterruptIsr, драйвер должен поместить адрес функции обратного вызова в структуру WUDF_INTERRUPT_CONFIG перед вызовом IWDFDevice3::CreateInterrupt.

Функция обратного вызова OnInterruptIsr — это подпрограмма службы прерываний драйвера UMDF(ISR), которая вызывается в 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

См. также