api: account for adapter disappearing during deletion
This makes the race less fatal. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
3dbaafd4ae
commit
7c5233a80e
@ -1707,8 +1707,9 @@ _Return_type_success_(return != FALSE) BOOL WINAPI WintunDeleteAdapter(
|
|||||||
SP_REMOVEDEVICE_PARAMS Params = { .ClassInstallHeader = { .cbSize = sizeof(SP_CLASSINSTALL_HEADER),
|
SP_REMOVEDEVICE_PARAMS Params = { .ClassInstallHeader = { .cbSize = sizeof(SP_CLASSINSTALL_HEADER),
|
||||||
.InstallFunction = DIF_REMOVE },
|
.InstallFunction = DIF_REMOVE },
|
||||||
.Scope = DI_REMOVEDEVICE_GLOBAL };
|
.Scope = DI_REMOVEDEVICE_GLOBAL };
|
||||||
if (!SetupDiSetClassInstallParamsW(DevInfo, &DevInfoData, &Params.ClassInstallHeader, sizeof(Params)) ||
|
if ((!SetupDiSetClassInstallParamsW(DevInfo, &DevInfoData, &Params.ClassInstallHeader, sizeof(Params)) ||
|
||||||
!SetupDiCallClassInstaller(DIF_REMOVE, DevInfo, &DevInfoData))
|
!SetupDiCallClassInstaller(DIF_REMOVE, DevInfo, &DevInfoData)) &&
|
||||||
|
GetLastError() != ERROR_NO_SUCH_DEVINST)
|
||||||
{
|
{
|
||||||
LastError = LOG_LAST_ERROR(L"Failed to remove existing adapter");
|
LastError = LOG_LAST_ERROR(L"Failed to remove existing adapter");
|
||||||
goto cleanupDevInfo;
|
goto cleanupDevInfo;
|
||||||
@ -1759,8 +1760,9 @@ static _Return_type_success_(return != FALSE) BOOL
|
|||||||
LOG(WINTUN_LOG_WARN, L"Failed to force close adapter handles");
|
LOG(WINTUN_LOG_WARN, L"Failed to force close adapter handles");
|
||||||
|
|
||||||
LOG(WINTUN_LOG_INFO, L"Removing existing adapter");
|
LOG(WINTUN_LOG_INFO, L"Removing existing adapter");
|
||||||
if (!SetupDiSetClassInstallParamsW(DevInfo, &DevInfoData, &Params.ClassInstallHeader, sizeof(Params)) ||
|
if ((!SetupDiSetClassInstallParamsW(DevInfo, &DevInfoData, &Params.ClassInstallHeader, sizeof(Params)) ||
|
||||||
!SetupDiCallClassInstaller(DIF_REMOVE, DevInfo, &DevInfoData))
|
!SetupDiCallClassInstaller(DIF_REMOVE, DevInfo, &DevInfoData)) &&
|
||||||
|
GetLastError() != ERROR_NO_SUCH_DEVINST)
|
||||||
{
|
{
|
||||||
LOG_LAST_ERROR(L"Failed to remove existing adapter");
|
LOG_LAST_ERROR(L"Failed to remove existing adapter");
|
||||||
LastError = LastError != ERROR_SUCCESS ? LastError : GetLastError();
|
LastError = LastError != ERROR_SUCCESS ? LastError : GetLastError();
|
||||||
|
Loading…
Reference in New Issue
Block a user