Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp	(revision 57638)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp	(revision 57639)
@@ -56,4 +56,19 @@
 #define VBOX_NETCFG_LOCK_TIME_OUT     5000  /** @todo r=bird: What does this do? */
 
+
+/*
+ * For some weird reason we do not want to use IPRT here, hence the following
+ * function provides a replacement for BstrFmt.
+ */
+static bstr_t bstr_printf(const char *cszFmt, ...)
+{
+    char szBuffer[4096];
+    szBuffer[sizeof(szBuffer) - 1] = 0; /* Make sure the string will be null-terminated */
+    va_list va;
+    va_start(va, cszFmt);
+    _vsnprintf(szBuffer, sizeof(szBuffer) - 1, cszFmt, va);
+    va_end(va);
+    return bstr_t(szBuffer);
+}
 
 static HRESULT vboxNetCfgWinINetCfgLock(IN INetCfg *pNetCfg,
@@ -2463,4 +2478,5 @@
         hrc = E_FAIL; \
         NonStandardLog strAndArgs; \
+        bstrError = bstr_printf strAndArgs; \
         break; \
     } else do {} while (0)
@@ -2469,4 +2485,5 @@
 {
     HRESULT hrc = S_OK;
+    bstr_t bstrError;
 
     do
@@ -2668,4 +2685,7 @@
     while (0);
 
+    if (pErrMsg && bstrError.length())
+        *pErrMsg = bstrError.Detach();
+
     return hrc;
 }
@@ -2691,4 +2711,5 @@
     WCHAR DevName[256];
     HKEY hkey = (HKEY)INVALID_HANDLE_VALUE;
+    bstr_t bstrError;
 
     do
@@ -3120,4 +3141,8 @@
             NonStandardLogFlow(("VBoxNetCfgWinQueryINetCfg failed, hr 0x%x\n", hr));
     }
+
+    if (pErrMsg && bstrError.length())
+        *pErrMsg = bstrError.Detach();
+
     return hrc;
 }
Index: /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 57638)
+++ /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 57639)
@@ -338,5 +338,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL;//TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
@@ -391,5 +392,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL; // TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
@@ -444,5 +446,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL; // TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
@@ -501,5 +504,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL; // TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
@@ -558,5 +562,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL; // TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
@@ -611,5 +616,6 @@
                         if (RT_FAILURE(vrc)) break;
 
-                        rc = E_FAIL; // TODO: setError(E_FAIL, errMsg);
+                        rc = E_FAIL;
+                        d->iface->setError(E_FAIL, errMsg.c_str());
                         endLoop = true;
                         break;
