Типы драйверов
С точки зрения системы Plug and Play существуют следующие три типа драйверов.
В большинстве случаев драйверы фильтров нижнего уровня модифицируют поведение аппаратных средств. Например, низкоуровневый драйвер фильтра класса для мыши может обеспечивать ускорение ее работы, выполняя нелинейное преобразование данных о перемещении мыши.
Высокоуровневые драйверы фильтров обычно предоставляют дополнительные функции для устройства. Например, высокоуровневый драйвер фильтра для клавиатуры может вводить дополнительные проверки по безопасности.
Уровни драйверов
Для каждого конкретного устройства существует два или более уровней драйвера: шинный драйвер для шины ввода/вывода (или Plug and Play Manager — для устройств, помещенных при энумерации на корневой уровень) и функциональный драйвер устройства. Помимо этого, могут присутствовать один или несколько драйверов фильтра для шины или устройства.
Объекты устройств
Драйвер создает объект устройства ( device object) для каждого устройства, которым он управляет. Объект устройства представляет устройство для драйвера. С точки зрения Plug and Play, существуют три типа объектов устройств.
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) и может быть расширен за счет использования драйверов фильтров.
Шинный драйвер выполняет следующие задачи:
В ходе энумерации драйвер шины идентифицирует устройства на своей шине и создает для них объекты устройств. Метод, с помощью которого драйвер идентифицирует устройства на шине, зависит от конкретной шины.
Шинный драйвер выполняет некоторые операции от имени устройств, находящихся на его шине, но обычно не обрабатывает операции чтения и записи на устройства, находящиеся на шине. (Эти операции обрабатываются функциональным драйвером.) Драйвер шины выступает в роли функционального драйвера для своего контроллера, адаптера, моста или другого устройства.
Microsoft поставляет шинные драйверы для большинства распространенных шин, в том числе: PCI, Plug and Play ISA, SCSI и USB. Прочие шинные драйверы могут поставляться независимыми поставщиками — IHV или OEM. Шинный драйвер может быть реализован как пара драйвер/мини-драйвер. В таких парах драйверов один из драйверов связан со вторым, а второй представляет собой DLL.
Драйвер ACPI выполняет роль как шинного драйвера, так и функционального драйвера. ACPI позволяет системе узнавать об устройствах, которые не имеют стандартного метода энумерации (т. е. о наследуемых устройствах), или о вновь определенных устройствах ACPI, энумерация которых должна производиться ACPI (например, о встроенных контроллерах). ACPI устанавливает драйверы фильтра верхнего уровня для устройств, функциональные возможности которых выходят за пределы стандарта для их шины. Например, если шинный драйвер PCI устанавливает графический контроллер с элементами управления электропитанием, которые не поддерживаются шиной PCI, то устройство может поддерживать дополнительные функциональные возможности, если драйвер ACPI загрузит для него высокоуровневый драйвер фильтра.
Драйверы устройств WDM
Драйверы устройств WDM обычно представляют собой пару "драйвер/мини-драйвер —• драйвер фильтра". В дополнение к предоставлению операционного интерфейса с устройством функциональные драйверы играют важную роль в системе управления электропитанием, предоставляя информацию владельцу политики для устройства о возможностях управления электропитанием и выполняя действия, относящиеся к переходам от режима энергосбережения к режиму подачи электропитания в полном объеме.