在XP中禁用WiFi基础设施访问

我有一个应用程序,需要禁用基础设施访问,然后重新启用它(请不要问为什么,我在NDA,这将是很难解释为什么没有违反)。 我正在用p / Invoke在C#中执行此操作。

要禁用它,我创buildINTF_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) 

这工作很好,而且完全符合我的期望。 “无线networking连接属性/无线networking/高级”下的我的XP设置从“任何可用networking(首选接入点)”切换到“仅计算机到计算机(特定)networking”。 这正是我需要它做的…

在这之前,我检索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) 

但是在设置对话框中没有恢复“任何可用networking”选项,并且HKLM \ SOFTWARE \ MICROSOFT \ WZCSVC \ Parameters \ Interface {guid} \ ControlFlags认为CM Mask没有设置回2,但仍然设置为0(实际值是0x07918000,而不是普通的0x07818002)。

有一些我失踪的步骤?

如果您的Windows XP使用SP3,则可以使用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)