/// <summary>
        ///     Deletes a <paramref name="profile" /> on a given <paramref name="wirelessInterface" />
        /// </summary>
        /// <param name="wirelessInterface">The wireless interface to delete the profile on</param>
        /// <param name="profile">The profile to delete</param>
        public void DeleteProfile(WirelessInterface wirelessInterface, Profile profile)
        {
            Guid interfaceGuid = wirelessInterface.InterfaceGuid;

            uint result = NativeWireless.WlanDeleteProfile(this.GetHandle(), ref interfaceGuid, profile.ProfileName, IntPtr.Zero);

            result.ThrowIfNotSuccess();
        }
        /// <summary>
        ///     Returns all the profiles associated with this Wireless Interface
        /// </summary>
        /// <param name="wirelessInterface">The wirelessInterface to get the profiles from</param>
        /// <returns></returns>
        public List<Profile> GetProfilesForWirelessInterface(WirelessInterface wirelessInterface)
        {
            IntPtr handle;

            // The interfaceGuid is passed in as a pointer which is why we need to extract it into a variable.
            // the function takes a const Guid* which cannot be exposed in C#
            Guid interfaceGuid = wirelessInterface.InterfaceGuid;

            uint result = NativeWireless.WlanGetProfileList(this.GetHandle(), ref interfaceGuid, IntPtr.Zero, out handle);

            result.ThrowIfNotSuccess();

            var wlanProfileInfoList = new WLAN_PROFILE_INFO_LIST(handle);

            NativeWireless.WlanFreeMemory(handle);

            List<Profile> profilesForWirelessInterface = wlanProfileInfoList.ProfileInfo.Select((wlanProfileInfo, index) => new Profile((uint) index, wlanProfileInfo.strProfileName)).ToList();

            return profilesForWirelessInterface;
        }
        /// <summary>
        ///     Move the <paramref name="profile" /> to a given <paramref name="position" /> for the given <paramref name="wirelessInterface" />
        /// </summary>
        /// <param name="wirelessInterface">The wireless interface</param>
        /// <param name="profile">The profile</param>
        /// <param name="position">The position requested</param>
        public void SetProfilePosition(WirelessInterface wirelessInterface, Profile profile, uint position)
        {
            Guid interfaceGuid = wirelessInterface.InterfaceGuid;

            uint result = NativeWireless.WlanSetProfilePosition(this.GetHandle(), interfaceGuid, profile.ProfileName, position, IntPtr.Zero);

            result.ThrowIfNotSuccess();
        }