В Windows 2000 была добавлена поддержка технологии Plug and Play, настроек электропитания и расширение модели драйверов Windows NT, названной моделью драйверов Windows (WDM). Windows 2000 и более поздние версии могут запускать драйверы, унаследованные у Windows NT 4, но, поскольку они не поддерживают технологию Plug and Play настройки электропитания, системы, запускающие эти драйверы, будут вынуждены ограничивать возможности в этих двух областях.
С точки зрения WDM, существуют драйверы трех типов:
- Драйвер шины, обслуживающий контроллер шины, адаптер, мост или любое устройство, имеющее дочерние устройства. Драйверы шины нуждаются в драйверах, и Microsoft, как правило, их предоставляет; каждый тип шины (такой как PCI, PCMCIA и USB), имеющийся в системе, имеет один драйвер шины. Сторонние производители могут создавать драйверы шины для предоставления поддержки новых шин, таких как VMEbus, Multibus и Futurebus.
- Функциональный драйвер, являющийся основным драйвером устройства и предоставляющий для него управляющий интерфейс. Драйвер нужен в том случае, если устройство не используется напрямую (в варианте реализации, при которой ввод-вывод осуществляется драйвером шины и любыми драйверами фильтра шины, в качестве примера можно привести SCSI PassThru).
Функциональный драйвер по определению является драйвером, который знает о конкретном устройстве практически все, и обычно он является единственным драйвером, обращающимся к специфическим регистрам устройства.
- Драйвер фильтра, использующийся для добавления функциональности к устройству (или к существующему драйверу) или для изменения запросов ввода-вывода или ответов от других драйверов (для настройки оборудования, предоставляющего неверную информацию о требованиях к аппаратным ресурсам). Драйверы фильтра являются дополнительными и могут присутствовать в любом количестве, размещаясь выше или ниже функционального драйвера и выше драйвера шины. Обычно драйверы фильтра поставляются OEM-производителями или независимыми поставщиками оборудования (IHV).
В среде окружения WDM все аспекты устройства контролируются не одним драйвером: драйвер шины занимается отправкой диспетчеру PnP отчетов об устройствах, подключенных к его шине, а функциональный драйвер управляет самим устройством.
В большинстве случаев драйверы фильтра, находящиеся на нижнем уровне, изменяют поведение устройства. Например, если устройство сообщает своему драйверу шины, что ему нужно 4 порта ввода-вывода, в то время как ему фактически нужно 16 портов ввода-вывода, функциональный драйвер фильтра для данного конкретного устройства может перехватить перечень аппаратных ресурсов, о котором драйвер шины сообщает диспетчеру PnP, и исправить количество портов ввода-вывода.
Драйверы фильтра, находящиеся на верхнем уровне, обычно предоставляют устройству какие-нибудь дополнительные свойства. Например, драйвер фильтра такого устройства, как клавиатура, находящийся на верхнем уровне, может навязывать дополнительные проверки безопасности.