TL;DR: 有一些未记录的注册表值可以禁用 Wifi Sense 的某些功能。 这些值位于键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features 中,分别命名为 WiFiSenseCredShared 和 WiFiSenseOpen。第一个控制是否共享 Wifi 凭据,第二个控制是否 Wifi Sense 为开放热点创建新配置文件。两个默认值(至少在我的机器上)均为 1。将它们更改为 0。 WcmSvc 服务包含 Wifi Sense 的实现,并且更改注册表后需要重新启动该服务。我尝试仅通过 ControlService API 向 WcmSvc 发送 SERVICE_CONTROL_PARAMCHANGE,但是我收到 ERROR_ACCESS_DENIED,因此必须进行完整的服务重启,直到 MS 发布一些公共 API。请注意,由于这些值未记录,MS 可能会在 Windows 的下个版本中更改其位置或甚至删除它们。
编辑:上述建议的值在最新版本的 Windows 10 上停止工作。然而,我发现 Wifi Sense 配置状态存储在值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features\S-1-5-21-774371734-2276234837-1234541976-1000\FeatureStates 中。请注意,键名 S-1-5-21-774371734-2276234837-1234541976-1000 对于不同的机器可能会有所不同。该值本身是一个带有以下语义的位掩码:
enum EWifiManagerFeatureStates
{
CONNECT_OPEN_HOTSPOTS = 0x0001,
CONNECT_NETWORKS_FROM_CONTACTS = 0x0040,
CONNECT_PAID_HOTSPOTS = 0x200,
}
这些位必须设置为 0 才能完全禁用 Wifi Sense。我无法找到其他位的含义,但其他人可以尝试将它们设置为 0。
背景:
对于感兴趣的人,这里简要介绍一下我如何找到这些未记录的注册表值。这可能有助于其他人找到更多未记录的注册表值。
首先,我猜测必定存在一个未记录的注册表设置项,可以关闭Wifi Sense。因此,我安装了Process Monitor工具,该工具能够列出所有运行进程的注册表访问信息。我在网络/WiFi/高级WiFi设置
中打开Windows设置界面并更改与Wifi Sense相关的设置。然后,我查看了过程监视器输出,以查看哪些部分的注册表被访问。我通过过滤RegSetValue来只查看写操作,并减少其他注册表操作的干扰噪音。
我发现有几个写入到以下键值的值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features\S-1-5-21-774371734-2276234837-1234541976-1000
当我在regedit中查看键时,我没有发现任何有趣的信息,但在其父键中却有两个非常可疑的值
(... \wifinetworkmanager\features)。这些值是DWORD(数字),名称分别为WiFiSenseCredShared和WiFiSenseOpen。两者均设置为1。我将它们设置为0并重新启动WcmSvc服务,以便读取新值。此后,Wifi Sense被关闭了。我能够删除由它创建的配置文件,并且没有新的开放配置文件被创建。