api: relax IsPoolMember estimation

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2020-11-09 15:30:34 +01:00
parent 0d214d7254
commit fc348f519b

View File

@ -471,40 +471,27 @@ static BOOL
IsPoolMember(_In_z_ const WCHAR *Pool, _In_ HDEVINFO DevInfo, _In_ SP_DEVINFO_DATA *DevInfoData) IsPoolMember(_In_z_ const WCHAR *Pool, _In_ HDEVINFO DevInfo, _In_ SP_DEVINFO_DATA *DevInfoData)
{ {
WCHAR *DeviceDesc = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_DEVICEDESC); WCHAR *DeviceDesc = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_DEVICEDESC);
if (!DeviceDesc) WCHAR *FriendlyName = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_FRIENDLYNAME);
{
LOG(WINTUN_LOG_ERR, L"Failed to get adapter description");
return FALSE;
}
DWORD LastError = ERROR_SUCCESS; DWORD LastError = ERROR_SUCCESS;
BOOL Ret = FALSE; BOOL Ret = FALSE;
WCHAR *FriendlyName = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_FRIENDLYNAME);
if (!FriendlyName)
{
LastError = LOG(WINTUN_LOG_ERR, L"Failed to get adapter friendly name");
goto cleanupDeviceDesc;
}
WCHAR PoolDeviceTypeName[MAX_POOL_DEVICE_TYPE]; WCHAR PoolDeviceTypeName[MAX_POOL_DEVICE_TYPE];
if (!GetPoolDeviceTypeName(Pool, PoolDeviceTypeName)) if (!GetPoolDeviceTypeName(Pool, PoolDeviceTypeName))
{ {
LastError = GetLastError(); LastError = GetLastError();
goto cleanupFriendlyName; goto cleanupNames;
} }
if (!_wcsicmp(FriendlyName, PoolDeviceTypeName) || !_wcsicmp(DeviceDesc, PoolDeviceTypeName)) Ret = (FriendlyName && !_wcsicmp(FriendlyName, PoolDeviceTypeName)) ||
{ (DeviceDesc && !_wcsicmp(DeviceDesc, PoolDeviceTypeName));
Ret = TRUE; if (Ret)
goto cleanupFriendlyName; goto cleanupNames;
} if (FriendlyName)
RemoveNumberedSuffix(FriendlyName); RemoveNumberedSuffix(FriendlyName);
RemoveNumberedSuffix(DeviceDesc); if (DeviceDesc)
if (!_wcsicmp(FriendlyName, PoolDeviceTypeName) || !_wcsicmp(DeviceDesc, PoolDeviceTypeName)) RemoveNumberedSuffix(DeviceDesc);
{ Ret = (FriendlyName && !_wcsicmp(FriendlyName, PoolDeviceTypeName)) ||
Ret = TRUE; (DeviceDesc && !_wcsicmp(DeviceDesc, PoolDeviceTypeName));
goto cleanupFriendlyName; cleanupNames:
}
cleanupFriendlyName:
Free(FriendlyName); Free(FriendlyName);
cleanupDeviceDesc:
Free(DeviceDesc); Free(DeviceDesc);
SetLastError(LastError); SetLastError(LastError);
return Ret; return Ret;