Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
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 |