diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-04-24 14:30:49 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-04-24 16:51:47 +0200 |
| commit | 318286740ded413a1830196b094b324e928b85da (patch) | |
| tree | 806ef36af829dfb1e95555a0589a6cbbb133fd56 | |
| parent | f5e804513155d692cc34aaafa4ada3e24bb01031 (diff) | |
| download | mullvadvpn-318286740ded413a1830196b094b324e928b85da.tar.xz mullvadvpn-318286740ded413a1830196b094b324e928b85da.zip | |
Optimize EnableIpv6ForAdapter in winnet
| -rw-r--r-- | windows/winnet/src/winnet/netconfig.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/windows/winnet/src/winnet/netconfig.cpp b/windows/winnet/src/winnet/netconfig.cpp index 2a8e2e1c64..7fd7b38869 100644 --- a/windows/winnet/src/winnet/netconfig.cpp +++ b/windows/winnet/src/winnet/netconfig.cpp @@ -5,6 +5,7 @@ #include <windows.h> #include <netcfgx.h> #include <devguid.h> +#include <libcommon/registry/registry.h> #include <libcommon/error.h> #include <libcommon/string.h> #include <libcommon/memory.h> @@ -143,6 +144,34 @@ void SetIpv6BindingForBindName(INetCfg *netCfg, const std::wstring &bindName, bo void EnableIpv6ForAdapter(const std::wstring &adapterGuid) { + try + { + // + // Avoid using the COM objects unless necessary + // due to slow performance. + // + + const auto key = common::registry::Registry::OpenKey( + HKEY_LOCAL_MACHINE, + L"SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Linkage" + ); + const auto bindings = key->readStringArray(L"Bind"); + + std::wstring matchString = std::wstring(L"\\Device\\").append(adapterGuid); + + for (auto it = bindings.begin(); it != bindings.end(); ++it) + { + if (0 == _wcsicmp(it->c_str(), matchString.c_str())) + { + // return from function + return; + } + } + } + catch (...) + { + } + // // Initialize COM // |
