Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / NetworkInformation / SystemIPInterfaceProperties.cs / 1305376 / SystemIPInterfaceProperties.cs
////// namespace System.Net.NetworkInformation { using System.Net; using System.Net.Sockets; using System; using System.Runtime.InteropServices; using System.Collections; using System.ComponentModel; using System.Security.Permissions; using Microsoft.Win32; /// /// Provides support for ip configuation information and statistics. /// /// Provides information specific to a network /// interface. /// ////// internal class SystemIPInterfaceProperties:IPInterfaceProperties { //common properties uint mtu; //Unfortunately, any interface can //have two completely different valid indexes for ipv4 and ipv6 internal uint index = 0; internal uint ipv6Index = 0; internal IPVersion versionSupported = IPVersion.None; //these are valid for all interfaces bool dnsEnabled = false; bool dynamicDnsEnabled = false; //os>=xp only IPAddressCollection dnsAddresses = null; UnicastIPAddressInformationCollection unicastAddresses = null; //OS >= XP only MulticastIPAddressInformationCollection multicastAddresses = null; IPAddressInformationCollection anycastAddresses = null; AdapterFlags adapterFlags; string dnsSuffix; string name; //ipv4 only // SystemIPv4InterfaceProperties ipv4Properties; SystemIPv6InterfaceProperties ipv6Properties; private SystemIPInterfaceProperties(){} //This constructor is used only in the OS>=XP case //and uses the GetAdapterAddresses api internal SystemIPInterfaceProperties(FixedInfo fixedInfo, IpAdapterAddresses ipAdapterAddresses) { //network params info dnsEnabled = fixedInfo.EnableDns; //store the common api information index = ipAdapterAddresses.index; name = ipAdapterAddresses.AdapterName; //api specific info ipv6Index = ipAdapterAddresses.ipv6Index; if (index > 0) versionSupported |= IPVersion.IPv4; if (ipv6Index > 0) versionSupported |= IPVersion.IPv6; mtu = ipAdapterAddresses.mtu; adapterFlags = ipAdapterAddresses.flags; dnsSuffix = ipAdapterAddresses.dnsSuffix; dynamicDnsEnabled = ((ipAdapterAddresses.flags & AdapterFlags.DnsEnabled) > 0); multicastAddresses = SystemMulticastIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstMulticastAddress); dnsAddresses = SystemIPAddressInformation.ToAddressCollection(ipAdapterAddresses.FirstDnsServerAddress,versionSupported); anycastAddresses = SystemIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstAnycastAddress,versionSupported); unicastAddresses = SystemUnicastIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstUnicastAddress); if (ipv6Index > 0){ ipv6Properties = new SystemIPv6InterfaceProperties(ipv6Index,mtu); } } //This constructor is used only in the OSProvides information specific to a network interface. A network interface can have more than one IPAddress associated with it. If the machine is >= XP, we call the native GetAdaptersAddresses api to /// prepopulate all of the interface instances and most of their associated information. Otherwise, /// GetAdaptersInfo is called. ///0) versionSupported |= IPVersion.IPv4; //have to get the suffix from the registry if 2k if (ComNetOS.IsWin2K) ReadRegDnsSuffix(); //get ipaddresses unicastAddresses = new UnicastIPAddressInformationCollection(); ArrayList ipAddresses = ipAdapterInfo.ipAddressList.ToIPExtendedAddressArrayList(); foreach (IPExtendedAddress address in ipAddresses) { unicastAddresses.InternalAdd(new SystemUnicastIPAddressInformation(ipAdapterInfo,address)); } try { ipv4Properties = new SystemIPv4InterfaceProperties(fixedInfo,ipAdapterInfo); if (dnsAddresses == null || dnsAddresses.Count == 0) { dnsAddresses = ((SystemIPv4InterfaceProperties)ipv4Properties).DnsAddresses; } } catch (NetworkInformationException exception) { if (exception.ErrorCode != IpHelperErrors.ErrorInvalidParameter) throw; } } public override bool IsDnsEnabled{get { return dnsEnabled;}} //only valid for OS>=XP public override bool IsDynamicDnsEnabled{get {return dynamicDnsEnabled;}} // Stats specific for Ipv4. Ipv6 will be added in Longhorn public override IPv4InterfaceProperties GetIPv4Properties(){ if (index == 0) { throw new NetworkInformationException(SocketError.ProtocolNotSupported); } return ipv4Properties; } // Stats specific for Ipv4. Ipv6 will be added in Longhorn public override IPv6InterfaceProperties GetIPv6Properties(){ if (ipv6Index == 0) { throw new NetworkInformationException(SocketError.ProtocolNotSupported); } return ipv6Properties; } public override string DnsSuffix { get { if (! ComNetOS.IsWin2K) throw new PlatformNotSupportedException(SR.GetString(SR.Win2000Required)); return dnsSuffix; } } //returns the addresses specified by the address type. public override IPAddressInformationCollection AnycastAddresses{ get{ return anycastAddresses; } } //returns the addresses specified by the address type. public override UnicastIPAddressInformationCollection UnicastAddresses{ get{ return unicastAddresses; } } //returns the addresses specified by the address type. public override MulticastIPAddressInformationCollection MulticastAddresses{ get{ return multicastAddresses; } } //returns the addresses specified by the address type. public override IPAddressCollection DnsAddresses{ get{ return dnsAddresses; } } /// IP Address of the default gateway. public override GatewayIPAddressInformationCollection GatewayAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetGatewayAddresses(); } return new GatewayIPAddressInformationCollection(); } } public override IPAddressCollection DhcpServerAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetDhcpServerAddresses(); } return new IPAddressCollection(); } } public override IPAddressCollection WinsServersAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetWinsServersAddresses(); } return new IPAddressCollection(); } } //This method is invoked to fill in the rest of the values //for ipv4 interfaces that aren't available via GetAdapterAddresses internal bool Update(FixedInfo fixedInfo,IpAdapterInfo ipAdapterInfo) { try { ArrayList ipAddresses = ipAdapterInfo.ipAddressList.ToIPExtendedAddressArrayList(); foreach (IPExtendedAddress extendedAddress in ipAddresses) { foreach(SystemUnicastIPAddressInformation unicastAddress in unicastAddresses){ if(extendedAddress.address.Equals(unicastAddress.Address)){ unicastAddress.ipv4Mask = extendedAddress.mask; } } } ipv4Properties = new SystemIPv4InterfaceProperties(fixedInfo,ipAdapterInfo); if (dnsAddresses == null || dnsAddresses.Count == 0) { dnsAddresses = ((SystemIPv4InterfaceProperties)ipv4Properties).DnsAddresses; } } catch (NetworkInformationException exception) { if (exception.ErrorCode == IpHelperErrors.ErrorInvalidParameter || exception.ErrorCode == IpHelperErrors.ErrorInvalidData || exception.ErrorCode == IpHelperErrors.ErrorNoData || exception.ErrorCode == IpHelperErrors.ErrorInvalidFunction || exception.ErrorCode == IpHelperErrors.ErrorNoSuchDevice) return false; throw; } return true; } [RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")] private void ReadRegDnsSuffix() { RegistryKey key = null; try { string subKey = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + name; key = Registry.LocalMachine.OpenSubKey(subKey); if (null != key) { dnsSuffix = (string) key.GetValue("DhcpDomain"); if (dnsSuffix == null ) { dnsSuffix = (string) key.GetValue("Domain"); if (dnsSuffix == null) { dnsSuffix = String.Empty; } } } } finally{ if (null != key){ key.Close(); } } } /* [RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")] private uint ReadRegMetric(bool ipv6) { RegistryKey key = null; uint metric = 0; try { string subKey; if(ipv6){ "SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\\Interfaces\\" + name; } else{ "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + name; } key = Registry.LocalMachine.OpenSubKey(subKey); if (null != key) { metric = (uint) key.GetValue("InterfaceMetric"); } } finally{ if (null != key){ key.Close(); } } return metric; } */ } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. ////// namespace System.Net.NetworkInformation { using System.Net; using System.Net.Sockets; using System; using System.Runtime.InteropServices; using System.Collections; using System.ComponentModel; using System.Security.Permissions; using Microsoft.Win32; /// /// Provides support for ip configuation information and statistics. /// /// Provides information specific to a network /// interface. /// ////// internal class SystemIPInterfaceProperties:IPInterfaceProperties { //common properties uint mtu; //Unfortunately, any interface can //have two completely different valid indexes for ipv4 and ipv6 internal uint index = 0; internal uint ipv6Index = 0; internal IPVersion versionSupported = IPVersion.None; //these are valid for all interfaces bool dnsEnabled = false; bool dynamicDnsEnabled = false; //os>=xp only IPAddressCollection dnsAddresses = null; UnicastIPAddressInformationCollection unicastAddresses = null; //OS >= XP only MulticastIPAddressInformationCollection multicastAddresses = null; IPAddressInformationCollection anycastAddresses = null; AdapterFlags adapterFlags; string dnsSuffix; string name; //ipv4 only // SystemIPv4InterfaceProperties ipv4Properties; SystemIPv6InterfaceProperties ipv6Properties; private SystemIPInterfaceProperties(){} //This constructor is used only in the OS>=XP case //and uses the GetAdapterAddresses api internal SystemIPInterfaceProperties(FixedInfo fixedInfo, IpAdapterAddresses ipAdapterAddresses) { //network params info dnsEnabled = fixedInfo.EnableDns; //store the common api information index = ipAdapterAddresses.index; name = ipAdapterAddresses.AdapterName; //api specific info ipv6Index = ipAdapterAddresses.ipv6Index; if (index > 0) versionSupported |= IPVersion.IPv4; if (ipv6Index > 0) versionSupported |= IPVersion.IPv6; mtu = ipAdapterAddresses.mtu; adapterFlags = ipAdapterAddresses.flags; dnsSuffix = ipAdapterAddresses.dnsSuffix; dynamicDnsEnabled = ((ipAdapterAddresses.flags & AdapterFlags.DnsEnabled) > 0); multicastAddresses = SystemMulticastIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstMulticastAddress); dnsAddresses = SystemIPAddressInformation.ToAddressCollection(ipAdapterAddresses.FirstDnsServerAddress,versionSupported); anycastAddresses = SystemIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstAnycastAddress,versionSupported); unicastAddresses = SystemUnicastIPAddressInformation.ToAddressInformationCollection(ipAdapterAddresses.FirstUnicastAddress); if (ipv6Index > 0){ ipv6Properties = new SystemIPv6InterfaceProperties(ipv6Index,mtu); } } //This constructor is used only in the OSProvides information specific to a network interface. A network interface can have more than one IPAddress associated with it. If the machine is >= XP, we call the native GetAdaptersAddresses api to /// prepopulate all of the interface instances and most of their associated information. Otherwise, /// GetAdaptersInfo is called. ///0) versionSupported |= IPVersion.IPv4; //have to get the suffix from the registry if 2k if (ComNetOS.IsWin2K) ReadRegDnsSuffix(); //get ipaddresses unicastAddresses = new UnicastIPAddressInformationCollection(); ArrayList ipAddresses = ipAdapterInfo.ipAddressList.ToIPExtendedAddressArrayList(); foreach (IPExtendedAddress address in ipAddresses) { unicastAddresses.InternalAdd(new SystemUnicastIPAddressInformation(ipAdapterInfo,address)); } try { ipv4Properties = new SystemIPv4InterfaceProperties(fixedInfo,ipAdapterInfo); if (dnsAddresses == null || dnsAddresses.Count == 0) { dnsAddresses = ((SystemIPv4InterfaceProperties)ipv4Properties).DnsAddresses; } } catch (NetworkInformationException exception) { if (exception.ErrorCode != IpHelperErrors.ErrorInvalidParameter) throw; } } public override bool IsDnsEnabled{get { return dnsEnabled;}} //only valid for OS>=XP public override bool IsDynamicDnsEnabled{get {return dynamicDnsEnabled;}} // Stats specific for Ipv4. Ipv6 will be added in Longhorn public override IPv4InterfaceProperties GetIPv4Properties(){ if (index == 0) { throw new NetworkInformationException(SocketError.ProtocolNotSupported); } return ipv4Properties; } // Stats specific for Ipv4. Ipv6 will be added in Longhorn public override IPv6InterfaceProperties GetIPv6Properties(){ if (ipv6Index == 0) { throw new NetworkInformationException(SocketError.ProtocolNotSupported); } return ipv6Properties; } public override string DnsSuffix { get { if (! ComNetOS.IsWin2K) throw new PlatformNotSupportedException(SR.GetString(SR.Win2000Required)); return dnsSuffix; } } //returns the addresses specified by the address type. public override IPAddressInformationCollection AnycastAddresses{ get{ return anycastAddresses; } } //returns the addresses specified by the address type. public override UnicastIPAddressInformationCollection UnicastAddresses{ get{ return unicastAddresses; } } //returns the addresses specified by the address type. public override MulticastIPAddressInformationCollection MulticastAddresses{ get{ return multicastAddresses; } } //returns the addresses specified by the address type. public override IPAddressCollection DnsAddresses{ get{ return dnsAddresses; } } /// IP Address of the default gateway. public override GatewayIPAddressInformationCollection GatewayAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetGatewayAddresses(); } return new GatewayIPAddressInformationCollection(); } } public override IPAddressCollection DhcpServerAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetDhcpServerAddresses(); } return new IPAddressCollection(); } } public override IPAddressCollection WinsServersAddresses{ get{ if (ipv4Properties != null) { return ipv4Properties.GetWinsServersAddresses(); } return new IPAddressCollection(); } } //This method is invoked to fill in the rest of the values //for ipv4 interfaces that aren't available via GetAdapterAddresses internal bool Update(FixedInfo fixedInfo,IpAdapterInfo ipAdapterInfo) { try { ArrayList ipAddresses = ipAdapterInfo.ipAddressList.ToIPExtendedAddressArrayList(); foreach (IPExtendedAddress extendedAddress in ipAddresses) { foreach(SystemUnicastIPAddressInformation unicastAddress in unicastAddresses){ if(extendedAddress.address.Equals(unicastAddress.Address)){ unicastAddress.ipv4Mask = extendedAddress.mask; } } } ipv4Properties = new SystemIPv4InterfaceProperties(fixedInfo,ipAdapterInfo); if (dnsAddresses == null || dnsAddresses.Count == 0) { dnsAddresses = ((SystemIPv4InterfaceProperties)ipv4Properties).DnsAddresses; } } catch (NetworkInformationException exception) { if (exception.ErrorCode == IpHelperErrors.ErrorInvalidParameter || exception.ErrorCode == IpHelperErrors.ErrorInvalidData || exception.ErrorCode == IpHelperErrors.ErrorNoData || exception.ErrorCode == IpHelperErrors.ErrorInvalidFunction || exception.ErrorCode == IpHelperErrors.ErrorNoSuchDevice) return false; throw; } return true; } [RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")] private void ReadRegDnsSuffix() { RegistryKey key = null; try { string subKey = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + name; key = Registry.LocalMachine.OpenSubKey(subKey); if (null != key) { dnsSuffix = (string) key.GetValue("DhcpDomain"); if (dnsSuffix == null ) { dnsSuffix = (string) key.GetValue("Domain"); if (dnsSuffix == null) { dnsSuffix = String.Empty; } } } } finally{ if (null != key){ key.Close(); } } } /* [RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")] private uint ReadRegMetric(bool ipv6) { RegistryKey key = null; uint metric = 0; try { string subKey; if(ipv6){ "SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\\Interfaces\\" + name; } else{ "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + name; } key = Registry.LocalMachine.OpenSubKey(subKey); if (null != key) { metric = (uint) key.GetValue("InterfaceMetric"); } } finally{ if (null != key){ key.Close(); } } return metric; } */ } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlParameter.cs
- DataGridPageChangedEventArgs.cs
- MailDefinition.cs
- FacetDescription.cs
- SizeLimitedCache.cs
- ScrollableControl.cs
- Axis.cs
- CacheForPrimitiveTypes.cs
- SchemaMapping.cs
- ObjectStateEntryDbDataRecord.cs
- ImageFormatConverter.cs
- DocumentApplicationJournalEntry.cs
- SequenceDesigner.cs
- HelpKeywordAttribute.cs
- SupportsEventValidationAttribute.cs
- FrameworkElementFactoryMarkupObject.cs
- WinEventWrap.cs
- PassportAuthentication.cs
- MultiDataTrigger.cs
- ArgumentNullException.cs
- KeyPressEvent.cs
- SymLanguageVendor.cs
- ConfigurationManagerInternal.cs
- PixelFormats.cs
- UpWmlPageAdapter.cs
- DelegatedStream.cs
- UnsafeNativeMethodsCLR.cs
- ConditionalAttribute.cs
- HandlerWithFactory.cs
- DebugTrace.cs
- InputManager.cs
- ConvertTextFrag.cs
- EventWaitHandleSecurity.cs
- NamespaceInfo.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- Vector3DAnimation.cs
- OracleConnectionStringBuilder.cs
- Unit.cs
- ErrorWebPart.cs
- SoundPlayer.cs
- ChannelEndpointElement.cs
- TextServicesLoader.cs
- AssertFilter.cs
- _LocalDataStore.cs
- VirtualDirectoryMappingCollection.cs
- _NTAuthentication.cs
- RegexReplacement.cs
- LabelAutomationPeer.cs
- CounterSet.cs
- AsymmetricKeyExchangeFormatter.cs
- BitConverter.cs
- LinearKeyFrames.cs
- RightNameExpirationInfoPair.cs
- TransformProviderWrapper.cs
- ResolvedKeyFrameEntry.cs
- SerializationEventsCache.cs
- ChoiceConverter.cs
- BridgeDataReader.cs
- GridItemProviderWrapper.cs
- HttpWebResponse.cs
- CmsInterop.cs
- DetailsViewUpdateEventArgs.cs
- MessageContractExporter.cs
- TextTreeUndoUnit.cs
- XPathDocument.cs
- SetterBase.cs
- XPathDocumentNavigator.cs
- SecurityToken.cs
- PriorityQueue.cs
- DataBoundControlHelper.cs
- Point3DCollectionConverter.cs
- xmlfixedPageInfo.cs
- OutputCacheModule.cs
- ThaiBuddhistCalendar.cs
- LocalizationComments.cs
- DateTimeSerializationSection.cs
- JsonEnumDataContract.cs
- DataBinder.cs
- PersistenceContextEnlistment.cs
- TransformValueSerializer.cs
- WebControl.cs
- XmlRawWriterWrapper.cs
- PrintDialog.cs
- TextEffectResolver.cs
- Lasso.cs
- TypeUsage.cs
- XPathAncestorQuery.cs
- ConfigurationManagerInternalFactory.cs
- ShaderEffect.cs
- AutomationEvent.cs
- DES.cs
- InternalConfigEventArgs.cs
- EventSetter.cs
- SaveWorkflowCommand.cs
- DiagnosticStrings.cs
- EntityRecordInfo.cs
- NumberSubstitution.cs
- HuffModule.cs
- DataError.cs
- MergablePropertyAttribute.cs