Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / NetworkInformation / SystemNetworkInterface.cs / 1305376 / SystemNetworkInterface.cs
///
/// Provides support for ip configuation information and statistics.
///
///
namespace System.Net.NetworkInformation {
using System.Threading;
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;
[Flags]
internal enum IPVersion {
None = 0,
IPv4 = 1,
IPv6 = 2
}
internal class SystemNetworkInterface:NetworkInterface {
//common properties
string name;
string id;
string description;
byte[] physicalAddress;
uint addressLength;
NetworkInterfaceType type;
OperationalStatus operStatus;
long speed;
//Unfortunately, any interface can
//have two completely different valid indexes for ipv4 and ipv6
internal uint index = 0;
internal uint ipv6Index = 0;
AdapterFlags adapterFlags;
//ipv4 only
//
SystemIPInterfaceProperties interfaceProperties = null;
private SystemNetworkInterface(){}
//methods
///
/// Gets the network interfaces local to the machine.
/// 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.
///
//this returns both ipv4 and ipv6 interfaces
internal static NetworkInterface[] GetNetworkInterfaces(){
return GetNetworkInterfaces(0);
}
internal static int InternalLoopbackInterfaceIndex{
get{
int index;
int error = (int)UnsafeNetInfoNativeMethods.GetBestInterface(0x100007F,out index);
if (error != 0) {
throw new NetworkInformationException(error);
}
return index;
}
}
internal static bool InternalGetIsNetworkAvailable(){
if(ComNetOS.IsWinNt){
NetworkInterface[] networkInterfaces = GetNetworkInterfaces();
foreach (NetworkInterface netInterface in networkInterfaces) {
if(netInterface.OperationalStatus == OperationalStatus.Up && netInterface.NetworkInterfaceType != NetworkInterfaceType.Tunnel
&& netInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback){
return true;
}
}
}
else{
uint flags=0;
return UnsafeWinINetNativeMethods.InternetGetConnectedState (ref flags, 0);
}
return false;
}
//address family specific
private static NetworkInterface[] GetNetworkInterfaces(AddressFamily family){
IpHelperErrors.CheckFamilyUnspecified(family);
//uses GetAdapterAddresses if os >= winxp
if (ComNetOS.IsPostWin2K) {
return PostWin2KGetNetworkInterfaces(family);
}
// os < winxp
//make sure we are only looking for ipv4
FixedInfo fixedInfo = SystemIPGlobalProperties.GetFixedInfo();
if (family != 0 && family!= AddressFamily.InterNetwork)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
SafeLocalFree buffer = null;
uint size = 0;
IpAdapterInfo info;
ArrayList interfaceList = new ArrayList();
//figure out the size of the buffer we need
uint result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(SafeLocalFree.Zero,ref size);
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
//now get the adapter info and populate the network interface objects.
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(buffer,ref size);
if ( result == IpHelperErrors.Success ) {
info = (IpAdapterInfo)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(IpAdapterInfo));
interfaceList.Add( new SystemNetworkInterface(fixedInfo,info));
while(info.Next != IntPtr.Zero) {
info = (IpAdapterInfo)Marshal.PtrToStructure(info.Next,typeof(IpAdapterInfo));
interfaceList.Add( new SystemNetworkInterface(fixedInfo,info));
}
}
}
finally {
if (buffer != null)
buffer.Close();
}
}
// if we don't have any interfaces detected, return empty.
if (result == IpHelperErrors.ErrorNoData)
return new SystemNetworkInterface[0];
//otherwise we throw on an error
if (result != IpHelperErrors.Success) {
throw new NetworkInformationException((int)result);
}
// create the array of interfaces to return
SystemNetworkInterface[] networkInterfaces = new SystemNetworkInterface[interfaceList.Count];
for ( int i = 0; i < interfaceList.Count; ++i ) {
networkInterfaces[i] = (SystemNetworkInterface)interfaceList[i];
}
return networkInterfaces;
}
private static SystemNetworkInterface[] GetAdaptersAddresses(AddressFamily family, FixedInfo fixedInfo) {
uint size = 0;
SafeLocalFree buffer = null;
ArrayList interfaceList = new ArrayList();
SystemNetworkInterface[] networkInterfaces = null;
//get each adapter's info
//get the size of the buffer required
uint result = UnsafeNetInfoNativeMethods.GetAdaptersAddresses(family,0,IntPtr.Zero,SafeLocalFree.Zero,ref size);
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
//allocate the buffer and get the adapter info
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersAddresses(family,0,IntPtr.Zero,buffer,ref size);
//if succeeded, we're going to add each new interface
if ( result == IpHelperErrors.Success) {
//get the first adapter
// we don't know the number of interfaces until we've
// actually marshalled all of them
IpAdapterAddresses adapterAddresses = (IpAdapterAddresses)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(IpAdapterAddresses));
interfaceList.Add(new SystemNetworkInterface(fixedInfo,adapterAddresses));
//get the rest
while(adapterAddresses.next != IntPtr.Zero) {
adapterAddresses = (IpAdapterAddresses)Marshal.PtrToStructure(adapterAddresses.next,typeof(IpAdapterAddresses));
interfaceList.Add(new SystemNetworkInterface(fixedInfo,adapterAddresses));
}
}
}
finally {
if (buffer != null)
buffer.Close();
buffer = null;
}
}
// if we don't have any interfaces detected, return empty.
if (result == IpHelperErrors.ErrorNoData || result == IpHelperErrors.ErrorInvalidParameter)
return new SystemNetworkInterface[0];
//otherwise we throw on an error
if (result != IpHelperErrors.Success) {
throw new NetworkInformationException((int)result);
}
// create the array of interfaces to return
networkInterfaces = new SystemNetworkInterface[interfaceList.Count];
for ( int i = 0; i < interfaceList.Count; ++i ) {
networkInterfaces[i] = (SystemNetworkInterface)interfaceList[i];
}
return networkInterfaces;
}
private static SystemNetworkInterface[] PostWin2KGetNetworkInterfaces(AddressFamily family) {
FixedInfo fixedInfo = SystemIPGlobalProperties.GetFixedInfo();
SystemNetworkInterface[] networkInterfaces = null;
while (true) {
try {
networkInterfaces = GetAdaptersAddresses(family, fixedInfo);
break;
} catch (NetworkInformationException exception) {
if (exception.ErrorCode != IpHelperErrors.ErrorInvalidFunction)
throw;
}
}
if (!Socket.OSSupportsIPv4) // Only if IPv4 is supported continue below
{
return networkInterfaces;
}
//GetAdapterAddresses doesn't currently include all of the possible
//ipv4 information, so we need to call GetAdaptersInfo to populate
// the rest of the fields.
uint size = 0;
uint result = 0;
SafeLocalFree buffer = null;
if (family == 0 || family == AddressFamily.InterNetwork) {
//figure out the size of the buffer we need
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(SafeLocalFree.Zero,ref size);
int failedUpdateCount = 0;
//now use GetAdaptersInfo and update the network interface objects w/ the information
// missing in GetAdaptersAddresses.
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(buffer,ref size);
//basically, we get the additional adapterinfo for each ipv4 adapter and
//call update on the interface
if ( result == IpHelperErrors.Success ){
IntPtr myPtr = buffer.DangerousGetHandle();
bool success = false;
while (myPtr != IntPtr.Zero)
{
IpAdapterInfo info = (IpAdapterInfo)Marshal.PtrToStructure(myPtr, typeof(IpAdapterInfo));
for (int i = 0; i < networkInterfaces.Length; i++)
{
if (networkInterfaces[i] != null)
{
if (info.index == networkInterfaces[i].index)
{
success = networkInterfaces[i].interfaceProperties.Update(fixedInfo, info);
if (!success)
{
networkInterfaces[i] = null;
failedUpdateCount++;
}
break;
}
}
}
myPtr = info.Next;
}
}
}
finally {
if (buffer != null)
buffer.Close();
}
}
if (failedUpdateCount != 0) {
SystemNetworkInterface[] newNetworkInterfaces =
new SystemNetworkInterface[networkInterfaces.Length-failedUpdateCount];
int newArrayIndex = 0;
for (int i=0; i < networkInterfaces.Length; i++) {
if (networkInterfaces[i] != null)
newNetworkInterfaces[newArrayIndex++] = networkInterfaces[i];
}
networkInterfaces = newNetworkInterfaces;
}
}
// if we don't have any ipv4 interfaces detected, just continue
if (result != IpHelperErrors.Success &&
result != IpHelperErrors.ErrorNoData)
{
throw new NetworkInformationException((int)result);
}
return networkInterfaces;
}
//This constructor is used only in the OS>=XP case
//and uses the GetAdapterAddresses api
internal SystemNetworkInterface(FixedInfo fixedInfo, IpAdapterAddresses ipAdapterAddresses) {
//store the common api information
id = ipAdapterAddresses.AdapterName;
name = ipAdapterAddresses.friendlyName;
description = ipAdapterAddresses.description;
index = ipAdapterAddresses.index;
physicalAddress = ipAdapterAddresses.address;
addressLength = ipAdapterAddresses.addressLength;
type = ipAdapterAddresses.type;
operStatus = ipAdapterAddresses.operStatus;
//api specific info
ipv6Index = ipAdapterAddresses.ipv6Index;
adapterFlags = ipAdapterAddresses.flags;
interfaceProperties = new SystemIPInterfaceProperties(fixedInfo,ipAdapterAddresses);
}
//This constructor is used only in the OS
public override IPv4InterfaceStatistics GetIPv4Statistics(){
return new SystemIPv4InterfaceStatistics(index);
}
public override bool Supports(NetworkInterfaceComponent networkInterfaceComponent){
if (networkInterfaceComponent == NetworkInterfaceComponent.IPv6 && ipv6Index >0){
return true;
}
if (networkInterfaceComponent == NetworkInterfaceComponent.IPv4 && index >0){
return true;
}
return false;
}
/// Is the interface administratively enabled.
//public override bool AdministrationEnabled{get {return false;}} //interface specific property
//We cache this to be consistent across all platforms
public override OperationalStatus OperationalStatus{
get {
return operStatus;
}
}
public override long Speed{
get {
if (speed == 0) {
SystemIPv4InterfaceStatistics s = new SystemIPv4InterfaceStatistics(index);
speed = s.Speed;
}
return speed;
}
}
/// OS < XP
///
///
public override bool IsReceiveOnly {
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return ((adapterFlags & AdapterFlags.ReceiveOnly) > 0);
}
} //throw if The interface doesn't allow multicast.
/// OS < XP
///
///
public override bool SupportsMulticast {
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return ((adapterFlags & AdapterFlags.NoMulticast) == 0);
}
}
[RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}")]
private string ReadAdapterName(string id) {
RegistryKey key = null;
string name = String.Empty;
try {
string subKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\"+id+"\\Connection";
key = Registry.LocalMachine.OpenSubKey(subKey);
if (null != key) {
name = (string) key.GetValue("Name");
if (name == null ) {
name = String.Empty;
}
}
}
finally{
if (null != key){
key.Close();
}
}
return name;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
///
/// Provides support for ip configuation information and statistics.
///
///
namespace System.Net.NetworkInformation {
using System.Threading;
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;
[Flags]
internal enum IPVersion {
None = 0,
IPv4 = 1,
IPv6 = 2
}
internal class SystemNetworkInterface:NetworkInterface {
//common properties
string name;
string id;
string description;
byte[] physicalAddress;
uint addressLength;
NetworkInterfaceType type;
OperationalStatus operStatus;
long speed;
//Unfortunately, any interface can
//have two completely different valid indexes for ipv4 and ipv6
internal uint index = 0;
internal uint ipv6Index = 0;
AdapterFlags adapterFlags;
//ipv4 only
//
SystemIPInterfaceProperties interfaceProperties = null;
private SystemNetworkInterface(){}
//methods
///
/// Gets the network interfaces local to the machine.
/// 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.
///
//this returns both ipv4 and ipv6 interfaces
internal static NetworkInterface[] GetNetworkInterfaces(){
return GetNetworkInterfaces(0);
}
internal static int InternalLoopbackInterfaceIndex{
get{
int index;
int error = (int)UnsafeNetInfoNativeMethods.GetBestInterface(0x100007F,out index);
if (error != 0) {
throw new NetworkInformationException(error);
}
return index;
}
}
internal static bool InternalGetIsNetworkAvailable(){
if(ComNetOS.IsWinNt){
NetworkInterface[] networkInterfaces = GetNetworkInterfaces();
foreach (NetworkInterface netInterface in networkInterfaces) {
if(netInterface.OperationalStatus == OperationalStatus.Up && netInterface.NetworkInterfaceType != NetworkInterfaceType.Tunnel
&& netInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback){
return true;
}
}
}
else{
uint flags=0;
return UnsafeWinINetNativeMethods.InternetGetConnectedState (ref flags, 0);
}
return false;
}
//address family specific
private static NetworkInterface[] GetNetworkInterfaces(AddressFamily family){
IpHelperErrors.CheckFamilyUnspecified(family);
//uses GetAdapterAddresses if os >= winxp
if (ComNetOS.IsPostWin2K) {
return PostWin2KGetNetworkInterfaces(family);
}
// os < winxp
//make sure we are only looking for ipv4
FixedInfo fixedInfo = SystemIPGlobalProperties.GetFixedInfo();
if (family != 0 && family!= AddressFamily.InterNetwork)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
SafeLocalFree buffer = null;
uint size = 0;
IpAdapterInfo info;
ArrayList interfaceList = new ArrayList();
//figure out the size of the buffer we need
uint result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(SafeLocalFree.Zero,ref size);
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
//now get the adapter info and populate the network interface objects.
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(buffer,ref size);
if ( result == IpHelperErrors.Success ) {
info = (IpAdapterInfo)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(IpAdapterInfo));
interfaceList.Add( new SystemNetworkInterface(fixedInfo,info));
while(info.Next != IntPtr.Zero) {
info = (IpAdapterInfo)Marshal.PtrToStructure(info.Next,typeof(IpAdapterInfo));
interfaceList.Add( new SystemNetworkInterface(fixedInfo,info));
}
}
}
finally {
if (buffer != null)
buffer.Close();
}
}
// if we don't have any interfaces detected, return empty.
if (result == IpHelperErrors.ErrorNoData)
return new SystemNetworkInterface[0];
//otherwise we throw on an error
if (result != IpHelperErrors.Success) {
throw new NetworkInformationException((int)result);
}
// create the array of interfaces to return
SystemNetworkInterface[] networkInterfaces = new SystemNetworkInterface[interfaceList.Count];
for ( int i = 0; i < interfaceList.Count; ++i ) {
networkInterfaces[i] = (SystemNetworkInterface)interfaceList[i];
}
return networkInterfaces;
}
private static SystemNetworkInterface[] GetAdaptersAddresses(AddressFamily family, FixedInfo fixedInfo) {
uint size = 0;
SafeLocalFree buffer = null;
ArrayList interfaceList = new ArrayList();
SystemNetworkInterface[] networkInterfaces = null;
//get each adapter's info
//get the size of the buffer required
uint result = UnsafeNetInfoNativeMethods.GetAdaptersAddresses(family,0,IntPtr.Zero,SafeLocalFree.Zero,ref size);
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
//allocate the buffer and get the adapter info
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersAddresses(family,0,IntPtr.Zero,buffer,ref size);
//if succeeded, we're going to add each new interface
if ( result == IpHelperErrors.Success) {
//get the first adapter
// we don't know the number of interfaces until we've
// actually marshalled all of them
IpAdapterAddresses adapterAddresses = (IpAdapterAddresses)Marshal.PtrToStructure(buffer.DangerousGetHandle(),typeof(IpAdapterAddresses));
interfaceList.Add(new SystemNetworkInterface(fixedInfo,adapterAddresses));
//get the rest
while(adapterAddresses.next != IntPtr.Zero) {
adapterAddresses = (IpAdapterAddresses)Marshal.PtrToStructure(adapterAddresses.next,typeof(IpAdapterAddresses));
interfaceList.Add(new SystemNetworkInterface(fixedInfo,adapterAddresses));
}
}
}
finally {
if (buffer != null)
buffer.Close();
buffer = null;
}
}
// if we don't have any interfaces detected, return empty.
if (result == IpHelperErrors.ErrorNoData || result == IpHelperErrors.ErrorInvalidParameter)
return new SystemNetworkInterface[0];
//otherwise we throw on an error
if (result != IpHelperErrors.Success) {
throw new NetworkInformationException((int)result);
}
// create the array of interfaces to return
networkInterfaces = new SystemNetworkInterface[interfaceList.Count];
for ( int i = 0; i < interfaceList.Count; ++i ) {
networkInterfaces[i] = (SystemNetworkInterface)interfaceList[i];
}
return networkInterfaces;
}
private static SystemNetworkInterface[] PostWin2KGetNetworkInterfaces(AddressFamily family) {
FixedInfo fixedInfo = SystemIPGlobalProperties.GetFixedInfo();
SystemNetworkInterface[] networkInterfaces = null;
while (true) {
try {
networkInterfaces = GetAdaptersAddresses(family, fixedInfo);
break;
} catch (NetworkInformationException exception) {
if (exception.ErrorCode != IpHelperErrors.ErrorInvalidFunction)
throw;
}
}
if (!Socket.OSSupportsIPv4) // Only if IPv4 is supported continue below
{
return networkInterfaces;
}
//GetAdapterAddresses doesn't currently include all of the possible
//ipv4 information, so we need to call GetAdaptersInfo to populate
// the rest of the fields.
uint size = 0;
uint result = 0;
SafeLocalFree buffer = null;
if (family == 0 || family == AddressFamily.InterNetwork) {
//figure out the size of the buffer we need
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(SafeLocalFree.Zero,ref size);
int failedUpdateCount = 0;
//now use GetAdaptersInfo and update the network interface objects w/ the information
// missing in GetAdaptersAddresses.
while (result == IpHelperErrors.ErrorBufferOverflow) {
try {
buffer = SafeLocalFree.LocalAlloc((int)size);
result = UnsafeNetInfoNativeMethods.GetAdaptersInfo(buffer,ref size);
//basically, we get the additional adapterinfo for each ipv4 adapter and
//call update on the interface
if ( result == IpHelperErrors.Success ){
IntPtr myPtr = buffer.DangerousGetHandle();
bool success = false;
while (myPtr != IntPtr.Zero)
{
IpAdapterInfo info = (IpAdapterInfo)Marshal.PtrToStructure(myPtr, typeof(IpAdapterInfo));
for (int i = 0; i < networkInterfaces.Length; i++)
{
if (networkInterfaces[i] != null)
{
if (info.index == networkInterfaces[i].index)
{
success = networkInterfaces[i].interfaceProperties.Update(fixedInfo, info);
if (!success)
{
networkInterfaces[i] = null;
failedUpdateCount++;
}
break;
}
}
}
myPtr = info.Next;
}
}
}
finally {
if (buffer != null)
buffer.Close();
}
}
if (failedUpdateCount != 0) {
SystemNetworkInterface[] newNetworkInterfaces =
new SystemNetworkInterface[networkInterfaces.Length-failedUpdateCount];
int newArrayIndex = 0;
for (int i=0; i < networkInterfaces.Length; i++) {
if (networkInterfaces[i] != null)
newNetworkInterfaces[newArrayIndex++] = networkInterfaces[i];
}
networkInterfaces = newNetworkInterfaces;
}
}
// if we don't have any ipv4 interfaces detected, just continue
if (result != IpHelperErrors.Success &&
result != IpHelperErrors.ErrorNoData)
{
throw new NetworkInformationException((int)result);
}
return networkInterfaces;
}
//This constructor is used only in the OS>=XP case
//and uses the GetAdapterAddresses api
internal SystemNetworkInterface(FixedInfo fixedInfo, IpAdapterAddresses ipAdapterAddresses) {
//store the common api information
id = ipAdapterAddresses.AdapterName;
name = ipAdapterAddresses.friendlyName;
description = ipAdapterAddresses.description;
index = ipAdapterAddresses.index;
physicalAddress = ipAdapterAddresses.address;
addressLength = ipAdapterAddresses.addressLength;
type = ipAdapterAddresses.type;
operStatus = ipAdapterAddresses.operStatus;
//api specific info
ipv6Index = ipAdapterAddresses.ipv6Index;
adapterFlags = ipAdapterAddresses.flags;
interfaceProperties = new SystemIPInterfaceProperties(fixedInfo,ipAdapterAddresses);
}
//This constructor is used only in the OS
public override IPv4InterfaceStatistics GetIPv4Statistics(){
return new SystemIPv4InterfaceStatistics(index);
}
public override bool Supports(NetworkInterfaceComponent networkInterfaceComponent){
if (networkInterfaceComponent == NetworkInterfaceComponent.IPv6 && ipv6Index >0){
return true;
}
if (networkInterfaceComponent == NetworkInterfaceComponent.IPv4 && index >0){
return true;
}
return false;
}
/// Is the interface administratively enabled.
//public override bool AdministrationEnabled{get {return false;}} //interface specific property
//We cache this to be consistent across all platforms
public override OperationalStatus OperationalStatus{
get {
return operStatus;
}
}
public override long Speed{
get {
if (speed == 0) {
SystemIPv4InterfaceStatistics s = new SystemIPv4InterfaceStatistics(index);
speed = s.Speed;
}
return speed;
}
}
/// OS < XP
///
///
public override bool IsReceiveOnly {
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return ((adapterFlags & AdapterFlags.ReceiveOnly) > 0);
}
} //throw if The interface doesn't allow multicast.
/// OS < XP
///
///
public override bool SupportsMulticast {
get {
if (! ComNetOS.IsPostWin2K)
throw new PlatformNotSupportedException(SR.GetString(SR.WinXPRequired));
return ((adapterFlags & AdapterFlags.NoMulticast) == 0);
}
}
[RegistryPermission(SecurityAction.Assert, Read="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}")]
private string ReadAdapterName(string id) {
RegistryKey key = null;
string name = String.Empty;
try {
string subKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\"+id+"\\Connection";
key = Registry.LocalMachine.OpenSubKey(subKey);
if (null != key) {
name = (string) key.GetValue("Name");
if (name == null ) {
name = String.Empty;
}
}
}
finally{
if (null != key){
key.Close();
}
}
return name;
}
}
}
// 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
- StatusStrip.cs
- Maps.cs
- DataControlPagerLinkButton.cs
- ReadOnlyCollection.cs
- WebPartCloseVerb.cs
- RequestContext.cs
- ServiceProviders.cs
- ColumnCollection.cs
- AlignmentXValidation.cs
- DataTrigger.cs
- DataGridViewCellStyle.cs
- MemberAssignmentAnalysis.cs
- configsystem.cs
- CodeParameterDeclarationExpression.cs
- TableMethodGenerator.cs
- XmlBoundElement.cs
- SignatureDescription.cs
- Nullable.cs
- AccessControlEntry.cs
- ResXFileRef.cs
- DataGridCell.cs
- XhtmlBasicImageAdapter.cs
- FactoryRecord.cs
- WebScriptEndpoint.cs
- ExecutionEngineException.cs
- ReadContentAsBinaryHelper.cs
- GuidelineCollection.cs
- Win32.cs
- SqlDataSourceFilteringEventArgs.cs
- Int32EqualityComparer.cs
- CultureSpecificCharacterBufferRange.cs
- Boolean.cs
- FontSizeConverter.cs
- SerializationSectionGroup.cs
- EncoderFallback.cs
- StrokeCollection.cs
- IDReferencePropertyAttribute.cs
- TableNameAttribute.cs
- EndOfStreamException.cs
- CollectionViewSource.cs
- OracleRowUpdatingEventArgs.cs
- Type.cs
- MutableAssemblyCacheEntry.cs
- SelectorAutomationPeer.cs
- SqlTypeSystemProvider.cs
- TemplateFactory.cs
- VisualProxy.cs
- LifetimeServices.cs
- StreamResourceInfo.cs
- StyleBamlRecordReader.cs
- DataControlFieldHeaderCell.cs
- SessionStateItemCollection.cs
- _ShellExpression.cs
- TcpProcessProtocolHandler.cs
- IdnElement.cs
- DataControlField.cs
- PermissionSetEnumerator.cs
- HtmlGenericControl.cs
- CaseStatementSlot.cs
- ToolStripSplitStackLayout.cs
- UserControl.cs
- DomNameTable.cs
- CodeNamespace.cs
- ContentOperations.cs
- MessageHeader.cs
- PersistChildrenAttribute.cs
- VectorCollectionConverter.cs
- OpenTypeLayoutCache.cs
- ColumnMap.cs
- Config.cs
- KeyValuePair.cs
- Adorner.cs
- nulltextnavigator.cs
- RegistrySecurity.cs
- HashCodeCombiner.cs
- LicenseContext.cs
- WebConfigurationHostFileChange.cs
- Subordinate.cs
- Debugger.cs
- QilList.cs
- FlowPosition.cs
- EmbeddedMailObjectCollectionEditor.cs
- cryptoapiTransform.cs
- SessionSwitchEventArgs.cs
- IndexedGlyphRun.cs
- SecurityProtocol.cs
- ControlEvent.cs
- ScalarConstant.cs
- SHA256Managed.cs
- ImpersonateTokenRef.cs
- QilLoop.cs
- TransformConverter.cs
- CodeDirectoryCompiler.cs
- DebugHandleTracker.cs
- DbModificationCommandTree.cs
- TransformerConfigurationWizardBase.cs
- ContentDefinition.cs
- RegularExpressionValidator.cs
- Color.cs
- FontCacheUtil.cs