Начиная с Windows 2000, фирма Microsoft завершила новую модель архитектуры драйверов WDM (Windows Driver Model, драйверная модель Windows).
С точки зрения этой модели, существует три типа драйверов:

  • драйвер шины (Bus Driver) – обслуживает контроллер шины, мост, адаптер или любые другие устройства, имеющие дочерние устройства. Для каждого типа шины (PCI, USB и т.д.) в системе имеется свой драйвер. Эти драйверы, как правило, поставляются Microsoft. Сторонние разработчики создают драйверы для новых шин, например, Multibus, Futurebus и т.д.;
  • функциональный драйвер (Function Driver) – основной драйвер устройства, предоставляющий его функциональный интерфейс. Функциональный драйвер обязателен и обладает наиболее полной информацией о своем устройстве. Обычно только этот драйвер имеет доступ специфическим регистрам устройства;
  • драйвер фильтра (Filter Driver) – поддерживает дополнительную функциональность устройства (или существующего драйвера) или изменяющий запросы на ввод/вывод и ответы на них от других драйверов (это часто используется для коррекции устройств, предоставляющих неверную информацию о своих требованиях к аппаратным ресурсам). Такие драйверы необязательны и их может быть несколько. Обычно эти драйверы предоставляются производителями или независимыми поставщиками оборудования.

В среде WDM один драйвер не может полностью контролировать устройство: драйвер шины сообщает диспетчеру PnP об устройствах, подключенных к шине, а функциональный драйвер управляет устройством. Драйверы фильтров низкого уровня исправляют информацию о требованиях устройства к системным ресурсам, а драйверы фильтров высокого уровня добавляют устройству дополнительную функциональность (например, обеспечивают дополнительную защиту клавиатуры).

Чтобы драйвер мог быть обнаружен системой (т.е. по имени драйвера был найден и загружен физический файл), он должен быть зарегистрирован в специальной ветке реестра.
Регистрация драйвера может осуществляться с помощью INF-файла, с помощью специальных утилит или программно, с помощью специальной компоненты Windows, называемой SCM-менеджер (Service Control Manager, менеджер управления сервисами).

Часто задают вопрос «Как найти драйвер неизвестного устройства?».

Подключите устройство к компьютеру с загруженной операционной системой. После того, как windows скажет, что не смогла найти драйвер для устройства и выдаст запрос на поиск драйвера на дисках, откажитесь от поиска, нажав кнопку Cancel (Отмена).
Запустите "System Information" (Start->All Programs->Accessories->System Tools->System Information или в русском Пуск->Все Программы->Стандартные->Служебные->Сведения о системе).
В "System Information" слева в дереве развернуть "Components" и кликнуть “USB”. В правой панели должен появиться примерно следующий список:

HP LaserJet 3330 USB USB\VID_03F0&PID_0917\00SGL34C0Y14
IEEE 1284.4 compatible printer DOT4\VID_03F0&PID_0917&REV_0100&PRINT\6&4965696&0&0
USB 2.0 Root Hub USB\ROOT_HUB20\4&39852A97&0
USB Device USB\VID_0573&PID_0003\5&18C595BE&0&2
USB Root Hub USB\ROOT_HUB\4&F490EF8&0
USB Root Hub USB\ROOT_HUB\4&4E5168&0

Наше неизвестное устройство называется USB Device и его идентификаторы соответственно - VID_0573&PID_0003.
VID - это код производителя, а PID - код продукта у этого производителя. В подавляющем большинстве случаев VID указывает на производителя контроллера USB, установленного в данном устройстве.
Теперь нужно найти нормальное название производителя. Это можно сделать несколькими способами:

  • самая актуальная информация находится на сайте usb.org;
  • можно поискать в файлах Vendor_ID_List.zip, List of USB ID's.zip или List_of_usb_Vid.zip
  • после того как определилось название производителя (в нашем примере VID - 0573 (HEX) -> 1395 (Dec) - "Zoran Co. Personal Media Division (Nogatech)" и PID - 0003 - "USBGear USBG-V1" можно приступать к поиску сайта компании в интернете с помощью поисковых машин google.ru, Яндекс и других...;
  • дальше надо искать необходимые драйверы в разделах support и тому подобных сайта производителя.