局域网里两台电脑互相传文件,最省事的办法从来不是插U盘,也不是发微信压缩包,而是开一个共享文件夹让对面直接读写。可这套用了几十年的老机制,偏偏是最容易出幺蛾子的地方:昨天还好好的,今天主力机一重启,另一台就提示"你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问";有的人在"网络"里连对方电脑的影子都看不到;有的人明明输对了账号密码,却死活卡在"用户名或密码不正确";还有人拿 iPhone 或 Mac 去连共享目录,输入地址后转圈半天最后报错。这些现象看起来千奇百怪,根子上其实就跑不出三层:网络能不能通、SMB 协议能不能谈拢、权限有没有放行。下面我按自己这几年帮人收拾这类问题的顺序,把共享文件打不开的排查逻辑、动手步骤、参数取舍和踩过的坑完整讲一遍,从 Win10、Win11 之间的互访,到手机平板连 SMB,再到关掉密码保护共享的正确姿势,都会给到可以直接抄的操作。不管你是完全没碰过共享的小白,还是已经被"找不到网络路径"折腾到想砸键盘的老手,按这个顺序走一遍,绝大多数问题都能当场定位。
1. 共享打不开先别急着重装系统,先分清坏在哪一层
很多人一遇到共享打不开就开始乱试:关防火墙、改注册表、重装网卡驱动、甚至重装系统,结果问题依旧。原因很简单——共享访问是一条链子,链子上任何一环断了表现都差不多,但修法完全不同。先花五分钟把故障归到某一层,后面就是按图索骥,而不是碰运气。
1.1 三层模型:连通层、协议层、权限层
连通层管的是"两台机器能不能互相看到对方"。判断方法极其简单:在客户机上打开命令行,直接ping对方的 IP。如果 ping 通,说明物理链路、IP 地址、子网掩码、路由这一层没问题;如果 ping 不通,那后面所有关于共享权限、SMB 版本的讨论都是空谈,先把网络本身弄通再说。这里有个细节要提醒:很多家庭和小工作室的路由器开了"AP 隔离"或者把设备划到了不同的访客网络,同一个 WiFi 名字下两台机器其实互不可见,这种情况下 ping 都是超时,你在系统里怎么改都没用。
协议层管的是"两台机器能不能用同一种语言对话"。Windows 之间共享走的是SMB 协议,监听在TCP 445端口,极老的设备还会用到 137 到 139 这几个 NetBIOS 端口。如果 TCP 445 被防火墙拦掉、或者一端只肯说 SMB1 而另一端早就把 SMB1 卸了,就会出现"ping 得通,但连不上共享"这种最让人抓狂的状态。前阵子热词里提到的"iPhone SMB 连接电脑共享文件失败",八成也是栽在这一层:手机端只支持 SMB2 及以上,如果服务端设置得不对劲,或者账号格式写错,就直接报连接失败。
权限层管的是"进来了之后让你看多少"。文件共享这里有两道门锁,一道是共享权限,一道是NTFS 权限,两道必须同时放行,缺一个就是"拒绝访问"。新手最容易犯的错是只改了其中一道,然后反复确认"我明明给了完全控制啊",其实另一道还锁着。
1.2 用现象反推层级,比盲目试错快十倍
我把自己遇到过的现象整理成了下面这张对照表,你对着现象找层级,基本不会跑偏。
| 现象 | 大概率所在层级 | 优先检查项 |
|---|---|---|
| ping IP 都超时 | 连通层 | WiFi 隔离、网段、网线、IP 冲突 |
| ping 通,但提示"找不到网络路径"(0x80070035) | 协议层/名称解析 | 445 端口、防火墙、主机名解析 |
| 能连上但提示"安全策略阻止未经身份验证的来宾访问" | 权限层/策略 | 来宾账户、密码保护共享、凭据 |
| 提示"用户名或密码不正确"(0x8007052E) | 权限层/凭据 | 账号格式、大小写、缓存密码 |
| 网络里看不到对方电脑 | 发现层 | 网络配置文件、发现服务、防火墙 |
| 昨天能连今天不能连 | 环境变化 | 重启后网络被识别成公用、DHCP 换 IP |
| 手机连不上,电脑能连 | 协议层 | SMB2/3 开关、账号格式、签名要求 |
提示:表格里的错误码建议记一下。0x80070035 和 0x80070043 这两个大概率指向协议和名称解析,0x8007052E 和 0x800704F1 指向账号策略,分清楚了能省掉大量瞎试的时间。
顺带说一句,很多人喜欢在"运行"里输\\电脑名去访问,这个做法在连通层没问题的时候当然可以,但一旦主机名解析出问题(比如没开 LLMNR、没走 NetBIOS 广播、DNS 里又没记录),就会直接失败。所以我个人排查时的第一原则是:先用\\IP地址测,通不过再去看名称解析,通过了再回头修主机名访问。这样能把变量一个个拆开,而不是同时怀疑十个地方。
2. 让两台电脑先互相看得见:网络发现与防火墙那点事
连通没问题、IP 也能 ping 通,但"网络"里就是没有对方电脑的图标,这种情况在 Win10 和 Win11 上极其常见。它影响的不只是"看着难受",还会连带影响到共享的自动发现和浏览,尤其对手机端、Mac 端来说,很多客户端是靠广播去发现主机的,发现不了就压根连不上。
2.1 网络配置文件必须是"专用网络",这一步九成人会忽略
Windows 对每个网络连接都维护一个"网络配置文件",分公用和专用两种。选成"公用"时,系统会默认把网络发现和文件共享全部关死,理由是在咖啡厅、机场这种环境里不该让别人看到你的机器。问题是很多家用路由器、或者插上手机热点之后,系统会自作主张把网络认成"公用",于是昨天还好好的共享今天就崩了。
改法很简单:打开设置 - 网络和 Internet - 以太网(或 WLAN),点开当前连接,把网络配置文件从"公用"切成"专用"。Win10 的老路径是设置 - 网络和 Internet - 状态 - 更改连接属性,位置略有不同但意思一样。切完之后最好重启一次文件资源管理器,或者干脆注销重登,让发现服务重新广播。我遇到过不止一次,客户抱怨"我们是一个办公室的局域网凭什么算公用",其实 Windows 判断依据是网关地址和设备指纹,不是一个"看起来像公司"就能决定的,手动切过去最省事。
还有一个隐藏坑:如果你机器上同时有有线网卡和无线网卡,还开了虚拟机虚拟网卡,那么"网络"里可能同时存在好几个连接,每个都有自己的配置文件。必须确保你实际用来通信的那张网卡是"专用",改错网卡等于没改。
2.2 网络发现和文件共享开关,别只开一半
切成专用网络之后,进控制面板 - 网络和共享中心 - 更改高级共享设置,会看到当前配置文件下面有一串开关:
- 网络发现:开启。它管的是"我能不能看到别人、别人能不能看到我"。
- 文件和打印机共享:开启。它管的是"我愿不愿意把共享的文件夹暴露出去"。
- 公用文件夹共享:按需。这个开关影响的是
\\本机IP\Users\Public这类系统自带共享。 - 密码保护的共享:这是个大坑,后面单独讲。
很多人只开了"文件和打印机共享",忘了开"网络发现",结果就是共享地址能直接访问、但网络列表里空空如也。这两个开关是两码事,别混。
再说服务。网络发现在 Win10/Win11 上依赖两个后台服务:Function Discovery Provider Host(fdPHost)和Function Discovery Resource Publication(FDResPub),再加上SSDP Discovery和UPnP Device Host。这几个服务默认是"手动"启动,正常情况会被触发拉起,但在一些被优化软件"精简"过的系统上会被直接禁用,网络列表就永远是空的。打开services.msc,把这四个服务确认一遍,没启动的手动启动,启动类型如果被改成了"禁用",改回"手动"(FDResPub 可以设成"自动(延迟启动)")。
顺便提一个已经过时的东西:Computer Browser服务。它以前负责维护网上邻居列表,从 Win10 开始微软就不再默认安装它了,网上那些"启动 Computer Browser 解决网络看不到"的老教程,在新系统上照着做是找不到这个服务的,别浪费时间。
2.3 防火墙里那几个必须放行的入站规则
防火墙是另一个高频背锅位。我见过有人为了图快直接把防火墙整个关掉,这做法在临时测试时确实能快速验证问题,但绝对不能长期挂着,尤其在笔记本经常连外面的 WiFi 的情况下。
正确的做法是只放行必要规则。打开Windows Defender 防火墙 - 高级设置 - 入站规则,找下面这几组,确保在你当前网络配置文件下是"已启用":
- 文件和打印机共享(SMB-In):TCP 445。核心中的核心,几乎所有共享访问都靠它。
- 文件和打印机共享(NB-Session-In):TCP 139。老设备要用。
- 文件和打印机共享(NB-Name-In)、(NB-Datagram-In):UDP 137、138。NetBIOS 名称广播,老式发现要用。
- 网络发现(LLMNR-UDP-In):UDP 5355。
- 网络发现(SSDP-In)、(UPnP-In):UDP 1900 和 TCP 2869,负责设备发现广播。
还有个常见的三方因素:装了第三方杀毒或"安全卫士"类软件,它们会自带一套网络防护模块,把 445 悄悄拦掉,而 Windows 防火墙看起来一切正常。排查时如果发现规则都开着还是不通,临时退出这类软件再试一次,能省下大量排查时间。
注意:临时关闭防火墙只适合用来做"是/不是防火墙问题"的二分验证,验证完立刻打开,不要养成长期关闭的习惯。
2.4 一条命令快速验证 445 端口通不通
与其反复猜,不如直接测端口。在客户机上开 PowerShell,用下面这条:
Test-NetConnection -ComputerName 192.168.1.20 -Port 445把 IP 换成服务端那台机器的实际地址。看输出里的TcpTestSucceeded,如果是True,说明 445 端口通,问题不在这层,往权限和协议上找;如果是False,那就是被防火墙、安全软件或者对端服务没起来挡住了。老系统上用telnet 192.168.1.20 445也行,能连上就是黑屏一片,连不上就是报连接失败,直白得很。
3. 共享权限和 NTFS 权限:两道门锁必须同时开
这是共享问题里最容易被误解的部分。我见过太多人理直气壮地说"我共享权限给了 Everyone 完全控制,怎么还提示拒绝访问",答案就在另一道门锁上。
3.1 用"小区大门"和"入户门"理解两道权限
把共享权限想成小区大门,NTFS 权限想成你家的入户门。共享权限决定外人能不能进小区、能进到哪栋楼;NTFS 权限决定进了楼之后能不能开你家门。两道门是串联关系,任何一道拒绝,最终结果就是拒绝;两道都允许,才能进出。所以共享权限给到完全控制,但 NTFS 里那个用户压根没被列进去,或者被显式拒绝了,一样是"拒绝访问"。
这个设计不是微软故意找麻烦,而是为了灵活性:同一个文件夹你可以共享给全公司,但里面某个子目录通过 NTFS 单独锁给财务组。理解了这个逻辑,排查时就不会只盯着一处改。
| 对比项 | 共享权限 | NTFS 权限 |
|---|---|---|
| 作用范围 | 仅通过网络访问时生效 | 本机登录和网络访问都生效 |
| 生效条件 | 取交集,严者优先 | 取交集,严者优先 |
| 常见级别 | 读取、更改、完全控制 | 读取、修改、写入、完全控制等 |
| 是否支持继承 | 不支持 | 支持,从父目录继承 |
| 推荐做法 | 给 Everyone 完全控制,靠 NTFS 精细控制 | 按用户组精确分配 |
我个人习惯的做法是:共享权限这一层放宽,直接给 Everyone 完全控制,然后所有精细控制全放在 NTFS 权限上。理由很实在——共享权限那一层的界面又难用又不支持继承,改起来容易乱;NTFS 权限有继承、有"有效权限"查看工具,还能直接对应到用户组,管理起来清爽得多。这是很多运维的同款习惯,不是唯一正确解,但确实少踩坑。
3.2 建一个干净共享的标准动作
不想以后反复返工的话,建共享时按这个顺序走:
第一步,在服务端建一个专用文件夹,比如D:\Share,不要直接共享整个 D 盘或者整个用户目录。共享盘根目录带来的权限扩散问题,后面收拾起来非常痛苦。
第二步,右键文件夹 -属性 - 共享 - 高级共享,勾选"共享此文件夹",共享名建议用纯英文,别用中文和空格。这里有个细节:共享名和文件夹名可以不同,但对手机端和一些老客户端来说,路径里有中文、有空格很容易出问题,纯英文加下划线最稳。
第三步,点"权限",删掉默认的 Everyone 或者保留都行,按 3.1 的思路,我一般直接给 Everyone 完全控制,然后下一步去 NTFS 里做文章。
第四步,切到安全标签页,点"编辑",把你需要授权的那台电脑上的账号加进去。如果两台机器不在同一个域里,也没有微软账户统一登录,那就得在服务端本机建一个同名同密码的账号,或者用服务端已有的账号。这一步是"无密码共享"和"跨机访问"能不能成的关键,后面细说。
第五步,授予 NTFS 权限。只想让对方读文件就给"读取和执行"加"读取";要能改、能删、能新建就给"修改"。除非确实需要改权限和取得所有权,否则不用给"完全控制"。
提示:改完权限后,如果客户机上还是提示拒绝,先在客户机上执行
net use * /delete /y清掉旧会话再重连。Windows 会缓存你上一次的连接身份,权限改了它也可能还拿着旧令牌在敲门。
3.3 无密码共享到底怎么写,才不会踩坑
"电脑共享文件不设置密码"是搜索量很高的需求,家庭环境里确实没必要每次输密码。做法有两个方向,但坑也不少。
方向一:开启来宾账户并关闭密码保护的共享。进入控制面板 - 网络和共享中心 - 更改高级共享设置,在"所有网络"分组里找到"密码保护的共享",选"关闭密码保护的共享"。这一步会让系统把 Guest 放出来用于网络访问。同时在计算机管理 - 本地用户和组 - 用户里,确认 Guest 账户没被禁用,然后在共享的 NTFS 权限里把 Guest 或 Everyone 加进去。
方向二:保留一个专用账号但设置成空密码或简单密码,并且在组策略里放开"空密码限制本地账户仅限控制台登录"。
这里有个必须知道的变化:从 Windows 10 1709 开始,微软默认关闭了 SMB 客户端的来宾(Guest)访问,理由是安全风险。所以哪怕服务端把 Guest 开得妥妥的,客户机去连的时候还是会报那句"你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问"。解决办法是在客户机(注意是访问方,不是提供方)上放开:
# 以管理员身份运行 PowerShell Set-SmbClientConfiguration -EnableInsecureGuestLogons $true或者走注册表,把HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters下的AllowInsecureGuestAuth设成1(DWORD)。组策略路径是计算机配置 - 管理模板 - 网络 - Lanman 工作站 - 启用不安全的来宾登录,设为"已启用"。
注意:这两项都是明确写着"不安全"的开关,它意味着任何人都能走进你的共享目录。所以务必只在完全可信的家庭局域网里用,笔记本出门连公共 WiFi 之前记得关回来。真要在小办公室里长期共享,我更推荐建一个专门的共享账号设个像样的密码,把密码记住在凭据管理器里,一次输入以后都免密,安全性和方便性兼顾。
3.4 账号密码没问题却总提示错误的几种情况
有时候密码你闭着眼睛都能敲对,系统非说不对。常见的几个原因:
- 用的是本机账号,但没输成对端机器上的账号。跨机访问用的必须是提供共享那台机器上的账号,格式是
对端计算机名\用户名或者对端IP\用户名,如果你只输用户名,Windows 可能拿本机同名账号去认证,自然失败。 - 微软账户登录的机器。Win10/Win11 用微软账户登录时,本地会有一个截断过的用户名,登录共享要用微软账户的完整邮箱和对应密码,或者干脆在服务端建一个纯本地账号专门用来共享。
- 账号被禁用或密码过期。在服务端
计算机管理里确认账号状态。 - 凭据管理器里存着旧密码,系统优先用旧的,改过密码之后就一直失败。这个单独在第 5 节讲。
4. SMB 协议版本与签名加密:新系统连老设备最常见的坎
这一层是最容易被忽略的,因为它平时不出问题,一旦出问题就是"ping 通了、权限也给了、密码也对,但就是连不上"。
4.1 SMB1 的退场造成的历史遗留问题
SMB 协议发展到现在,常用的是三个版本:SMB1、SMB2、SMB3。SMB1 是上世纪的老古董,性能差、安全性弱,微软从Windows 10 1709 起就不再默认安装 SMB1,Win11 更是彻底把它当作可选功能藏起来。而很多老设备——十年前的网络打印机、老款 NAS、部分机顶盒——只会说 SMB1,于是"新电脑连不上老 NAS"就成了经典故障。
反过来,一台只装了 SMB1 的老机器去访问新系统,新系统默认只提供 SMB2/3,也会连不上。
判断方法:在服务端开管理员 PowerShell:
# 查看当前 SMB 服务端协议配置 Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol # 查看客户端配置 Get-SmbClientConfiguration | Select-Object RequireSecuritySignature, EnableInsecureGuestLogons如果EnableSMB2Protocol是 False(正常情况应该是 True),那就是协议没开。用下面这条打开:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force要不要重新开启 SMB1 是个需要权衡的问题。我的建议是:优先想办法淘汰只支持 SMB1 的老设备,万不得已才在服务端开启 SMB1,而且只在需要的那段时间开。开启命令是:
Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -All执行完需要重启。不开玩笑,SMB1 的历史漏洞确实被利用过不少,能不用就不用。
4.2 SMB 签名和加密导致"能连 NAS 却连不上老机器"
最近几年 Windows 一直在收紧 SMB 的默认安全策略,尤其是SMB 签名。签名本身是为了防中间人篡改,方向绝对正确,但它跟一些第三方 NAS、老式文件服务器、部分虚拟化平台的共享实现不兼容,表现就是客户端报错但看不出明显原因。
可以在客户端查看当前是否强制要求签名:
Get-SmbClientConfiguration | Select-Object RequireSecuritySignature, EnableSecuritySignature如果RequireSecuritySignature是 True 而且你连的是老设备,可以针对这台机器临时关掉:
Set-SmbClientConfiguration -RequireSecuritySignature $false注意:关掉签名等于放弃了这一层完整性保护,只在完全可控的局域网里、并且确实是兼容性问题导致连不上的情况下才做,做完建议记一笔,等设备淘汰了再开回来。别为了图省事在办公网里长期关着。
类似地还有 SMB 加密(SMB3 才有),加密要求可以通过Get-SmbServerConfiguration | Select-Object EncryptData查看。默认是 False,一般不用动。如果之前被人改成了 True,那所有不支持加密的老客户端都会被踢出去。
4.3 iPhone 和 Mac 连 SMB 失败的典型原因
手机上用文件 App 连电脑共享,方便是真方便,坑也是真集中。按我处理过的案例,原因基本就这几类:
第一,地址格式不对。iPhone 的文件 App 里要填的是smb://192.168.1.20这种形式,注意是三个斜杠,而且多数情况下必须带共享名,写成smb://192.168.1.20/Share更稳妥。只填 IP 有时候能列出共享列表,有时候直接失败,写全最保险。
第二,匿名访问基本走不通。iOS 的 SMB 客户端对来宾访问的支持很差,而且新版系统默认也不会去尝试匿名。所以你必须提供一个服务端真实存在的账号和密码。用微软账户登录的服务端尤其麻烦,社交平台上大量"iPhone 连不上电脑共享"的提问都卡在这一步。最快的解法是在服务端建一个纯本地账号,比如用户名share,设一个常规密码,然后在共享的 NTFS 权限里把这个账号加进去。
第三,协议版本。iOS 支持 SMB2 和 SMB3,不支持 SMB1。所以服务端 SMB2/3 必须是开着的,一般不用改,除非有人手动关过。
第四,签名和加密要求。极少数情况下服务端强制要求加密,而客户端协商不出来,也会失败。做法和 4.2 一致,把强制要求降下来测试一下。
第五,网络本身的问题。手机连的是访客 WiFi,电脑连的是主网络,两边根本不在一个网段,这种在家庭路由器的双频合一场景下特别容易发生。判断方法很土但有效:手机上装个能看 IP 的工具,比对一下手机 IP 和电脑 IP 前三段是否一致。
Mac 的情况类似,smb://IP一般是通的,如果提示"无法连接到服务器",先确认是不是被"密码保护的共享"挡住了 Guest 登录,然后在"连接身份"对话框里选"注册用户",填服务端的本地账号。
5. 凭证缓存、会话残留和"以前能连现在连不上"
有一类故障特别有迷惑性:上周还好好的,这周忽然报错,而且你什么都没改。这类九成跟缓存、会话、DHCP 变化有关。
5.1 凭据管理器里的旧密码在捣鬼
Windows 有个凭据管理器,专门存网络位置和应用的登录凭据。你第一次连接共享时勾了"记住我的凭据",它就把那份用户名密码存下来。之后你改了服务端密码、换了账号、甚至把服务端机器重装过,客户机还在傻傻地用旧凭据敲门,报的错就是"用户名或密码不正确",而你输入框里填的新密码根本没用上,因为系统优先用缓存的。
清理方法有三个层次:
图形界面走控制面板 - 用户账户 - 凭据管理器 - Windows 凭据,找到对应\\IP或\\计算机名的条目删掉。
命令行更利索:
cmdkey /list cmdkey /delete:192.168.1.20cmdkey /list会列出所有已保存的凭据,/delete:后面跟目标名,把旧记录删掉。
还有一个更常用的组合拳,一次性清掉所有到该服务端的会话:
net use * /delete /y net use \\192.168.1.20\Share /user:192.168.1.20\share 你的密码第一条把所有已有网络连接全部断开(包括映射的网络驱动器,操作前心里有数),第二条用指定账号重新建立连接。这一招能同时绕开凭据缓存和旧会话身份两个问题,我遇到"密码明明对却报错"的时候基本是掏出这两条命令。
5.2 连接数上限和残留会话
Windows 客户端版本(家庭版、专业版、企业版)作为文件共享服务端时,同时连接数上限是 20。这在家庭或者三五个人的小办公室里完全够用,但一旦有共享打印机、多台手机、几台电脑同时挂上去,再加上有些客户端掉线后会话没及时释放,就会撞上限,新的连接直接被拒,报错还特别含糊。
查看当前会话和打开的文件:
Get-SmbSession Get-SmbOpenFile如果发现一堆来自同一 IP 的僵死会话,或者某个客户端半天没释放文件句柄,可以强行断开:
Close-SmbSession -SessionId <会话ID> -Force Close-SmbOpenFile -FileId <文件ID> -Force更省事的土办法是直接在服务端重启一下Server(LanmanServer)服务,所有会话会被清空。重启后共享会短暂不可用,选个人少的时间点操作就行。
提示:
Get-SmbOpenFile这个命令还有一个妙用——当某个文件明明没人用却提示"被占用无法删除"时,它能直接告诉你是哪台机器、哪个账号开的句柄,比一个个问同事效率高多了。
5.3 Win10 不显示共享文件夹的几种典型情况
"windows10 不显示共享文件夹了"这个现象,通常指两种完全不同的场景,得分开看。
一种是在"网络"里看不到对方的电脑。这就是第 2 节讲的那几个原因:网络配置文件被改成公用、网络发现服务没起来、防火墙规则没放行、或者路由器开了 AP 隔离。按顺序查一遍基本能解决。
另一种是能访问共享,但看不到里面的子文件夹。这种情况八成是权限问题——共享权限给的是"读取",那你只能看到已经存在的文件,看不到某些目录或者看不到目录内容。也可能是 NTFS 权限里某个子目录单独设了拒绝,继承被打破。用服务的有效权限功能查:右键文件夹 - 属性 - 安全 - 高级 - 有效访问 - 选择用户,输入要检查的账号,它会告诉你这个账号实际能干什么,非常直观。
还有个小概率情况:文件夹被设成了隐藏属性,共享名后面加了$。带$的共享是隐藏共享,在网络列表里看不到,但只要有确切地址依然能访问,比如\\IP\Share$。如果某天你发现某个共享"消失了",先确认它名字里是不是带了个美元符号。
6. 常见报错速查与三个真实案例复盘
理论讲完,来点直接能用的。下面这张表是我自己攒的,遇到报错先对一眼。
6.1 报错信息与处理方法速查表
| 报错信息/错误码 | 通常原因 | 处理动作 |
|---|---|---|
| 0x80070035 找不到网络路径 | 445 被拦、服务未启动、名称解析失败 | 用 IP 直连、测 445 端口、查防火墙 |
| 0x80070043 找不到网络名 | 涉及 SMB1 的老设备通信 | 临时启用 SMB1 或淘汰老设备 |
| 0x80004005 未指定错误 | 权限或凭据问题 | 检查共享与 NTFS 权限、清凭据 |
| 0x8007052E 用户名或密码错误 | 账号格式、缓存密码、账号禁用 | 用net use指定账号、清凭据 |
| 0x800704F1 安全策略阻止未验证的来宾访问 | 客户机禁用了来宾登录 | 放开 EnableInsecureGuestLogons |
| 网络里看不到对方 | 网络配置文件、发现服务、防火墙 | 切专用网络、启发现服务、放行规则 |
| 可以读不能写 | NTFS 权限只给读取 | 授予"修改"权限 |
| 能连上但速度很慢 | 走了 SMB1 或网络质量差 | 确认 SMB2/3、检查链路 |
6.2 案例一:重启一次,全组都连不上主力机
某次给一个摄影工作室救火,三台机器忽然全部连不上存放素材的主力机。ping IP 是通的,Test-NetConnection -Port 445也是 True,说明连通和端口都没问题。检查服务端共享权限,Everyone 完全控制;检查 NTFS,加了 Everyone 修改权限。看着一切正常,但客户机报 0x800704F1。
答案就出在这个错误码上:主力机重装过一次系统,重装后原本保存的凭据没了,三台客户机连上来的时候没法通过认证,系统就退化到尝试来宾访问,而这三台客户机默认禁止来宾登录,于是直接报错。
处理动作有两步:先在客户机上放开不安全来宾登录临时验证,确认原因;然后老老实实在主力机上建了一个叫studio的本地账号,设好密码,把它加进共享的 NTFS 权限,在三台客户机的凭据管理器里各保存一次studio账号的凭据。之后免密访问,安全性和便利性都有了。这个案例的教训是:别看到"未验证来宾"就去开 Guest,先想想是不是缺一个正经账号。
6.3 案例二:iPhone 死活连不上,电脑之间却好好的
一位用户家里两台 Windows 互访完全正常,就用 iPhone 连不上电脑的共享目录,试了好几个文件管理 App 都一样。排查发现三个问题叠在一起。
第一是地址只填了smb://192.168.1.5没带共享名,某些 App 在这个状态下不主动列共享,直接报失败;改成smb://192.168.1.5/Media后立刻有反应。
第二是电脑是用微软账户登录的,用户拿微软账户密码去连,失败。改成在电脑上新建一个本地账号media并加到共享权限里,用这个账号成功登录。
第三是路由器双频合一,手机偶尔跳到 5G 频段拿了另一个网段的 IP,导致时通时不通。把电脑 IP 在路由器里做了 DHCP 静态绑定之后彻底稳定。
三个问题单拎出来都不难,难的是它们叠在一起,表现就是"随机失败",最容易让人误判成系统玄学。所以排查时我习惯一次只改一个变量,改完立刻测,不要一口气改五个地方然后不知道是哪个起了作用。
6.4 案例三:能读能写,就是删不掉文件
一位做财务的用户抱怨共享盘里可以新建文件、可以改文件,就是删不掉自己建的文件夹。权限里看共享是"更改",NTFS 是"修改",看着都挺正常。问题出在 NTFS 权限的特殊权限上:当初有人为了"防止误删"在这个目录上显式勾掉了"删除",而显式拒绝和显式允许一样会覆盖继承来的权限,偏偏这一项不体现在基本权限的勾选状态上,所以从界面上完全看不出异常。
处理办法是在安全 - 高级 - 更改权限里逐条展开权限条目,查看"删除"和"删除子文件夹及文件"的允许/拒绝状态,把那个不当的显式设置去掉。顺手提一句,想防误删更好的做法是开卷影副本或者做定期备份,用显式拒绝来做"防误删",迟早会在某个深夜把自己坑到。
6.5 我踩过的几个坑,和几条随手记的经验
第一个坑是中文共享名。早年图方便,把共享名设成了"资料共享",Windows 之间访问没事,但手机端和某些播放器就各种报错。后来统一改成英文加下划线,再没出过问题。这个教训值一个"以后一律用英文"。
第二个坑是直接共享整个盘符。有人为了省事把整个 D 盘共享出去给 Everyone 完全控制,结果某天局域网里一台中了勒索病毒的机器顺着共享把整个 D 盘加密了。共享颗粒度越小越好,只共享确实需要交换的那个目录,权限只给到够用就行。
第三个坑是改了 IP 忘了更新映射。家里路由器重启后 DHCP 把 IP 分给了别的设备,之前映射的网络驱动器就失效了,报的还是"找不到网络路径",容易误判成系统故障。给共享主机在路由器里做 DHCP 静态绑定,或者直接在服务端设固定 IP,一劳永逸。
第四个坑是主机睡眠。共享主机进睡眠之后,共享自然断掉,有时唤醒后 SMB 服务需要几秒到几十秒才恢复,期间访问就报错。如果共享机是需要长期在线的,进电源选项把睡眠关掉,只留屏幕关闭,能避免大量"偶尔连不上"的玄学问题。
最后分享一个小技巧:把常用的排查命令写成一个.ps1脚本放在桌面上,右键"以管理员身份运行",一次性输出所有关键状态——网络配置文件、445 端口测试、SMB 协议与签名配置、当前会话列表。给不熟命令行的人远程排障时,让他在服务端和客户机各跑一次,把结果发过来,往往一眼就能定位到是哪一层断了,比来回问"你那边设置是什么样的"高效太多。这个脚本我用了两年多,从家庭共享到十几个人的小办公室,基本没失手过。