summaryrefslogtreecommitdiffhomepage
path: root/windows/driverlogic/src/driverlogic.cpp
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-09-29 13:37:25 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-11-24 18:50:04 +0100
commit5e56bfe1e7990bdd1cd2c294f97689738cdebb3e (patch)
tree4f17692d81019972946f57b0b7cd4c32d19f2f35 /windows/driverlogic/src/driverlogic.cpp
parentaf6a5af32e2363b75bfb1e58a5f3e8ea380dccf9 (diff)
downloadmullvadvpn-5e56bfe1e7990bdd1cd2c294f97689738cdebb3e.tar.xz
mullvadvpn-5e56bfe1e7990bdd1cd2c294f97689738cdebb3e.zip
Only create wintun adapter if none exists
Diffstat (limited to 'windows/driverlogic/src/driverlogic.cpp')
-rw-r--r--windows/driverlogic/src/driverlogic.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/windows/driverlogic/src/driverlogic.cpp b/windows/driverlogic/src/driverlogic.cpp
index 25487d8481..08f0e97883 100644
--- a/windows/driverlogic/src/driverlogic.cpp
+++ b/windows/driverlogic/src/driverlogic.cpp
@@ -34,7 +34,8 @@ constexpr std::chrono::milliseconds REGISTRY_GET_TIMEOUT_MS{ 10000 };
enum ReturnCodes
{
GENERAL_SUCCESS = 0,
- GENERAL_ERROR = -1
+ GENERAL_ERROR = -1,
+ ADAPTER_NOT_FOUND = -2
};
struct NetworkAdapter
@@ -917,6 +918,24 @@ int wmain(int argc, const wchar_t * argv[], const wchar_t * [])
RemoveNetAdapterByAlias(hardwareId, baseName);
}
+ else if (0 == _wcsicmp(argv[1], L"device-exists"))
+ {
+ if (4 != argc)
+ {
+ goto INVALID_ARGUMENTS;
+ }
+
+ const wchar_t *hardwareId = argv[2];
+ const wchar_t *baseName = argv[3];
+
+ const auto tapAdapters = GetNetworkAdapters(hardwareId);
+ const auto adapter = FindAdapterByAlias(tapAdapters, baseName);
+
+ if (!adapter.has_value())
+ {
+ return ADAPTER_NOT_FOUND;
+ }
+ }
else if (0 == _wcsicmp(argv[1], L"remove"))
{
if (3 != argc)