В чем разница между драйвером WDM, драйвером KMDF и драйвером UMDF?

При создании проекта драйвера Windows в Visual Studio 2012 у вас есть много разных вариантов на выбор.

На MSDN есть страница, которая поможет вам выбрать правильную модель драйвера для вашего устройства. Однако он не дает четкого объяснения точных различий между типами драйверов WDM, KMDF и UMDF и того, когда выбирать какую модель.

Я ищу объяснение различий между моделями драйверов WDM, KMDF и UMDF, поэтому начинающим разработчикам драйверов Windows легко выбрать правильную модель.

2 ответа

Решение

В двух словах:

  • WDM обозначает модель драйвера Windows. Каждый драйвер ядра по сути является драйвером WDM.
  • KMDF расшифровывается как Kernel Mode Driver Framework. Это структура, которая инкапсулирует и скрывает многие аспекты программирования ОС, к которым должен относиться разработчик драйвера, даже если он не имеет ничего общего с бизнес-логикой его драйвера. Некоторая функциональность отсутствует в платформе KMDF и потребует собственных вызовов ядра без использования каркаса (но в большинстве случаев это не так).
  • UMDF расшифровывается как User Mode Driver Framework. Это дополнительная структура для KMDF, и вместе они составляют WDF (Windows Driver Frameworks). UMDF позволяет создавать драйвер в пользовательском режиме, имея все преимущества программирования пользовательского режима по сравнению с режимом ядра. Естественно, что драйвер UMDF имеет ограничения по сравнению с драйверами KMDF/WDM, и в большинстве случаев он потребует аналог ядра с хотя бы некоторыми функциональными возможностями.

Страница, на которую вы ссылаетесь, довольно обширна. Вы должны углубиться в это для более глубокого понимания.

Мне нравится articel из MSDN: различия между WDM и KMDF

  • WDM - это модель драйверов, так как драйверы устройств pnp (>=Win2k). В этой модели вы должны обрабатывать функции, не относящиеся к вашей функциональности. Walter Oney (программирование модели драйверов Microsoft Windows) передал такие функции библиотекам драйверов внешних устройств для повторного использования.

  • WDF / kmdf пытается упростить разработку драйверов устройств. Функции могут быть перезаписаны или используется обработчик по умолчанию. Администрирование памяти и очередей было значительно упрощено и защищено.

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

Надеюсь, не слишком поздно. Дата вопроса впервые увидела, когда я закончил писать!

Другие вопросы по тегам