Введение

В вычислительной технике модель драйверов Windows (WDM), также в определенный момент известная как модель драйверов Win32, — это фреймворк для драйверов устройств, представленный вместе с Windows 98 и Windows 2000 для замены VxD, использовавшихся в более ранних версиях Windows, таких как Windows 95 и Windows 3.1, а также модели драйверов Windows NT.

Обзор

Драйверы WDM организованы в виде стека и взаимодействуют друг с другом посредством пакетов запросов ввода-вывода (IRP). Модель драйверов Microsoft Windows объединила модели драйверов для продуктов Windows 9x и Windows NT, стандартизировав требования и сократив объем необходимого кода. Драйверы WDM не будут работать в операционных системах более ранних версий, чем Windows 98 или Windows 2000, таких как Windows 95 (до обновления OSR2, которое обеспечивает поддержку модели WDM), Windows NT 4.0 и Windows 3.1. Соответствие стандарту WDM обеспечивает двоичную и исходную совместимость драйверов в Windows 98, Windows 98 Second Edition, Windows Me, Windows 2000, Windows XP, Windows Server 2003 и Windows Vista (для обеспечения обратной совместимости) на компьютерах на базе x86. Драйверы WDM разработаны с учетом перспективной совместимости, что позволяет драйверу WDM работать в более новых версиях Windows, чем та, для которой он был изначально написан, однако в этом случае драйвер не сможет использовать новые функции, представленные в новой версии. WDM, как правило, не обеспечивает обратную совместимость, то есть работа драйвера WDM в более старых версиях Windows не гарантируется. Например, Windows XP может использовать драйвер, написанный для Windows 2000, но не будет использовать новые функции WDM, представленные в Windows XP. Однако драйвер, написанный для Windows XP, может загружаться или не загружаться в Windows 2000. WDM существует в промежуточном слое драйверов ядра Windows 2000 и был представлен для повышения функциональности и упрощения разработки драйверов для Windows. Хотя WDM был в основном разработан для обеспечения двоичной и исходной совместимости между Windows 98 и Windows 2000, это не всегда желательно, поэтому могут быть разработаны специализированные драйверы для конкретной операционной системы.

Драйверы режима ядра устройства

С Windows Drivers Model (WDM) для устройств Microsoft реализует подход к драйверам режима ядра, уникальный для операционных систем Windows. WDM реализует многоуровневую архитектуру драйверов устройств, и каждое устройство компьютера обслуживается стеком драйверов. Однако каждый драйвер в этом стеке может изолировать аппаратно-независимые функции от драйверов выше и ниже по цепочке. Таким образом, драйверам в стеке не требуется напрямую взаимодействовать друг с другом. WDM определяет архитектуру и процедуры для различных устройств, таких как дисплей и сетевая карта, известные как спецификация интерфейса сетевого драйвера (NDIS). В архитектуре NDIS многоуровневые сетевые драйверы включают драйверы нижнего уровня, управляющие аппаратным обеспечением, и драйверы верхнего уровня, реализующие сетевой транспорт данных, например, протокол управления передачей (TCP). Хотя WDM определяет три типа драйверов устройств, не все стеки драйверов для конкретного устройства содержат все типы драйверов. Три типа драйверов устройств WDM:

Драйвер шины: для каждой шины на материнской плате предусмотрен один драйвер шины, основная задача которого – идентификация всех устройств, подключенных к этой шине, и обработка событий Plug and Play. Microsoft предоставляет драйверы шины как часть операционной системы, такие как PCI, PnPISA, SCSI, USB и FireWire. Функциональный драйвер: это основной драйвер устройства, обеспечивающий операционный интерфейс устройства посредством обработки операций чтения и записи. Функциональные драйверы разрабатываются производителями устройств и для взаимодействия с аппаратным обеспечением зависят от наличия конкретного драйвера шины в операционной системе Windows. Драйвер фильтра: этот драйвер является необязательным и может изменять поведение устройства, например, запросы ввода-вывода. Эти драйверы могут быть реализованы как фильтры нижнего и верхнего уровня.

Объектно-ориентированный стек драйверов

Функциональные драйверы и драйверы шин часто реализуются в виде пары драйвер/минидрайвер, которая на практике представляет собой либо класс/миникасс, либо порт/минипорт. Драйверы шин для устройств, подключенных к шине, реализуются как драйверы классов и не зависят от конкретного оборудования. Они поддерживают операции определенного типа устройств. Операционные системы Windows включают в себя ряд драйверов классов, таких как kbdclass.sys – драйвер для клавиатур. Минидрайверы, в свою очередь, поставляются производителем устройства и поддерживают только операции, специфичные для конкретного устройства данного класса. Драйверы портов поддерживают общие операции ввода/вывода (I/O) для аппаратного интерфейса периферийных устройств. Основная функциональность драйверов портов определяется операционной системой, и операционные системы Windows включают в себя множество драйверов портов. Например, i8042prt.sys – драйвер порта для микроконтроллера 8042, который подключает клавиатуры PS/2 к периферийной шине материнской платы. Минипорт-драйверы, как и минидрайверы классов, поставляются производителями оборудования и поддерживают только операции, специфичные для устройств периферийного оборудования, подключенных к порту на материнской плате. Каждый драйвер, обрабатывающий запрос I/O для устройства, имеет соответствующий объект, который загружается в основную память. Объект устройства создается операционной системой Windows на основе соответствующего класса устройства. Объекты устройств содержат структуры типа DEVICE_OBJECT, которые хранят указатели на их драйверы. Во время выполнения эти указатели используются для поиска диспетчерской процедуры драйвера и его членов функций. В стеке драйверов WDM объект устройства драйвера-фильтра, известный как верхний фильтр, получает пакет запросов I/O (IRP) для устройства от менеджера I/O. Если верхний фильтр-драйвер не может обработать запрос, он находит объект драйвера, расположенного на один уровень ниже в стеке драйверов. IRP передается вниз по стеку драйверов путем вызова функции IoCallDriver, и обрабатывается объектом устройства драйвера функции, также известным как объект функционального устройства. Объект устройства драйвера функции, в свою очередь, может передать IRP нижнему фильтру – другому объекту устройства-фильтра. Затем IRP может быть передан драйверу шины, который выступает в качестве объекта физического устройства. Объект драйвера шины находится в нижней части стека драйверов и взаимодействует с уровнем аппаратной абстракции (HAL), который является частью ядра операционной системы Windows и позволяет операционным системам Windows работать на различных процессорах, с различными архитектурами блоков управления памятью и на различных компьютерных системах с различными архитектурами шин I/O. Выполнение IRP завершается, когда любой из объектов драйвера в стеке возвращает запрос обратно менеджеру I/O с результатом и флагом состояния.

Драйверы устройств для различных операционных систем Windows

Фреймворк WDM был разработан Microsoft для упрощения взаимодействия между операционной системой и драйверами внутри ядра. В операционных системах Windows драйверы реализуются как файлы Dynamic Link Libraries (DLL) или SYS. Драйверы, соответствующие требованиям WDM, должны следовать правилам проектирования, инициализации, Plug and Play, управления питанием и выделения памяти. На практике программисты драйверов WDM повторно используют большие фрагменты кода при создании новых объектно-ориентированных драйверов. Это означает, что драйверы в стеке WDM могут содержать остаточную функциональность, которая не задокументирована в спецификациях. Драйверы, прошедшие проверку качества Microsoft, имеют цифровую подпись Microsoft. Тесты совместимости оборудования Microsoft и комплект разработки драйверов (DDK) включают в себя тесты на надежность и стресс-тесты. Драйвер устройства, не предназначенный для конкретного аппаратного компонента, может позволить другому устройству функционировать. Это связано с тем, что базовая функциональность класса аппаратных устройств схожа. Например, функциональность класса видеокарт позволяет драйверу Microsoft Basic Display Adapter работать с широким спектром видеокарт. Однако установка неправильного драйвера для устройства означает, что полная функциональность устройства не может быть использована, и может привести к снижению производительности и дестабилизации операционной системы Windows. Производители аппаратных устройств могут выпускать обновленные драйверы устройств для конкретных операционных систем Windows для повышения производительности, добавления функциональности или исправления ошибок. Если устройство не работает должным образом, следует загрузить и установить последние драйверы устройства с веб-сайта производителя. Драйверы устройств предназначены для определенных версий операционной системы Windows, и драйверы устройств для предыдущей версии Windows могут не работать правильно или вообще не работать с другими версиями. Поскольку многие драйверы устройств работают в режиме ядра, установка драйверов для предыдущей версии операционной системы может дестабилизировать операционную систему Windows. Поэтому при переходе компьютера на более новую версию операционной системы Windows требуется установка новых драйверов устройств для всех аппаратных компонентов. Поиск и установка актуальных драйверов устройств для Windows 10 внесли определенные сложности в процесс миграции. Распространенные проблемы совместимости драйверов устройств включают: для 32-битной операционной системы Windows требуется 32-битный драйвер устройства, а для 64-битной операционной системы Windows – 64-битный драйвер устройства. 64-битные драйверы устройств должны быть подписаны Microsoft, поскольку они работают в режиме ядра и имеют неограниченный доступ к аппаратному обеспечению компьютера. Для операционных систем до Windows 10 Microsoft разрешала производителям самостоятельно подписывать свои 64-битные драйверы, предполагая, что производители провели тесты совместимости. Однако для Windows 10 64-битные драйверы теперь должны быть подписаны Microsoft. Поэтому производителям устройств необходимо предоставлять свои драйверы в Microsoft для тестирования и утверждения. Установочный пакет драйвера включает все файлы в каталоге INF, и все файлы в пакете должны быть установлены, иначе установка драйвера устройства может завершиться неудачей. Для версий операционной системы до Windows 10 не все файлы, необходимые для установки драйвера, включались в пакет, поскольку это требование не всегда соблюдалось. Некоторые установщики драйверов устройств имеют графический пользовательский интерфейс (GUI), часто требующий ввода параметров конфигурации пользователем. Отсутствие пользовательского интерфейса не означает, что установка драйвера устройства не удалась. Более того, драйверы устройств Windows 10 не могут включать пользовательский интерфейс. Спецификация интерфейса сетевого драйвера (NDIS) 10.x используется для сетевых устройств операционной системой Windows 10. Сетевые драйверы для Windows XP используют NDIS 5.x и могут работать с последующими операционными системами Windows, но для повышения производительности сетевые драйверы должны реализовывать NDIS 6.0 или более поздней версии. Аналогично, WDDM является моделью драйвера для Windows Vista и более поздних версий, которая заменяет XPDM, используемую в графических драйверах.

Управление устройствами

Управление устройствами — это элемент панели управления в операционных системах Microsoft Windows. Он позволяет пользователям просматривать и управлять аппаратным обеспечением, подключенным к компьютеру. Он позволяет пользователям просматривать и изменять свойства устройств, а также является основным инструментом для управления драйверами устройств.