internal static IEnumerable <ProfilePack> EnumerateProfiles(Base.WlanClient client) { using (var container = new DisposableContainer <Base.WlanClient>(client)) { var interfaceInfoList = Base.GetInterfaceInfoList(container.Content.Handle); foreach (var interfaceInfo in interfaceInfoList.Select(x => new InterfaceInfo(x))) { var interfaceIsConnected = (interfaceInfo.State == InterfaceState.Connected); var availableNetworkList = Base.GetAvailableNetworkList(container.Content.Handle, interfaceInfo.Id) .Where(x => !string.IsNullOrWhiteSpace(x.strProfileName)) .ToArray(); var connection = Base.GetConnectionAttributes(container.Content.Handle, interfaceInfo.Id); var profileInfoList = Base.GetProfileInfoList(container.Content.Handle, interfaceInfo.Id); int position = 0; foreach (var profileInfo in profileInfoList) { var availableNetwork = availableNetworkList.FirstOrDefault(x => string.Equals(x.strProfileName, profileInfo.strProfileName, StringComparison.Ordinal)); var signalQuality = (int)availableNetwork.wlanSignalQuality; var profileIsConnected = interfaceIsConnected && string.Equals(connection.strProfileName, profileInfo.strProfileName, StringComparison.Ordinal); var profileXml = Base.GetProfile(container.Content.Handle, interfaceInfo.Id, profileInfo.strProfileName, out uint profileTypeFlag); if (string.IsNullOrWhiteSpace(profileXml)) { continue; } if (!ProfileTypeConverter.TryConvert(profileTypeFlag, out ProfileType profileType)) { continue; } //Debug.WriteLine("Interface: {0}, Profile: {1}, Position: {2}, Signal: {3}, Connected: {4}", // interfaceInfo.Description, // profileInfo.strProfileName, // position, // signalQuality, // profileIsConnected); yield return(new ProfilePack( name: profileInfo.strProfileName, interfaceInfo: interfaceInfo, profileType: profileType, profileXml: profileXml, position: position++, signalQuality: signalQuality, isConnected: profileIsConnected)); } } } }
internal static bool SetProfile(Base.WlanClient client, Guid interfaceId, ProfileType profileType, string profileXml, string profileSecurity, bool overwrite) { if (interfaceId == Guid.Empty) { throw new ArgumentException(nameof(interfaceId)); } if (string.IsNullOrWhiteSpace(profileXml)) { throw new ArgumentNullException(nameof(profileXml)); } using (var container = new DisposableContainer <Base.WlanClient>(client)) { var profileTypeFlag = ProfileTypeConverter.ConvertBack(profileType); return(Base.SetProfile(container.Content.Handle, interfaceId, profileTypeFlag, profileXml, profileSecurity, overwrite)); } }