using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Disco.Client.Interop.Native { public struct WLAN_PROFILE_INFO_LIST { /// /// The number of wireless profile entries in the ProfileInfo member. /// public uint dwNumberOfItems; /// /// The index of the current item. The index of the first item is 0. The dwIndex member must be less than the dwNumberOfItems member. /// This member is not used by the wireless service. Applications can use this member when processing individual profiles in the /// WLAN_PROFILE_INFO_LIST structure. When an application passes this structure from one function to another, it can set the value /// of dwIndex to the index of the item currently being processed. This can help an application maintain state. /// dwIndex should always be initialized before use. /// public uint dwIndex; private IntPtr ProfileInfoPointer; /// /// An array of WLAN_PROFILE_INFO structures containing interface information. The number of items in the array is specified in the dwNumberOfItems member. /// public IEnumerable ProfileInfo { get { var size = Marshal.SizeOf(typeof(WLAN_PROFILE_INFO)); for (int i = 0; i < dwNumberOfItems; i++) { yield return (WLAN_PROFILE_INFO)Marshal.PtrToStructure(ProfileInfoPointer + (i * size), typeof(WLAN_PROFILE_INFO)); } } } public WLAN_PROFILE_INFO_LIST(IntPtr Pointer) { dwNumberOfItems = (uint)Marshal.ReadInt32(Pointer, 0); dwIndex = (uint)Marshal.ReadInt32(Pointer, 4); ProfileInfoPointer = Pointer + 8; } } }