Поделиться через


Идентификаторы, созданные 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

Где:

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

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

USBPRINT\NameModel(20)Checksum(4)

Где:

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

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

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

USBPRINT\Hewlett-PackardHP_Co3115

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

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