summaryrefslogtreecommitdiffhomepage
path: root/windows/driverlogic/src/driverlogic.cpp
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-02-04 10:48:38 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-02-04 14:52:42 +0100
commit7dd5dee62bb4b461a839c5a3e38cfb08b4bb25c8 (patch)
treef537e387dc35bce1f67813f11a1dedf25e8484ce /windows/driverlogic/src/driverlogic.cpp
parent83038a2319fc44f8d909be45be51a4d7a450d9c7 (diff)
downloadmullvadvpn-7dd5dee62bb4b461a839c5a3e38cfb08b4bb25c8.tar.xz
mullvadvpn-7dd5dee62bb4b461a839c5a3e38cfb08b4bb25c8.zip
Add removal function to driverlogic
Diffstat (limited to 'windows/driverlogic/src/driverlogic.cpp')
-rw-r--r--windows/driverlogic/src/driverlogic.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/windows/driverlogic/src/driverlogic.cpp b/windows/driverlogic/src/driverlogic.cpp
index 7798603ec9..003b123346 100644
--- a/windows/driverlogic/src/driverlogic.cpp
+++ b/windows/driverlogic/src/driverlogic.cpp
@@ -558,6 +558,25 @@ NetworkAdapter FindBrandedTap()
return *added.begin();
}
+void RemoveTapDriver(const std::wstring &tapHardwareId)
+{
+ ForEachDevice(tapHardwareId, [&](HDEVINFO devInfo, PSP_DEVINFO_DATA devInfoData) {
+ try
+ {
+ DeleteDevice(devInfo, devInfoData);
+ }
+ catch (const std::exception & e)
+ {
+ //
+ // Skip this adapter
+ //
+
+ std::cerr << "Skipping TAP adapter due to exception caught while iterating: "
+ << e.what() << std::endl;
+ }
+ });
+}
+
enum class DeletionResult
{
NO_REMAINING_TAP_ADAPTERS,
@@ -635,6 +654,15 @@ int wmain(int argc, const wchar_t * argv[], const wchar_t * [])
UpdateTapDriver(argv[2]);
}
+ else if (0 == _wcsicmp(argv[1], L"remove"))
+ {
+ if (3 != argc)
+ {
+ goto INVALID_ARGUMENTS;
+ }
+
+ RemoveTapDriver(argv[2]);
+ }
else if (0 == _wcsicmp(argv[1], L"remove-vanilla-tap"))
{
switch (DeleteVanillaMullvadAdapter())