TAP-Windows6 adapters created with tapinstall/devcon.exe have hardware
ID "tap0901", where TAP-Windows6 adapters created with tapctl.exe have
hardware ID "root\\tap0901".
The enumeration of the network adapters have been extended to detect
adapters using a list of acceptable hardware IDs.
Signed-off-by: Simon Rozman
---
src/openvpnmsica/openvpnmsica.c | 43 ++---
src/tapctl/main.c | 24 +++---
src/tapctl/tap.c| 21
src/tapctl/tap.h| 8 +++---
4 files changed, 58 insertions(+), 38 deletions(-)
diff --git a/src/openvpnmsica/openvpnmsica.c b/src/openvpnmsica/openvpnmsica.c
index 28cf16b5..31e90bd2 100644
--- a/src/openvpnmsica/openvpnmsica.c
+++ b/src/openvpnmsica/openvpnmsica.c
@@ -251,7 +251,7 @@ cleanup_OpenSCManager:
static UINT
find_adapters(
_In_ MSIHANDLE hInstall,
-_In_z_ LPCTSTR szHardwareId,
+_In_z_ LPCTSTR szzHardwareIDs,
_In_z_ LPCTSTR szAdaptersPropertyName,
_In_z_ LPCTSTR szActiveAdaptersPropertyName)
{
@@ -259,7 +259,7 @@ find_adapters(
/* Get network adapters with given hardware ID. */
struct tap_adapter_node *pAdapterList = NULL;
-uiResult = tap_list_adapters(NULL, szHardwareId, );
+uiResult = tap_list_adapters(NULL, szzHardwareIDs, );
if (uiResult != ERROR_SUCCESS)
{
return uiResult;
@@ -414,12 +414,12 @@ FindSystemInfo(_In_ MSIHANDLE hInstall)
set_openvpnserv_state(hInstall);
find_adapters(
hInstall,
-TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID),
+TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0")
TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0"),
TEXT("TAPWINDOWS6ADAPTERS"),
TEXT("ACTIVETAPWINDOWS6ADAPTERS"));
find_adapters(
hInstall,
-TEXT("Wintun"),
+TEXT("Wintun") TEXT("\0"),
TEXT("WINTUNADAPTERS"),
TEXT("ACTIVEWINTUNADAPTERS"));
@@ -652,7 +652,7 @@ cleanup_pAdapterList:
*
* @param szDisplayName Adapter display name
*
- * @param szHardwareId Adapter hardware ID
+ * @param szzHardwareIDs String of strings with acceptable adapter hardware
IDs
*
* @param iTicksPointer to an integer that represents amount of work
(on progress
* indicator) the UninstallTUNTAPAdapters will take. This
function increments
@@ -666,12 +666,12 @@ schedule_adapter_delete(
_Inout_opt_ struct msica_arg_seq *seqCommit,
_Inout_opt_ struct msica_arg_seq *seqRollback,
_In_z_ LPCTSTR szDisplayName,
-_In_z_ LPCTSTR szHardwareId,
+_In_z_ LPCTSTR szzHardwareIDs,
_Inout_ int *iTicks)
{
/* Get adapters with given hardware ID. */
struct tap_adapter_node *pAdapterList = NULL;
-DWORD dwResult = tap_list_adapters(NULL, szHardwareId, );
+DWORD dwResult = tap_list_adapters(NULL, szzHardwareIDs, );
if (dwResult != ERROR_SUCCESS)
{
return dwResult;
@@ -858,11 +858,16 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
szDisplayNameEx = szDisplayNameEx != NULL ? szDisplayNameEx + 1 :
szDisplayName;
/* Get adapter hardware ID (`HardwareId` is field #5). */
-LPTSTR szHardwareId = NULL;
-uiResult = msi_get_record_string(hRecord, 5, );
-if (uiResult != ERROR_SUCCESS)
+TCHAR szzHardwareIDs[0x100] = { 0 };
{
-goto cleanup_szDisplayName;
+LPTSTR szHwId = NULL;
+uiResult = msi_get_record_string(hRecord, 5, );
+if (uiResult != ERROR_SUCCESS)
+{
+goto cleanup_szDisplayName;
+}
+memcpy_s(szzHardwareIDs, sizeof(szzHardwareIDs) - 2*sizeof(TCHAR)
/*requires double zero termination*/, szHwId, _tcslen(szHwId)*sizeof(TCHAR));
+free(szHwId);
}
if (iAction > INSTALLSTATE_BROKEN)
@@ -876,7 +881,7 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
uiResult = msi_get_record_string(hRecord, 3, );
if (uiResult != ERROR_SUCCESS)
{
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
}
#ifdef __GNUC__
/*
@@ -890,13 +895,13 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
{
case MSICONDITION_FALSE:
free(szValue);
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
case MSICONDITION_ERROR:
uiResult = ERROR_INVALID_FIELD;
msg(M_NONFATAL | M_ERRNO, "%s:
MsiEvaluateCondition(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szValue);
free(szValue);
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
@@ -908,11 +913,11 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)