Skip to content

Commit

Permalink
Merge pull request #2832 from zeroZshadow/master
Browse files Browse the repository at this point in the history
Properly scan for OpenVPN TAP adapters
  • Loading branch information
shuffle2 committed Aug 12, 2015
2 parents c78fcb2 + 7ed8944 commit 90e05f7
Showing 1 changed file with 18 additions and 24 deletions.
42 changes: 18 additions & 24 deletions Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp
Expand Up @@ -87,15 +87,19 @@ bool GetGUIDs(std::vector<std::basic_string<TCHAR>>& guids)
LONG status;
HKEY control_net_key;
DWORD len;
int i = 0;
bool found_all = false;
DWORD cSubKeys = 0;

status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NETWORK_CONNECTIONS_KEY, 0, KEY_READ | KEY_QUERY_VALUE, &control_net_key);

if (status != ERROR_SUCCESS)
return false;

status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NETWORK_CONNECTIONS_KEY, 0, KEY_READ, &control_net_key);
status = RegQueryInfoKey(control_net_key, nullptr, nullptr, nullptr, &cSubKeys, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);

if (status != ERROR_SUCCESS)
return false;

while (!found_all)
for (DWORD i = 0; i < cSubKeys; i++)
{
TCHAR enum_name[256];
TCHAR connection_string[256];
Expand All @@ -108,10 +112,8 @@ bool GetGUIDs(std::vector<std::basic_string<TCHAR>>& guids)
status = RegEnumKeyEx(control_net_key, i, enum_name,
&len, nullptr, nullptr, nullptr, nullptr);

if (status == ERROR_NO_MORE_ITEMS)
break;
else if (status != ERROR_SUCCESS)
return false;
if (status != ERROR_SUCCESS)
continue;

_sntprintf(connection_string, sizeof(connection_string),
_T("%s\\%s\\Connection"), NETWORK_CONNECTIONS_KEY, enum_name);
Expand All @@ -127,28 +129,23 @@ bool GetGUIDs(std::vector<std::basic_string<TCHAR>>& guids)

if (status != ERROR_SUCCESS || name_type != REG_SZ)
{
return false;
continue;
}
else
{
if (IsTAPDevice(enum_name))
{
guids.push_back(enum_name);
//found_all = true;
}
}

RegCloseKey(connection_key);
}
i++;
}

RegCloseKey(control_net_key);

//if (!found_all)
//return false;

return true;
return !guids.empty();
}

bool OpenTAP(HANDLE& adapter, const std::basic_string<TCHAR>& device_guid)
Expand Down Expand Up @@ -187,7 +184,7 @@ bool CEXIETHERNET::Activate()
if (Win32TAPHelper::OpenTAP(mHAdapter, device_guids.at(i)))
{
INFO_LOG(SP1, "OPENED %s", device_guids.at(i).c_str());
i = device_guids.size();
break;
}
}
if (mHAdapter == INVALID_HANDLE_VALUE)
Expand Down Expand Up @@ -248,19 +245,16 @@ bool CEXIETHERNET::SendFrame(u8 *frame, u32 size)
DEBUG_LOG(SP1, "SendFrame %x\n%s",
size, ArrayToString(frame, size, 0x10).c_str());

DWORD numBytesWrit;
OVERLAPPED overlap;
ZeroMemory(&overlap, sizeof(overlap));

if (!WriteFile(mHAdapter, frame, size, &numBytesWrit, &overlap))
{
DWORD res = GetLastError();
ERROR_LOG(SP1, "Failed to send packet with error 0x%X", res);
}
//WriteFile will always return false because the TAP handle is async
WriteFile(mHAdapter, frame, size, NULL, &overlap);

if (numBytesWrit != size)
DWORD res = GetLastError();
if (res != ERROR_IO_PENDING)
{
ERROR_LOG(SP1, "BBA SendFrame %i only got %i bytes sent!", size, numBytesWrit);
ERROR_LOG(SP1, "Failed to send packet with error 0x%X", res);
}

// Always report the packet as being sent successfully, even though it might be a lie
Expand Down

0 comments on commit 90e05f7

Please sign in to comment.