четверг, 21 октября 2021 г.

Проблемы с принтерами в Windows 10 после обновления KB5006670

 В октябре 2021 вышло обновление Windows 10 KB5006670, в которое вошли изменения диспетчера печати, призванные исправить проблемы, вызванные предыдущими обновлениями (теми, которые закрывали скандальную уязвимость Print Nightmare). К сожалению, это обновление также вызвало новые проблемы с общими принтерами.  В ситуациях, когда общий принтер установлен на машине с неподдерживаемой версией Windows (XP, 7) и используется на машине с обновленной Windows 10, печать стала выдавать ошибку "Принтер удален на сервере". Попытка удалить и заново установить притер также выдавала ошибку (код 0x00004cf и другие). Проблема в равной мере коснулась разных моделей принтеров: HP, Kyocera. Принтеров, подключенных как сетевые через Ethernet, она не коснулась.

Причины проблемы

Исследования с помощью Wireshark показали, что обновленный диспетчер печати пытается использовать аутентификацию NTLM при взаимодействии с общим принтером (ранее это взаимодействие проходило без какой-либо аутентификации). Для этого в запросе rpc bind устанавливается дополнительный параметр Auth type: NTLMSSP. Эта аутентификация проходит с ошибкой "Reject reason: Authentication type not recognized (8)".

На рисунке ниже приведен вид перехваченного пакета с ошибкой в WireShark:



Решение проблемы

Данная проблема обсуждалась на форуме bleepingcompurer. Одно из предложенных решений: запретить аутентификацию NTLM, благо этот протокол не самый безопасный и в доменных сетях есть лучшая альтернатива - Kerberos. В моем случае это не помогло, вероятно, Kerberos также оказался сломанным. Ниже приведены решения, которые у нас сработали.

Вариант 1

1. Добавить принтер как локальный, указав порт, допустим, LPT2, и выбрав "Использовать установленный драйвер".

2. Выполнить в командной строке команду: 

NET USE LPT2: "\\Computer\Printer" /PERSISTENT:YES

Почему этот способ работает, не понятно. Но сработал он только в схеме WinXP -> Windows 10. Для Windows 7 применить его не получилось: принтер устанавливается и настройки открываются, но печать выводит ошибку.

Вариант 2

Удалить обновление KB5006670:

wusa /uninstall /kb:5006670

Скрыть обновление через утилиту почему-то не удалось, поэтому это только временное решение. Но обновления можно отложить, и возможно Microsoft поправят проблему.


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