Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.
Архивные примеры UMDF 1 можно найти в Windows 11, версия 22H2 — обновление драйверов за май 2022 года.
Дополнительные сведения см. в разделе Начало работы сUMDF.
Обслуживание прерывания состоит из двух этапов:
- Быстрое сохранение изменяемой информации (например, содержимого регистров) в подпрограмме обработки прерываний.
- Обработка сохраненных переменных данных в подпрограмме workitem.
Когда устройство создает аппаратное прерывание, фреймворк вызывает подпрограмму обслуживания прерывания драйвера (ISR), которую драйверы на основе фреймворка реализуют как функцию обратного вызова OnInterruptIsr.
Функция обратного вызова OnInterruptIsr, которая выполняется на PASSIVE_LEVEL, должна быстро сохранять сведения о прерываниях, например содержимое регистров, поставить рабочий элемент в очередь для дальнейшей обработки данных и возвратиться из ISR, чтобы разрешить обработку других прерываний, если линия прерывания является общей. Поскольку ISR драйвера UMDF выполняется на уровне PASSIVE_LEVEL, обработка прерываний по линиям PCI не рекомендуется. Эти прерывания обычно разделяются между несколькими устройствами, некоторые из которых могут не допускать задержки ISR. Однако можно обрабатывать прерывания MSI PCI в драйвере UMDF. Эти прерывания имеют граничную семантику и не являются общими.
Как правило, функция обратного вызова OnInterruptIsr планирует рабочий элемент для последующей обработки сохранённых сведений. Драйверы, основываясь на фреймворке, реализуют процедуры workitem как функции обратного вызова OnInterruptWorkItem.
Большинство драйверов используют одну OnInterruptWorkItem функцию обратного вызова для каждого типа прерывания. Чтобы запланировать выполнение функции обратного вызова OnInterruptWorkItem, драйвер должен вызвать IWDFInterrupt::QueueWorkItemForIsr из функции обратного вызова OnInterruptIsr.
Если драйвер создает несколько объектов очереди платформы для каждого устройства, вы можете использовать отдельный объект workitem и Функцию обратного вызова OnWorkItem для каждой очереди. Чтобы запланировать выполнение функции обратного вызова OnWorkItem, драйвер должен сначала создать один или несколько объектов workitem, вызвав функцию IWdfDevice3::CreateWorkItem, обычно из функции обратного вызова IDriverEntry::OnDeviceAdd драйвера. Затем функция обратного вызова драйвера OnInterruptIsr может вызывать IWDFWorkItem::Enqueue.
Драйверы обычно выполняют запросы ввода-вывода в OnInterruptWorkItem или OnWorkItem в функции обратного вызова.
Пример драйвера UMDF, который обрабатывает прерывания, вы можете найти в примере драйвера SpbAccelerometer, доступном начиная с Windows 8 WDK.