Охота за плохим драйвером принтера
На форумах и в группах новостей один из самых популярных советов, которые дают, когда сервер нестабилен, звучит так: «Замените все сторонние драйверы родными драйверами с компакт-диска ОС».
Если бы я получал доллар каждый раз, когда я даю этот совет (или слышу, как его дают), я бы водил действительно хорошую машину.
Когда начинается беда?
Это странная вещь с драйверами принтера. Чрезвычайно сложно смириться с тем, что драйверы могут быть стабильными в течение нескольких месяцев, а затем внезапно вызвать серьезный хаос на вашем сервере или ферме. После того, как вы последуете основному совету из моей сохранившейся статьи о печати, у вас, вероятно, будет наименьшее количество драйверов на вашем сервере, и те, которые у вас есть, тщательно протестированы. (Да, верно -> нет времени на этого чувака. Менеджеру нужно печатать сейчас, а не завтра)
Список проблем, которые может вызвать драйвер, довольно велик, но чтобы дать вам отправную точку, вот сводка известных ошибок, связанных с драйвером принтера:
0xA — IRQL_NOT_LESS_OR_EQUAL
0x50 — PAGE_FAULT_IN_NONPAGED_AREA
0xBE — ATTEMPTED_WRITE_TO_READONLY_MEMORY
0xC1 — SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
0xC4 — DRIVER_VERIFIER_DETECTED_VIOLATION
0xC6 — DRIVER_CAUGHT_MODIFYING_FREED_POOL
0xC7 — ТАЙМЕР_ИЛИ_DPC_INVALID
0xC9 — DRIVER_VERIFIER_IOMANAGER_VIOLATION
Если вы столкнулись с одной из вышеуказанных ошибок, начните убирать дом. (Подробности об очистке уточняются…)
И если вы думаете, что у вас не может быть этой проблемы, потому что вы используете Citrix UPDIII, подумайте еще раз. Даже сегодня некорректно работающие драйверы могут нарушить работу новой службы UPDIII CPSvc и привести к остановке печати. (Обычно это проявляется в том, что вам нужно перезапустить службу CPSvc, чтобы вернуться к работе)
Как установить и удалить драйвер
Вы, наверное, думаете: «Какой же это глупый заголовок абзаца». Как бы глупо это ни звучало, даже сегодня люди добавляют драйверы, устанавливая программу setup.exe принтера, а затем удаляя принтер, оставляя драйвер на сервере.
Моим личным предпочтением является драйвер на основе.inf, так как он сэкономит вам дополнительное программное обеспечение, которое вам, вероятно, не нужно на сервере. (Предполагая автоматически созданную печать, когда драйвер на сервере используется только для параметров пользовательского интерфейса для предварительной подготовки задания). Ради интереса, путь на сервер таков:
Пуск, Настройка, Принтеры, Файл, Свойства сервера, вкладка Драйверы. Добавить/удалить.
Оттуда вам нужно добавлять и удалять драйверы. Означает ли это, что при использовании этого метода моя система всегда чистая, скудная и скудная? Нет. Даже при удалении драйвера через это место драйвер все равно может оставить после себя мелкий беспорядок.
Сломать драйвер
Если у вас очень простой драйвер, установка драйвера выглядит следующим образом:
- Файл INF, из которого вы устанавливаете, копируется в папку c:windowsinf.
- Библиотеки DLL, поставляемые с драйвером, попадают в папку C:WINXPsystem32spooldriversw32x863.
- Информация о водителе записывается в:
HKLMSYSTEMCCSControlPrintEnvironmentsWindows NT x86DriversVersion-3printername
Как видите, выше ничего особенного не сказано, а если удалить драйвер через ту же вкладку, то все пропадет. Теоретически то есть.
Даже при установке из простого INF-файла вы не будете уверены, что это «так называемый» чистый драйвер.
Эти INF-файлы также могут поставляться с программным обеспечением для мониторинга этого принтера. И программное обеспечение для мониторинга НЕ удаляется при использовании описанного выше способа удаления драйвера. (Как это делается официально, все вам скажут)
Большинство драйверов принтеров добавят «Монитор печати» в качестве записи в реестр:
HKLMSystemCurrentControlSetControlPrintMonitorsимя_принтера
Теперь запись обычно просто относится к DLL, но представьте, что вы находитесь на этапе тестирования сервера и пробуете различные драйверы, чтобы увидеть, какой из них подходит и лучше всего работает с принтером вашего конечного пользователя. Затем добавьте их в список драйверов, которые будут добавлены и удалены через несколько месяцев.
Вы можете добавить серьезный мусор в свою подсистему печати.
Чистая система без каких-либо установленных драйверов будет иметь следующие ключи, которые НЕ следует удалять:
- Языковой монитор BJ
- Порт клиентского принтера
- Местный порт
- Языковой монитор PJL
- Стандартный порт TCP/IP
- USB-монитор
Некоторые другие драйверы могут добавить в вашу систему реальную службу мониторинга, даже при установке через.inf.
Lexmark и Dell (то же самое) известны тем, что добавили службу для мониторинга своего драйвера. Обязательно проверяйте список служб до и после добавления драйвера принтера, чтобы обнаружить его.
Защита вашей подсистемы печати
Итак, как вы изолируете это поведение водителя и сохраняете все как можно более чистым?
По сути, просто сделайте снимок вашей подсистемы печати, прежде чем добавлять в нее новый драйвер. Это может звучать как некоторая работа, и да, но как только вы узнаете необходимые шаги, это добавит всего 30 секунд к работе по добавлению нового драйвера принтера на ваш сервер.
- Первое, что нужно сделать, это остановить службу диспетчера очереди. Затем скопируйте фактические файлы драйверов из папки по умолчанию в резервную папку. Например:
скопируйте C:Windowssystem32spooldriversw32x863 c:ackupprntdrv - Второе, что нужно сделать, это скопировать ключи реестра, которые поставляются с этими драйверами.
В этом случае: HKLMSYSTEMCCSControlPrintEnvironmentsWindows NT x86DriversVersion-3.
И ключ HKLMSystemCurrentControlSetControlPrintMonitors - Запустите службу диспетчера очереди и добавьте новый драйвер обычным способом.
Как только это будет сделано, и пользователи вернутся к вам с жалобами на стабильность печати, просто остановите службу очереди печати, очистите 3 и два ключа реестра и восстановите резервную копию. Запустите службу диспетчера очереди, и все в порядке. (На самом деле вы избавились от пользователей, и это дает вам время, необходимое для выяснения того, что происходит с этим новым драйвером.)
Набор инструментов для исправления существующей среды
Некоторые из вас могут быть подрядчиками или консультантами, которых посылают к клиентам и часто просят исправить текущие проблемы. Готов поспорить, что первое, что вам будет предложено исправить, — это печать, а второе — это, вероятно, профили в сочетании с проблемами входа/выхода из системы. В этой статье я буду придерживаться печати.
У клиента, вероятно, будет огромный список ошибок, с которыми он сталкивался в прошлом. В этом списке вы найдете ошибки, связанные с проблемами службы принтера или диспетчера очереди печати, со ссылкой только на файл DLL. Что ж, удачи с этим небольшим кусочком информации. Вам нужен инструмент, который поможет вам подключить установленный драйвер на этом сервере к DLL, вызывающей проблемы. Если вы используете сервер Windows 2000, вам понадобится этот инструмент:
http://www.printingsupport.com/tools/pdmanager.exe
Если вы работаете на сервере Windows 2003, вам понадобится это:
http://www.printingsupport.com/tools/iPrintSearch.exe
Оба инструмента предоставят вам сведения о файле драйвера принтера, что позволит очень легко найти соответствие между плохой библиотекой DLL и драйвером, которому она принадлежит.
После того, как вы нашли свой драйвер-виновник и вам нужно удалить его с сервера, не используйте официальный способ через вкладку драйверов в настройках сервера печати. Это оставит слишком много мусора.
Kyocera создала инструмент для чистого удаления своих драйверов принтеров, но этот инструмент является универсальным и работает со всеми типами драйверов принтеров. Получите вашу копию удаления здесь.
Генеральная уборка
После того, как вы очистили окружение этого клиента, убедитесь, что оно осталось как можно более скудным и подлым. Консолидируйте драйверы на сервере, используя семейство драйверов и технологию сопоставления, чтобы свести к минимуму количество драйверов, необходимых на сервере. Вы будете удивлены небольшим количеством водителей, с которыми вы можете обойтись. Объясните заказчику результат провисания в управлении водителем. По возможности тестируйте драйверы перед их развертыванием в рабочей среде. Простая машина vmware для небольшого стресс-тестирования этих новых драйверов вполне подойдет.
Вывод
Все приведенные выше советы дадут вам дополнительную работу в начале, пытаясь освоиться. Но если вашу ферму преследуют странные проблемы с печатью, это может стоить потраченного времени. Базовая защита в сочетании с быстрым восстановлением подсистемы печати выиграет вам время, чтобы узнать, что происходит, и это будет не после часа просмотра, а в обычное рабочее время, наслаждаясь повседневной рутиной с горячей чашкой java.