Windows driver foundation разработка драйверов



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

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

драйверы Windows платформы драйверов (вдф) состоят из подпрограммы DriverEntry и набора функций обратного вызова событий, которые определяются Windows объектами платформы драйверов , используемыми драйверами на основе платформы. Функции обратного вызова вызывают методы объекта, которые экспортирует платформа. комплект драйверов Windows (WDK) содержит примеры драйверов вдф, демонстрирующих способы реализации функций обратного вызова событий драйвера. эти образцы можно загрузить с Windows Центр разработки-Hardware. Сведения о доступных примерах см. в разделе Sample Кмдф Drivers and Sample Drivers.

При создании драйвера ВДФ вы, как правило, выполняете следующие действия:

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

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

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

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

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

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

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

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

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

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

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

Драйверы КМДФ могут использовать объекты-модули поддержки DMA платформы и объекты транзакций DMA для управления операциями прямого доступа к памяти (DMA) устройства.

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

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

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

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

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

Большинство драйверов КМДФ должны поддерживать Инструментарий WMI и вызывать вдфвмиинстанцекреате для регистрации функций обратного вызова, которые отправляют или получают данные WMI.

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

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

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

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

Источник

Сборка и загрузка драйвера ВДФ

В этом разделе описывается, как выбрать целевую операционную систему и версию платформы для проекта драйвера в Visual Studio.

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

Какую версию платформы использовать?

  • для назначения Windows XP используйте вдф 1,9 или более раннюю версию.
  • чтобы выбрать Windows Vista, Windows 7 или Windows 8, используйте вдф 1,11 или более раннюю версию.
  • чтобы выбрать целевой Windows 8.1, используйте кмдф 1,13 или более раннюю версию или umdf 1. x или umdf 2,0.
  • чтобы использовать Windows 10 версии 1507, используйте кмдф 1,15 или более раннюю версию или umdf 1. x или umdf 2,15 или более ранних версий.

Подробные сведения о версиях КМДФ и UMDF см. в статье журнал версий кмдф и Журнал версий UMDF.

Разделы справки задать версии в Visual Studio?

если вы создаете проект драйвера для последней версии Windows и самой последней версии кмдф или UMDF, вы можете оставить значения по умолчанию и пропустить этот шаг.

В противном случае выполните следующие действия.

  • Щелкните решение правой кнопкой мыши и выберите Configuration Manager. задайте для Project конфигурации нужное значение (например, отладку).
  • Щелкните правой кнопкой мыши проект драйвера и выберите пункт Свойства. откройте свойства конфигурации — > драйвер драйвера Параметры- > драйвер. измените значение дополнительного номера версии кмдф (целевая версия) или вспомогательной версии UMDF (целевая версия) в модели драйвера Параметры на нужное значение. Сведения о дополнительной версии кмдф (минимальная необходимая) и версии UMDF (минимальная необходимая)см. в разделе Указание минимального необходимогозначения.

вы можете использовать Windows набор драйверов (WDK), поставляемый с Windows 10 для создания драйверов кмдф 1,9-1.29, а также драйверы UMDF 1,9-2.29.

Подробные сведения о версиях КМДФ и UMDF см. в статье журнал версий кмдф и Журнал версий UMDF.

Связывание и загрузка

при создании проекта платформы Windows драйверов (вдф) в Microsoft Visual Studio MSBuild связывает драйвер с соответствующей библиотекой платформы, загрузчиком библиотеки и файлом-заглушкой, который включается в WDK. (Библиотека и загрузчик также включены в совместный установщик платформы, поэтому при необходимости их можно распространить вместе с пакетом драйверов.)

Файл заглушки содержит специальную подпрограмму точки входа: фксдриверентри. MSBuild задает подпрограмму фксдриверентри заглушки в качестве начальной точки входа для драйверов на основе платформы.

Когда операционная система загружает драйвер на основе платформы, он также загружает файл заглушки и загрузчик библиотеки. Затем система вызывает подпрограмму фксдриверентри файла-заглушки. Затем эта подпрограммы вызывает загрузчик. Загрузчик определяет версию библиотеки платформы, требуемую драйвером, а затем загружает правильную версию библиотеки как службу режима ядра (если она еще не загружена). Наконец, Библиотека вызывает подпрограмму DriverEntry драйвера.

Источник

книга Орвик в помощь

Как создать драйвер — очень помогает книга Пенни Орвик, Гай Смит. В момент, когда ничего не понятно, спокойненько берем эту книгу , заливаем к ппимеру на eBook, выбираем время и читаем не торопясь, делаем заметки. Одного дня не хватит.

Самое прикольное — надо изучать командную строку и утилиту build, ибо драйверы не собираются в VisualStudio и сама Windows кстати тоже собирается через build.

В папочке C:\WinDDK\7600.16385.1 собрано все : и инструменты , и примеры.

KMDF — драйверы пишутся на C (тут С++ может налажать с выделением памяти не туда куда нужно).

UMDF — драйверы на С++ , там на COM объектах замес, интерфейсы и все такое.

Нас интересует UMDF драйвер типа VirtualSerial и к нему присобачить TCP слушающий поток.

Так вот UMDF драйвер это dll файл, inProc тип, т.е. он не создает своего потока , а работает в потоке вызывающего хоста.

Делать поток для прослушивания TCP порта будем в Initialize при создании драйвера. Тупо смотрим пример tcp2com.

Привожу заметки сумасшедшего, как есть пока без корректировки:

похоже драйвер не создает своего потока

tlist утилита
примеры по ходу книги:
skeleton umdf
fx2_driver umdf

DBH
файлы идентификаторов
отладочная версия виндоус (вроде как есть такая штука)
OSR learning kit
фоновый режим — драйверам
WDM DDI низший уровень
ДРАЙВЕР как одностороннее зеркало

FDO functional dev.object
PDO phisical device object
FIDO filter device objec
IRP method_buffered
ISR interrupt service routing
DFC deferred proc call
IRQL interrupt request level
до 51 страницы дочитал далее бегло промотрел

DISPATCH_LEVEL
DIRQL
——————-
аппаратные ресурсы и прерывания Глава 16 — для UMDF тута ничего не надо
read_port_xxx macro write_port_xxx

функции обратного вызова фов
EvtDtiverDeviceAdd:
wdf_pnppower_event_callbacks structure

EvtDevicePrepareHardware
.
EvtInterruptIsr return false/true = наше устройство вызвало прерывание?
EvtInterruprDpcq
.
EvtDeviceD0Exit
.
EvtDeviceReleaseHardware

usb,1394,bt не генерируют апп.прер.!

HAL hardware abstract layer

MSI Message Signaled Interrupt

глава18 com umdf
inProc dll выполняется в потоке хоста,с++

DllMain
DllGetClassObject
об’екты обратного вызова — интфейсы
IWDFxxxx- об’екты umdf

DllMain может вызываться для создания потока!?

Initialize — д/б открытый метод (вызывается извне) т.к. может зак.неудачей

kmdf ntddk.h wdf.h
umdf wudfddi.h

———— сборка ———————
build _ только ей собираются дрова
и сама виндоус тоже только ей. Только командная строка.

makefile — ребята изучает все связано с makefile (похоже на ближайшее столетие ничего не поменяется)
inx см.stampinf.exe
makefile.inc
MOF для WMI
Dirs

build -gce только текущую папку с Sources остальные только через .lib

Источник

Windows Driver Foundation

Windows Driver Foundation

Windows Driver Foundation (WDF) — набор программных инструментов от корпорации Microsoft, облегчающих разработку драйверов устройств для Windows 2000 и более поздних версий Windows.

Основными инструментами, составляющими WDF, являются Kernel Mode Driver Framework (KMDF) и User Mode Driver Framework (UMDF). Эти наборы инструментов обеспечивают поддержку новой объектно-ориентированной программной модели разработки драйверов для Windows. Основной целью фреймворков является «Концептуальная масштабируемость» («Conceptual Scalability»), которая характеризуется только требованием к разработчику драйвера знать несколько простых концепций, чтобы написать простой драйвер, а по мере роста знаний разработчик имеет возможность использовать более сложные, но в то же время более широкие возможности особенностей драйверов. Это заметно отличается от Windows Driver Model (WDM), которая требует от разработчиков драйверов полного знакомства со множеством сложных технических деталей перед написанием даже простейшего драйвера.

Важным шагом в достижении концептуальной масштабируемости является то, что KMDF и UMDF используют составную модель. Такая модель позволяет разработчику расширять и изменять поведение «хорошего драйвера» по умолчанию. Это контрастирует с более старой Windows Driver Model, которая зависит от того, насколько полно разработчик реализовал все аспекты поведения драйвера.

Варианты

Фреймворк поставляется в двух вариантах:

  • Kernel-Mode Driver Framework — для написания стандартных драйверов уровня ядра.
  • User-Mode Driver Framework — для написания определенных классов драйверов, которые могут исполняться на уровне пользователя.

Это подразумевает использование лежащей в основе программной модели. Тем не менее, фреймворк уровня ядра использует простой API языка Си, в то время как фреймворк уровня пользователя основывается на C++ и облегченной версии COM.

WDF также содержит набор инструментов проверки, которыми могут воспользоваться создатели драйверов. Эти инструменты проверяют код драйвера на наличие распространенных ошибок и/или симулируют код драйвера для определения причин проблем, которые сложно обнаружить и протестировать.

Инструменты

Static Driver Verifier (SDV) позволяет выполнять достаточно глубокую проверку исполнения кода через отслеживание функций и даже вызовов через WDM. SDV может определить проблемы драйвера, которые скрываются благодаря множеству вызовов функций или множеству операций. SDV используется, когда драйвер близок к завершению.

PREFast for Drivers (PFD) выполняет более поверхностный анализ операций драйвера. PFD может проверить наличие проблем переполнения буфера и других наиболее распространенных программных ошибок, равно как и некоторое число специфических проблем драйверов. Благодаря тому, что его возможности ограничены пределами одной функции, время запуска PFD существенно короче по сравнению с SDV. Поэтому PFD можно использовать в ходе процесса разработки драйвера.

Источник

You may also like...

Разработчик