如何在Windows 10中以编程方式禁用Wi-Fi Sense?

3

Windows 10有一个名为Wifi Sense的新功能。该功能将WLAN适配器连接到附近的任何开放式热点,并通过Facebook与朋友共享WLAN密码。根据我们的测试,它:

  • 如果附近有热点(即开放热点或来自朋友的密码热点),则创建新的持久性WLAN配置文件。
  • 保持重新排序配置文件以符合其认为最佳的顺序。

我发现了几个如何通过Windows UI禁用Wifi Sense的答案:例如here。但是,没有一个答案真正禁用了创建开放热点的新配置文件。是否有一种完全禁用Wifi Sense的方法?最好是以编程方式。

2个回答

7
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被关闭了。我能够删除由它创建的配置文件,并且没有新的开放配置文件被创建。


0

在最近的Windows 10版本中,使用此脚本(源代码)在cmd.exe中禁用此功能:

for /f %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features"^|find "S-1"') do (reg add %%A /v FeatureStates /t REG_DWORD /d 828 /f)

注意:这是CMD文件语法。如果您计划在命令解释器中使用它(而不是CMD文件),请使用%A而不是%%A。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接