Send mail to the author(s)

    June 24, 2008

    HOW-TO: Disable/Enable Network Connections Programmatically under Vista

    I got an email last week asking about how to disable a particular network connection under Vista. The specific scenario, how to disable an active 3G connection, is not something I'm going to cover, but what I present below could be used as basis for that scenario.

    With Vista, Microsoft introduced two new methods to the Win32_NetworkAdapter class under WMI: Enable and Disable. Before can call either of those methods, we need to know how to enumerate the network connections.

    The .NET Framework SDK provides a helpful utility called mgmtclassgen.exe, which can be used to create .NET-friendly wrappers of the WMI classes. Open up a Visual Studio command prompt and enter the following:

    mgmtclassgen Win32_NetworkAdapter -p NetworkAdapter.cs

    This will generate a file called NetworkAdapter.cs which will contain a C# representation of the WMI Win32_NetworkAdapter class. You can add this source code file to your C# project and then access all the properties without too much extra effort.

    To filter and disable the specific adapters, you do something like this:

    SelectQuery query = new SelectQuery("Win32_NetworkAdapter", "NetConnectionStatus=2");
    ManagementObjectSearcher search = new ManagementObjectSearcher(query);
    foreach(ManagementObject result in search.Get())
    {
        NetworkAdapter adapter = new NetworkAdapter(result);
    
        // Identify the adapter you wish to disable here. 
        // In particular, check the AdapterType and 
        // Description properties.
    
        // Here, we're selecting the LAN adapters.
        if (adapter.AdapterType.Equals("Ethernet 802.3")) 
        {
            adapter.Disable();
        }
    }

    Don't forget to add a reference to System.Management.dll!

    Comments are closed.