Использование 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.