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


Использование WDF для разработки драйвера

В этом разделе представлен общий обзор объектов платформы, которые вы будете использовать для разработки драйвера Kernel-Mode Driver Framework (KMDF). Кроме указанного, вы будете использовать те же объекты для разработки драйвера User-Mode Driver Framework (UMDF), начиная с UMDF версии 2.

Драйверы Windows Driver Framework (WDF) состоят из подпрограммы DriverEntry и набора функций обратного вызова событий, определенных объектами Windows Driver Framework , которые используют драйверы на основе платформы. Функции обратного вызова вызывают методы объектов, которые экспортирует фреймворк. Пакет драйверов Windows (WDK) содержит примеры драйверов WDF, демонстрирующих реализацию функций обратного вызова событий драйвера. Эти примеры можно скачать из Центра разработки Для Windows — оборудование. Дополнительные сведения о доступных примерах см. в разделе "Примеры драйверов KMDF " и примеры драйверов UMDF.

При создании драйвера WDF обычно выполняются следующие действия:

  • Используйте объект драйвера платформы для представления драйвера.

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

  • Используйте объекты устройств платформы для поддержки PnP и управления питанием в драйвере.

    Все драйверы должны вызывать WdfDeviceCreate , чтобы создать объект устройства платформы для каждого устройства, которое поддерживает драйвер. Устройство может быть частью оборудования, подключаемого к компьютеру, или это может быть устройство, доступное только для программного обеспечения. Объекты устройств Платформы поддерживают операции PnP и управления питанием, а драйверы могут регистрировать функции обратного вызова событий, которые уведомляют водителя о входе или выходе устройства из рабочего состояния.

    Дополнительные сведения об объектах устройств платформы см. в разделе "Поддержка PnP и управления питанием в драйвере".

  • Используйте объекты очереди платформы и объекты запроса платформы для поддержки операций ввода-вывода в драйвере.

    Все драйверы, получающие запросы на чтение, запись или операции ввода-вывода устройства из приложений или других драйверов, должны вызывать WdfIoQueueCreate для создания объектов очередей платформы, представляющих очереди ввода-вывода. Как правило, драйверы регистрируют один или несколько обработчиков запросов для каждой очереди ввода-вывода. Когда диспетчер ввода-вывода отправляет запрос ввода-вывода драйверу, платформа создает объект запроса платформы для запроса, помещает объект запроса в очередь ввода-вывода и вызывает один из обработчиков запросов драйвера, чтобы сообщить драйверу, что запрос доступен. Драйвер получает запрос ввода-вывода и может повторно запросить, завершить, отменить или перенаправить запрос.

    Дополнительные сведения об использовании объектов очереди платформы и объектов запросов см. в разделе "Объекты очередей Платформы" и "Объекты запросов платформы".

  • Используйте объекты прерываний фреймворка для обработки прерываний устройства.

    Драйверы, обрабатывающие прерывания устройства, должны вызывать WdfInterruptCreate , чтобы создать объект прерывания платформы для каждого прерывания и зарегистрировать функции обратного вызова. Эти функции обратного вызова позволяют включить и отключить прерывание и служить подпрограммой службы прерываний (ISR) и отложенным вызовом процедуры (DPC) для прерывания.

    Дополнительные сведения об объектах прерываний платформы см. в разделе "Обработка аппаратных прерываний".

  • Драйверы KMDF могут использовать объекты включения DMA платформы и объекты транзакций DMA для обработки операций прямого доступа к памяти устройства (DMA).

    Если устройство драйвера KMDF поддерживает операции DMA, драйвер должен вызвать WdfDmaEnablerCreate , чтобы создать объект включения DMA и WdfDmaTransactionCreate для создания одного или нескольких объектов транзакций DMA. Объект транзакции DMA определяет функцию обратного вызова EvtProgramDma , которая программирует оборудование устройства для выполнения операции DMA.

    Дополнительные сведения о поддержке операций DMA см. в разделе "Обработка операций DMA в драйверах на основе платформы".

  • Используйте целевые объекты платформы ввода-вывода для отправки запросов ввода-вывода другим драйверам.

    Чтобы передать запросы ввода-вывода другим драйверам (как правило, следующему нижнему драйверу в стеке драйверов), драйвер отправляет запрос в целевой объект ввода-вывода.

    Дополнительные сведения о целевых объектах ввода-вывода см. в разделе "Использование целевых объектов ввода-вывода".

  • Драйвер KMDF может использовать объекты поставщика WMI платформы и объекты экземпляра WMI для поддержки возможностей инструментария управления Windows (WMI).

    Большинство драйверов KMDF должны поддерживать WMI и должны вызывать WdfWmiInstanceCreate для регистрации функций обратного вызова, которые отправляют или получают данные WMI.

    Дополнительные сведения о WMI см. в статье "Поддержка WMI в драйверах на основе платформы".

  • Используйте возможности синхронизации платформы.

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

  • Используйте дополнительные объекты и функции, предоставляемые платформой.

    Платформа предоставляет дополнительные объекты, которые может использовать драйвер. Дополнительные сведения об этих объектах см. в разделе "Объекты поддержки WDF".