Click here to Skip to main content
15,886,840 members
Articles / Programming Languages / C#

AdapterList

Rate me:
Please Sign up or sign in to vote.
2.44/5 (7 votes)
26 Sep 2008CPOL 42.9K   534   12   8
This article explains how to use the DDK interface-INetCfg in C#.

Image 1

Introduction

NetCfgTest uses the DDK interface INetCfg and related interfaces to fetch a network adapter list (installed on the system). This article describes:

  1. How to write interop code for pure COM interfaces.
  2. How to use INetCfg in C# to fetch installed network adapters.
  3. How to initialize a pure COM class from C#.

Background

There was a requirement to use the interface INetCfg in C#. I struggled to get a COM interop for this interface. Finally, I decided to write one.

Using the Code

The interface INetCfg is written in the namespace NetCfg. We can use the following source code to fetch an adapters list.:

C#
object objINetCfg = null;
int nRet = 0;
nRet = Ole32Methods.CoCreateInstance(ref INetCfg_Guid.CLSID_CNetCfg, null,
    Ole32Methods.CLSCTX_INPROC_SERVER, ref INetCfg_Guid.IID_INetCfg, out objINetCfg);
INetCfg netCfg = objINetCfg as INetCfg;
nRet = netCfg.Initialize(IntPtr.Zero);
object componet = new object();
nRet = netCfg.QueryNetCfgClass(ref INetCfg_Guid.IID_DevClassNet,
    ref INetCfg_Guid.IID_INetCfgClass, out componet);
INetCfgClass NetCfgClass = componet as INetCfgClass;
object EnumNetCfgComponentObj = new object();
nRet = NetCfgClass.EnumComponents(out EnumNetCfgComponentObj);

IEnumNetCfgComponent EnumNetCfgComponent =
    EnumNetCfgComponentObj as IEnumNetCfgComponent;
EnumNetCfgComponent.Reset();
object netCfgCompObj = new object();
INetCfgComponent netcfgcomp = null;
int outCelt = 0;
nRet = EnumNetCfgComponent.Next(1, out netCfgCompObj, out outCelt);
netcfgcomp = netCfgCompObj as INetCfgComponent;
string strBind;
string strDispName = "";
do
{
    netcfgcomp.GetBindName(out strBind);
    netcfgcomp.GetDisplayName(out strDispName);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(netcfgcomp);
    netCfgCompObj = null;
    this.listBox1.Items.Add(strDispName+" - " + strBind);
    nRet = EnumNetCfgComponent.Next(1, out netCfgCompObj, out outCelt);
    netcfgcomp = netCfgCompObj as INetCfgComponent;
    GC.Collect();
} while (nRet == 0);

System.Runtime.InteropServices.Marshal.ReleaseComObject(EnumNetCfgComponent);
EnumNetCfgComponent = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(objINetCfg);
objINetCfg = null;
GC.Collect();

Points of Interest

I wrote interop for a pure COM interface for the first time. It was really interesting to learn the nitty-gritty of how to use a pure COM interface in C#.

History

  • Sep. 26, 2008: Created version 1.0.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
India India
I'm in software industry for over 10 years.

Comments and Discussions

 
QuestionGetting exception HRESULT: 0x800106D9 Pin
sudhi16421-Jun-16 20:11
sudhi16421-Jun-16 20:11 
GeneralDriver Installation Through a *.INF file [In VB.NET] [modified] Pin
emicroxxx4-Oct-10 0:41
emicroxxx4-Oct-10 0:41 
GeneralUsing INetCfgClassSetup Install, another null reference! Pin
Trevor Ackerman5-Apr-09 19:31
Trevor Ackerman5-Apr-09 19:31 
QuestionINetCfgLock AcquireWriteLock NullReference Exception - Help! Pin
pfrances31-Jan-09 11:30
pfrances31-Jan-09 11:30 
QuestionRe: INetCfgLock AcquireWriteLock NullReference Exception - Help! Pin
Bruins6-Jul-09 0:47
Bruins6-Jul-09 0:47 
AnswerRe: INetCfgLock AcquireWriteLock NullReference Exception - Help! Pin
Member 28749596-Jul-09 3:41
Member 28749596-Jul-09 3:41 
GeneralRe: INetCfgLock AcquireWriteLock NullReference Exception - Help! Pin
matt4274816-Nov-09 10:48
matt4274816-Nov-09 10:48 
RantCode dump Pin
Pete Souza IV26-Sep-08 7:18
professionalPete Souza IV26-Sep-08 7:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.