]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
TAP-Win32 fixes to run on Windows Vista.
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Thu, 14 Sep 2006 02:18:40 +0000 (02:18 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Thu, 14 Sep 2006 02:18:40 +0000 (02:18 +0000)
Modified installer to detect 32-bit vs.
64 bit Windows and install the correct TAP
driver.

TAP-Win32 version number is at 8.4.

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@1229 e7ae566f-a301-0410-adde-c780ea21d3b5

INSTALL
configure.ac
install-win32/openvpn.nsi.in
install-win32/prebuild
tap-win32/SOURCES
tap-win32/amd64/OemWin2k.inf [new file with mode: 0755]
tap-win32/amd64/tap.cat [new file with mode: 0755]
tap-win32/i386/OemWin2k.inf
tap-win32/resource.rc
tap-win32/tapdrvr.c
tun.c

diff --git a/INSTALL b/INSTALL
index c95640aee20f86bdf1087bdf49f0968b99e9666d..dd0783d851467630a62740e18831afef6d347b87 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -302,3 +302,28 @@ CAVEATS & BUGS:
   IV for OFB and CFB modes.  This is not an issue if you are
   using CBC cipher mode (the default), or if you are using OFB or CFB
   cipher mode with SSL/TLS authentication.
+
+******************************************************************************
+
+Subject: [Openvpn-users] Re: Windows XP 64 bit
+From: Hypherion
+Date: Thu, 14 Apr 2005 07:01:17 +0000 (UTC)
+
+Well I managed to build a Windows XP 64 bit driver myself and it's working
+great, I can connect to my server again :)
+
+I had to use the WinDDK for Windows 2003 Service Pack 1 and just built the
+driver in the Windows 2003 AMD64 environment.  I had to comment out the
+MAPINFO:FIXUPS directive in the SOURCES file. 
+Then I copied and renamed (devcon.exe/tapinstall.exe) from
+C:\WINDDK\3790.1830\tools\devcon\amd64. 
+I had to edit the file OemWin2k.inf and change the Manufactured + Product
+Section to:
+
+[Manufacturer]
+   %Provider% = tap0801, NTamd64
+
+[tap0801.NTamd64]
+   %DeviceDescription% = tap0801.ndi, tap0801
index fcd0ea2d4330d28a2ead1d4a8035b35e50714ff8..9fc01b82fe1693059333f821f33f141fbaaaa1ba 100644 (file)
@@ -25,7 +25,7 @@ dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.50)
 
-AC_INIT([OpenVPN], [2.1_beta15], [openvpn-users@lists.sourceforge.net], [openvpn])
+AC_INIT([OpenVPN], [2.1_beta15a], [openvpn-users@lists.sourceforge.net], [openvpn])
 AM_CONFIG_HEADER(config.h)
 AC_CONFIG_SRCDIR(syshead.h)
 
index 58134208c5482df722f469e7a87fb41e6f8ff2c6..9a5b47a68091b4bff10d610ed5ffd18408cf756c 100755 (executable)
@@ -266,8 +266,6 @@ SectionEnd
 Section "TAP-Win32 Virtual Ethernet Adapter" SecTAP
 
   SetOverwrite on
-  SetOutPath "$INSTDIR\bin"
-  File "${BIN}\ti3790\tapinstall.exe"
 
   FileOpen $R0 "$INSTDIR\bin\addtap.bat" w
   FileWrite $R0 "rem Add a new TAP-Win32 virtual ethernet adapter$\r$\n"
@@ -282,10 +280,37 @@ Section "TAP-Win32 Virtual Ethernet Adapter" SecTAP
   FileWrite $R0 "pause$\r$\n"
   FileClose $R0
 
+  ; Check if we are running on a 64 bit system.
+  System::Call "kernel32::GetCurrentProcess() i .s"
+  System::Call "kernel32::IsWow64Process(i s, *i .r0)"
+  IntCmp $0 0 tap-32bit
+
+; tap-64bit:
+
+  DetailPrint "We are running on a 64-bit system."
+
+  SetOutPath "$INSTDIR\bin"
+  File "${BIN}\ti3790-amd64\tapinstall.exe"
+
+  SetOutPath "$INSTDIR\driver"
+  File "${HOME}\tap-win32\amd64\OemWin2k.inf"
+  File "${HOME}\tap-win32\amd64\${TAPDRV}"
+
+  goto tapend
+
+tap-32bit:
+
+  DetailPrint "We are running on a 32-bit system."
+
+  SetOutPath "$INSTDIR\bin"
+  File "${BIN}\ti3790-i386\tapinstall.exe"
+
   SetOutPath "$INSTDIR\driver"
   File "${HOME}\tap-win32\i386\OemWin2k.inf"
   File "${HOME}\tap-win32\i386\${TAPDRV}"
 
+  tapend:
+
 SectionEnd
 
 Section "Add OpenVPN to PATH" SecAddPath
index 2c0c17200ac05e8044f77da72c96f83459d7db19..6ee2c8a31801abd7b366b0c92ae4ef5b2001b7c9 100755 (executable)
@@ -30,7 +30,8 @@ DMALLOC=$H/dmalloc-5.4.2
 
 # TAP binaries should be here: tap0801.sys and tapinstall.exe
 # These must be built with MS DDK.
-TAPBIN=$H/tapbin-21
+TAPBIN=$H/tapbin-0804
+TAPBIN64=$H/tapbin64-0804
 
 # u2d.c should exist here.
 SCRIPTS=$IN/install-win32
@@ -94,7 +95,7 @@ $U2D <$IN/sample-config-files/server.conf >$OUT/install-win32/server.ovpn
 cp $IN/install-win32/sample.ovpn $OUT/install-win32
 $U2D <$IN/easy-rsa/1.0/openssl.cnf >$OUT/install-win32/openssl.cnf.sample
 
-echo BUILD tap-win32
+echo BUILD tap-win32 for x86 and amd64
 
 mkdir $OUT/tap-win32
 cp $IN/tap-win32/*.[ch] $OUT/tap-win32
@@ -105,11 +106,17 @@ cp $IN/tap-win32/SOURCES $OUT/tap-win32
 mkdir $OUT/tap-win32/i386
 cp $IN/tap-win32/i386/OemWin2k.inf $OUT/tap-win32/i386
 cp $IN/tap-win32/i386/tap.cat $OUT/tap-win32/i386
-
 cp $TAPBIN/tap0801.sys $OUT/tap-win32/i386
 
-mkdir $OUT/bin/ti3790
-cp $TAPBIN/tapinstall.exe $OUT/bin/ti3790
+mkdir $OUT/tap-win32/amd64
+cp $IN/tap-win32/amd64/OemWin2k.inf $OUT/tap-win32/amd64
+cp $IN/tap-win32/amd64/tap.cat $OUT/tap-win32/amd64
+cp $TAPBIN64/tap0801.sys $OUT/tap-win32/amd64
+
+mkdir $OUT/bin/ti3790-i386
+cp $TAPBIN/tapinstall.exe $OUT/bin/ti3790-i386
+mkdir $OUT/bin/ti3790-amd64
+cp $TAPBIN64/tapinstall.exe $OUT/bin/ti3790-amd64
 
 echo BUILD service-win32
 
index f03b7f63f4b2642341a3660bdefcf9413ebaf38e..4d6cdee57221e0772b290234ccdfcd6301a2e232 100755 (executable)
@@ -15,7 +15,7 @@ INCLUDES=$(DDK_INCLUDE_PATH)
 # config-win32.h
 C_DEFINES=
 C_DEFINES=$(C_DEFINES) -DTAP_DRIVER_MAJOR_VERSION=8
-C_DEFINES=$(C_DEFINES) -DTAP_DRIVER_MINOR_VERSION=3
+C_DEFINES=$(C_DEFINES) -DTAP_DRIVER_MINOR_VERSION=4
 
 # Use 00:FF:XX:XX:XX:XX format MAC addresses where
 # the Xs are random (like Linux tap driver).
@@ -60,7 +60,7 @@ MSC_OPTIMIZATION=/Od /Oi /Fc
 !ENDIF
 
 # Generate a linker map file just in case we need one for debugging
-LINKER_FLAGS=$(LINKER_FLAGS) /MAP /MAPINFO:EXPORTS /MAPINFO:LINES /MAPINFO:FIXUPS
+LINKER_FLAGS=$(LINKER_FLAGS) /MAP /MAPINFO:EXPORTS /MAPINFO:LINES
 
 # Generate a browser information file for use in IDE development
 BROWSER_INFO=1
diff --git a/tap-win32/amd64/OemWin2k.inf b/tap-win32/amd64/OemWin2k.inf
new file mode 100755 (executable)
index 0000000..68879bd
--- /dev/null
@@ -0,0 +1,183 @@
+; ****************************************************************************
+; * Copyright (C) 2002-2006 OpenVPN Solutions LLC                            *
+; *  This program is free software; you can redistribute it and/or modify    *
+; *  it under the terms of the GNU General Public License version 2          *
+; *  as published by the Free Software Foundation.                           *
+; ****************************************************************************
+
+; SYNTAX CHECKER
+; cd \WINDDK\3790\tools\chkinf
+; chkinf c:\src\openvpn\tap-win32\i386\oemwin2k.inf
+; OUTPUT -> file:///c:/WINDDK/3790/tools/chkinf/htm/c%23+src+openvpn+tap-win32+i386+__OemWin2k.htm
+
+; INSTALL/REMOVE DRIVER
+;   tapinstall install OemWin2k.inf TAP0801
+;   tapinstall update OemWin2k.inf TAP0801
+;   tapinstall remove TAP0801
+
+;*********************************************************
+; Note to Developers:
+;
+; If you are bundling the TAP-Win32 driver with your app,
+; you should try to rename it in such a way that it will
+; not collide with other instances of TAP-Win32 defined
+; by other apps.  Multiple versions of the TAP-Win32
+; driver, each installed by different apps, can coexist
+; on the same machine if you follow these guidelines:
+;
+; (1) Rename all tapXXXX instances in this file to
+;     something different (use at least 5 characters
+;     for this name!)
+; (2) Change the "!define TAP" definition in openvpn.nsi
+;     to match what you changed tapXXXX to.
+; (3) Change TARGETNAME in SOURCES to match what you
+;     changed tapXXXX to.
+; (4) Change TAP_COMPONENT_ID in common.h to match what
+;     you changed tapXXXX to.
+; (5) Change SZDEPENDENCIES in service.h to match what
+;     you changed tapXXXX to.
+; (6) Change DeviceDescription and Provider strings.
+; (7) Change PRODUCT_STRING in constants.h to what you
+;     set DeviceDescription to.
+;
+;*********************************************************
+
+[Version]
+   Signature = "$Windows NT$"
+   CatalogFile = tap.cat
+   ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
+   Provider = %Provider%
+   Class = Net
+
+; This version number should match the version
+; number given in SOURCES.
+   DriverVer=09/13/2006,8.00.00.0004
+
+[Strings]
+   DeviceDescription = "TAP-Win32 Adapter V8"
+   Provider = "TAP-Win32 Provider"
+
+;----------------------------------------------------------------
+;                      Manufacturer + Product Section (Done)
+;----------------------------------------------------------------
+[Manufacturer]
+   %Provider% = tap0801, NTamd64
+
+[tap0801.NTamd64]
+   %DeviceDescription% = tap0801.ndi, tap0801
+
+;---------------------------------------------------------------
+;                             Driver Section (Done)
+;---------------------------------------------------------------
+
+;----------------- Characteristics ------------
+;    NCF_PHYSICAL = 0x04
+;    NCF_VIRTUAL = 0x01
+;    NCF_SOFTWARE_ENUMERATED = 0x02
+;    NCF_HIDDEN = 0x08
+;    NCF_NO_SERVICE = 0x10
+;    NCF_HAS_UI = 0x80
+;----------------- Characteristics ------------
+
+[tap0801.ndi]
+   CopyFiles       = tap0801.driver, tap0801.files
+   AddReg          = tap0801.reg
+   AddReg          = tap0801.params.reg
+   Characteristics = 0x81
+
+[tap0801.ndi.Services]
+   AddService = tap0801,        2, tap0801.service
+
+[tap0801.reg]
+   HKR, Ndi,            Service,      0, "tap0801"
+   HKR, Ndi\Interfaces, UpperRange,   0, "ndis5"
+   HKR, Ndi\Interfaces, LowerRange,   0, "ethernet"
+   HKR, ,               Manufacturer, 0, "%Provider%"
+   HKR, ,               ProductName,  0, "%DeviceDescription%"
+
+[tap0801.params.reg]
+   HKR, Ndi\params\MTU,                  ParamDesc, 0, "MTU"
+   HKR, Ndi\params\MTU,                  Type,      0, "int"
+   HKR, Ndi\params\MTU,                  Default,   0, "1500"
+   HKR, Ndi\params\MTU,                  Optional,  0, "0"
+   HKR, Ndi\params\MTU,                  Min,       0, "100"
+   HKR, Ndi\params\MTU,                  Max,       0, "1500"
+   HKR, Ndi\params\MTU,                  Step,      0, "1"
+   HKR, Ndi\params\MediaStatus,          ParamDesc, 0, "Media Status"
+   HKR, Ndi\params\MediaStatus,          Type,      0, "enum"
+   HKR, Ndi\params\MediaStatus,          Default,   0, "0"
+   HKR, Ndi\params\MediaStatus,          Optional,  0, "0"
+   HKR, Ndi\params\MediaStatus\enum,     "0",       0, "Application Controlled"
+   HKR, Ndi\params\MediaStatus\enum,     "1",       0, "Always Connected"
+   HKR, Ndi\params\MAC,                  ParamDesc, 0, "MAC Address"
+   HKR, Ndi\params\MAC,                  Type,      0, "edit"
+   HKR, Ndi\params\MAC,                  Optional,  0, "1"
+   HKR, Ndi\params\AllowNonAdmin,        ParamDesc, 0, "Non-Admin Access"
+   HKR, Ndi\params\AllowNonAdmin,        Type,      0, "enum"
+   HKR, Ndi\params\AllowNonAdmin,        Default,   0, "1"
+   HKR, Ndi\params\AllowNonAdmin,        Optional,  0, "0"
+   HKR, Ndi\params\AllowNonAdmin\enum,   "0",       0, "Not Allowed"
+   HKR, Ndi\params\AllowNonAdmin\enum,   "1",       0, "Allowed"
+
+;----------------------------------------------------------------
+;                             Service Section
+;----------------------------------------------------------------
+
+;---------- Service Type -------------
+;    SERVICE_KERNEL_DRIVER     = 0x01
+;    SERVICE_WIN32_OWN_PROCESS = 0x10
+;---------- Service Type -------------
+
+;---------- Start Mode ---------------
+;    SERVICE_BOOT_START   = 0x0
+;    SERVICE_SYSTEM_START = 0x1
+;    SERVICE_AUTO_START   = 0x2
+;    SERVICE_DEMAND_START = 0x3
+;    SERVICE_DISABLED     = 0x4
+;---------- Start Mode ---------------
+
+[tap0801.service]
+   DisplayName = %DeviceDescription%
+   ServiceType = 1
+   StartType = 3
+   ErrorControl = 1
+   LoadOrderGroup = NDIS
+   ServiceBinary = %12%\tap0801.sys
+
+;-----------------------------------------------------------------
+;                                File Installation
+;-----------------------------------------------------------------
+
+;----------------- Copy Flags ------------
+;    COPYFLG_NOSKIP = 0x02
+;    COPYFLG_NOVERSIONCHECK = 0x04
+;----------------- Copy Flags ------------
+
+; SourceDisksNames
+; diskid = description[, [tagfile] [, <unused>, subdir]]
+; 1 = "Intel Driver Disk 1",e100bex.sys,,
+
+[SourceDisksNames]
+   1 = %DeviceDescription%, tap0801.sys
+
+; SourceDisksFiles
+; filename_on_source = diskID[, [subdir][, size]]
+; e100bex.sys = 1,, ; on distribution disk 1
+
+[SourceDisksFiles]
+tap0801.sys = 1
+
+[DestinationDirs]
+   tap0801.files  = 11
+   tap0801.driver = 12
+
+[tap0801.files]
+;   TapPanel.cpl,,,6   ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK
+;   cipsrvr.exe,,,6     ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK
+
+[tap0801.driver]
+   tap0801.sys,,,6     ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK
+
+;---------------------------------------------------------------
+;                                      End
+;---------------------------------------------------------------
diff --git a/tap-win32/amd64/tap.cat b/tap-win32/amd64/tap.cat
new file mode 100755 (executable)
index 0000000..4492fa2
--- /dev/null
@@ -0,0 +1,6 @@
+; ****************************************************************************
+; * Copyright (C) 2002-2005 OpenVPN Solutions LLC                            *
+; *  This program is free software; you can redistribute it and/or modify    *
+; *  it under the terms of the GNU General Public License version 2          *
+; *  as published by the Free Software Foundation.                           *
+; ****************************************************************************
index 681c4b7a90f05ee2cf1359000f2a41f7a0a269bd..219b4ca9fb6942f228279cecd288f675c9966b71 100755 (executable)
@@ -1,5 +1,5 @@
 ; ****************************************************************************
-; * Copyright (C) 2002-2005 OpenVPN Solutions LLC                            *
+; * Copyright (C) 2002-2006 OpenVPN Solutions LLC                            *
 ; *  This program is free software; you can redistribute it and/or modify    *
 ; *  it under the terms of the GNU General Public License version 2          *
 ; *  as published by the Free Software Foundation.                           *
@@ -51,7 +51,7 @@
 
 ; This version number should match the version
 ; number given in SOURCES.
-   DriverVer=05/15/2004,8.00.00.0001
+   DriverVer=09/13/2006,8.00.00.0004
 
 [Strings]
    DeviceDescription = "TAP-Win32 Adapter V8"
index 726e28754d43c8fca7343a94e81feb47c1097eba..8c9cb7b186e3473ced6485097c1afb2621633f6d 100755 (executable)
@@ -36,7 +36,7 @@
 #define VER_COMPANYNAME_STR         "The OpenVPN Project"
 #define VER_FILEDESCRIPTION_STR     "TAP-Win32 Virtual Network Driver"
 #define VER_ORIGINALFILENAME_STR    TAP_COMPONENT_ID ".sys"
-#define VER_LEGALCOPYRIGHT_YEARS    "2003-2004"
+#define VER_LEGALCOPYRIGHT_YEARS    "2003-2006"
 #define VER_LEGALCOPYRIGHT_STR      "OpenVPN Solutions LLC and Damion K. Wilson"
 
 
index 0997bd5cac46679aae9d086fd2fbbe89ed0d5819..9c6304bc2de2d6bc31192db0b9a8e84a55cd70ce 100755 (executable)
@@ -8,7 +8,7 @@
  *  Copyright (C) Damion K. Wilson, 2003, and is released under the
  *  GPL version 2 (see below).
  *
- *  All other source code is Copyright (C) 2002-2005 OpenVPN Solutions LLC,
+ *  All other source code is Copyright (C) 2002-2006 OpenVPN Solutions LLC,
  *  and is released under the GPL version 2 (see below).
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -364,19 +364,6 @@ NDIS_STATUS AdapterCreate
                                       AdapterHalt);
   l_Adapter->m_RegisteredAdapterShutdownHandler = TRUE;
 
-  //====================================
-  // Allocate and construct adapter name
-  //====================================
-
-  if (RtlUnicodeStringToAnsiString (
-       &l_Adapter->m_NameAnsi,
-       &((PNDIS_MINIPORT_BLOCK) p_AdapterHandle)->MiniportName,
-       TRUE) != STATUS_SUCCESS)
-    {
-      AdapterFreeResources (l_Adapter);
-      return NDIS_STATUS_RESOURCES;
-    }
-
   //============================================
   // Get parameters from registry which were set
   // in the adapter advanced properties dialog.
@@ -392,8 +379,66 @@ NDIS_STATUS AdapterCreate
     l_Adapter->m_MediaState = FALSE;
 
     NdisOpenConfiguration (&status, &configHandle, p_ConfigurationHandle);
-    if (status == NDIS_STATUS_SUCCESS)
+    if (status != NDIS_STATUS_SUCCESS)
       {
+         DEBUGP (("[TAP] Couldn't open adapter registry\n"));
+         AdapterFreeResources (l_Adapter);
+         return status;
+      }
+
+    //====================================
+    // Allocate and construct adapter name
+    //====================================
+    {
+      NDIS_STRING key = NDIS_STRING_CONST("MiniportName");
+      NdisReadConfiguration (&status, &parm, configHandle, &key, NdisParameterString);
+      if (status == NDIS_STATUS_SUCCESS)
+       {
+         if (parm->ParameterType == NdisParameterString)
+           {
+             DEBUGP (("[TAP] NdisReadConfiguration (MiniportName=%s)\n", parm->ParameterData.StringData.Buffer));
+
+             if (RtlUnicodeStringToAnsiString (
+                       &l_Adapter->m_NameAnsi,
+                       &parm->ParameterData.StringData,
+                       TRUE) != STATUS_SUCCESS)
+               {
+                 DEBUGP (("[TAP] RtlUnicodeStringToAnsiString MiniportName failed\n"));
+                 status = NDIS_STATUS_RESOURCES;
+               }
+           }
+       } else {
+         /* "MiniportName" is available only XP and above.  Not on Windows 2000. */
+         NDIS_STRING key = NDIS_STRING_CONST("NdisVersion");
+         NdisReadConfiguration (&status, &parm, configHandle, &key, NdisParameterInteger);
+         if (status == NDIS_STATUS_SUCCESS)
+           {
+             if (parm->ParameterData.IntegerData == 0x50000)
+               {
+                 /* Fallback for Windows 2000 with NDIS version 5.00.00
+                    Don't use this on Vista, 'NDIS_MINIPORT_BLOCK' was changed! */
+                 DEBUGP (("[TAP] NdisReadConfiguration NdisVersion (Int=%X)\n", parm->ParameterData.IntegerData));
+                 if (RtlUnicodeStringToAnsiString (
+                       &l_Adapter->m_NameAnsi,
+                       &((PNDIS_MINIPORT_BLOCK) p_AdapterHandle)->MiniportName,
+                       TRUE) != STATUS_SUCCESS)
+                   {
+                     DEBUGP (("[TAP] RtlUnicodeStringToAnsiString MiniportName (W2K) failed\n"));
+                     status = NDIS_STATUS_RESOURCES;
+                   }
+               }
+           }
+       }
+    }
+
+    /* Can't continue without name (see macro 'NAME') */
+    if (status != NDIS_STATUS_SUCCESS || !l_Adapter->m_NameAnsi.Buffer)
+      {
+       NdisCloseConfiguration (configHandle);
+       AdapterFreeResources (l_Adapter);
+       return NDIS_STATUS_RESOURCES;
+      }
+
        /* Read MTU setting from registry */
        {
          NDIS_STRING key = NDIS_STRING_CONST("MTU");
@@ -470,7 +515,6 @@ NDIS_STATUS AdapterCreate
        }
 
        NdisCloseConfiguration (configHandle);
-      }
 
     DEBUGP (("[%s] MTU=%d\n", NAME (l_Adapter), l_Adapter->m_MTU));
   }
diff --git a/tun.c b/tun.c
index 9c911ef1776595cd1b49856b8c772f8e24dc90c2..7fd876e97dd5e97e1f5bf59d0c4bbb1bfb9cd9be 100644 (file)
--- a/tun.c
+++ b/tun.c
@@ -3659,8 +3659,7 @@ open_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6
             (info[2] ? "(DEBUG)" : ""));
 
       }
-    if ( !(info[0] > TAP_WIN32_MIN_MAJOR
-          || (info[0] == TAP_WIN32_MIN_MAJOR && info[1] >= TAP_WIN32_MIN_MINOR)) )
+    if (!(info[0] == TAP_WIN32_MIN_MAJOR && info[1] >= TAP_WIN32_MIN_MINOR))
       msg (M_FATAL, "ERROR:  This version of " PACKAGE_NAME " requires a TAP-Win32 driver that is at least version %d.%d -- If you recently upgraded your " PACKAGE_NAME " distribution, a reboot is probably required at this point to get Windows to see the new driver.",
           TAP_WIN32_MIN_MAJOR,
           TAP_WIN32_MIN_MINOR);