diff options
Diffstat (limited to 'windows/driverlogic/src/driverlogic.cpp')
| -rw-r--r-- | windows/driverlogic/src/driverlogic.cpp | 24 |
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) |
