Microsoft выложила бесплатный инструмент для написания драйверов Windows

Софт Интеграция Системное ПО
мобильная версия
, Текст: Дмитрий Степанов
Microsoft опубликовала исходный код фреймворка Driver Module Framework, который ранее применялся при разработке драйверов устройств Surface и был доступен лишь разработчикам компании. В Microsoft считают, что применение фреймворка значительно упростит повторное использование кода.

DMF – в помощь разработчикам драйверов

Microsoft выпустила программную платформу (фреймворк) Driver Module Framework (DMF), призванную упростить процесс разработки структурированных WDF-драйверов (Windows Driver Frameworks) устройств для операционной системы Windows. Кроме того, по заявлению Microsoft, использование нового инструмента позволит программистам с легкостью повторно использовать собственный код в различных драйверах или делиться им с другими разработчиками.

DMF был создан командой Microsoft Devices специально для разработки драйверов устройств-трансформеров Surface и изначально предназначался только для внутреннего использования. Теперь же исходный код фреймворка опубликован на Github, популярном веб-сервисе для хостинга ИТ-проектов и их совместной разработки, под свободной лицензией MIT, и доступен всем желающим.

О недостатках WDF

Как правило, при написании драйверов устройств для Windows разработчики прибегают к помощи инструментария Windows Driver Frameworks (WDF), применение которого, в отличие от Windows Driver Model (WDM), более старого и «низкоуровнего» фреймворка, не требует от разработчика полного знакомства со множеством сложных технических нюансов для создания простейшего драйвера. Кроме того, WDF включает набор средств проверки готовой программы на наличие распространенных ошибок и позволяет выявить причины неправильного функционирования драйвера.

Традиционная модель Windows-драйвера

При разработке с применением WDF на плечи программиста ложится ответственность за реализацию механизмов коммуникации между отдельными модулями драйвера и их синхронизации с контекстом устройства в верном порядке и подходящее время, при этом избегая взаимных блокировок, что не всегда является тривиальной задачей. Контекст устройства (на схемах выделен зеленым цветом) в Windows – внутренняя структура, используемая для управления информацией об устройстве вывода. Приложения сперва направляют данные на вывод (например, на экран) в контекст устройства, и лишь потом Windows перенаправляет его содержимое непосредственно на устройство.

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

Новый подход к разработке

Фреймворк DMF позволяет создать тонкую «прослойку» между реализацией драйвера и WDF, которая связывает между собой все отдельные модули драйвера и клиентский код, грамотно организуя процесс их взаимодействия.

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

Новая DMF-модель Windows-драйвера, предложенная Microsoft

Обратные вызовы WDF (на схеме окрашены в красный цвет) теперь также существуют независимо друг от друга в каждом модуле, а DMF отвечает за перехват, перенаправление вызовов к соответствующим модулям, а также возвращение результата обработки данных модулями.

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