summaryrefslogtreecommitdiffhomepage
path: root/windows/windns/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2019-11-29 13:38:05 +0100
committerDavid Lönnhager <david.l@mullvad.net>2019-12-03 09:17:30 +0100
commit726aec61b039aefa129dcc0c2c261c299f20bdc6 (patch)
tree3b57cc5143bfdb6fc563e08a73d51b852db21c76 /windows/windns/src
parentba20a7fa733fa02010b62582b220f716444abb50 (diff)
downloadmullvadvpn-726aec61b039aefa129dcc0c2c261c299f20bdc6.tar.xz
mullvadvpn-726aec61b039aefa129dcc0c2c261c299f20bdc6.zip
Workaround for net adapter alias issue on Windows 8
Diffstat (limited to 'windows/windns/src')
-rw-r--r--windows/windns/src/windns/windns.cpp23
-rw-r--r--windows/windns/src/windns/windns.vcxproj2
-rw-r--r--windows/windns/src/windns/windns.vcxproj.filters2
3 files changed, 27 insertions, 0 deletions
diff --git a/windows/windns/src/windns/windns.cpp b/windows/windns/src/windns/windns.cpp
index eae828973c..1687586c7b 100644
--- a/windows/windns/src/windns/windns.cpp
+++ b/windows/windns/src/windns/windns.cpp
@@ -4,6 +4,7 @@
#include "windns.h"
#include "confineoperation.h"
#include "netsh.h"
+#include "ncicontext.h"
#include "logsink.h"
#include <memory>
#include <vector>
@@ -96,8 +97,30 @@ AdapterDnsAddresses GetAdapterDnsAddresses(const std::wstring &adapterAlias)
const IP_ADAPTER_ADDRESSES *adapter;
+ NciContext nci;
+
while (nullptr != (adapter = adapters.next()))
{
+ std::wstring name;
+ IID guidObj = { 0 };
+
+ auto guid = std::string(adapter->AdapterName);
+ auto wguid = std::wstring(guid.begin(), guid.end());
+
+ if (S_OK != IIDFromString(&wguid[0], &guidObj))
+ {
+ throw std::runtime_error("IIDFromString() failed");
+ }
+
+ try
+ {
+ name = nci.getConnectionName(guidObj);
+ }
+ catch (...)
+ {
+ continue;
+ }
+
if (0 != _wcsicmp(adapter->FriendlyName, adapterAlias.c_str()))
{
continue;
diff --git a/windows/windns/src/windns/windns.vcxproj b/windows/windns/src/windns/windns.vcxproj
index b2b68a999f..308cfb1aea 100644
--- a/windows/windns/src/windns/windns.vcxproj
+++ b/windows/windns/src/windns/windns.vcxproj
@@ -178,6 +178,7 @@
<ClInclude Include="confineoperation.h" />
<ClInclude Include="logsink.h" />
<ClInclude Include="ilogsink.h" />
+ <ClInclude Include="ncicontext.h" />
<ClInclude Include="netsh.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
@@ -187,6 +188,7 @@
<ClCompile Include="confineoperation.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="logsink.cpp" />
+ <ClCompile Include="ncicontext.cpp" />
<ClCompile Include="netsh.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
diff --git a/windows/windns/src/windns/windns.vcxproj.filters b/windows/windns/src/windns/windns.vcxproj.filters
index e71bf3e814..d551081fe0 100644
--- a/windows/windns/src/windns/windns.vcxproj.filters
+++ b/windows/windns/src/windns/windns.vcxproj.filters
@@ -8,6 +8,7 @@
<ClInclude Include="confineoperation.h" />
<ClInclude Include="ilogsink.h" />
<ClInclude Include="logsink.h" />
+ <ClInclude Include="ncicontext.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
@@ -16,6 +17,7 @@
<ClCompile Include="netsh.cpp" />
<ClCompile Include="confineoperation.cpp" />
<ClCompile Include="logsink.cpp" />
+ <ClCompile Include="ncicontext.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="windns.rc" />