我有一个应用程序,需要禁用基础设施访问,然后重新启用它(请不要问为什么。我在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)。
我缺少一些步骤吗?
答案 0 :(得分:2)
如果您使用带有SP3的Windows XP,可以尝试使用WlanSetInterface Function,将wlan_intf_opcode_bss_type
作为OpCode传递。
或者,您也可以尝试使用其中一个NETSH WLAN command line actions,至少验证方法。
答案 1 :(得分:0)