Step 1: Retrieve the Network Adapters
Get all the Network Adapters, which are IP-enabled, and their Setting ID. We use the ManagementClass: Win32_NetworkAdapterConfiguration to achieve this. The "SettingID" property of the ManagementObject is actually the Registry key.
Step 2: Extract information from the Registry
According the "SettingID", extract the following value from the Registry:
Code: Select all
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Network\{xxxxxx}\<SettingID>\connection
Code: Select all
using Microsoft.Win32;
using System.Management;
// holds the network interfaces names (such as "Local Area Connection")
private string[] networkInterfaces = new string[MAX_CONNECTIONS];
// holds the network interface Registry key (which is the SettingID
// of the adapter, such as: B76D5407-4610-499A-A8A5-50AAD2A2297E)
private string[] networkInterfacesSettingId = new string[MAX_CONNECTIONS];
// holds the number of network interfaces found
private int numberOfNetworkInterfaces = 0;
// extract all the IP-enabled adapters and get their SettingID
// (which is the Registry key)
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach(ManagementObject objMO in objMOC)
{
if( Convert.ToBoolean(objMO["ipEnabled"]) == false )
continue;
string SettingID = "";
try
{
networkInterfacesSettingId[numberOfNetworkInterfaces] = (string)objMO["SettingID"];
++numberOfNetworkInterfaces;
}
catch{}
}
if(numberOfNetworkInterfaces == 0)
{
MessageBox.Show("No Network Interface were found on this local machine", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int j=0;
// The network interfaces are in the following path in the Registry:
// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Network\{xxxxxx}\SettingID\connection
RegistryKey networkRegistry = currentMachineRegistry.OpenSubKey("SYSTEM\\CurrentControlSet\\control\\Network");
int num = networkRegistry.SubKeyCount;
string[] tmp = networkRegistry.GetSubKeyNames();
for(int i=0; i<num; ++i)
{
// get all the {xxxxxx} keys under 'Network'
RegistryKey conReg = networkRegistry.OpenSubKey(tmp[i]);
if(conReg != null)
{
string[] tmp1 = conReg.GetSubKeyNames();
if(tmp1.Length > 0)
{
for(int k=0; k<tmp1.Length; ++k)
{
// get all the <SettingID> keys under 'Network\{xxxxxx}'
RegistryKey reg = conReg.OpenSubKey(tmp1[k]);
if(reg != null)
{
int gg = Array.BinarySearch(
networkInterfacesSettingId, 0,
numberOfNetworkInterfaces, tmp1[k]);
if(gg >= 0)
{
// This subkey was found in the
// networkInterfacesSettingId array - which means
// that this is a valid network interface -
// let's get the interface name
// get the 'connection' key under
// 'Network\{xxxxxx}\<SettingID>'
RegistryKey r = reg.OpenSubKey("connection");
if(r != null)
{
Object obj = r.GetValue("Name");
networkInterfaces[gg] = obj.ToString();
}
}
}
}
}
}
}