Search code examples
.netwindowsipv6

enable ipv6 for interface in windows


How do I programmatically enable IPv6 for given interface? Can be netsh, WMI or whatever that can be called from C# program. Equivalent to clicking on a checkbox in interface properties.


Solution

  • This works (Windows 8+):

    static void SetIPv6State(Guid interfaceId, bool state)
    {
        var scope = new ManagementScope("\\\\.\\ROOT\\StandardCimv2");
        var query = new ObjectQuery("SELECT * FROM MSFT_NetAdapterBindingSettingData");
        var methodName = state ? "Enable" : "Disable";
        using (var searcher = new ManagementObjectSearcher(scope, query))
        using (var bindings = searcher.Get())
        {
            var binding = bindings.Cast<ManagementObject>().Single(obj => (string)obj["InstanceID"] == interfaceId.ToString("B").ToUpper() + "::ms_tcpip6");
            var parameters = binding.GetMethodParameters(methodName);
            binding.InvokeMethod(methodName, parameters, new InvokeMethodOptions());
        }
    }
    

    Windows 7 requires C++ code.