Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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;iSpecifies 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
- ToolStripDropDownClosingEventArgs.cs
- TreeNodeStyle.cs
- SqlFlattener.cs
- MarkupProperty.cs
- ObjectTokenCategory.cs
- ToolStripArrowRenderEventArgs.cs
- DataAccessor.cs
- CodeTypeReferenceExpression.cs
- CompilerParameters.cs
- PropertyCondition.cs
- XmlStrings.cs
- DetailsViewDeleteEventArgs.cs
- ButtonBase.cs
- ListBoxChrome.cs
- FacetChecker.cs
- MatrixTransform3D.cs
- AssertFilter.cs
- _Rfc2616CacheValidators.cs
- XPathBinder.cs
- PKCS1MaskGenerationMethod.cs
- AgileSafeNativeMemoryHandle.cs
- FileSecurity.cs
- XmlAttributeCollection.cs
- Quack.cs
- NotFiniteNumberException.cs
- ContainerUIElement3D.cs
- TemplateAction.cs
- XmlValidatingReaderImpl.cs
- followingquery.cs
- EventlogProvider.cs
- SmtpNetworkElement.cs
- SQLDateTimeStorage.cs
- ExpressionWriter.cs
- DataError.cs
- AccessKeyManager.cs
- Vector.cs
- SortedDictionary.cs
- MD5.cs
- ParameterToken.cs
- Models.cs
- TreeWalkHelper.cs
- ViewDesigner.cs
- HttpConfigurationSystem.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- CommandHelpers.cs
- DataListItemCollection.cs
- JoinTreeSlot.cs
- EncodingFallbackAwareXmlTextWriter.cs
- StylusButtonEventArgs.cs
- RegistrySecurity.cs
- ZoneIdentityPermission.cs
- SchemaMerger.cs
- EditBehavior.cs
- XsltSettings.cs
- PersonalizationEntry.cs
- Not.cs
- AuthorizationPolicyTypeElement.cs
- ParameterExpression.cs
- SizeAnimation.cs
- ArgumentValidation.cs
- Mouse.cs
- ValuePattern.cs
- Win32Native.cs
- HtmlTableRow.cs
- EventLogException.cs
- SetIndexBinder.cs
- ClientUtils.cs
- objectquery_tresulttype.cs
- DoubleAnimationUsingPath.cs
- PopOutPanel.cs
- Int64AnimationBase.cs
- Content.cs
- ReferenceEqualityComparer.cs
- PropertyIDSet.cs
- NewExpression.cs
- ApplicationBuildProvider.cs
- DesignerTransactionCloseEvent.cs
- PackageDigitalSignature.cs
- OperationContext.cs
- Animatable.cs
- SiteMapPathDesigner.cs
- storagemappingitemcollection.viewdictionary.cs
- WindowsSysHeader.cs
- Renderer.cs
- RoutedEventValueSerializer.cs
- ProjectionPlanCompiler.cs
- ActivitySurrogateSelector.cs
- AuthenticationModulesSection.cs
- ValidationPropertyAttribute.cs
- HttpResponse.cs
- CellTreeNodeVisitors.cs
- Menu.cs
- WindowsBrush.cs
- ToolStripButton.cs
- ProviderBase.cs
- CatalogPart.cs
- ListDictionary.cs
- ExpressionPrefixAttribute.cs
- HttpWebRequestElement.cs
- Paragraph.cs