C#编程启用/禁用指定网络接口的指定网络协议

C#编程启用/禁用指定网络接口的指定网络协议

通过WMI实现

简单的方法只适用于Windows 10:
思路是使用WMI接口的MSFT_NetAdapterBindingSettingData类型。
以下示例禁用"以太网"连接上的IPV6协议:

var query = new ObjectQuery(string.Format("select * from MSFT_NetAdapterBindingSettingData where Name='{0}' and BindName='{1}'", "以太网","Tcpip6"));
var search = new ManagementObjectSearcher(new ManagementScope("root\\StandardCimv2"),query);
try
{
   
    var objc = search.Get();
    if (objc.Count <= 0)
    {
   
        return 94; //Path, file or object not found
    }
    var objs = new ManagementObject[objc.Count];
    objc.CopyTo(objs, 0);
    string s = "";
    var ret= (UInt32)objs[0].InvokeMethod(
        "Disable",
        new object[] {
    s });
    return ret;
}catch(Exception ex)
{
   
    return (UInt32)ex.HResult;
}

适用性更强的解决方案

适用性更强的是使用INetCfg COM API。

接口P/Invoke实现

这个实现直接拿来主义:
How to enable / disable network protocols from C# code in Windows

using System;
using System.Runtime.InteropServices;

namespace COMInterop
{
   
    [Flags]
    public enum CLSCTX : uint
    {
   
        CLSCTX_INPROC_SERVER = 0x1,
        CLSCTX_INPROC_HANDLER = 0x2,
        CLSCTX_LOCAL_SERVER = 0x4,
        CLSCTX_INPROC_SERVER16 = 0x8,
        CLSCTX_REMOTE_SERVER = 0x10,
        CLSCTX_INPROC_HANDLER16 = 0x20,
        CLSCTX_RESERVED1 = 0x40,
        CLSCTX_RESERVED2 = 0x80,
        CLSCTX_RESERVED3 = 0x100,
        CLSCTX_RESERVED4 = 0x200,
        CLSCTX_NO_CODE_DOWNLOAD = 0x400,
        CLSCTX_RESERVED5 = 0x800,
        CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
        CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
        CLSCTX_NO_FAILURE_LOG = 0x4000,
        CLSCTX_DISABLE_AAA = 0x8000,
        CLSCTX_ENABLE_AAA = 0x10000,
        CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
        CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000,
        CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000,
        CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
        CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
        CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER
    }

    public class Ole32Methods
    {
   
        [DllImport("ole32.Dll")]
        static public extern int CoCreateInstance(ref Guid clsid, [MarshalAs(UnmanagedType.IUnknown)] object inner, CLSCTX context, ref Guid uuid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object rReturnedComObject);
        public static uint CLSCTX_INPROC_SERVER = 1;
    }
}

namespace Interops
{
   
    public abstract class INetCfgGuid
    {
   
        public static Guid CLSID_CNetCfg = new Guid("5B035261-40F9-11D1-AAEC-00805FC1270E");
        public static Guid IID_INetCfg = new Guid("C0E8AE93-306E-11D1-AACF-00805FC1270E");
        public static Guid IID_INetCfgLock = new Guid("C0E8AE9F-306E-11D1-AACF-00805FC1270E");
        public static Guid IID_INetCfgClass = new Guid("C0E8AE97-306E-11D1-AACF-00805FC1270E");
        public static Guid IID_INetCfgComponentBindings = new Guid("C0E8AE9E-306E-11D1-AACF-00805FC1270E");

        public static Guid IID_DevClassNet = new Guid(0x4d36e972, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18);  // Network adapters
        public static Guid IID_DevClassNetClient = new Guid(0x4d36e973, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18); // Deprecated
        public static Guid IID_DevClassNetService = new Guid(0x4d36e974, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18); // 
        public static Guid IID_DevClassNetTrans = new Guid(0x4d36e975, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18);   // Protocols
    }

    // ----  Enums ------ //
    enum COMPONENT_CHARACTERISTICS
    {
   
        NCF_VIRTUAL = 0x00000001,
        NCF_SOFTWARE_ENUMERATED = 0x00000002,
        NCF_PHYSICAL = 0x00000004,
        NCF_HIDDEN = 0x00000008,
        NCF_NO_SERVICE = 0x00000010,
        NCF_NOT_USER_REMOVABLE = 0x00000020,
        NCF_MULTIPORT_INSTANCED_ADAPTER = 0x00000040, // This adapter has separate instances for each port 
        NCF_HAS_UI = 0x00000080,
        NCF_SINGLE_INSTANCE = 0x00000100,
        // = 0x00000200, // filter device 
        NCF_FILTER = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值