Основные понятия настройки драйвера версии 4

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.

Дополнительные сведения см. в руководстве по проектированию приложений поддержки печати версии 1 и версии 2.

Модель драйвера печати версии 4 использует новую модель установки для улучшения взаимодействия с пользователем и снижения затрат на поддержку.

Драйвер печати версии 4 запускается непосредственно из хранилища драйверов, что устраняет возможность конфликтов файлов и повышает производительность установки. Модель установки версии 4 продолжает использовать INF-файлы, но также использует новый файл манифеста для записи определенных директив установки принтера.

Идентификаторы устройств

Совместимые ИДЕНТИФИКАТОРЫ

Совместимые идентификаторы — это ключевая концепция драйверов классов печати, так как они позволяют драйверам поддерживать устройства, выпущенные после выпуска новой версии Windows, без необходимости обновлять драйвер. Это возможно, так как совместимые идентификаторы позволяют устройствам указывать поддержку менее специфичного драйвера печати, чем идентификатор оборудования.

Если определенный совместимый ИДЕНТИФИКАТОР уже поддерживается драйвером класса печати, драйверы печати версии 4 не должны указывать его еще раз. Если дата драйвера принтера новее даты драйвера класса принтера, драйвер принтера будет загружен автоматически с сайта Обновления Windows.

Устройства должны включать совместимые идентификаторы (CompatibleIDs) в строку 1284ID. Если существующий драйвер класса печати поддерживает устройство, драйвер печати должен использовать этот Совместимый ИДЕНТИФИКАТОР, в противном случае рекомендуется использовать следующий формат.

1284_CID_<manufacturer identifier>_<PDL identifier>_device family identifier

Например:

1284_CID_FA_PCL5e_Laser

Если совместимые идентификаторы уже реализованы на существующих устройствах, драйвер печати должен продолжать использовать эти совместимые идентификаторы.

Совместимые идентификаторы не используются в установке устройств печати на основе TCP/IP. В результате пользователям потребуется определить соответствующий драйвер, используя только имя драйвера. Когда речь идет о драйверах класса печати, мы рекомендуем производителям размещать на своих веб-сайтах списки совместимости для любых устройств, поддерживаемых такими драйверами. Для получения дополнительной информации о том, как реализовать совместимые идентификаторы в вашем оборудовании, включая полный список правил и ограничений, см. в статье «Как реализовать совместимые идентификаторы в устройствах печати».

Корпорация Майкрософт поддерживает несколько стандартных совместимых идентификаторов для поддержки нескольких драйверов классов печати, нейтральных от производителя (стандартных). В следующей таблице показаны эти стандартные совместимые идентификаторы и связанные типы PDL-файлов.

Тип файла PDL Стандартный совместимый идентификатор
XPS 1284_CID_MS_XPS
OpenXPS (ECMA-388) 1284_CID_MS_OXPS
PCL6 1284_CID_MS_PCL6
PS 1284_CID_MS_PS

Эти стандартные драйверы классов печати поддерживают только небольшой набор функций, поэтому производители, которые предпочитают использовать эти драйверы классов, должны реализовать расширенную конфигурацию драйвера, используя Bidi для добавления более конкретных размеров бумаги и конфигурации. В следующей таблице показаны функции и связанные параметры, поддерживаемые стандартными драйверами классов печати.

Функция Опции
Размер бумаги Письмо, A4
Решение 300dpi, 600dpi
Тип носителя Обычная бумага
N-up 1, 2, 4, 6, 9, 16

Идентификатор драйвера принтера

PrinterDriverID — это новый идентификатор, используемый для определения совместимости драйверов для общего доступа к принтерам, а также совместимости драйверов и расширений принтера. Например, если драйвер на сервере задает PrinterDriverID в файле манифеста, а затем делится этим драйвером, клиенты, подключающиеся к этому принтеру, будут искать в локальном хранилище драйверов и Обновление Windows драйвер, указывающий тот же PrinterDriverID в INF-файле драйвера. Если совпадение найдено, подключение будет выполнено с помощью этого драйвера. Клиентские компьютеры не фильтруют результаты сопоставления с помощью имени драйвера.

PrinterDriverID необходимо указать для всех совместимых драйверов следующим образом:

  • Использование директивы PrinterDriverID в манифесте версии 4.

  • В качестве аппаратного идентификатора в INF-файле драйвера версии 4.

Чтобы два разных драйвера совместно использовать один и тот же PrinterDriverID, они должны быть совместимы для общего доступа. Чтобы подключение всегда было успешным, два драйвера должны иметь возможность выполнить следующие действия:

  • Поддержка того же PDL

  • Используйте те же файлы конфигурации (GPD или PPD)

  • Быть способным отрисовывать любые функции или параметры, указанные в GPD, PPD и/или файлах ограничений JS драйвера сервера.

  • Поддержка одинаковых расширений принтера

Средство spooler не проверяет эти ограничения и полагается исключительно на PrinterDriverID, чтобы указать, совместимы ли два драйвера для общего доступа. Производители должны убедиться в изменении PrinterDriverID для драйвера, если внесены изменения в любой из указанных выше элементов.

Расширения принтера также могут быть связаны с драйверами с помощью идентификаторов PrinterDriverID. В результате два драйвера, которые совместно используют PrinterDriverID, должны работать с одинаковыми расширениями принтера. Последнее расширение принтера, установленное, перезаписывает все предыдущие расширения принтера для всех устройств с помощью целевых идентификаторов PrinterDriverID, поэтому они должны правильно работать с тем же приложением.

Рекомендации по использованию идентификаторов GUID

Идентификаторы GUID широко используются в модели драйвера печати версии 4, в частности в PrinterDriverID, а также в PrinterExtensionID, EventID и ModelID. Они используются для уникальной идентификации различных элементов в системе или для идентификации их как одинаковых для обслуживания, совместного использования и т. д.

При создании новых графических идентификаторов всегда используйте генератор GUID, например один из включенных в Microsoft Visual Studio или включенный в пакет SDK. Созданные вручную графические идентификаторы и графические идентификаторы, которые были ошибочно скопированы и вставлены, подвержены столкновениям.

Поведение настроек

Для драйверов версии 3 имя очереди печати сначала определяется именем драйвера, а затем пользователем. При внедрении драйверов классов печати имя драйвера гораздо менее полезно для распознавания пользователей устройства. Windows автоматически переименует очередь для любых устройств Plug and Play, установленных для использования драйвера печати версии 4, следующим образом:

  1. Изначально для имени очереди печати задано имя драйвера.

  2. Если драйвер является драйвером печати версии 4, Windows запрашивает устройство с помощью Bidi.

    1. Если указан параметр \Printer.DeviceInfo:FriendlyName, он будет использоваться в качестве нового имени очереди.

    2. В противном случае Windows запрашивает \Printer.DeviceInfo:Manufacturer, \Printer.DeviceInfo:ModelName.

      1. Если оба заданы, Windows объединяет их в "Имя модели производителя".

      2. Если только один из этих запросов Bidi завершается ошибкой, Windows будет использовать успешный возврат из другого запроса в качестве имени очереди.

  3. Если все запросы Bidi завершаются ошибкой, Windows будет использовать IEEE 1284ID для определения названий изготовителя и моделей.

    1. Если указано ОПИСАНИЕ или DES, он будет использоваться в качестве нового имени очереди.

    2. В противном случае Windows будет искать MANUFACTURER или MFG, а также MODEL или MDL.

      1. Если оба заданы, Windows будет объединять их в "MODEL ПРОИЗВОДИТЕЛЯ".

      2. Если только одна из них завершается ошибкой, Windows будет использовать значение из другого ключа в качестве имени очереди.

Мастер добавления принтера

Имя драйвера будет по-прежнему единственным идентификатором, доступным для пользователей, которые выбирают драйвер в мастере добавления принтера. Устройства на основе TCP/IP должны реализовать MIB монитора портов (PWG 5107.1-2005), чтобы поддерживать автоматическое обнаружение TCP/IP. Существующие устройства, добавленные в драйвер класса печати с помощью сопоставления аппаратного идентификатора (HWID), дополнительно могут использовать имя модели, специфичное для устройства.

Изменение портов и работа с узлами устройств принтера

Чтобы обеспечить единообразие пользовательского интерфейса, всем очередям печати присваивается программный узел устройства (devnode). Таким образом принтеры обнаруживаются в пользовательском интерфейсе, и это позволяет виртуальным принтерам, подключениям к общим принтерам и сетевым принтерам перечисляться и получать доступ к ним таким же образом, как и к принтерам Plug and Play (PnP). Программное обеспечение devnodes для физических принтеров PnP наследует свойства от devnode PnP, который активировал создание очереди.

Пользовательский интерфейс будет группировать devnodes в контейнеры устройств, когда два различных объекта связаны между собой. Эта группировка позволяет многофункциональным принтерам (MFP) отображаться как один значок в папке "Устройства и принтеры ". Идентификатор контейнера для всех функций в MFP должен быть одинаковым, чтобы все функции отображались под одинаковым значком. Это выполняется автоматически для устройств PnP.

Изменение порта, связанного с очередью, приведет к изменению идентификатора контейнера, связанного с devnode этой очереди. Это приведет к тому, что очередь больше не будет группироваться под тем же контейнером устройства, что и остальные объекты PnP для физического устройства. В операционной системе недостаточно информации, чтобы правильно разрешить ситуации, когда очередь и объект PnP разъединяются. В некоторых случаях это фактическое намерение пользователя. Только пользователь или приложение, которое изменяет имя порта, знает, какого результата предполагается добиться, и пользователь или приложение должно устранить любое запутанное состояние, возникающее после изменения порта очереди. Ниже приведены два примера ситуаций, в которых показано, как правильно очиститься.

  1. ИТ-администратор настраивает принтеры— ИТ-администратор использует обнаружение WS для поиска принтера в сети и изменения порта на TCP/IP, так как они любят процесс управления TCP/IP.

    1. Ожидание — в папке «Устройства и принтеры» существует только одно устройство.

    2. Решение — ИТ-администратор удаляет devnode WSD PnP из папки устройств и принтеров.

  2. Программное обеспечение установки IHV — IHV устанавливает драйвер вместе с пользовательским монитором портов (пользовательские мониторы портов запрещены в версии 4, но та же обработка devnode применяется к драйверам версии 3). IHV изменяет USB-порт очереди печати на порт, который создает производитель устройства.

    1. Ожидание — в папке «Устройства и принтеры» существует только одно устройство.

    2. Решение 1. Devnode PnP по-прежнему требуется: программа установки изменяет идентификатор контейнера devnode очереди, чтобы соответствовать объекту PnP.

    3. Решение 2. Devnode PnP является лишним: программа установки удаляет исходное устройство PnP.

Ранжирование драйверов

Внедрение драйверов печати версии 4 не изменяет поведение ранжирования Plug and Play. Когда устройство подключено, будет выбран доступный драйвер с самой высокой оценкой. Если выбранный драйвер является драйвером класса печати, и на сайте обновлений Windows есть лучше ранжированный, совпадающий драйвер, то выбранный драйвер автоматически будет заменён при следующей загрузке пользователем обновлений для Windows.

Дополнительные сведения о ранжировании драйверов см. в статье Как Windows ранжирует драйверы.

Рекомендации по настройке драйвера

Упаковка

Драйверы печати версии 4 не используют директивы INF-файла needs и includes, а также основные технологии драйверов для обработки общих файлов. В результате драйверы печати версии 4 должны быть автономными, с несколькими исключениями.

Драйверы печати версии 4 могут продолжать принимать зависимости от распространенных файлов, которые предоставляет Windows. К ним относятся файлы в NTPrint.INF или NTPrint4.INF. Драйверы могут включать эти файлы, указав директиву RequiredFiles в файле манифеста версии 4.

Если существуют драйверы классов печати, обеспечивающие базовые функции рендеринга для ваших устройств или PDL, то также существует механизм, позволяющий установить зависимость от драйвера класса с помощью директивы RequiredClass. Эта директива приводит к созданию драйвера Windows с помощью файлов из драйвера печати версии 4 и требуемого драйвера класса печати. GPD и PPD-файлы собираются в один общий файл, при этом более специфичные файлы имеют приоритет над менее специфичными. На следующей схеме показана логика слияния файлов GPD/PPD, а также расширенные файлы конфигурации драйверов, полученные из Bidi. Другие файлы драйверов, такие как ограничения JavaScript, не объединяются в пакет драйвера.

Логика объединения файлов GPD/PPD.

Модельные ряды принтеров

Plug and Play поддерживает неявное ранжирование всех идентификаторов оборудования и совместимых идентификаторов в линейке модели. В результате корпорация Майкрософт рекомендует партнерам использовать следующие рекомендации, чтобы избежать непредсказуемых действий в отношении ранжирования.

Драйвер печати версии 4

  1. inf-файлы драйвера печати 4-й версии должны определить два разных типа строк модели.

    1. Линии HardwareID: "Имя драйвера" = INSTALL_SECTION, busenumerator\HardwareID

    2. Строки PrinterDriverID: "Имя драйвера" = INSTALL_SECTION,{GUID}

  2. Файлы inf драйверов печати V4 должны определять аппаратные идентификаторы, специфичные для шины, на индивидуальных линиях.

    1. "Имя драйвера" = INSTALL_SECTION,WSDPRINT\HardwareID

    2. "Имя драйвера" = INSTALL_SECTION,USBPRINT\HardwareID

    3. "Имя драйвера" = INSTALL_SECTION,LPTENUM\HardwareID

  1. INFs драйвера класса печати должны определять три различных типа строк модели.

    1. Линии HardwareID: "Имя драйвера" = INSTALL_SECTION,HardwareID

    2. Строки PrinterDriverID: "Имя драйвера" = INSTALL_SECTION,{GUID}

    3. Строки CompatibleID: "Имя драйвера класса печати" = INSTALL_SECTION,,1284_CID_CompatID

  2. INF-файлы драйверов классов печати не должны определять какие-либо перечислители шины (например, WSDPRINT)

Как реализовать совместимые идентификаторы в устройствах печати

Как Windows оценивает драйверы

MIB монитора портов (PWG 5107.1-2005)