Открыть сервис

Windows Driver Model

Windows Driver Model (WDM) — это модель драйверов устройств для операционных систем семейства Windows NT (начиная с Windows 2000), определяющая стандартную архитектуру, интерфейсы и правила разработки драйверов, обеспечивающих взаимодействие между операционной системой и аппаратным обеспечением. WDM пришла на смену более ранним моделям (VxD для Windows 9x и NT 4.0 Driver Model) и стала основой для драйверов в Windows 2000, XP, Vista, 7, 8, 10 и 11. Основная цель WDM — унификация разработки драйверов для разных версий Windows и обеспечение обратной совместимости.

История

Предпосылки создания

До появления WDM драйверы для Windows 9x и Windows NT разрабатывались по разным моделям. Для Windows 95/98/Me использовалась модель VxD (Virtual Device Driver), которая была тесно связана с архитектурой MS-DOS и не поддерживала многозадачность и защиту памяти в полной мере. Для Windows NT (NT 4.0) существовала модель NT 4.0 Driver Model, которая была более стабильной, но требовала переписывания драйверов для каждой версии ОС. Это приводило к фрагментации рынка драйверов и усложняло поддержку оборудования.

Разработка и внедрение

Разработка WDM началась в середине 1990-х годов в рамках проекта Windows 2000 (кодовое имя «Memphis»). Основная задача заключалась в создании единой модели, которая работала бы как на потребительских (Windows 9x), так и на корпоративных (Windows NT) версиях Windows. Первая реализация WDM была представлена в Windows 2000 (выпущена в 2000 году). В Windows 98 WDM была реализована частично (через слой эмуляции), а в Windows Me — полностью. С выходом Windows XP (2001 год) WDM стала единственной поддерживаемой моделью драйверов для всех версий Windows NT.

Эволюция и преемники

WDM оставалась основной моделью до выхода Windows Vista (2006 год), когда была представлена Windows Driver Foundation (WDF), включающая Kernel-Mode Driver Framework (KMDF) и User-Mode Driver Framework (UMDF). WDF построена поверх WDM и упрощает разработку, но не заменяет её полностью. В Windows 8 и более поздних версиях WDM продолжает использоваться для низкоуровневых драйверов, хотя Microsoft рекомендует использовать WDF для новых проектов. В Windows 10 и 11 WDM поддерживается в режиме совместимости.

Архитектура

Основные компоненты

WDM основана на объектно-ориентированной модели, где каждый драйвер представлен как набор объектов (драйверных объектов, объектов устройств, объектов IRP). Ключевые элементы архитектуры:

  • Драйверный объект (Driver Object) — структура данных, представляющая загруженный драйвер в памяти. Содержит указатели на функции обработки запросов (Dispatch routines).
  • Объект устройства (Device Object) — представляет логическое или физическое устройство, управляемое драйвером. Каждый драйвер создаёт один или несколько объектов устройств.
  • Пакет запроса ввода-вывода (IRP — I/O Request Packet) — структура данных, описывающая запрос от приложения или другого драйвера к устройству. IRP передаётся по стеку драйверов.
  • Стек драйверов (Driver Stack)иерархическая структура, в которой драйверы обрабатывают IRP последовательно. Обычно включает драйвер шины, функциональный драйвер и драйвер фильтра.

Типы драйверов WDM

WDM определяет три основных типа драйверов:

  • Функциональный драйвер (Function Driver) — основной драйвер устройства, реализующий его логику и управление. Обычно один на устройство.
  • Драйвер шины (Bus Driver) — управляет шиной (например, PCI, USB, FireWire) и отвечает за обнаружение, конфигурацию и управление питанием подключённых устройств.
  • Драйвер фильтра (Filter Driver) — модифицирует поведение других драйверов (например, добавляет шифрование, мониторинг). Может быть верхним (выше функционального) или нижним (ниже функционального).

Уровни иерархии

IRP обрабатывается в следующем порядке (сверху вниз):

  1. Верхний драйвер фильтра (если есть).
  2. Функциональный драйвер.
  3. Нижний драйвер фильтра (если есть).
  4. Драйвер шины.

Каждый драйвер может передать IRP следующему в стеке или завершить его обработку.

Основные принципы работы

Поддержка Plug and Play (PnP)

WDM полностью интегрирована с подсистемой Plug and Play, что позволяет автоматически обнаруживать устройства при подключении, загружать соответствующие драйверы и назначать ресурсы (порты ввода-вывода, IRQ, память). Драйверы WDM обязаны реализовывать обработку IRP типа IRP_MJ_PNP, включая запросы на запуск, остановку, удаление и изменение состояния устройства.

Управление питанием (Power Management)

WDM поддерживает управление питанием на уровне устройств. Драйверы обрабатывают IRP типа IRP_MJ_POWER, которые позволяют переводить устройство в состояния с низким энергопотреблением (D0 — активное, D1–D3 — спящие). Система может отправлять запросы на изменение состояния питания в зависимости от активности пользователя или настроек электропитания.

Обработка запросов ввода-вывода

Все запросы к устройству (чтение, запись, управление) передаются через IRP. Драйверы WDM реализуют функции обработки (Dispatch routines), которые вызываются диспетчером ввода-вывода Windows. Обработка может быть синхронной (блокирующей) или асинхронной (с использованием callback-функций).

Многопоточность и синхронизация

Драйверы WDM работают в многопоточной среде. Для синхронизации доступа к общим данным используются спин-блокировки (spin locks), мьютексы и события (event objects). Драйверы должны быть реентерабельными и корректно обрабатывать прерывания.

Преимущества и недостатки

Преимущества

  • Унификация: одна модель для всех версий Windows NT, начиная с Windows 2000.
  • Обратная совместимость: драйверы WDM, написанные для Windows 2000, могут работать в Windows XP, Vista, 7, 8, 10 и 11 (с некоторыми ограничениями).
  • Поддержка PnP и управления питанием: встроенная поддержка современных стандартов.
  • Гибкость: возможность создания драйверов фильтров для расширения функциональности.

Недостатки

  • Сложность разработки: WDM требует глубокого понимания архитектуры Windows, управления памятью и синхронизации.
  • Высокий риск ошибок: ошибки в драйвере WDM могут привести к синим экранам смерти (BSOD) и нестабильности системы.
  • Отсутствие абстракции: разработчик должен вручную управлять объектами, IRP и ресурсами.
  • Сложность отладки: отладка драйверов WDM требует специальных инструментов (WinDbg, KD) и часто — второго компьютера.

Применение

Типичные сценарии

WDM используется для разработки драйверов устройств, которые не могут быть реализованы с помощью более высокоуровневых моделей (например, WDF). Типичные примеры:

  • Драйверы для видеокарт, звуковых карт, сетевых адаптеров.
  • Драйверы для специализированного оборудования (промышленные контроллеры, медицинские приборы).
  • Драйверы фильтров для антивирусов, систем шифрования, мониторинга.
  • Драйверы для виртуальных устройств (например, виртуальные сетевые адаптеры).

Современное состояние

Несмотря на появление WDF, WDM продолжает использоваться для низкоуровневых драйверов, особенно в ситуациях, когда требуется прямой доступ к аппаратным ресурсам или реализация сложных протоколов. Microsoft рекомендует для новых проектов использовать KMDF или UMDF, но WDM остаётся важной частью экосистемы Windows. В Windows 10 и 11 WDM поддерживается в режиме совместимости, а новые версии WDF (например, KMDF 1.33) построены поверх WDM.

Инструменты разработки

Для разработки драйверов WDM используются:

  • Windows Driver Kit (WDK) — набор инструментов, включающий компиляторы, линковщики, заголовочные файлы и документацию.
  • Visual Studio — среда разработки, поддерживающая проекты WDK.
  • WinDbg — отладчик для анализа и отладки драйверов.
  • Driver Verifier — утилита для проверки корректности работы драйвера (выявляет утечки памяти, нарушения синхронизации и другие ошибки).

Сравнение с другими моделями

ХарактеристикаWDMWDF (KMDF)VxD (Windows 9x)
Поддержка PnPДаДаОграниченная
Управление питаниемДаДаНет
МногопоточностьДаДаНет
Сложность разработкиВысокаяСредняяНизкая
Совместимость с Windows NTДаДаНет
Поддержка в Windows 10/11ДаДаНет

Критика

WDM критикуется за излишнюю сложность и высокий порог входа для разработчиков. Многие ошибки в драйверах WDM связаны с неправильной обработкой IRP, утечками памяти или нарушениями синхронизации. Кроме того, WDM требует от разработчика глубоких знаний архитектуры Windows, что делает её малопригодной для быстрой разработки. В ответ на это Microsoft создала WDF, которая абстрагирует многие низкоуровневые детали и предоставляет более простой API.

Источники

  • Microsoft Windows Driver Kit (WDK) Documentation — официальная документация по WDM.
  • «Windows Internals, Part 1» (7th edition) — Mark Russinovich, David A. Solomon, Alex Ionescu.
  • «Developing Drivers with the Windows Driver Foundation» — Penny Orwick, Guy Smith.
  • MSDN Library: Windows Driver Model Overview.
  • «Programming the Microsoft Windows Driver Model» — Walter Oney.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →