Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Net / System / Net / NetworkInformation / SystemIPGlobalProperties.cs / 1 / SystemIPGlobalProperties.cs
namespace System.Net.NetworkInformation { using System.Net; using System.Net.Sockets; using System.Security.Permissions; using System; using System.Runtime.InteropServices; using System.Collections; using System.ComponentModel; using System.Threading; internal class SystemIPGlobalProperties:IPGlobalProperties { private FixedInfo fixedInfo; private bool fixedInfoInitialized = false; //changing these require a reboot, so we'll cache them instead. private static string hostName = null; private static string domainName = null; static object syncObject = new object(); internal SystemIPGlobalProperties() { } internal static FixedInfo GetFixedInfo(){ uint size = 0; SafeLocalFree buffer = null; FixedInfo fixedInfo = new FixedInfo(); //first we need to get the size of the buffer uint result = UnsafeNetInfoNativeMethods.GetNetworkParams(SafeLocalFree.Zero,ref size); while (result == IpHelperErrors.ErrorBufferOverflow) { try { //now we allocate the buffer and read the network parameters. buffer = SafeLocalFree.LocalAlloc((int)size); result = UnsafeNetInfoNativeMethods.GetNetworkParams(buffer,ref size); if ( result == IpHelperErrors.Success ) { fixedInfo = new FixedInfo( (FIXED_INFO)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(FIXED_INFO))); } } finally { if(buffer != null){ buffer.Close(); } } } //if the result include there being no information, we'll still throw if (result != IpHelperErrors.Success) { throw new NetworkInformationException((int)result); } return fixedInfo; } internal FixedInfo FixedInfo { get { if (!fixedInfoInitialized) { lock(this){ if (!fixedInfoInitialized) { fixedInfo = GetFixedInfo(); fixedInfoInitialized = true; } } } return fixedInfo; } } ///Specifies the host name for the local computer. public override string HostName{ get { if(hostName == null){ lock(syncObject){ if(hostName == null){ hostName = FixedInfo.HostName; domainName = FixedInfo.DomainName; } } } return hostName; } } ///Specifies the domain in which the local computer is registered. public override string DomainName{ get { if(domainName == null){ lock(syncObject){ if(domainName == null){ hostName = FixedInfo.HostName; domainName = FixedInfo.DomainName; } } } return domainName; } } ////// The type of node. /// ////// The exact mechanism by which NetBIOS names are resolved to IP addresses /// depends on the node's configured NetBIOS Node Type. Broadcast - uses broadcast /// NetBIOS Name Queries for name registration and resolution. /// PeerToPeer - uses a NetBIOS name server (NBNS), such as Windows Internet /// Name Service (WINS), to resolve NetBIOS names. /// Mixed - uses Broadcast then PeerToPeer. /// Hybrid - uses PeerToPeer then Broadcast. /// public override NetBiosNodeType NodeType{get { return (NetBiosNodeType)FixedInfo.NodeType;} } ///Specifies the DHCP scope name. public override string DhcpScopeName{get { return FixedInfo.ScopeId;} } ///Specifies whether the local computer is acting as an WINS proxy. public override bool IsWinsProxy{get { return (FixedInfo.EnableProxy);} } public override TcpConnectionInformation[] GetActiveTcpConnections(){ ArrayList list = new ArrayList(); TcpConnectionInformation[] connections = GetAllTcpConnections(); foreach(TcpConnectionInformation connection in connections){ if(connection.State != TcpState.Listen){ list.Add(connection); } } connections = new TcpConnectionInformation[list.Count]; for (int i=0; i< list.Count;i++) { connections[i]=(TcpConnectionInformation)list[i]; } return connections; } public override IPEndPoint[] GetActiveTcpListeners (){ ArrayList list = new ArrayList(); TcpConnectionInformation[] connections = GetAllTcpConnections(); foreach(TcpConnectionInformation connection in connections){ if(connection.State == TcpState.Listen){ list.Add(connection.LocalEndPoint); } } IPEndPoint[] endPoints = new IPEndPoint[list.Count]; for (int i=0; i< list.Count;i++) { endPoints[i]=(IPEndPoint)list[i]; } return endPoints; } ////// Gets the active tcp connections. Uses the native GetTcpTable api. private TcpConnectionInformation[] GetAllTcpConnections(){ uint size = 0; SafeLocalFree buffer = null; SystemTcpConnectionInformation[] tcpConnections = null; //get the size of buffer needed uint result = UnsafeNetInfoNativeMethods.GetTcpTable(SafeLocalFree.Zero,ref size,true); while (result == IpHelperErrors.ErrorInsufficientBuffer) { try { //allocate the buffer and get the tcptable buffer = SafeLocalFree.LocalAlloc((int)size); result = UnsafeNetInfoNativeMethods.GetTcpTable(buffer,ref size,true); if ( result == IpHelperErrors.Success ) { //the table info just gives us the number of rows. IntPtr newPtr = buffer.DangerousGetHandle(); MibTcpTable tcpTableInfo = (MibTcpTable)Marshal.PtrToStructure(newPtr,typeof(MibTcpTable)); if (tcpTableInfo.numberOfEntries > 0) { tcpConnections = new SystemTcpConnectionInformation[tcpTableInfo.numberOfEntries]; //we need to skip over the tableinfo to get the inline rows newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(tcpTableInfo.numberOfEntries)); for (int i=0;iGets the active udp listeners. Uses the native GetUdpTable api. public override IPEndPoint[] GetActiveUdpListeners(){ uint size = 0; SafeLocalFree buffer = null; IPEndPoint[] udpListeners = null; //get the size of buffer needed uint result = UnsafeNetInfoNativeMethods.GetUdpTable(SafeLocalFree.Zero,ref size,true); while (result == IpHelperErrors.ErrorInsufficientBuffer) { try { //allocate the buffer and get the udptable buffer = SafeLocalFree.LocalAlloc((int)size); result = UnsafeNetInfoNativeMethods.GetUdpTable(buffer,ref size,true); if ( result == IpHelperErrors.Success) { //the table info just gives us the number of rows. IntPtr newPtr = buffer.DangerousGetHandle(); MibUdpTable udpTableInfo = (MibUdpTable)Marshal.PtrToStructure(newPtr,typeof(MibUdpTable)); if (udpTableInfo.numberOfEntries > 0) { udpListeners = new IPEndPoint[udpTableInfo.numberOfEntries]; //we need to skip over the tableinfo to get the inline rows newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(udpTableInfo.numberOfEntries)); for (int i=0;i Specifies the host name for the local computer. public override string HostName{ get { if(hostName == null){ lock(syncObject){ if(hostName == null){ hostName = FixedInfo.HostName; domainName = FixedInfo.DomainName; } } } return hostName; } } /// Specifies the domain in which the local computer is registered. public override string DomainName{ get { if(domainName == null){ lock(syncObject){ if(domainName == null){ hostName = FixedInfo.HostName; domainName = FixedInfo.DomainName; } } } return domainName; } } ////// The type of node. /// ////// The exact mechanism by which NetBIOS names are resolved to IP addresses /// depends on the node's configured NetBIOS Node Type. Broadcast - uses broadcast /// NetBIOS Name Queries for name registration and resolution. /// PeerToPeer - uses a NetBIOS name server (NBNS), such as Windows Internet /// Name Service (WINS), to resolve NetBIOS names. /// Mixed - uses Broadcast then PeerToPeer. /// Hybrid - uses PeerToPeer then Broadcast. /// public override NetBiosNodeType NodeType{get { return (NetBiosNodeType)FixedInfo.NodeType;} } ///Specifies the DHCP scope name. public override string DhcpScopeName{get { return FixedInfo.ScopeId;} } ///Specifies whether the local computer is acting as an WINS proxy. public override bool IsWinsProxy{get { return (FixedInfo.EnableProxy);} } public override TcpConnectionInformation[] GetActiveTcpConnections(){ ArrayList list = new ArrayList(); TcpConnectionInformation[] connections = GetAllTcpConnections(); foreach(TcpConnectionInformation connection in connections){ if(connection.State != TcpState.Listen){ list.Add(connection); } } connections = new TcpConnectionInformation[list.Count]; for (int i=0; i< list.Count;i++) { connections[i]=(TcpConnectionInformation)list[i]; } return connections; } public override IPEndPoint[] GetActiveTcpListeners (){ ArrayList list = new ArrayList(); TcpConnectionInformation[] connections = GetAllTcpConnections(); foreach(TcpConnectionInformation connection in connections){ if(connection.State == TcpState.Listen){ list.Add(connection.LocalEndPoint); } } IPEndPoint[] endPoints = new IPEndPoint[list.Count]; for (int i=0; i< list.Count;i++) { endPoints[i]=(IPEndPoint)list[i]; } return endPoints; } ////// Gets the active tcp connections. Uses the native GetTcpTable api. private TcpConnectionInformation[] GetAllTcpConnections(){ uint size = 0; SafeLocalFree buffer = null; SystemTcpConnectionInformation[] tcpConnections = null; //get the size of buffer needed uint result = UnsafeNetInfoNativeMethods.GetTcpTable(SafeLocalFree.Zero,ref size,true); while (result == IpHelperErrors.ErrorInsufficientBuffer) { try { //allocate the buffer and get the tcptable buffer = SafeLocalFree.LocalAlloc((int)size); result = UnsafeNetInfoNativeMethods.GetTcpTable(buffer,ref size,true); if ( result == IpHelperErrors.Success ) { //the table info just gives us the number of rows. IntPtr newPtr = buffer.DangerousGetHandle(); MibTcpTable tcpTableInfo = (MibTcpTable)Marshal.PtrToStructure(newPtr,typeof(MibTcpTable)); if (tcpTableInfo.numberOfEntries > 0) { tcpConnections = new SystemTcpConnectionInformation[tcpTableInfo.numberOfEntries]; //we need to skip over the tableinfo to get the inline rows newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(tcpTableInfo.numberOfEntries)); for (int i=0;iGets the active udp listeners. Uses the native GetUdpTable api. public override IPEndPoint[] GetActiveUdpListeners(){ uint size = 0; SafeLocalFree buffer = null; IPEndPoint[] udpListeners = null; //get the size of buffer needed uint result = UnsafeNetInfoNativeMethods.GetUdpTable(SafeLocalFree.Zero,ref size,true); while (result == IpHelperErrors.ErrorInsufficientBuffer) { try { //allocate the buffer and get the udptable buffer = SafeLocalFree.LocalAlloc((int)size); result = UnsafeNetInfoNativeMethods.GetUdpTable(buffer,ref size,true); if ( result == IpHelperErrors.Success) { //the table info just gives us the number of rows. IntPtr newPtr = buffer.DangerousGetHandle(); MibUdpTable udpTableInfo = (MibUdpTable)Marshal.PtrToStructure(newPtr,typeof(MibUdpTable)); if (udpTableInfo.numberOfEntries > 0) { udpListeners = new IPEndPoint[udpTableInfo.numberOfEntries]; //we need to skip over the tableinfo to get the inline rows newPtr = (IntPtr)((long)newPtr + Marshal.SizeOf(udpTableInfo.numberOfEntries)); for (int i=0;i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Utilities.cs
- TreeViewBindingsEditor.cs
- DataList.cs
- EventEntry.cs
- StringToken.cs
- _ShellExpression.cs
- DoWhileDesigner.xaml.cs
- ContextStaticAttribute.cs
- DataBindingsDialog.cs
- COM2Properties.cs
- ThumbButtonInfoCollection.cs
- XmlDocumentType.cs
- _NativeSSPI.cs
- Freezable.cs
- StorageComplexTypeMapping.cs
- CryptoApi.cs
- MailMessageEventArgs.cs
- OleDbDataReader.cs
- EmptyEnumerator.cs
- LassoSelectionBehavior.cs
- AddressAlreadyInUseException.cs
- TraceSource.cs
- XPathDocument.cs
- DetailsViewInsertEventArgs.cs
- NumberAction.cs
- SafeCoTaskMem.cs
- EntityEntry.cs
- LinqDataView.cs
- OutputBuffer.cs
- DataViewSetting.cs
- CompModSwitches.cs
- PointLight.cs
- EnumDataContract.cs
- EmptyStringExpandableObjectConverter.cs
- Rectangle.cs
- DataGridViewCellStyleConverter.cs
- SqlReorderer.cs
- HtmlTableRowCollection.cs
- DoubleKeyFrameCollection.cs
- ActionMismatchAddressingException.cs
- ObjRef.cs
- CryptoApi.cs
- glyphs.cs
- ListBoxItem.cs
- SqlUserDefinedTypeAttribute.cs
- PersistenceTypeAttribute.cs
- AsymmetricSignatureFormatter.cs
- ConnectivityStatus.cs
- ControlCachePolicy.cs
- RegionInfo.cs
- WindowsStartMenu.cs
- URLBuilder.cs
- unitconverter.cs
- CmsInterop.cs
- Encoder.cs
- UTF32Encoding.cs
- TreeNodeClickEventArgs.cs
- TextAction.cs
- NullableLongMinMaxAggregationOperator.cs
- SortableBindingList.cs
- ImportContext.cs
- ListSortDescription.cs
- TagPrefixInfo.cs
- RemoteX509Token.cs
- Error.cs
- IndicShape.cs
- BaseCollection.cs
- DbMetaDataCollectionNames.cs
- InvalidPipelineStoreException.cs
- IntersectQueryOperator.cs
- TextRunTypographyProperties.cs
- PropertyMetadata.cs
- WebPartMenuStyle.cs
- ConfigXmlComment.cs
- DataGridViewComboBoxCell.cs
- SchemaMapping.cs
- AnimationException.cs
- ProfileServiceManager.cs
- DecimalConstantAttribute.cs
- HtmlInputFile.cs
- GraphicsState.cs
- GlobalizationAssembly.cs
- SecurityManager.cs
- VarRefManager.cs
- Literal.cs
- ReadingWritingEntityEventArgs.cs
- ToolboxBitmapAttribute.cs
- FormatterServices.cs
- ContextBase.cs
- TypeUsage.cs
- CatalogZone.cs
- SizeAnimationClockResource.cs
- DiffuseMaterial.cs
- DataGridViewDataErrorEventArgs.cs
- ThrowHelper.cs
- Matrix3DConverter.cs
- HttpModulesSection.cs
- printdlgexmarshaler.cs
- Transform3DGroup.cs
- TrustManager.cs