一段时间以来,我一直在努力解决这个问题。WLAN 中一个看似简单的命令对我来说失败了。我正在尝试执行以下代码:
[DllImport("Wlanapi.dll", EntryPoint = "WlanQueryInterface", SetLastError = true)]
public static extern uint WlanQueryInterface(
[In] IntPtr hClientHandle,
[In] ref Guid pInterfaceGuid,
WLAN_INTF_OPCODE OpCode,
IntPtr pReserved,
[Out] out uint pdwDataSize,
ref IntPtr ppData,
IntPtr pWlanOpcodeValueType);
var tempID = InterfaceID;
UInt32 dataSize;
IntPtr pData = IntPtr.Zero;
uint results = WlanQueryInterface(
_sessionHandle,
ref tempID,
WLAN_INTF_OPCODE.wlan_intf_opcode_current_connection,
IntPtr.Zero,
out dataSize,
ref pData,
IntPtr.Zero);
我每次得到的都是 50 和没有指针的结果。我已经搜索并无法确定 50 作为返回值的含义。我最好的猜测是 ERROR_INVALID_STATE。但我也无法找到文档列出的错误状态的任何定义。
我之前打开了一个句柄并验证它仍然有效。我还验证了 Interface Guid 是否正确(在本例中是从 InterfaceInfo 结构中检索的)。我使用了很多没有类似问题的各种 WLan 方法,所以我猜我错误地定义了 P/Invoke 声明。
如果有人看到我的错误,我发誓我会改变!