标题: Win10提示"无法连接到Internet"时的Cache解决方案 创建: 2023-06-23 19:41 更新: 2024-04-25 08:25 链接: https://scz.617.cn/windows/202306231941.txt Win10右下角托盘区有时会出现一个小地球,提示"无法连接到Internet",即使你正 欢快地上着公网,仍有一定几率看到这个提示。一般来说不用理会,也不影响啥。但 是,出现该提示时,你的Microsoft Store就废了,无法下载安装应用、无法登录、 提示0x800704cf错误码;还会影响很多微软自己的网络应用,比如Skype、Office 365、Outlook、OneDrive等等;总的来说,微软的智障设计。 两周前我意识到这个智障设计影响到我时,仔细看了一下背后的机理,当时写了一篇 科普。但是,那篇科普给了一个错误结论,事实上,全面禁用NCSI探活,不但不能避 免智障小地球出现,还使得状态改出不能。后来通过逆向工程整明白了错误结论的源 头,故有此文。 首先,我已重写了那篇科普,以更加严谨的方式,参看: 《Network系列(4)--Windows网络探活》 https://scz.617.cn/network/202306101941.txt 其次,本文内容完整出现在前文中,此处单开一篇,只是为了聚焦。 NCSI探活自2008年起,为祸人间有15个年头了,你去放狗,能找到一大票同病相怜者。 这15年来,智障问题引出的扯淡解决方案如过江之鲫层出不穷,但小白们无所谓,某 次凑巧解决了,即算成功,TA们不打算也没能力真正、永久解决这个智障问题。 迄今为止,从专业角度评判,唯一一个广普有效解决方案: https://github.com/dantmnf/NCSIOverride 该方案有一些局限性,非专业人员很可能实施不下去。另一方面,专业人员可不直接 使用该项目,转用windbg达成目的,有很多殊途同归的方案,要点是人工设置 Capability。说到这里,我也挺奇怪的,这么多年过去,对ncsi.dll进行过逆向工程 并愿意分享一种解决方案的人,居然只有前述项目的作者,赞美之余颇为不解。 我和云海前段时间也对ncsi.dll进行了逆向工程,windbg的种种方案不提也罢。在此 过程中,我们意识到,「公网可达状态」有持久化保存,至少在一定时间范围内持久 化,使得重启OS后即便不探活也判定公网可达。云海唆使我找出Cache所在,或许可 在不依赖windbg的情况下消掉黄三角或小地球,后来我真找到了。介绍一种Cache解 决方案,regedit查看 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Cache 或者命令行查看 reg.exe query "HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Cache" reg.exe query "HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Cache" /v "OpportunisticInternetGatewaysV4" 若Cache子键下有OpportunisticInternetGatewaysV4键值,修改该键值数据最后4字 节为"ff ff ff 00",然后立即以管理员身份执行: tasklist /svc /fi "services eq NlaSvc" taskkill /f /pid 必须立即杀一次服务进程,杀掉NlaSvc服务进程与正常停止NlaSvc服务进程不等价。 LTSB版Win10在杀服务进程之后,若系统不正常,可能需要重要重启OS恢复;非LTSB 版Win10无需重启OS。 若黄三角或小地球消失,可重启OS验证持久化效果。Win11可能不是NlaSvc服务,我 没Win11,只测了Win10。 若OpportunisticInternetGatewaysV4键值不存在,可手工创建,解码如下: -------------------------------------------------------------------------- 06 // 网关MAC地址长度 ?? ?? ?? ?? ?? ?? // 网关MAC地址 ?? ?? // WIFI名字长度,为0,表示没有WIFI,是有线网卡 ...... // WIFI名字,宽字符串 ff ff ff 00 // -------------------------------------------------------------------------- 当需要手工创建OpportunisticInternetGatewaysV4键值时,对非专业人员太难了。 若想撤销Cache方案,最简办法是删掉OpportunisticInternetGatewaysV4键值: reg.exe delete "HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Cache" /v "OpportunisticInternetGatewaysV4" /f Cache方案的优势是,即使全面禁用探活,即使根本没有任何探活动作,仍将判定公 网可达,重启OS后仍然有效。对于误出现的黄三角或小地球,Cache方案无须重启OS 即可立即生效,无须禁用、启用任何网络接口,无须切换WIFI,无须断网重连,不影 响任何已存在的TCP长连接。 Cache方案只是解决误报"无法连接到Internet"带来的尴尬局面,不解决真正的公网 不可达局面。Cache方案基于这样的假设,实际公网可达,只是出现智障小地球。 我个人最爱的方案,「全面禁用主动被动探活 + 启用Cache方案」,真正的一劳永逸, 哪怕实际公网不可达,也不再出现黄三角或小地球。当然,真遇上网络问题了,专业 人员有专业排查手段,无所谓。 Cache方案特别适合专业人员实施,专业人员如在实施过程中遭遇困难,可联系我, 我愿意协助你一劳永逸解决这个智障问题。小白不要联系我,有些实施环节要求基本 技能,我完全没有信心远程指导小白成功。 Cache方案可以写程序一条龙式完成,那样自然小白化,我没这动力,愿意做雷锋的, 不妨一试。 此法测试周期不够,日后若有变化,再来更新本文。 2023-07-08 微软最近的升级好像改变了什么,上述设置重启后不会自动生效,必须杀一次NlaSvc 服务才生效,原因不明。无线网络无此变化,有线网络有此变化,待观察。