Index: /trunk/include/VBox/VBoxNetCfg-win.h
===================================================================
--- /trunk/include/VBox/VBoxNetCfg-win.h	(revision 52591)
+++ /trunk/include/VBox/VBoxNetCfg-win.h	(revision 52592)
@@ -71,5 +71,5 @@
                                                                         OUT GUID *pGuid, OUT BSTR *lppszName,
                                                                         OUT BSTR *pErrMsg);
-VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR pcsxwInf, BOOL *pbRebootRequired);
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR pcsxwInf, BOOL *pbRebootRequired, LPCWSTR pcsxwId);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveHostOnlyNetworkInterface(IN const GUID *pGUID, OUT BSTR *pErrMsg);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveAllNetDevicesOfId(IN LPCWSTR lpszPnPId);
Index: /trunk/include/VBox/intnet.h
===================================================================
--- /trunk/include/VBox/intnet.h	(revision 52591)
+++ /trunk/include/VBox/intnet.h	(revision 52592)
@@ -576,5 +576,4 @@
     DECLR0CALLBACKMEMBER(void, pfnReportNoPreemptDsts,(PINTNETTRUNKSWPORT pSwitchPort, uint32_t fNoPreemptDsts));
 
-#ifdef VBOX_WITH_INTNET_DISCONNECT
     /**
      * OS triggered trunk disconnect.
@@ -598,5 +597,4 @@
     DECLR0CALLBACKMEMBER(void, pfnDisconnect,(PINTNETTRUNKSWPORT pSwitchPort, PINTNETTRUNKIFPORT pIfPort,
                                               PFNINTNETTRUNKIFPORTRELEASEBUSY pfnReleaseBusy));
-#endif /* VBOX_WITH_INTNET_DISCONNECT */
 
     /** Structure version number. (INTNETTRUNKSWPORT_VERSION) */
@@ -605,9 +603,5 @@
 
 /** Version number for the INTNETTRUNKIFPORT::u32Version and INTNETTRUNKIFPORT::u32VersionEnd fields. */
-#ifdef VBOX_WITH_INTNET_DISCONNECT
 # define INTNETTRUNKSWPORT_VERSION   UINT32_C(0xA2CDf003)
-#else
-# define INTNETTRUNKSWPORT_VERSION   UINT32_C(0xA2CDf001)
-#endif
 
 
Index: /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp	(revision 52591)
+++ /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp	(revision 52592)
@@ -5104,5 +5104,4 @@
 
 
-#ifdef VBOX_WITH_INTNET_DISCONNECT
 /** @copydoc INTNETTRUNKSWPORT::pfnDisconnect */
 static DECLCALLBACK(void) intnetR0TrunkIfPortDisconnect(PINTNETTRUNKSWPORT pSwitchPort, PINTNETTRUNKIFPORT pIfPort,
@@ -5162,5 +5161,4 @@
         pfnReleaseBusy(pIfPort);
 }
-#endif /* VBOX_WITH_INTNET_DISCONNECT */
 
 
@@ -5524,7 +5522,5 @@
         pTrunk->SwitchPort.pfnReportGsoCapabilities   = intnetR0TrunkIfPortReportGsoCapabilities;
         pTrunk->SwitchPort.pfnReportNoPreemptDsts     = intnetR0TrunkIfPortReportNoPreemptDsts;
-#ifdef VBOX_WITH_INTNET_DISCONNECT
         pTrunk->SwitchPort.pfnDisconnect              = intnetR0TrunkIfPortDisconnect;
-#endif /* VBOX_WITH_INTNET_DISCONNECT */
         pTrunk->SwitchPort.u32VersionEnd              = INTNETTRUNKSWPORT_VERSION;
         //pTrunk->pIfPort                 = NULL;
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk	(revision 52591)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk	(revision 52592)
@@ -306,4 +306,19 @@
 
  #
+ # NetAdp6Uninstall
+ #
+ PROGRAMS.win  += NetAdp6Uninstall
+ NetAdp6Uninstall_TEMPLATE = VBOXR3STATIC
+ NetAdp6Uninstall_SDKS     = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK) VBOX_NTDLL
+ NetAdp6Uninstall_SOURCES  = win/tools/VBoxNetAdpUninstall.cpp
+ NetAdp6Uninstall_DEFS    += NDIS60=1
+ NetAdp6Uninstall_LIBS     = \
+ 	$(WinNetConfig_1_TARGET) \
+	$(PATH_STAGE_LIB)/VBoxDrvCfg$(VBOX_SUFF_LIB) \
+ 	$(PATH_SDK_$(VBOX_WINDDK)_LIB)/Newdev.lib \
+  	$(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
+ 	$(PATH_SDK_$(VBOX_WINPSDK)_LIB)/WbemUuid.Lib
+
+ #
  # NetLwfInstall
  #
@@ -437,5 +452,4 @@
  endif #  ifdef VBOX_SIGNING_MODE
 
- ifdef VBOX_WITH_NDIS6
  #
  # VBoxNetAdp6.sys - The VirtualBox Adapter miniport driver.
@@ -494,6 +508,4 @@
 
  endif #  ifdef VBOX_SIGNING_MODE
-
- endif #  ifdef VBOX_WITH_NDIS6
 
 endif #ifeq ($(KBUILD_TARGET), win)
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp	(revision 52591)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp	(revision 52592)
@@ -2390,4 +2390,5 @@
 
 #define DRIVERHWID _T("sun_VBoxNetAdp")
+#define DRIVERHWID_NDIS6 _T("sun_VBoxNetAdp6")
 
 #define SetErrBreak(strAndArgs) \
@@ -2546,5 +2547,5 @@
                      t += _tcslen (t) + 1)
                 {
-                    if (!_tcsicmp (DRIVERHWID, t))
+                    if (!_tcsicmp (DRIVERHWID, t) || !_tcsicmp (DRIVERHWID_NDIS6, t))
                     {
                           /* get the device instance ID */
@@ -2603,7 +2604,7 @@
 }
 
-VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR pcsxwInf, BOOL *pbRebootRequired)
-{
-    return VBoxDrvCfgDrvUpdate(DRIVERHWID, pcsxwInf, pbRebootRequired);
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR pcsxwInf, BOOL *pbRebootRequired, LPCWSTR pcsxwId)
+{
+    return VBoxDrvCfgDrvUpdate(pcsxwId, pcsxwInf, pbRebootRequired);
 }
 
@@ -2766,5 +2767,5 @@
                 while (t && *t && t < (TCHAR *) &detailBuf [RT_ELEMENTS(detailBuf)])
                 {
-                    if (!_tcsicmp(t, DRIVERHWID))
+                    if (!_tcsicmp(t, DRIVERHWID) || !_tcsicmp(t, DRIVERHWID_NDIS6))
                         break;
 
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp	(revision 52591)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp	(revision 52592)
@@ -201,5 +201,6 @@
     if (hr == S_OK)
     {
-        if (!_wcsnicmp(pDevId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2))
+        if (!_wcsnicmp(pDevId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2) ||
+            !_wcsnicmp(pDevId, L"sun_VBoxNetAdp6", sizeof(L"sun_VBoxNetAdp6")/2))
         {
             *pbShouldBind = false;
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp	(revision 52591)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp	(revision 52592)
@@ -24,6 +24,8 @@
 #ifdef NDIS60
 #define VBOX_NETADP_INF L"VBoxNetAdp6.inf"
+#define VBOX_NETADP_HWID L"sun_VBoxNetAdp6"
 #else /* !NDIS60 */
 #define VBOX_NETADP_INF L"VBoxNetAdp.inf"
+#define VBOX_NETADP_HWID L"sun_VBoxNetAdp"
 #endif /* !NDIS60 */
 
@@ -106,8 +108,8 @@
     if (SUCCEEDED(hr))
     {
-        hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(L"sun_VBoxNetAdp");
-        if (SUCCEEDED(hr))
-        {
-            hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, L"Net", L"sun_VBoxNetAdp", 0/* could be SUOI_FORCEDELETE */);
+        hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(VBOX_NETADP_HWID);
+        if (SUCCEEDED(hr))
+        {
+            hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, L"Net", VBOX_NETADP_HWID, 0/* could be SUOI_FORCEDELETE */);
             if (SUCCEEDED(hr))
             {
@@ -139,5 +141,5 @@
     {
         BOOL fRebootRequired = FALSE;
-        hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(VBOX_NETADP_INF, &fRebootRequired);
+        hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(VBOX_NETADP_INF, &fRebootRequired, VBOX_NETADP_HWID);
         if (SUCCEEDED(hr))
         {
@@ -168,5 +170,5 @@
     if (SUCCEEDED(hr))
     {
-        hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(L"sun_VBoxNetAdp", VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
+        hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(VBOX_NETADP_HWID, VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
         if (SUCCEEDED(hr))
         {
@@ -195,5 +197,5 @@
     if (SUCCEEDED(hr))
     {
-        hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(L"sun_VBoxNetAdp", VBOXNECTFGWINPROPCHANGE_TYPE_ENABLE);
+        hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(VBOX_NETADP_HWID, VBOXNECTFGWINPROPCHANGE_TYPE_ENABLE);
         if (SUCCEEDED(hr))
         {
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp	(revision 52591)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp	(revision 52592)
@@ -22,4 +22,9 @@
 #include <devguid.h>
 
+#ifdef NDIS60
+#define VBOX_NETADP_HWID L"sun_VBoxNetAdp6"
+#else /* !NDIS60 */
+#define VBOX_NETADP_HWID L"sun_VBoxNetAdp"
+#endif /* !NDIS60 */
 
 static VOID winNetCfgLogger (LPCSTR szString)
@@ -38,8 +43,8 @@
     if(hr == S_OK)
     {
-        hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(L"sun_VBoxNetAdp");
+        hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(VBOX_NETADP_HWID);
         if(hr == S_OK)
         {
-            hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, L"Net", L"sun_VBoxNetAdp", 0/* could be SUOI_FORCEDELETE */);
+            hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, L"Net", VBOX_NETADP_HWID, 0/* could be SUOI_FORCEDELETE */);
             if(hr == S_OK)
             {
Index: /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
===================================================================
--- /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp	(revision 52591)
+++ /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp	(revision 52592)
@@ -497,4 +497,8 @@
 #define NETADP_ID  L"sun_VBoxNetAdp" /** @todo Needs to be changed (?). */
 
+#define NETLWF_INF_NAME L"VBoxNetLwf.inf"
+#define NETLWF_ID       L"sun_VBoxNetLwf" /** @todo Needs to be changed (?). */
+#define NETADP6_ID      L"sun_VBoxNetAdp6" /** @todo Needs to be changed (?). */
+
 static MSIHANDLE g_hCurrentModule = NULL;
 
@@ -773,4 +777,122 @@
     return ERROR_SUCCESS;
 }
+
+
+UINT __stdcall UninstallNetLwf(MSIHANDLE hModule)
+{
+#ifdef VBOX_WITH_NETFLT
+    INetCfg *pNetCfg;
+    UINT uErr;
+
+    netCfgLoggerEnable(hModule);
+
+    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
+
+    __try
+    {
+        logStringW(hModule, L"Uninstalling NetLwf");
+
+        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
+        if (uErr == ERROR_SUCCESS)
+        {
+            HRESULT hr = VBoxNetCfgWinNetLwfUninstall(pNetCfg);
+            if (hr != S_OK)
+                logStringW(hModule, L"UninstallNetLwf: VBoxNetCfgWinUninstallComponent failed, error = 0x%x", hr);
+
+            uErr = errorConvertFromHResult(hModule, hr);
+
+            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
+
+            logStringW(hModule, L"Uninstalling NetLwf done, error = 0x%x", uErr);
+        }
+        else
+            logStringW(hModule, L"UninstallNetLwf: doNetCfgInit failed, error = 0x%x", uErr);
+    }
+    __finally
+    {
+        if (bOldIntMode)
+        {
+            /* The prev mode != FALSE, i.e. non-interactive. */
+            SetupSetNonInteractiveMode(bOldIntMode);
+        }
+        netCfgLoggerDisable();
+    }
+#endif /* VBOX_WITH_NETFLT */
+
+    /* Never fail the install even if we did not succeed. */
+    return ERROR_SUCCESS;
+}
+
+UINT __stdcall InstallNetLwf(MSIHANDLE hModule)
+{
+#ifdef VBOX_WITH_NETFLT
+    UINT uErr;
+    INetCfg *pNetCfg;
+
+    netCfgLoggerEnable(hModule);
+
+    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
+
+    __try
+    {
+
+        logStringW(hModule, L"InstallNetLwf: Installing NetLwf");
+
+        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
+        if (uErr == ERROR_SUCCESS)
+        {
+            WCHAR wszInfName[] = L"VBoxNetLwf.inf";
+            WCHAR wszInf[MAX_PATH];
+            DWORD cchInf = RT_ELEMENTS(wszInf) - sizeof(NETLWF_INF_NAME) - 1;
+            UINT uErr = MsiGetPropertyW(hModule, L"CustomActionData", wszInf, &cchInf);
+            if (uErr == ERROR_SUCCESS)
+            {
+                if (cchInf)
+                {
+                    if (wszInf[cchInf - 1] != L'\\')
+                    {
+                        wszInf[cchInf++] = L'\\';
+                        wszInf[cchInf]   = L'\0';
+                    }
+
+                    wcscat(wszInf, NETLWF_INF_NAME);
+
+                    HRESULT hr = VBoxNetCfgWinNetLwfInstall(pNetCfg, wszInf);
+                    if (FAILED(hr))
+                        logStringW(hModule, L"InstallNetLwf: VBoxNetCfgWinNetLwfInstall failed, error = 0x%x", hr);
+
+                    uErr = errorConvertFromHResult(hModule, hr);
+                }
+                else
+                {
+                    logStringW(hModule, L"vboxNetFltQueryInfArray: Empty installation directory");
+                    uErr = ERROR_GEN_FAILURE;
+                }
+            }
+            else
+                logStringW(hModule, L"vboxNetFltQueryInfArray: MsiGetPropertyW failed, error = 0x%x", uErr);
+
+            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
+
+            logStringW(hModule, L"InstallNetLwf: Done");
+        }
+        else
+            logStringW(hModule, L"InstallNetLwf: doNetCfgInit failed, error = 0x%x", uErr);
+    }
+    __finally
+    {
+        if (bOldIntMode)
+        {
+            /* The prev mode != FALSE, i.e. non-interactive. */
+            SetupSetNonInteractiveMode(bOldIntMode);
+        }
+        netCfgLoggerDisable();
+    }
+#endif /* VBOX_WITH_NETFLT */
+
+    /* Never fail the install even if we did not succeed. */
+    return ERROR_SUCCESS;
+}
+
 
 #if 0
@@ -832,5 +954,5 @@
 #endif
 
-UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
+static UINT _createHostOnlyInterface(MSIHANDLE hModule, LPCWSTR pwszId, LPCWSTR pwszInfName)
 {
 #ifdef VBOX_WITH_NETFLT
@@ -846,5 +968,5 @@
     GUID guid;
     WCHAR wszMpInf[MAX_PATH];
-    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - sizeof("VBoxNetAdp.inf") - 1;
+    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - wcslen(pwszInfName) - 1 - 1;
     LPCWSTR pwszInfPath = NULL;
     bool bIsFile = false;
@@ -861,5 +983,5 @@
             }
 
-            wcscat(wszMpInf, L"VBoxNetAdp.inf");
+            wcscat(wszMpInf, pwszInfName);
             pwszInfPath = wszMpInf;
             bIsFile = true;
@@ -887,5 +1009,5 @@
     //first, try to update Host Only Network Interface
         BOOL fRebootRequired = FALSE;
-        hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired);
+        hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired, pwszId);
         if (SUCCEEDED(hr))
         {
@@ -938,5 +1060,16 @@
 }
 
-UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
+UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
+{
+    return _createHostOnlyInterface(hModule, NETADP_ID, L"VBoxNetAdp.inf");
+}
+
+UINT __stdcall Ndis6CreateHostOnlyInterface(MSIHANDLE hModule)
+{
+    return _createHostOnlyInterface(hModule, NETADP6_ID, L"VBoxNetAdp6.inf");
+}
+
+
+static UINT _removeHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszId)
 {
 #ifdef VBOX_WITH_NETFLT
@@ -947,8 +1080,8 @@
     BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
 
-    HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
+    HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(pwszId);
     if (SUCCEEDED(hr))
     {
-        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
+        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, pwszId, L"Net", 0/* could be SUOI_FORCEDELETE */);
         if (FAILED(hr))
         {
@@ -970,5 +1103,17 @@
 }
 
-UINT __stdcall StopHostOnlyInterfaces(MSIHANDLE hModule)
+UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _removeHostOnlyInterfaces(hModule, NETADP_ID);
+}
+
+UINT __stdcall Ndis6RemoveHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _removeHostOnlyInterfaces(hModule, NETADP6_ID);
+}
+
+
+
+static UINT _stopHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszId)
 {
 #ifdef VBOX_WITH_NETFLT
@@ -979,8 +1124,8 @@
     BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
 
-    HRESULT hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(NETADP_ID, VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
+    HRESULT hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(pwszId, VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
     if (SUCCEEDED(hr))
     {
-        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
+        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, pwszId, L"Net", 0/* could be SUOI_FORCEDELETE */);
         if (FAILED(hr))
             logStringW(hModule, L"StopHostOnlyInterfaces: VBoxDrvCfgInfUninstallAllSetupDi failed, hr = 0x%x", hr);
@@ -1000,5 +1145,15 @@
 }
 
-UINT __stdcall UpdateHostOnlyInterfaces(MSIHANDLE hModule)
+UINT __stdcall StopHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _stopHostOnlyInterfaces(hModule, NETADP_ID);
+}
+
+UINT __stdcall Ndis6StopHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _stopHostOnlyInterfaces(hModule, NETADP6_ID);
+}
+
+static UINT _updateHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszInfName, LPCWSTR pwszId)
 {
 #ifdef VBOX_WITH_NETFLT
@@ -1010,5 +1165,5 @@
 
     WCHAR wszMpInf[MAX_PATH];
-    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - sizeof("VBoxNetAdp.inf") - 1;
+    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - wcslen(pwszInfName) - 1 - 1;
     LPCWSTR pwszInfPath = NULL;
     bool bIsFile = false;
@@ -1025,5 +1180,5 @@
             }
 
-            wcscat(wszMpInf, L"VBoxNetAdp.inf");
+            wcscat(wszMpInf, pwszInfName);
             pwszInfPath = wszMpInf;
             bIsFile = true;
@@ -1044,5 +1199,5 @@
 
                 BOOL fRebootRequired = FALSE;
-                HRESULT hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired);
+                HRESULT hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired, pwszId);
                 if (SUCCEEDED(hr))
                 {
@@ -1074,4 +1229,14 @@
     /* Never fail the install even if we did not succeed. */
     return ERROR_SUCCESS;
+}
+
+UINT __stdcall UpdateHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _updateHostOnlyInterfaces(hModule, L"VBoxNetAdp.inf", NETADP_ID);
+}
+
+UINT __stdcall Ndis6UpdateHostOnlyInterfaces(MSIHANDLE hModule)
+{
+    return _updateHostOnlyInterfaces(hModule, L"VBoxNetAdp6.inf", NETADP6_ID);
 }
 
Index: /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
===================================================================
--- /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def	(revision 52591)
+++ /trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def	(revision 52592)
@@ -25,4 +25,6 @@
     InstallNetFlt
     UninstallNetFlt
+    InstallNetLwf
+    UninstallNetLwf
     UninstallTAPInstances
     CreateHostOnlyInterface
@@ -30,3 +32,7 @@
     UpdateHostOnlyInterfaces
     RemoveHostOnlyInterfaces
+    Ndis6CreateHostOnlyInterface
+    Ndis6StopHostOnlyInterfaces
+    Ndis6UpdateHostOnlyInterfaces
+    Ndis6RemoveHostOnlyInterfaces
 
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 52591)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 52592)
@@ -5173,4 +5173,34 @@
                 CoTaskMemFree(pswzBindName);
 
+                wchar_t * pswzHwId;
+                hrc = pAdaptorComponent->GetId(&pswzHwId);
+                Assert(hrc == S_OK);
+                if (hrc == S_OK)
+                {
+                    if (!_wcsnicmp(pswzHwId, L"sun_VBoxNetAdp6", sizeof(L"sun_VBoxNetAdp6")/2))
+                    {
+                        /*
+                         * This is NDIS 6.x miniport, it relies on NetLwf filter to
+                         * run actual traffic. We use netflt attachment instead of
+                         * netadp, which is used in case of NDIS 5.x.
+                         */
+                        InsertConfigInteger(pCfg, "TrunkType", kIntNetTrunkType_NetFlt);
+                        trunkType = TRUNKTYPE_NETFLT;
+                    }
+                    else
+                    {
+                        InsertConfigInteger(pCfg, "TrunkType", kIntNetTrunkType_NetAdp);
+                        trunkType = TRUNKTYPE_NETADP;
+                    }
+                }
+                else
+                {
+                    LogRel(("Console::i_configNetwork: INetCfgComponent::GetId(%s) failed, err (0x%x), "
+                            "falling back to NDIS5 attachment\n", pszTrunkName, hrc));
+                    InsertConfigInteger(pCfg, "TrunkType", kIntNetTrunkType_NetAdp);
+                    trunkType = TRUNKTYPE_NETADP;
+                }
+                CoTaskMemFree(pswzHwId);
+
                 pAdaptorComponent.setNull();
                 /* release the pNc finally */
@@ -5179,5 +5209,4 @@
                 const char *pszTrunk = szTrunkName;
 
-                InsertConfigInteger(pCfg, "TrunkType", kIntNetTrunkType_NetAdp);
                 InsertConfigString(pCfg, "Trunk", pszTrunk);
                 InsertConfigString(pCfg, "Network", szNetwork);
@@ -5186,5 +5215,4 @@
                 networkName = Bstr(szNetwork);
                 trunkName   = Bstr(pszTrunk);
-                trunkType   = TRUNKTYPE_NETADP;
 # endif /* defined VBOX_WITH_NETFLT*/
 #elif defined(RT_OS_DARWIN)
Index: /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 52591)
+++ /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 52592)
@@ -1532,6 +1532,20 @@
                                                     if (uComponentStatus == 0)
                                                     {
-                                                        vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_Bridged,
-                                                                               iDefault);
+                                                        LPWSTR pId;
+                                                        hr = pMpNcc->GetId(&pId);
+                                                        Assert(hr == S_OK);
+                                                        if (hr == S_OK)
+                                                        {
+                                                            if (!_wcsnicmp(pId, L"sun_VBoxNetAdp6", sizeof(L"sun_VBoxNetAdp6")/2))
+                                                            {
+                                                                vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_HostOnly, -1);
+                                                            }
+                                                            else
+                                                            {
+                                                                vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_Bridged,
+                                                                                       iDefault);
+                                                            }
+                                                            CoTaskMemFree(pId);
+                                                        }
                                                     }
                                                 }
@@ -1563,4 +1577,11 @@
     }
 
+    /*
+     * There are two places where host-only adapters get added to the list.
+     * The following call adds NDIS5 miniports while NDIS6 miniports are
+     * added in the loop above. This is because NDIS6 miniports are in fact
+     * used as bridged adapters, they have netlwf filter installed in their
+     * stack and as a result they show up during bridged adapter enumeration.
+     */
     netIfListHostAdapters(list);
 
Index: /trunk/src/VBox/Runtime/VBox/log-vbox.cpp
===================================================================
--- /trunk/src/VBox/Runtime/VBox/log-vbox.cpp	(revision 52591)
+++ /trunk/src/VBox/Runtime/VBox/log-vbox.cpp	(revision 52592)
@@ -470,5 +470,5 @@
 # endif
 # if defined(DEBUG_aleksey)  /* Guest ring-0 as well */
-        RTLogGroupSettings(pLogger, "net_flt_drv.e.l.f.l3.l4.l5");
+        RTLogGroupSettings(pLogger, "net_flt_drv.e.l.f.l3.l4.l5 +net_adp_drv.e.l.f.l3.l4.l5");
         RTLogFlags(pLogger, "enabled unbuffered");
         pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT;
