Изоляция драйвера принтера

Важно!

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

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

Изоляция драйвера принтера повышает надежность службы печати Windows, позволяя драйверам принтера выполняться в процессах, которые отделены от процесса, в котором выполняется очередь печати.

Поддержка изоляции драйвера принтера реализована в операционных системах Windows 7, Windows Server 2008 R2 и более поздних версий.

Начиная с Windows 7 и Windows Server 2008 R2, драйвер принтера для папки "Входящие" должен поддерживать изоляцию драйвера принтера и иметь возможность выполняться в изолированном процессе.

В предыдущих версиях Windows драйверы принтера всегда запускались в том же процессе, что и диспетчер очереди печати. Компоненты драйвера принтера, которые выполнялись в процессе очереди очереди, включали следующее:

  • Модули конфигурации драйвера печати

  • Процессоры печати

  • Модули отрисовки

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

Начиная с Windows 7 и Windows Server 2008 R2, администратор может настроить драйвер принтера для запуска в изолированном процессе, отдельном от процесса очереди очереди. Изолируя драйвер, администратор может предотвратить остановку службы печати из-за сбоя в компоненте драйвера.

Дополнительные сведения о функциях очереди очереди см. в разделе Функции и структуры компонентов очереди очереди.

Поддержка изоляции драйверов в INF-файлах

По умолчанию, если INF-файл, устанавливающий драйвер принтера, не указывает, что драйвер поддерживает изоляцию драйвера, установщик класса принтера настраивает драйвер для запуска в процессе очереди очереди. Однако если INF-файл указывает, что драйвер поддерживает изоляцию драйвера, установщик настраивает драйвер для запуска в изолированном процессе. Администратор может переопределить эти параметры конфигурации и указать для каждого драйвера, следует ли запускать драйвер в процессе очереди очереди или в изолированном процессе.

Для поддержки изоляции драйвера INF-файл, устанавливающий драйвер принтера, может использовать ключевое слово DriverIsolation , чтобы указать, поддерживает ли драйвер изоляцию драйвера принтера. Параметр DriverIsolation=2 указывает, что драйвер поддерживает изоляцию драйвера. Параметр DriverIsolation=0 указывает, что драйвер не поддерживает изоляцию драйвера. Пропуск ключевого слова DriverIsolation в INF-файле имеет тот же эффект, что и параметр DriverIsolation=0.

Функции очереди очереди для параметров изоляции драйверов

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

Имя функции Операция
GetPrinterDataEx Получение параметров изоляции драйвера для принтера.
SetPrinterDataEx Задайте параметры изоляции драйвера для принтера.
EnumPrinterDataEx Перечисление параметров изоляции драйвера для принтера.
FindFirstPrinterChangeNotification, FindNextPrinterChangeNotification Запрашивать уведомления об изменениях параметров изоляции драйвера для принтера.

Формат данных выглядит следующим образом:

  • Драйвер в каждой группе отделяется по "\"

  • Каждая группа драйверов отделяется "\\"

Первая группа загружает драйвер в процессы очереди очереди. Каждая последующая группа загружает драйверы в изолированные процессы для каждой группы. Вторая группа считается общей группой, в которую по умолчанию загружаются другие драйверы, поддерживающие изоляцию.

Настройка режима изоляции драйвера с помощью администрирования

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

Режим изоляции драйвера Значение
Совмещаемая блокировка Запустите драйвер в процессе, который совместно используется с другими драйверами принтера, но отделен от процесса очереди очереди печати.
Isolated Запустите драйвер в процессе, который отделен от процесса очереди очереди и не используется совместно с другими драйверами принтера.
Нет Запустите драйвер в процессе очереди очереди.

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

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

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

На следующей диаграмме показана схема принятия решений для выбора режима изоляции драйвера:

блок-схема для выбора режима изоляции драйвера.

Функции очереди очереди, разрешенные при изоляции драйвера

В режиме изоляции драйвера допускаются только определенные функции.

функции Spoolss.dll

Следующие функции экспортируются spoolss.dll и доступны для подключаемых модулей очереди, связываясь с spoolss.lib.

Функции WinSpool.drv

Следующие функции экспортируются с помощью winspool.drv и доступны для подключаемых модулей очереди, связываясь с Winspool.h.

См. также раздел

Функции и структуры компонентов очереди очереди