В вычислительной технике модель драйверов 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 (WDM) для устройств Microsoft реализует подход к драйверам режима ядра , который является уникальным для операционных систем Windows . WDM реализует многоуровневую архитектуру для драйверов устройств , и каждое устройство компьютера обслуживается стеком драйверов. Однако каждый драйвер в этом стеке может изолировать аппаратно-независимые функции от драйвера выше и ниже его. Таким образом, драйверам в стеке не нужно напрямую взаимодействовать друг с другом. WDM определяет архитектуру и процедуры устройств для ряда устройств, таких как дисплей и сетевая карта , известные как спецификация интерфейса сетевых драйверов (NDIS). В архитектуре NDIS многоуровневые сетевые драйверы включают драйверы нижнего уровня, которые управляют оборудованием, и драйверы верхнего уровня, которые реализуют сетевой транспорт данных, такие как протокол управления передачей (TCP). [1]
Хотя WDM определяет три типа драйверов устройств, не все стеки драйверов для данного устройства содержат все типы драйверов устройств. Три типа драйверов устройств WDM: [1]
Драйвер шины : для каждой шины на материнской плате есть один драйвер шины, основная ответственность которого заключается в идентификации всех устройств, подключенных к этой шине, и реагировании на события plug and play. Microsoft предоставит драйверы шины как часть операционной системы, [1] например, PCI , PnPISA , SCSI , USB и FireWire .
Функциональный драйвер : это основной драйвер для устройства, который обеспечивает операционный интерфейс для устройства, обрабатывая операции чтения и записи. Функциональные драйверы пишутся поставщиками устройств, и для их взаимодействия с оборудованием они зависят от определенного драйвера шины, присутствующего в операционной системе Windows. [1]
Драйвер фильтра : этот драйвер является необязательным и может изменять поведение устройства, например запросы ввода и вывода. Эти драйверы могут быть реализованы как драйверы фильтра нижнего и верхнего уровня. [1]
Драйверы функций и драйверы шины часто реализуются как пары драйвер/минидрайвер, которые на практике представляют собой либо класс или миникласс, либо пару порт или минипорт. [2]
Драйверы шины для устройств, подключенных к шине, реализованы как драйверы класса и не зависят от оборудования. Они будут поддерживать операции определенного типа устройства. Операционные системы Windows включают ряд драйверов класса, таких как драйвер kbdclass.sys для клавиатур. Драйверы мини-класса, с другой стороны, поставляются поставщиком устройства и поддерживают только операции, специфичные для устройства, для конкретного устройства данного класса. [2]
Драйверы портов поддерживают общие операции ввода-вывода (I/O) для интерфейса периферийного оборудования. Основная функциональность драйверов портов предписана операционной системой, и операционные системы Windows интегрируют множество драйверов портов. Например, драйвер порта i8042prt.sys для микроконтроллера 8042 подключает клавиатуры PS/2 к периферийной шине материнской платы. Драйверы мини-портов, как и драйверы мини-класса, поставляются поставщиками оборудования и поддерживают только операции периферийного оборудования, специфичные для конкретного устройства, подключенного к порту на материнской плате. [3] [4]
Каждый драйвер, обрабатывающий запрос ввода-вывода для устройства, имеет соответствующий объект, который загружается в основную память . Объект устройства создается операционной системой Windows из соответствующего класса устройства. Объекты устройств содержат структуры типа DEVICE_OBJECT, которые хранят указатели на их драйвер. Во время выполнения эти указатели используются для поиска процедуры отправки драйвера и функций-членов. В стеке драйверов WDM объект устройства драйвера фильтра, известный как верхний фильтр, получит пакет запроса ввода-вывода (IRP) для устройства от менеджера ввода-вывода. Если драйвер верхнего фильтра не может обслужить запрос, он найдет объект драйвера на одну ступень ниже в стеке драйверов. IRP передается вниз по стеку драйверов путем вызова функции IoCallDriver() и обрабатывается объектом устройства драйвера функции, также известным как объект функционального устройства. Объект устройства драйвера функции, в свою очередь, может передать IRP нижнему фильтру, другому объекту устройства фильтра. Затем IRP может быть передан драйверу шины, который работает как объект физического устройства. Объект драйвера шины находится в нижней части стека драйверов и взаимодействует с уровнем абстракции оборудования , который является частью ядра операционной системы Windows и позволяет операционным системам Windows работать на различных процессорах , различных архитектурах блоков управления памятью и различных компьютерных системах с различными архитектурами шин ввода-вывода. [5] Выполнение IRP завершается, когда любой из объектов драйвера в стеке возвращает запрос обратно менеджеру ввода-вывода с результатом и флагом состояния. [6]
Структура WDM была разработана корпорацией Microsoft для упрощения взаимодействия между операционной системой и драйверами внутри ядра. В операционных системах Windows драйверы реализованы в виде файлов .DLL или .SYS динамически подключаемых библиотек . Драйверы, совместимые с WDM, должны следовать правилам проектирования, инициализации, plug-and-play, управления питанием и распределения памяти. На практике программисты драйверов WDM повторно используют большие фрагменты кода при создании новых объектно-ориентированных драйверов. Это означает, что драйверы в стеке WDM могут содержать остаточную функциональность, которая не документирована в спецификациях. [6] Драйверы, прошедшие тест качества Microsoft, имеют цифровую подпись Microsoft. Тесты совместимости оборудования Microsoft и комплект разработки драйверов включают тесты надежности и стресс-тесты. [7]
Драйвер устройства, не предназначенный для определенного аппаратного компонента, может позволить другому устройству функционировать. Это связано с тем, что базовая функциональность класса аппаратных устройств схожа. Например, функциональность класса видеокарт позволяет драйверу Microsoft Basic Display Adapter работать с широким спектром видеокарт. Однако установка неправильного драйвера для устройства будет означать, что полная функциональность устройства не может быть использована, и может привести к низкой производительности и дестабилизации операционной системы Windows. Поставщики аппаратных устройств могут выпускать обновленные драйверы устройств для определенных операционных систем Windows, чтобы улучшить производительность, добавить функциональность или исправить ошибки . Если устройство не работает так, как ожидалось, следует загрузить последние версии драйверов устройств с веб-сайта поставщика и установить их. [8]
Драйверы устройств разработаны для определенных версий операционной системы Windows, и драйверы устройств для предыдущей версии Windows могут работать некорректно или вообще не работать с другими версиями. Поскольку многие драйверы устройств работают в режиме ядра, установка драйверов для предыдущей версии операционной системы может дестабилизировать операционную систему Windows. Поэтому миграция компьютера на более высокую версию операционной системы Windows требует установки новых драйверов устройств для всех аппаратных компонентов. Поиск актуальных драйверов устройств и их установка для Windows 10 внесли сложности в процесс миграции. [8]
Распространенные проблемы совместимости драйверов устройств включают: для 32-разрядной операционной системы Windows требуется 32- разрядный драйвер устройства, а для 64-разрядной операционной системы Windows требуется 64-разрядный драйвер устройства. 64-разрядные драйверы устройств должны быть подписаны Microsoft, поскольку они работают в режиме ядра и имеют неограниченный доступ к оборудованию компьютера. Для операционных систем до Windows 10 Microsoft разрешала поставщикам подписывать свои 64-разрядные драйверы самостоятельно, предполагая, что поставщики провели тесты на совместимость. Однако теперь 64-разрядные драйверы Windows 10 должны быть подписаны Microsoft. Поэтому поставщики устройств должны отправлять свои драйверы в Microsoft для тестирования и утверждения. Пакет установки драйвера включает все файлы в каталоге .inf, и все файлы в пакете должны быть установлены, в противном случае установка драйвера устройства может завершиться ошибкой. Для версий операционной системы до Windows 10 не все файлы, необходимые для установки драйвера, были включены в пакет, поскольку это требование не соблюдалось последовательно. Некоторые установщики драйверов устройств имеют графический интерфейс пользователя , часто требующий ввода конфигурации пользователем. Отсутствие пользовательского интерфейса не означает, что установка драйвера устройства не была успешной. Кроме того, драйверам устройств Windows 10 не разрешается включать пользовательский интерфейс. Спецификация интерфейса сетевого драйвера (NDIS) 10.x используется для сетевых устройств операционной системой Windows 10. Драйверы сетевых устройств для Windows XP используют NDIS 5.x и могут работать с последующими операционными системами Windows, но из соображений производительности драйверы сетевых устройств должны реализовывать NDIS 6.0 или выше. [8] Аналогично, WDDM является моделью драйвера для Windows Vista и выше, которая заменяет XPDM, используемую в графических драйверах.
Диспетчер устройств — это апплет панели управления в операционных системах Microsoft Windows. Он позволяет пользователям просматривать и контролировать оборудование, подключенное к компьютеру. Он позволяет пользователям просматривать и изменять свойства оборудования, а также является основным инструментом для управления драйверами устройств. [8]
Модель драйвера Windows, хотя и является значительным улучшением по сравнению с моделями драйверов VxD и Windows NT , использовавшимися до нее, подверглась критике со стороны разработчиков программного обеспечения драйверов [9] , в основном за следующее:
Также возник ряд опасений относительно качества документации и образцов, предоставленных Microsoft.
Из-за этих проблем Microsoft выпустила новый набор фреймворков поверх WDM, называемый Windows Driver Frameworks (WDF; ранее Windows Driver Foundation), который включает Kernel-Mode Driver Framework (KMDF) и User-Mode Driver Framework (UMDF). Windows Vista поддерживает как чистый WDM, так и более новый WDF. KMDF также доступен для загрузки для Windows XP и даже Windows 2000, в то время как UMDF доступен для Windows XP и выше.
Модели драйверов, специфичные для класса устройств, обычно структурированы как драйвер порта, написанный Microsoft, в паре с драйвером минипорта, написанным независимым поставщиком оборудования. Драйвер порта выполняет большую часть работы, требуемой для класса устройств, а драйвер минипорта поддерживает характеристики, специфичные для устройств.