调用WNetOpenEnum枚举Microsoft Windows Network节点返回1231错误如何解决?
故障原因分析
你调用的WNetOpenEnum/WNetEnumResource属于Windows legacy网络枚举接口,完全依赖SMB1协议配套的计算机浏览器服务和NetBIOS协议实现局域网设备枚举。而Windows 10 1709之后默认禁用SMB1,同时资源管理器早就切换到了基于WS-Discovery的Function Discovery框架实现设备发现,这就是资源管理器能正常显示、但老API返回空的核心原因,Sysinternals的ShareEnum同样依赖这套老接口,所以也会报错。
排查步骤
- 先检查计算机浏览器服务状态:运行
services.msc,找到Computer Browser服务,确认其启动类型为自动,且当前处于运行状态。域环境下如果本机未实际加入域、或域内主浏览器节点异常,该服务无法同步网络设备列表,就会返回ERROR_NETWORK_UNREACHABLE错误。 - 确认SMB1客户端组件安装:打开「控制面板-程序和功能-启用或关闭Windows功能」,找到
SMB 1.0/CIFS 文件共享支持,勾选其中的SMB 1.0/CIFS 客户端子项(无需开启服务端,避免安全风险),配置完成后重启生效。 - 验证域加入状态:运行命令
systeminfo | findstr /B /C:"域",确认本机实际加入的域名和网络位置显示的域一致。新网络迁移后很容易出现网络位置识别错误,把工作组网络误标记为域网络,导致老枚举接口走域浏览逻辑但无法拉取列表。 - 检查NetBIOS启用状态:打开网卡属性-IPv4属性-高级-WINS页,确认NetBIOS over TCP/IP设置为「默认」或「启用」,老API依赖NetBIOS实现设备名称解析和发现,新网络如果全局禁用了NetBIOS也会触发该错误。
长期替代方案
如果不想依赖已经被微软标记为废弃、存在严重安全风险的SMB1协议,可以将枚举逻辑切换为Windows现在官方推荐的Function Discovery COM接口,枚举结果和资源管理器「网络」节点完全一致,无需依赖SMB1、计算机浏览器服务和NetBIOS协议。
内容的提问来源于stack exchange,提问作者Ilia
相关产品推荐
相关产品推荐

