/// <summary> /// Converts a pointer to a BSS list (header + entries) to an array of BSS entries. /// </summary> /// <param name="bssListPtr">A pointer to a BSS list's header.</param> /// <returns>An array of BSS entries.</returns> private static Wlan.WlanBssEntry[] ConvertBssListPtr(IntPtr bssListPtr) { Wlan.WlanBssListHeader bssListHeader = (Wlan.WlanBssListHeader)Marshal.PtrToStructure(bssListPtr, typeof(Wlan.WlanBssListHeader)); long bssListIt = bssListPtr.ToInt64() + Marshal.SizeOf(typeof(Wlan.WlanBssListHeader)); Wlan.WlanBssEntry[] bssEntries = new Wlan.WlanBssEntry[bssListHeader.numberOfItems]; for (int i = 0; i < bssListHeader.numberOfItems; ++i) { bssEntries[i] = (Wlan.WlanBssEntry)Marshal.PtrToStructure(new IntPtr(bssListIt), typeof(Wlan.WlanBssEntry)); bssListIt += Marshal.SizeOf(typeof(Wlan.WlanBssEntry)); } return(bssEntries); }
/// <summary> /// Converts a pointer to a BSS list (header + entries) to an array of BSS entries. /// </summary> /// <param name="bssListPtr">A pointer to a BSS list's header.</param> /// <returns>An array of BSS entries.</returns> private static Wlan.WlanBssEntryN[] ConvertBssListPtr(IntPtr bssListPtr) { Wlan.WlanBssListHeader header = (Wlan.WlanBssListHeader)Marshal.PtrToStructure(bssListPtr, typeof(Wlan.WlanBssListHeader)); long num = bssListPtr.ToInt64() + Marshal.SizeOf(typeof(Wlan.WlanBssListHeader)); Wlan.WlanBssEntryN[] entryArray = new Wlan.WlanBssEntryN[header.numberOfItems]; for (int i = 0; i < header.numberOfItems; i++) { entryArray[i] = new Wlan.WlanBssEntryN((Wlan.WlanBssEntry)Marshal.PtrToStructure(new IntPtr(num), typeof(Wlan.WlanBssEntry))); int size = (int)entryArray[i].BaseEntry.ieSize; entryArray[i].IEs = new byte[size]; Marshal.Copy(new IntPtr(num + entryArray[i].BaseEntry.ieOffset), entryArray[i].IEs, 0, size); num += Marshal.SizeOf(typeof(Wlan.WlanBssEntry)); } return(entryArray); }