Index: /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp	(revision 53003)
+++ /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp	(revision 53004)
@@ -119,4 +119,8 @@
 typedef FNRTR3INITEX *PFNRTR3INITEX;
 
+/** @see RTLogRelPrintf */
+typedef DECLCALLBACK(void) FNRTLOGRELPRINTF(const char *pszFormat, ...);
+typedef FNRTLOGRELPRINTF *PFNRTLOGRELPRINTF;
+
 
 /*******************************************************************************
@@ -160,4 +164,10 @@
 SUPR3HARDENEDMAINSTATE  g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_NOT_YET_CALLED;
 AssertCompileSize(g_enmSupR3HardenedMainState, sizeof(uint32_t));
+
+#ifdef RT_OS_WINDOWS
+/** Pointer to VBoxRT's RTLogRelPrintf function so we can write errors to the
+ * release log at runtime. */
+static PFNRTLOGRELPRINTF g_pfnRTLogRelPrintf = NULL;
+#endif
 
 
@@ -1066,4 +1076,17 @@
     va_end(vaCopy);
 
+#ifdef RT_OS_WINDOWS
+    /*
+     * The release log.
+     */
+    if (g_pfnRTLogRelPrintf)
+    {
+        va_copy(vaCopy, va);
+        g_pfnRTLogRelPrintf("supR3HardenedFatalMsgV: %s enmWhat=%d rc=%Rrc (%#x)\n", pszWhere, enmWhat, rc);
+        g_pfnRTLogRelPrintf("supR3HardenedFatalMsgV: %N\n", pszMsgFmt, &vaCopy);
+        va_end(vaCopy);
+    }
+#endif
+
     /*
      * Then to the console.
@@ -1101,5 +1124,5 @@
 
     /*
-     * Don't call TrustedError if it's too early.
+     * Finally, TrustedError if appropriate.
      */
     if (g_enmSupR3HardenedMainState >= SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED)
@@ -1180,4 +1203,13 @@
 #endif
     {
+#ifdef RT_OS_WINDOWS
+        if (g_pfnRTLogRelPrintf)
+        {
+            va_copy(vaCopy, va);
+            g_pfnRTLogRelPrintf("supR3HardenedFatalV: %N", pszFormat, &vaCopy);
+            va_end(vaCopy);
+        }
+#endif
+
         suplibHardenedPrintPrefix();
         suplibHardenedPrintFV(pszFormat, va);
@@ -1208,6 +1240,16 @@
     va_end(vaCopy);
 
+#ifdef RT_OS_WINDOWS
+    if (g_pfnRTLogRelPrintf)
+    {
+        va_copy(vaCopy, va);
+        g_pfnRTLogRelPrintf("supR3HardenedErrorV: %N", pszFormat, &vaCopy);
+        va_end(vaCopy);
+    }
+#endif
+
     suplibHardenedPrintPrefix();
     suplibHardenedPrintFV(pszFormat, va);
+
     return rc;
 }
@@ -1526,4 +1568,7 @@
                               szPath, RtlGetLastWin32Error());
 
+    g_pfnRTLogRelPrintf = (PFNRTLOGRELPRINTF)GetProcAddress(hMod, SUP_HARDENED_SYM("RTLogRelPrintf"));
+    Assert(g_pfnRTLogRelPrintf);  /* Not fatal in non-strict builds. */
+
 #else
     /* the dlopen crowd */
