Идентификаторы, созданные USBPRINT.SYS

Начиная с Windows 2000 операционная система предоставляет драйвер печати USB в режиме ядра, usbprint.sys , который подключает подсистему принтера к USB-стеку. Собственный драйвер USB-принтера освобождает поставщиков от необходимости разработки собственных драйверов USB-принтера в режиме ядра. Это позволяет поставщикам разрабатывать высокоуровневые драйверы принтера в режиме пользователя, которые работают как с USB,так и с параллельными принтерами.

Файл установки usbprint.inf содержит совместимый идентификатор, соответствующий всем устройствам принтера класса USB 7. Если драйвер USB-концентратора перечисляет одно из этих устройств, операционная система найдет совпадение с идентификатором, создаваемым драйвером концентратора в usbprint.inf , и загрузит драйвер USB-принтера ,usbprint.sys. Совместимый идентификатор, найденный в usbprint.inf , имеет следующую форму:

USB\CLASS_07

Где:

  • класс 07h = устройства, принадлежащие классу USB-принтера

После загрузки драйвер USB-принтера создает новый PDO для устройства принтера. Когда диспетчер Plug and Play (PnP) запрашивает строки идентификации устройства только что созданного PDO, драйвер USB-принтера создает новый идентификатор оборудования, производный от строки IEEE 1284 устройства, совместимой со строковыми идентификаторами, созданными перечислителем параллельной шины. Этот идентификатор оборудования имеет следующий формат:

USBPRINT\NameModel(20)Контрольная сумма(4)

Где:

  • NameModel(20) — это объединение имени производителя и модели устройства, усеченное до максимум 20 символов.

  • Checkum(4) — это код 4-символьной проверки избыточности (CRC), вычисляемый по имени производителя и имени модели.

Пробелы в строке заменяются знаками подчеркивания. Например, если имя производителя — Hewlett-Packard, модель называется HP Color LaserJet 550, а контрольная сумма — 3115, идентификатор оборудования будет следующим образом:

USBPRINT\Hewlett-PackardHP_Co3115

В предыдущем примере пробел между "HP" и "Color" в имени модели был заменен подчеркиванием, чтобы создать усеченную строку make/model "Hewlett-PackardHP_Co".

Заметка CRC, созданный операционной системой, может не соответствовать CRC, вычисляемому как описано в предыдущем разделе, или любым другим алгоритмом CRC. В результате этого драйвер принтера может не вычислить правильный аппаратный идентификатор, используемый с INF-файлом для драйвера принтера. Чтобы получить аппаратный идентификатор, лучше искать файл setupapi.dev.log, связанный с установленным USB-принтером.