本文原载于《21天从零开始做修Windows电脑专家:入门到精通》一书
某一次重启之后,发现笔记本的wifi无法连接了,显示为红叉。
在Windows10的设置里提示,没有在您的计算机上找到无线网卡,之类的。首先确认无线网卡驱动正常,为了保险起见,还回滚了一次驱动(因为曾经出现过Win10自动更新后驱动跪了的情况)。
那么是怎么回事呢?
万能的谷歌告诉我们,在操作系统层处理无线协议的服务是WLAN AutoConfig。
WLAN AutoConfig的服务名称是wlansvc,我们使用sc查询其运行状态:
1 2 3 4 5 6 7 8 9 10 |
> sc query wlansvc SERVICE_NAME: wlansvc TYPE : 20 WIN32_SHARE_PROCESS STATE : 1 STOPPED (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 1068 (0x42c) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 |
嘿伙计你瞧,它挂了:) 错误码是1068。如果你在“服务”控制台中尝试启动它,会提示
这是为什么呢?( ´◔ ‸◔’)
我们还是通过sc查询服务的依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> sc qc wlansvc [SC] QueryServiceConfig 成功 TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\WINDOWS\system32\svchost.exe -k LocalSystemNetwork Restricted LOAD_ORDER_GROUP : TDI TAG : 0 DISPLAY_NAME : WLAN AutoConfig DEPENDENCIES : nativewifip : RpcSs : Ndisuio : wcmsvc SERVICE_START_NAME : LocalSystem |
然后依次查询DEPENDENCIES栏中依赖服务的运行状态,我们发现,wcmsvc服务挂了:
1 2 3 4 5 6 7 8 9 |
> sc query wcmsvc SERVICE_NAME: wcmsvc TYPE : 20 WIN32_SHARE_PROCESS STATE : 1 STOPPED (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 2 (0x2) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 |
错误码是0x2,这个代码太熟悉了,就是找不到文件嘛!哦我的上帝,它竟然告诉我找不到文件Σ( ° △ °|||)︴
但是服务如果这个dll真的不存在,那么应该是提示126: 找不到模块。
这时我想起似乎曾经拒绝过某个服务的安装,也许就是那时手滑看错了。
我们打开注册表,来到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wcmsvc,在Description键中可以看到提供服务的dll(之一)位于%SystemRoot%\System32\wcmsvc.dll。
在资源管理器中找到这个文件,并且检查权限及签名没有损坏。那说明就是注册表的错了。
从基友那正常运行的同版本Win10中导出HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wcmsvc这一项后,导入本机。测试启动服务sc start wcmsvc,sc query wcmsvc,得到RUNNING提示。
实际上由于错误操作导致服务添加失败,直接的体现就是这一项中少了Parameters这一项,0x2也就是由此而来的了。
另外,如果发现文件损坏或者修复注册表后仍无法启动,可以尝试从健康系统的拷贝文件替换。但是要注意,要对系统文件进行修改必须进行takeown,之后将无法恢复原文件的所属(TrustedInstaller),这是由Windows的安全机制导致的。