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

时间:2011-06-02 15:35:01

标签: c# windows pinvoke wifi

我有一个应用程序,需要禁用基础设施访问,然后重新启用它(请不要问为什么。我在NDA下,很难解释为什么不违反)。我在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设置从“任何可用网络(首选接入点)”切换到“仅计算机到计算机(ad hoc)网络”。这正是我需要做的......

在此之前,我检索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掩码未设置回2,但是仍然设置为0(实际值为0x07918000,而不是正常的0x07818002)。

我缺少一些步骤吗?

2 个答案:

答案 0 :(得分:2)

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

或者,您也可以尝试使用其中一个NETSH WLAN command line actions,至少验证方法。

答案 1 :(得分:0)

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