在XP中禁用WiFi内部结构访问

本文关键字:内部 结构 访问 WiFi XP | 更新日期: 2023-09-27 17:58:10

我有一个应用程序需要禁用基础设施访问,然后重新启用它(请不要问为什么。我处于保密协议之下,很难在不违反保密协议的情况下解释为什么)。我使用C#中的p/Invoke来完成此操作。

要禁用它,我将创建INTF_ENTRY结构,设置适配器guid,然后将dwCtlFlags设置为0并调用

uint outFlags;
WZCSAPI.INTF_ENTRY intf = new WZCSAPI.INTF_ENTRY();
intf.wszGuid = adapterGuid;
intf.dwCtlFlags = 0;
WZCSetInterface(null, (uint)INTF_FLAGS.INTF_CM_MASK, ref intf, out outFlags)

这工作得很好,正是我所期望的。"无线网络连接属性/无线网络/高级"下的XP设置从"任何可用网络(首选接入点)"切换到"仅限计算机到计算机(特定)网络"。这正是我需要它做的…

在此之前,我检索CM_MASK的原始设置。

因此,稍后,我尝试同样的方法来恢复它(在本例中,origCMMask=2):

uint outFlags;
WZCSAPI.INTF_ENTRY intf = new WZCSAPI.INTF_ENTRY();
intf.wszGuid = adapterGuid;
intf.dwCtlFlags = origCMMask;
WZCSetInterface(null, (uint)INTF_FLAGS.INTF_CM_MASK, ref intf, out outFlags)

但是"任何可用网络"选项不会在设置对话框中恢复,并且HKLM''SOFTWARE''Microsoft''WZCSVC''Parameters''Interface{guid}''ControlFlags同意CM Mask未设置回2,但仍设置为0(实际值为0x07918000,而不是正常的0x07818002)。

是不是我少了一步?

在XP中禁用WiFi内部结构访问

如果您有带SP3的Windows XP,您可以尝试使用WlanSetInterface函数,将wlan_intf_opcode_bss_type作为OpCode传递。

或者,您也可以尝试手动执行NETSH WLAN命令行操作之一,至少可以验证该方法。

  1. 禁用无线网卡(可以使用devcon.exe)
  2. regedit HKLM''SOFTWARE''Microsoft''WZCSVC''Parameters''Interface{guid}''ControlFlags值
  3. 启用无线网卡(可以使用devcon.exe)