Win10打过10.14补丁之后网络打印机访问异常
2021-11-28 01:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:15 收藏

创建: 2021-11-26 15:14
http://scz.617.cn:8/windows/202111261514.txt

Win10打过10.14补丁之后网络打印机访问异常,这事很多吐槽的,一堆反馈说,应该是KB5006670导致的,据说卸载即可恢复打印

wusa /uninstall /kb:5006670

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

C:\Windows\system32\win32spl.dll

也有说恢复这个文件的

C:\Windows\system32\mscms.dll

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

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

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

昨天云海给出一个只对中阶或以上水平技术人员有效的热Patch方案,测试有效,帮他记录一下。

Guest环境如下

Win10企业版2016 LTSB 1607(OS Build 14393.4704)

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
00007fff`73bbbb19 ff1569720800    call    qword ptr [win32spl!_imp_RpcBindingSetAuthInfoExW (00007fff`73c42d88)]
00007fff`73bbbb1f 8bd8            mov     ebx,eax

$ 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

Patch

eb win32spl!STRING_HANDLE_bind+0x169 31 c0 eb 02

> u win32spl!STRING_HANDLE_bind+0x169 win32spl!STRING_HANDLE_bind+0x16f
00007fff`

73bbbb19 31c0            xor     eax,eax
00007fff`73bbbb1b eb02            jmp     win32spl!STRING_HANDLE_bind+0x16f (00007fff`73bbbb1f)
00007fff`73bbbb1d 0800            or      byte ptr [rax],al
00007fff`
73bbbb1f 8bd8            mov     ebx,eax

也可以用断点热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

Wireshark抓包看相关报文加强理解热Patch的效果,但那些MS/DCE RPC协议解码更专业,不在此多言。

云海这个热Patch方案出现得太晚,我都U盘打印好几轮了。他说12月的微软补丁将拨乱反正,恢复Win10客户端网络打印能力,拭目以待。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzMjQyMDE3Ng==&mid=2247484984&idx=1&sn=3a637e1d3710b8a2509ced690dabfb95&chksm=fab2c507cdc54c114a6accf52e9c9ac33e782696b47d09a7880d52c8e485fa423e33c9fb2b39#rd
如有侵权请联系:admin#unsafe.sh