Типы драйверов
С точки зрения системы Plug and Play существуют следующие три типа драйверов.
Шинный драйвер обслуживает контроллер шины, адаптер, мост или любое устройство, которое имеет дочерние устройства. Шинные драйверы относятся к обязательным драйверам и обычно поставляются Microsoft. Для каждого типа шины в системе имеется собственный шинный драйвер.
Функциональный драйвер — это основной драйвер устройства, который предоставляет интерфейс с этим устройством. Этот драйвер является обязательным, за исключением случаев, когда ввод/вывод устройства осуществляется шинным драйвером или любыми драйверами фильтра. Функциональный драйвер устройства обычно реализуется в виде пары драйвер/мини-драйвер. В таких парах драйверов драйвер класса (обычно разрабатываемый Microsoft) обеспечивает функциональные возможности, необходимые всем устройствам этого типа, а мини-драйвер (обычно разрабатываемый фирмой — поставщиком конкретного устройства) обеспечивает специфические функциональные особенности устройства. Plug and Play Manager загружает по одному функциональному драйверу для каждого устройства.
Драйвер фильтра сортирует запросы ввода/вывода для шины, устройства или класса устройств. Драйверы фильтра являются необязательными и могут существовать в любом количестве, располагаясь на различных уровнях — как выше, так и ниже функционального драйвера и шинного драйвера. Обычно такие драйверы поставляются фирмами OEM или независимыми поставщиками аппаратных средств (IHV).
В большинстве случаев драйверы фильтров нижнего уровня модифицируют поведение аппаратных средств. Например, низкоуровневый драйвер фильтра класса для мыши может обеспечивать ускорение ее работы, выполняя нелинейное преобразование данных о перемещении мыши.
Высокоуровневые драйверы фильтров обычно предоставляют дополнительные функции для устройства. Например, высокоуровневый драйвер фильтра для клавиатуры может вводить дополнительные проверки по безопасности.
Уровни драйверов
Для каждого конкретного устройства существует два или более уровней драйвера: шинный драйвер для шины ввода/вывода (или Plug and Play Manager — для устройств, помещенных при энумерации на корневой уровень) и функциональный драйвер устройства. Помимо этого, могут присутствовать один или несколько драйверов фильтра для шины или устройства.
Объекты устройств
Драйвер создает объект устройства ( device object) для каждого устройства, которым он управляет. Объект устройства представляет устройство для драйвера. С точки зрения Plug and Play, существуют три типа объектов устройств.
Физические объекты устройств (Physical Device Objects, PDO).
Функциональные объекты устройств (Functional Device Objects, FDO).
Объекты фильтров устройств
PDO представляют устройство на шине; каждый интерфейс прикладного программирования Plug and Play API, который ссылается на устройство, ссылается на PDO. FDO представляют функциональные возможности устройства функциональному драйверу. Объекты фильтров представляют драйвер фильтра. Эти три типа объектов устройств имеют тип DEVICE_OBJECT, но используются по-разному и могут иметь дополнительные расширения.
Дополнительные интерфейсы
Драйверы Plug and Play, предназначенные для использования в Windows 2000, Windows XP и Windows Server 2003, не ограничиваются использованием интерфейсов WDM. Драйверы могут вызывать другие интерфейсы для обеспечения поддержки наследуемых драйверов Windows NT, обнаружения аппаратных средств или других специфических функций, не предоставляемых WDM.
Обратите внимание, что если драйвер должен применяться как в Windows 98/ ME, так и в Windows 2000/XP/Server 2003, то он должен использовать только интерфейсы WDM.
Шинные драйверы WDM
Управление электропитанием и Plug and Play осуществляется при помощи шинных драйверов WDM, которые представляют собой стандартные драйверы WDM. Обратите внимание, что в этом контексте любое устройство, начиная с которого происходит энумерация других устройств, будет называться шиной. Шинный драйвер отвечает на пакеты запроса ввода/вывода (IRP) и может быть расширен за счет использования драйверов фильтров.
Шинный драйвер выполняет следующие задачи:
Энумерация устройств на шине
Динамическое извещение операционной системы о событиях на шине
Ответы на IRP от систем Plug and Play и управления электропитанием
Мультиплексирование доступа к шине (для некоторых шин)
Общее администрирование устройств на шине
В ходе энумерации драйвер шины идентифицирует устройства на своей шине и создает для них объекты устройств. Метод, с помощью которого драйвер идентифицирует устройства на шине, зависит от конкретной шины.
Шинный драйвер выполняет некоторые операции от имени устройств, находящихся на его шине, но обычно не обрабатывает операции чтения и записи на устройства, находящиеся на шине. (Эти операции обрабатываются функциональным драйвером.) Драйвер шины выступает в роли функционального драйвера для своего контроллера, адаптера, моста или другого устройства.
Microsoft поставляет шинные драйверы для большинства распространенных шин, в том числе: PCI, Plug and Play ISA, SCSI и USB. Прочие шинные драйверы могут поставляться независимыми поставщиками — IHV или OEM. Шинный драйвер может быть реализован как пара драйвер/мини-драйвер. В таких парах драйверов один из драйверов связан со вторым, а второй представляет собой DLL.
Драйвер ACPI выполняет роль как шинного драйвера, так и функционального драйвера. ACPI позволяет системе узнавать об устройствах, которые не имеют стандартного метода энумерации (т. е. о наследуемых устройствах), или о вновь определенных устройствах ACPI, энумерация которых должна производиться ACPI (например, о встроенных контроллерах). ACPI устанавливает драйверы фильтра верхнего уровня для устройств, функциональные возможности которых выходят за пределы стандарта для их шины. Например, если шинный драйвер PCI устанавливает графический контроллер с элементами управления электропитанием, которые не поддерживаются шиной PCI, то устройство может поддерживать дополнительные функциональные возможности, если драйвер ACPI загрузит для него высокоуровневый драйвер фильтра.
Драйверы устройств WDM
Драйверы устройств WDM обычно представляют собой пару "драйвер/мини-драйвер —• драйвер фильтра". В дополнение к предоставлению операционного интерфейса с устройством функциональные драйверы играют важную роль в системе управления электропитанием, предоставляя информацию владельцу политики для устройства о возможностях управления электропитанием и выполняя действия, относящиеся к переходам от режима энергосбережения к режиму подачи электропитания в полном объеме.
Содержание раздела