Как работает новая архитектура TS Easy Print в сравнении с традиционным перенаправлением принтеров

К написанию этой статьи меня подтолкнуло желание разобраться, что из себя представляет технология Easy Print, которая появилась в Windows Server 2008. К сожалению, информации по этому вопросу довольно мало, поэтому пришлось брать ее из разных источников и систематизировать самостоятельно. Одна из наиболее удачных книг, на мой взгляд, Windows Server 2008 Terminal Services Resource Kit (Christa Anderson and Kristin L Griffin with the Microsoft Presentation Hosted Desktop Virtualization Team, Microsoft Press © 2008).

Прежде чем говорить о технологии Easy Print, кратко рассмотрим, как работает обычная система перенаправления принтеров в терминальном сервере.

Традиционная система перенаправления принтеров

Основные компоненты, которые участвуют в перенаправлении принтеров:

  • winlogon.exe – процесс, который отвечает за создание/завершение сеанса и запуск оболочки пользователя;
  • winsta.dll – библиотека, которая используется для настройки терминальной сессии;
  • termsrv.dll – диспетчер удаленных подключений;
  • rdpwsx.dll – компонент, который работает в режиме пользователя и отвечает за подключение/отключение удаленных соединений по протоколу RDP;
  • rdpdr.sys – драйвер перенаправления RDP-устройств (работает в режиме ядра);
  • spoolsv.exe – диспетчер очереди печати;
  • usbmon.dll – компонент управления динамическими портами принтеров на терминальном сервере;
  • mstscax.dll – компонент терминального сервера, который собирает информацию о принтерах на клиентской рабочей станции (имя, драйвер, настройки и т.д.);
  • System Event Notification Service (SENS) – служба терминального сервера, которая отслеживает системные события (подключение\отключение сессий, создание\завершение сеансов на терминальном сервере) и передает информацию о них в приложения.

Автоматическое перенаправление клиентских принтеров в терминальную сессию без использования Easy Print происходит следующим образом:

  1. Клиент удаленного рабочего стола (mstsc.exe) подключается к терминальному серверу;
  2. В сессии пользователя запускается процесс winlogon.exe;
  3. Библиотека winsta.dll настраивает терминальную сессию;
  4. Компонент rdpwsx.dll с помощью winsta.dll и termsrv.dll обнаруживает новое соединение и уведомляет об этом драйвер перенаправления устройств rdpdr.sys;
  5. Драйвер перенаправления устройств посылает запрос клиенту на составление списка принтеров для дальнейшего их подключения в сессию пользователя;
  6. Клиент удаленного рабочего стола (mstsc.exe) собирает информацию с рабочей станции и через rdpwsx.dll посылает ее драйверу перенаправления устройств. В результате на терминальный сервер передаются следующие данные:
    — конфигурация принтера (имя принтера, имя драйвера, ориентация бумаги, статус и т.д.);
    — имена очередей печати (представление физического принтера в ОС Microsoft Windows) и имена соответствующих им портов;
    — очереди печати, созданные во время предыдущих подключений (перечислены в разделе реестра HKCU\Software\Microsoft\Terminal Server Client\Default\Add Ins\RDPDR на клиентском компьютере);
  7. Для каждой очереди печати при помощи драйвера перенаправления устройств создается соответствующий порт. Порты имеют имена вида «TSXXX», где XXX – номер, начинающийся с 001. При этом учитываются настройки, которые указаны в групповой политике (например, проверяется нужно ли перенаправлять все принтеры или только принтер по умолчанию).
  8. Драйвер перенаправления устройств через API уведомляет службу диспетчера очереди печати о появлении новых принтеров. Spoolsv.exe с помощью usbmon.dll добавляет созданные ранее порты в список доступных, и производит соответствующие обновления в реестре клиентского компьютера.
  9. Процесс winlogon.exe уведомляет службу SENS о создании терминальной сессии. В дальнейшем с помощью этой же службы удаляются созданные ранее порты при отключении и завершении сеанса.
  10. Служба SENS выполняет следующие действия:
    — убеждается, что для принтера есть соответствующий драйвер на терминальном сервере;
    — устанавливает принтер по умолчанию на терминальном сервере такой же как и на клиентской рабочей станции;
    — добавляет очередь печати в список устройств;
    — устанавливает права безопасности по умолчанию на очередь печати для подключившегося пользователя (чтение, запись, печать) и группы администраторов (полный доступ).

Процесс печати на перенаправленный принтер выглядит так:

  1. Пользователь запускает печать документа из какого-либо приложения;
  2. При помощи интерфейса графического устройства (GDI), создается файл формата EMF (Enhanced Metafile Format). Метафайл не зависит от устройства печати и содержит в себе инструкции необходимые для вывода изображения на принтер;
  3. Созданный файл передается в диспетчер печати терминального сервера;
  4. Постановленное в очередь задание возвращается в GDI. С помощью драйвера принтера, который работает в режиме пользователя, GDI преобразовывает задание из EMF в RAW-формат. В дальнейшем этот формат может быть обработан выбранным принтером.
  5. Задание на печать отправляется на перенаправленный порт (определенный как TSXXX);
  6. Диспетчер печати посылает задание на печать на монитор динамического порта (usbmon.dll);
  7. Монитор динамического порта передает файл компоненту rdpdr.sys, который посылает данные в готовом для печати растровом формате на соответствующий терминальный клиент, а тот уже отправляет его на нужный принтер.

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

Новая архитектура TS Easy Print

TS Easy Print разрабатывался для того, чтобы решить 4 основные проблемы с которыми сталкиваются системные администраторы:

  1. Драйверы, которые работают в режиме ядра, часто вызывают критические сбои в работе терминального сервера;
  2. Иногда имя драйвера на клиенте не совпадает с именем драйвера на сервере, в этом случае приходится вручную настраивать сопоставление в inf-файле, чтобы работало перенаправление принтеров;
  3. Необходимо тщательное тестирование драйвера перед его распространением на другие терминальные серверы;
  4. При печати на переправленный принтер передается большой объем данных по сети.

Чтобы решить описанные выше проблемы предлагается использовать новую архитектуру печати, основанную на формате XML Paper Specification (XPS). С ее помощью при печати на перенаправленном принтере можно использовать драйверы клиентского компьютера без установки их на терминальный сервер.

Для функционирования TS Easy Print на клиентском компьютере должны быть установлены:

  1. Клиент удаленного рабочего стола версии 6.1 или выше;
  2. .NET Framework 3.0 SP1 или выше.

Этим требованиям удовлетворяют наиболее распространенные на сегодняшний день версии клиентских операционных систем: Windows XP SP3, Windows Vista, Windows 7.

Процесс печати на перенаправленный принтер с использованием Easy Print происходит следующим образом:

  1. Пользователь запускает задание на печать из какого-либо приложения;
  2. В зависимости от типа приложения, задание на печать либо сразу же преобразуется в формат XPS (для приложений класса Windows Presentation Foundation), либо предварительно преобразуется в формат GDI (для Win32-приложений). ;
  3. Файл XPS отправляется в надстройку клиента удаленного рабочего стола, отвечающую за технологию TS Easy Print;
  4. Файл XPS без изменений передается напрямую драйверу печати на клиентском компьютере как XPS-обработанный файл;
  5. Файл XPS, предназначенный для GDI принтера, превращается в формат EMF;
  6. Задание на печать отправляется на принтер.

Как мы видим, использование универсального драйвера печати избавляет от необходимости установки на терминальный сервер дополнительных драйверов принтеров. Подготовленный XPS файл в отличии от EMF не требует дальнейшего преобразования в RAW. В связи с этим большую часть времени файл XPS, который содержит задание печати, гораздо меньше аналогичного EMF файла, а это в свою очередь требует меньшее количество ресурсов на его обработку. Кроме того, TS Easy Print использует виртуальные каналы, предоставляя возможность настройки свойств печати непосредственно на клиенте. Когда пользователь входит в настройки свойств принтера в терминальной сессии, драйвер TS Easy Print на терминальном сервере перехватывает этот запрос и посылает его надстройке TS Easy Print на терминальном клиенте. Клиент опрашивает установленный локально драйвер и локальные настройки принтера, а затем передает их на сервер. Таким образом, настройки полностью идентичны как на клиенте, так и на сервере.

В целом TS Easy Print превосходит традиционную систему печати по таким параметрам как:

  • стабильность службы диспетчера очереди печати;
  • объем передаваемых при печати данных;
  • необходимость установки драйверов для принтеров на терминальные сервера;
  • скорость печати.

Хотя со скоростью печати тут не так все однозначно. Если драйвер принтера изначально не поддерживает печать в формате XPS, то будет выполнено преобразование с использованием .Net Farmework. На старых медленных компьютерах этот процесс может вызвать существенную загрузку процессора и занять ощутимое время.

Пожалуйста, оцените статью:
(всего оценок: 7, средняя: 5,00 из 5)