aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-11-09 15:30:34 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-11-09 15:34:38 +0100
commitfc348f519bab01aed4e8f2dd9c0260fea87025aa (patch)
tree2c5a62425d70a007105bd8bf325bec742f9ea4e7 /api
parentapi: do not call UpdateDriverForPlugAndPlayDevicesW (diff)
downloadwintun-fc348f519bab01aed4e8f2dd9c0260fea87025aa.tar.xz
wintun-fc348f519bab01aed4e8f2dd9c0260fea87025aa.zip
api: relax IsPoolMember estimation
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'api')
-rw-r--r--api/adapter.c41
1 files changed, 14 insertions, 27 deletions
diff --git a/api/adapter.c b/api/adapter.c
index c929b64..774433a 100644
--- a/api/adapter.c
+++ b/api/adapter.c
@@ -471,40 +471,27 @@ static BOOL
IsPoolMember(_In_z_ const WCHAR *Pool, _In_ HDEVINFO DevInfo, _In_ SP_DEVINFO_DATA *DevInfoData)
{
WCHAR *DeviceDesc = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_DEVICEDESC);
- if (!DeviceDesc)
- {
- LOG(WINTUN_LOG_ERR, L"Failed to get adapter description");
- return FALSE;
- }
+ WCHAR *FriendlyName = GetDeviceRegistryString(DevInfo, DevInfoData, SPDRP_FRIENDLYNAME);
DWORD LastError = ERROR_SUCCESS;
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];
if (!GetPoolDeviceTypeName(Pool, PoolDeviceTypeName))
{
LastError = GetLastError();
- goto cleanupFriendlyName;
- }
- if (!_wcsicmp(FriendlyName, PoolDeviceTypeName) || !_wcsicmp(DeviceDesc, PoolDeviceTypeName))
- {
- Ret = TRUE;
- goto cleanupFriendlyName;
- }
- RemoveNumberedSuffix(FriendlyName);
- RemoveNumberedSuffix(DeviceDesc);
- if (!_wcsicmp(FriendlyName, PoolDeviceTypeName) || !_wcsicmp(DeviceDesc, PoolDeviceTypeName))
- {
- Ret = TRUE;
- goto cleanupFriendlyName;
- }
-cleanupFriendlyName:
+ goto cleanupNames;
+ }
+ Ret = (FriendlyName && !_wcsicmp(FriendlyName, PoolDeviceTypeName)) ||
+ (DeviceDesc && !_wcsicmp(DeviceDesc, PoolDeviceTypeName));
+ if (Ret)
+ goto cleanupNames;
+ if (FriendlyName)
+ RemoveNumberedSuffix(FriendlyName);
+ if (DeviceDesc)
+ RemoveNumberedSuffix(DeviceDesc);
+ Ret = (FriendlyName && !_wcsicmp(FriendlyName, PoolDeviceTypeName)) ||
+ (DeviceDesc && !_wcsicmp(DeviceDesc, PoolDeviceTypeName));
+cleanupNames:
Free(FriendlyName);
-cleanupDeviceDesc:
Free(DeviceDesc);
SetLastError(LastError);
return Ret;