Падение службы диспетчера печати (ака print spooler) вследствие ошибок в драйверах печати является существенной проблемой ОС семейства Windows. Проблема усугубляется тем, что ошибки с драйверами печати довольно трудно диагностировать, а выявление проблемного драйвера может стать головной болью для системного администратора. Самое плохое что, сбой драйвера печати принтера, загруженного в процесс очереди печати, вызывал сбой самого спулера, в результате в результате вся система печати сервера перестает работать, и эти последствия затрагивают большое количество пользователей и принтеров. Однако вместе с выходом Windows 2008 R2 и Windows 7 все эти проблемы должны остаться в прошлом, ведь в этих ОС появилась технология Printer Driver Isolation (Изоляции драйверов принтеров).
Как следует из названия, технология Printer Driver Isolation (PDI) реализует изоляцию драйверов принтеров в отдельные процессы, отделенные от процесса диспетчера печати (spoolsv.exe). Поэтому, если случается любая ошибка в драйвере принтера, то она затрагивает только процесс, которые подгрузил этот драйвер, а не процесс spoolsv.exe, тем самым предотвращая его падение и улучшая надежность сервера печати. Кроме того, эта новая функция обеспечивает возможность изоляции новых версий драйверов с целью тестирования или отладки, а также возможность выявить сбойный драйвер.
Процесс, осуществляющий загрузку драйверов, которые должны работать изолированно от «Диспетчера Печати», называется PrintIsolationHost.exe.
Существует три режима работы технологии изоляции драйверов:
- None – Драйвера принтеров загружаются процессам диспетчера печати (spooler), т.е. в этом режиме система работает как обычно
- Shared – Драйвера настроены на работу с одним общим экземпляром процесса PrintIsolationHost.exe, отделенного от процесса spoolsv.exe. Это режим работы по-умолчанию.
- Isolated – Каждый драйвер принтера настроен на использование своего собственного экземпляра процесса PrintIsolationHost.exe.
Чтобы проверить, поддерживает ли драйвер принтера технологию PDI: перейдите в следующую ветку реестра.
HKLMSYSTEMCurrentControlSetControlPrintEnvironments<environment>DriversVersion-3<driver>PrinterDriverAttributes
Возможные значения:
0: Драйвер не поддерживает PDI
2: Драйвер принтера поддерживает PDI
Если же значение отсутствует, значит оно равно 0, и драйвер PDI не поддерживает
Как изменить режим работы Printer Driver Isolation
Есть несколько способов настроить режим работы режима изоляции драйверов печати:
- Конфигурация с помощью INF –файла драйвера печати
- Консоль Print Management Console (PMC)
- Групповые политики
INF файл драйвера печати
С помощью inf файла драйвера принтера можно определить, поддерживает ли драйвер PDI или нет. Этот inf файл содержит ключ DriverIsolation , который определяет поддержку PDI. Соответственно, если значение этого параметра 0 , значит данный драйвер PDI не поддерживает.
Консоль Print Management (PMC)
С помощью новой консоли управления принтерами (PMC) можно достаточно просто управлять изоляцией драйверов. Если открыть консоль PMC и перейти в раздел драйверов, то в правой панели можно увидеть список установленных в системе драйверов, а в колонке Driver Isolation будет отображаться режим работы PDI драйвера принтера.
Чтобы изменить режим работы драйвера, нужно щелкнуть правой кнопкой по нужному драйверу и выбрать опцию ‘ Set Driver Isolation ‘. Доступны следующие опции:
- None
- Shared
- Isolated
- System Default (None)
Примечания:
- Опция System Default – означает, что драйвер работает в соответствии со своими стандартными настройками или настройками групповой политики.
- Также если групповая политика ‘Execute Print drivers in isolated processes’ отключена (Disabled), тогда режим изоляции PDI поменять не получится.
Групповые политики, позволяющие управлять изоляцией драйверов
Существует две настройки групповой политики, позволяющие настроить режим изоляции драйверов принтеров. Найти их можно в разделе:
Computer ConfigurationAdministrative TemplatesPrinters.
Называются они:
- Execute print drivers in isolated processes (Выполнять драйверы принтеров в изолированных процессах)
- Override print driver execution compatibility setting reported by print driver (Переопределить параметр совместимости выполнения драйвера печати)
Политика : Execute print drivers in isolate processes
Настройки этой политики определяют будут ли драйвера принтера выполняться в одном или отдельных процессах. Если драйвера принтеров загружены изолированным процессом (или процессами), то любой сбой в драйвере печати не приведет к падению службы Print Spooler.
В том случае если вы активировали или не настраивали данную политику, Диспетчер печати будет выполнять драйвера в изолированном процессе.
Если вы отключите данную политику, то драйвера принтеров будут исполняться в процессе диспетчера печати (как в версиях Windows XP/2003 и более ранних версиях ОС).
Политика : Override print driver execution compatibility setting reported by print driver
Политика определяет, должен ли Диспетчер печати переопределять режим работы PDI, заданный в драйвере принтера. Т.е. политика активирует выполнение драйверов в изолированном процессе, даже если драйвер принтера не совместим.
Если активировать эту политику, то спулер печати будет игнорировать флаг совместимости, заданный для драйвера принтера.
Если отключить или не настраивать эту политику, print spooler будет использовать тот режим изоляции, который задан по-умолчанию в драйвере принтера.
Помимо технологии Printer Driver Isolation в Windows 7 и Windows 2008 появилась еще очень удобная технология, позволяющая существенно облегчить работы по управлению драйверами печати на терминальных серверах. Познакомится с ней можно в статье Easy Print в Windows 2008 Server