Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp	(revision 58650)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp	(revision 58651)
@@ -189,6 +189,4 @@
     NDIS_HANDLE hWorkItem;
 #endif /* !VBOXNETLWF_SYNC_SEND */
-    /** Name of underlying adapter */
-    ANSI_STRING strMiniportName;
     /** MAC address of underlying adapter */
     RTMAC MacAddr;
@@ -203,4 +201,6 @@
     /** true if the host wants the adapter to be in promisc mode */
     bool fHostPromisc;
+    /** Name of underlying adapter */
+    char szMiniportName[1];
 } VBOXNETLWF_MODULE;
 typedef VBOXNETLWF_MODULE *PVBOXNETLWF_MODULE;
@@ -775,13 +775,33 @@
     AssertReturn(pGlobals, NDIS_STATUS_FAILURE);
 
+    ANSI_STRING strMiniportName;
+    /* We use the miniport name to associate this filter module with the netflt instance */
+    NTSTATUS rc = RtlUnicodeStringToAnsiString(&strMiniportName,
+                                               pParameters->BaseMiniportName,
+                                               TRUE);
+    if (rc != STATUS_SUCCESS)
+    {
+        Log(("ERROR! vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n",
+             pParameters->BaseMiniportName, rc));
+        return NDIS_STATUS_FAILURE;
+    }
+    DbgPrint("vboxNetLwfWinAttach: friendly name=%wZ\n", pParameters->BaseMiniportInstanceName);
+    DbgPrint("vboxNetLwfWinAttach: name=%Z\n", strMiniportName);
+
+    UINT cbModuleWithNameExtra = sizeof(VBOXNETLWF_MODULE) + strMiniportName.Length;
     PVBOXNETLWF_MODULE pModuleCtx = (PVBOXNETLWF_MODULE)NdisAllocateMemoryWithTagPriority(hFilter,
-                                                                      sizeof(VBOXNETLWF_MODULE),
+                                                                      cbModuleWithNameExtra,
                                                                       VBOXNETLWF_MEM_TAG,
                                                                       LowPoolPriority);
     if (!pModuleCtx)
+    {
+        RtlFreeAnsiString(&strMiniportName);
         return NDIS_STATUS_RESOURCES;
+    }
     Log4(("vboxNetLwfWinAttach: allocated module context 0x%p\n", pModuleCtx));
 
-    NdisZeroMemory(pModuleCtx, sizeof(VBOXNETLWF_MODULE));
+    NdisZeroMemory(pModuleCtx, cbModuleWithNameExtra);
+    NdisMoveMemory(pModuleCtx->szMiniportName, strMiniportName.Buffer, strMiniportName.Length);
+    RtlFreeAnsiString(&strMiniportName);
 
     pModuleCtx->hWorkItem = NdisAllocateIoWorkItem(g_VBoxNetLwfGlobals.hFilterDriver);
@@ -793,19 +813,4 @@
         return NDIS_STATUS_RESOURCES;
     }
-
-    /* We use the miniport name to associate this filter module with the netflt instance */
-    NTSTATUS rc = RtlUnicodeStringToAnsiString(&pModuleCtx->strMiniportName,
-                                               pParameters->BaseMiniportName,
-                                               TRUE);
-    if (rc != STATUS_SUCCESS)
-    {
-        Log(("ERROR! vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n",
-             pParameters->BaseMiniportName, rc));
-        NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
-        NdisFreeMemory(pModuleCtx, 0, 0);
-        return NDIS_STATUS_FAILURE;
-    }
-    DbgPrint("vboxNetLwfWinAttach: friendly name=%wZ\n", pParameters->BaseMiniportInstanceName);
-    DbgPrint("vboxNetLwfWinAttach: name=%Z\n", pModuleCtx->strMiniportName);
 
     Assert(pParameters->MacAddressLength == sizeof(RTMAC));
@@ -844,5 +849,4 @@
     {
         Log(("ERROR! vboxNetLwfWinAttach: NdisAllocateNetBufferListPool failed\n"));
-        RtlFreeAnsiString(&pModuleCtx->strMiniportName);
         NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
         NdisFreeMemory(pModuleCtx, 0, 0);
@@ -863,5 +867,4 @@
         NdisFreeNetBufferListPool(pModuleCtx->hPool);
         Log4(("vboxNetLwfWinAttach: freed NBL+NB pool 0x%p\n", pModuleCtx->hPool));
-        RtlFreeAnsiString(&pModuleCtx->strMiniportName);
         NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
         NdisFreeMemory(pModuleCtx, 0, 0);
@@ -917,5 +920,4 @@
         Log4(("vboxNetLwfWinDetach: freed NBL+NB pool 0x%p\n", pModuleCtx->hPool));
     }
-    RtlFreeAnsiString(&pModuleCtx->strMiniportName);
     NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
     NdisFreeMemory(hModuleCtx, 0, 0);
@@ -2127,5 +2129,5 @@
         else
         {
-            DbgPrint("VBoxNetLwf: no saved offload config to modify for %Z\n", pModuleCtx->strMiniportName);
+            DbgPrint("VBoxNetLwf: no saved offload config to modify for %s\n", pModuleCtx->szMiniportName);
             NdisZeroMemory(&OffloadConfig, sizeof(OffloadConfig));
             OffloadConfig.Header.Type = NDIS_OBJECT_TYPE_OFFLOAD;
@@ -2145,5 +2147,5 @@
         }
         else
-            DbgPrint("VBoxNetLwf: no saved offload config to restore for %Z\n", pModuleCtx->strMiniportName);
+            DbgPrint("VBoxNetLwf: no saved offload config to restore for %s\n", pModuleCtx->szMiniportName);
     }
 }
@@ -2332,12 +2334,10 @@
     AssertReturn(pThis, VERR_INVALID_PARAMETER);
     Log(("vboxNetFltOsInitInstance: trunk name=%s\n", pThis->szName));
-    ANSI_STRING strInst;
-    RtlInitAnsiString(&strInst, pThis->szName);
     PVBOXNETLWF_MODULE pModuleCtx = NULL;
     NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock);
     RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node)
     {
-        DbgPrint("vboxNetFltOsInitInstance: evaluating module, name=%Z\n", pModuleCtx->strMiniportName);
-        if (RtlEqualString(&strInst, &pModuleCtx->strMiniportName, TRUE))
+        DbgPrint("vboxNetFltOsInitInstance: evaluating module, name=%s\n", pModuleCtx->szMiniportName);
+        if (!RTStrICmp(pThis->szName, pModuleCtx->szMiniportName))
         {
             NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock);
