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


Создание объекта прерывания (UMDF 1)

Предупреждение

UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.

Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.

Дополнительные сведения см. в разделе начало работы с помощью UMDF.

Драйвер UMDF, обрабатывающий аппаратные прерывания устройства, должен создать объект прерывания платформы для каждого прерывания, которое может поддерживать каждое устройство.

Как правило, драйвер создает объекты прерываний платформы в IDriverEntry::OnDeviceAdd. Однако можно также создать объекты прерываний в IPnpCallbackHardware2::OnPrepareHardware.

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

OnInterruptEnable
Включает аппаратное прерывание.

OnInterruptDisable
Отключает аппаратное прерывание.

OnInterruptIsr
Подпрограмма службы прерываний (ISR) для прерывания.

OnInterruptWorkItem
Рабочая подпрограмма для прерывания.

При необходимости драйвер может вызвать IWDFInterrupt::SetPolicy или IWDFInterrupt::SetExtendedPolicy для указания дополнительных параметров прерывания.

Платформа вызывает функцию обратного вызова IDriverEntry::OnDeviceAdd драйвера до того, как диспетчер Plug and Play (PnP) назначит устройству системные ресурсы, такие как векторы прерываний. После назначения ресурсов диспетчером PnP платформа сохраняет ресурсы прерываний в объекте прерывания устройства. (Драйверы, не поддерживающие Plug and Play, не могут использовать объекты прерываний.)

Прерывания с сигналом сообщения (MSIs) поддерживаются в Windows Vista и более поздних версиях операционной системы. Чтобы операционная система поддерживала MSIs для вашего устройства, в INF-файле драйвера должны быть заданы некоторые значения в реестре. Сведения о том, как задать эти значения, см. в разделе Включение прерываний Message-Signaled в реестре.

Если устройство может поддерживать определенное количество сообщений MSI, диспетчер PnP попытается назначить это количество сообщений устройству. Если диспетчер PnP не может назначить все сообщения, которые может поддерживать устройство, он назначит устройству только одно сообщение.

Драйвер должен создать объект прерывания платформы для каждого вектора прерывания или сообщения MSI, которое может поддерживать устройство. Если диспетчер PnP не предоставляет устройству все ресурсы прерывания, которые может поддерживать устройство, дополнительные объекты прерываний не будут использоваться, а их функции обратного вызова не будут вызываться.