Win10打过10.14补丁之后网络打印机访问异常

Win10打过10.14补丁之后网络打印机访问异常,这事很多吐槽的

https://www.bleepingcomputer.com/news/microsoft/new-windows-10-kb5006670-update-breaks-network-printing/
https://www.bleepingcomputer.com/news/microsoft/how-to-fix-the-windows-0x0000011b-network-printing-error/
https://www.techadvisor.com/how-to/windows/windows-10-fix-network-printer-bug-3809578/

一堆反馈说,应该是KB5006670导致的,据说卸载即可恢复打印

wusa /uninstall /kb:5006670

据说恢复这个文件到9月版本亦可

C:\Windows\system32\win32spl.dll

也有说恢复这个文件的

C:\Windows\system32\mscms.dll

据说removing and reinstalling printers on servers,可以解决客户端的故障,而不用卸载客户端补丁。

在客户端试了这两个注册表项,没啥用,难道要在服务端用?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\CopyFilesPolicy]
@=”1″

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print]
“RpcAuthnLevelPrivacyEnabled”=dword:00000000

上面是10月中的混乱场面回顾。

11月的补丁也没有拨乱反正,这一个多月来都是拿U盘去打印服务器上本地打印,完全没法网络打印。

给出一个只对中阶或以上水平技术人员有效的热Patch方案,测试有效。

Guest环境如下

spoolsv.exe

10.0.14393.4704 (rs1_release.211004-1917)

win32spl.dll

10.0.14393.4704 (rs1_release.211004-1917)

找出Win10客户端打印服务进程PID

$ tasklist /svc /fi “services eq Spooler”

Image Name PID Services
========================= ========
spoolsv.exe 1820 Spooler

spoolsv(1820)会加载win32spl.dll。网络打印时,客户端这边会过

win32spl!STRING_HANDLE_bind

10.14补丁在该函数中新增调用如下函数

win32spl!_imp_RpcBindingSetAuthInfoExW
RPCRT4!RpcBindingSetAuthInfoExW

热Patch跳过对上述函数的调用,即可恢复客户端的网络打印能力,无需重启客户端OS或打印服务,无需重启服务端OS或打印服务,无需卸载KB5006670,立即生效。下面是热Patch方案中的一种

cdb调试spoolsv(1820)

u win32spl!STRING_HANDLE_bind+0x169 win32spl!STRING_HANDLE_bind+0x16f
00007fff73bbbb19 ff1569720800 call qword ptr [win32spl!_imp_RpcBindingSetAuthInfoExW (00007fff73c42d88)]
00007fff`73bbbb1f 8bd8 mov ebx,eax

db win32spl!STRING_HANDLE_bind+0x169 win32spl!STRING_HANDLE_bind+0x169+5+2
00007fff`73bbbb19 31 c0 eb 02 08 00 8b d8 1…….

$ rasm2 -a x86 -b 64 -s intel -o 0x7fff73bbbb19 “xor eax,eax;jmp 0x7fff73bbbb1f”
31c0eb02

$ rasm2 -a x86 -b 64 -s intel -o 0x7fff73bbbb19 -D 31c0eb02
0x7fff73bbbb19 2 31c0 xor eax, eax
0x7fff73bbbb1b 2 eb02 jmp 0x7fff73bbbb1f

u win32spl!STRING_HANDLE_bind+0x169 win32spl!STRING_HANDLE_bind+0x16f
00007fff73bbbb19 31c0 xor eax,eax 00007fff73bbbb1b eb02 jmp win32spl!STRING_HANDLE_bind+0x16f (00007fff73bbbb1f) 00007fff73bbbb1d 0800 or byte ptr [rax],al
00007fff`73bbbb1f 8bd8 mov ebx,eax

Patch

eb win32spl!STRING_HANDLE_bind+0x169 31 c0 eb 02

UnPatch

eb win32spl!STRING_HANDLE_bind+0x169 ff 15 69 72

也可以用断点热Patch

ba e1 win32spl!STRING_HANDLE_bind+0x169 “r eax=0;r rip=win32spl!STRING_HANDLE_bind+0x16f;gc”

热Patch后网络打印恢复正常,cdb中看到依次加载

C:\Windows\System32\ntprint.dll
C:\Windows\System32\mscms.dll
C:\Windows\system32\spool\DRIVERS\x64\3\HP1100SD.DLL

版权声明

本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author

C/ASM程序员

Leave Comment