summaryrefslogtreecommitdiffhomepage
path: root/windows/driverlogic/src/driverlogic.cpp
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-01-31 13:11:02 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-02-03 09:13:29 +0100
commit0b1204a5ead8ed3aa78f7528276a4c5a89ffc3bc (patch)
tree64a86f39df62bd0f5f0f0ebbcae378471e79c6da /windows/driverlogic/src/driverlogic.cpp
parent2860aed09fce784bc0e6719319dae78cb4d5cafc (diff)
downloadmullvadvpn-0b1204a5ead8ed3aa78f7528276a4c5a89ffc3bc.tar.xz
mullvadvpn-0b1204a5ead8ed3aa78f7528276a4c5a89ffc3bc.zip
Fix adapter deletion in driverlogic
Diffstat (limited to 'windows/driverlogic/src/driverlogic.cpp')
-rw-r--r--windows/driverlogic/src/driverlogic.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/windows/driverlogic/src/driverlogic.cpp b/windows/driverlogic/src/driverlogic.cpp
index 1a77aaf15b..9805954079 100644
--- a/windows/driverlogic/src/driverlogic.cpp
+++ b/windows/driverlogic/src/driverlogic.cpp
@@ -587,12 +587,26 @@ DeletionResult DeleteVanillaMullvadAdapter()
continue;
}
- if (FALSE == SetupDiRemoveDevice(
- devInfo,
- &devInfoData
- ))
+ //
+ // Delete existing device
+ //
+
+ SP_REMOVEDEVICE_PARAMS rmdParams;
+ rmdParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
+ rmdParams.ClassInstallHeader.InstallFunction = DIF_REMOVE;
+ rmdParams.Scope = DI_REMOVEDEVICE_GLOBAL;
+ rmdParams.HwProfile = 0;
+
+ auto status = SetupDiSetClassInstallParamsW(devInfo, &devInfoData, &rmdParams.ClassInstallHeader, sizeof(rmdParams));
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiSetClassInstallParamsW");
+ }
+
+ status = SetupDiCallClassInstaller(DIF_REMOVE, devInfo, &devInfoData);
+ if (FALSE == status)
{
- THROW_WINDOWS_ERROR(GetLastError(), "Error removing Mullvad TAP device");
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiCallClassInstaller");
}
}
catch (const std::exception & e)