私はしばらくの間、これについて頭を悩ませてきました。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 宣言を不適切に定義したと推測しています。
誰かが私のやり方に間違いを見つけたら、私は変わることを誓います!