Печать сервера терминалов
Важно!
Начиная с WDK для Windows 11 версии 22H2 распространяемые установщики WDF больше не поддерживаются. Сведения о том, как обойти это изменение, см. в статье Распространяемые совместно установщики WDF не работают в статье Известные проблемы WDK .
Microsoft Windows поддерживает службы терминалов— технологию, которая позволяет нескольким пользователям подключаться к системе с одним сервером. Эта серверная система называется сервером терминалов. Подробные сведения о службах терминалов см. в документации по Windows SDK.
Если вы разрабатываете мини-диск принтера или драйвер для Windows, вам не нужно ничего специального делать для поддержки принтеров, подключенных к серверам терминалов. Однако необходимо следовать всем рекомендациям по проектированию, реализации и установке, указанным в пакете драйверов Windows (WDK). В частности, необходимо использовать следующие правила:
По возможности поддержите принтер, предоставив мини-отвертку, которая работает с одним из следующих драйверов, предоставляемых корпорацией Майкрософт:
Драйвер принтера Microsoft XPS
Драйвер универсального принтера (Майкрософт)
Необходимо разработать библиотеку DLL графики принтера для выполнения в пользовательском режиме. См. раздел Выбор пользовательского режима или режима ядра.
Если устройство должно поддерживаться пользовательским драйвером, драйвер должен точно соответствовать архитектуре драйвера принтера Майкрософт. В частности:
Необходимо создать библиотеку DLL интерфейса принтера.
Необходимо создать библиотеку DLL графики принтера. Эта библиотека DLL может выполняться как в пользовательском режиме, так и в режиме ядра, но предпочтителен пользовательский режим.
При создании кода в режиме ядра его необходимо протестировать с помощью средства проверки драйверов.
Необходимо предоставить процедуру установки на основе INF-файлов установки, как описано в разделе Установка и настройка драйверов принтера.
Весь пользовательский код драйвера должен быть повторно вдан в действие. Код пользовательского режима должен использовать объекты критически важных разделов (описано в документации по Windows SDK). Код в режиме ядра должен использовать семафоры (см. раздел EngCreateSemaphore и связанные функции).
Драйверы принтеров и пользовательские компоненты очереди очереди печати должны получать доступ к реестру только через интерфейсы, предоставляемые специально для этих драйверов и компонентов очереди печати, как описано в соответствующих разделах WDK.
Рекомендации по установке
Обычно для установки достаточно предоставить INF-файл, который может быть прочитан установщиком класса принтеров Майкрософт, когда пользователь вызывает мастер добавления принтера . Иногда также требуется пользовательский код установки (совместный установщик или установщик класса). Если необходимо создать пользовательский код установки, помните следующее:
Пользователь или код установки должны переводить сервер терминалов в режим установки. (Дополнительные сведения см. в документации по Microsoft Windows SDK.)
Не пытайтесь заменить системные файлы. Защита файлов Windows запрещает замену системных файлов.
Избегайте перезагрузки системы, насколько это возможно. Придерживайтесь приведенных ниже рекомендаций.
Не заменяйте файлы драйверов, которые не были изменены. Например, файлы, совместно используемые несколькими устройствами, не следует обновлять, если уже установлена самая последняя версия.
Если файл необходимо заменить, код установки должен выполнить действия по выгрузке старой версии и последующей загрузке новой версии (например, путем остановки службы драйверов, замены файла и перезапуска службы).
Требовать от пользователя выхода из системы, а затем повторного входа в систему предпочтительнее, чем перезагрузки системы.
Дополнительные сведения о совместных установщиках и установщиках классов см. в статье Написание установщиков классов и совместного установщика.
Перед написанием пользовательского кода установки важно ознакомиться с рекомендациями по программированию служб терминалов, приведенными в документации по Windows SDK.
Рекомендации по пользовательскому интерфейсу
Пользовательский код установки, выполняемый пользователем, может отображать пользовательский интерфейс.
Почти весь код драйвера принтера выполняется в контексте выполнения очереди печати и поэтому не может отображать пользовательский интерфейс. Пользовательские интерфейсы могут отображаться только библиотеками DLL интерфейса принтера и только в следующих функциях:
Функции DrvDevicePropertySheets и DrvDocumentPropertySheets , которые создают страницы свойств.
Функция DrvPrinterEvent , которая получает коды событий, определяющие события принтера. Функция может отображать пользовательский интерфейс только для PRINTER_EVENT_ADD_CONNECTION и кодов событий PRINTER_EVENT_DELETE_CONNECTION.
Весь остальной код драйвера принтера выполняется в контексте очереди очереди. В этом контексте вызов MessageBox или MessageBoxEx разрешен, но необходимо задать MB_SERVICE_NOTIFICATION. Эти функции описаны в документации windows SDK.