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

时间:2015-07-24 05:42:21

标签: c++ c windows windows-10

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

    如果附近有热点,
  • 会创建新的持续WLAN配置文件(即 一个开放的热点或热点,它有来自朋友的密码。)
  • 按照其认为最佳的顺序重新排序配置文件。

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

1 个答案:

答案 0 :(得分:6)

TL; DR :有未记录的注册表值可以禁用Wifi Sense的某些功能。这些值位于键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features中,并命名为WiFiSenseCredSharedWiFiSenseOpen。首先控制是否共享Wifi凭证第二个控制Wifi Sense是否为打开的热点创建新的配置文件。两者的默认值(至少在我的机器上)是1.将它们更改为0. WcmSvc服务包含Wifi Sense的实现,需要在注册表更改后重新启动。我尝试通过SERVICE_CONTROL_PARAMCHANGE API将WcmSvc发送到ControlService,但我得到了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。

长篇故事: 对于感兴趣的人,这里是一个简短的描述我如何找到未记录的注册表值。它可能会帮助其他人找到更多未记录的注册表值。

首先我猜测应该有一个无证的注册表设置能够关闭WifiSense。所以我安装了Process Monitor工具,它能够列出所有正在运行的进程的所有注册表访问。我在Network/Wifi/Advanced Wifi Settings打开了Windows设置界面,并更改了与Wifi Sense相关的设置。然后我查看了Process Monitor输出,以查看访问了哪些注册表部分。我将输出过滤到RegSetValue以仅查看写入并减少其他注册表操作的噪音。

我看到几次写入key的值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\features\S-1-5-21-774371734-2276234837-1234541976-1000

当看到注册表中的键时,我没有发现任何有趣的东西 父密钥中有两个非常可疑的值 (... \ wifinetworkmanager \功能)。值为DWORD(数字)并命名 WiFiSenseCredShared和WiFiSenseOpen。两者都设置为1.我将它们设置为0和 重新启动WcmSvc服务,以便重新读取新值。此Wifi Sense关闭后。我能够删除它创建的配置文件 没有创建新的开放配置文件。