0
Windows에서 C# Desktop APP의 WlanGetNetworkBssList를 상호 연결하려는 im. WLAN_BSS_LIST를 올바르게 검색하는 데 몇 가지 문제가 있습니다. 문제가 어디에 있는지 나는 잘 모르겠다. 첫 번째 항목은 올바르지 만 다른 모든 항목은 arnt입니다. 누군가가 나를 도울 수 있기를 바랍니다.Windows에서 C#을 사용하는 WlanGetNetworkBssList
다음은 사용중인 구조입니다. 나는 문제가 잘못된 구조 정의라고 생각한다.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct WLAN_BSS_LIST
{
internal Int32 dwTotalSize;
internal Int32 dwNumberOfItems;
internal WLAN_BSS_ENTRY[] wlanBssEntries;
internal WLAN_BSS_LIST(IntPtr ppWlanBssList)
{
dwTotalSize = (Int32)Marshal.ReadInt32(ppWlanBssList);
dwNumberOfItems = (Int32)Marshal.ReadInt32(ppWlanBssList + 4);
wlanBssEntries = new WLAN_BSS_ENTRY[dwNumberOfItems];
int WLAN_BSS_ENTRY_SIZE = Marshal.SizeOf(typeof(WLAN_BSS_ENTRY));
for (int i = 0; i < dwNumberOfItems; i++)
{
IntPtr pItemList = new IntPtr(ppWlanBssList.ToInt32() + i * Marshal.SizeOf(typeof(WLAN_BSS_ENTRY)) + 8);
wlanBssEntries[i] = (WLAN_BSS_ENTRY)Marshal.PtrToStructure(pItemList, typeof(WLAN_BSS_ENTRY));
}
}
}
public struct WLAN_BSS_ENTRY
{
public DOT11_SSID dot11Ssid;
public ulong uPhyId;
public DOT11_MAC_ADDRESS dot11Bssid;
public DOT11_BSS_TYPE dot11BssType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public DOT11_PHY_TYPE[] dot11BssPhyType;
public long lRssi;
public ulong uLinkQuality;
public bool bInRegDomain;
public ushort usBeaconPeriod;
public ulong ullTimestamp;
public ulong ullHostTimestamp;
public ushort usCapabilityInformation;
public ulong ulChCenterFrequency;
public WLAN_RATE_SET wlanRateSet;
public ulong ulIeOffset;
public ulong ulIeSize;
}
public struct DOT11_SSID
{
public uint uSSIDLength;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string ucSSID;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DOT11_MAC_ADDRESS
{
public byte one;
public byte two;
public byte three;
public byte four;
public byte five;
public byte six;
}
public enum DOT11_BSS_TYPE
{
dot11_BSS_type_infrastructure = 1,
dot11_BSS_type_independent = 2,
dot11_BSS_type_any = 3,
}
public enum DOT11_PHY_TYPE
{
dot11_phy_type_unknown,
dot11_phy_type_any,
dot11_phy_type_fhss,
dot11_phy_type_dsss,
dot11_phy_type_irbaseband,
dot11_phy_type_ofdm,
dot11_phy_type_hrdsss,
dot11_phy_type_erp,
dot11_phy_type_ht,
dot11_phy_type_IHV_start,
dot11_phy_type_IHV_end,
}
public struct WLAN_RATE_SET
{
public ulong uRateSetLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 126)]
public ushort[] usRateSet;
}
왜 'dot11BssPhyType' 필드 ('WLAN_BSS_ENTRY')의 유형을 배열로 설정합니까? 또한, i 번째 BSS 엔트리의 주소를 계산할 때 포인터에'ToInt32()'를 사용하기 때문에 응용 프로그램이 64 비트라면 약간의 (32) 비트가 풀릴 수 있습니다. –