Index: /trunk/src/VBox/HostDrivers/Support/SUPLibInternal.h
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPLibInternal.h	(revision 51908)
+++ /trunk/src/VBox/HostDrivers/Support/SUPLibInternal.h	(revision 51909)
@@ -159,4 +159,6 @@
     kSupIFT_Script,
     kSupIFT_Data,
+    kSupIFT_TestExe,
+    kSupIFT_TestDll,
     kSupIFT_End
 } SUPINSTFILETYPE;
@@ -174,4 +176,5 @@
     kSupID_AppPrivArchComp,
     kSupID_AppPrivNoArch,
+    kSupID_Testcase,
     kSupID_End
 } SUPINSTDIR;
Index: /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp	(revision 51908)
+++ /trunk/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp	(revision 51909)
@@ -216,4 +216,25 @@
     {   kSupIFT_Dll,  kSupID_AppPrivArch,        true, "VBoxNetNAT" SUPLIB_DLL_SUFF },
 //#endif
+#if defined(VBOX_WITH_HARDENING) && defined(RT_OS_WINDOWS)
+# define HARDENED_TESTCASE_BIN_ENTRY(a_szName) \
+        {   kSupIFT_TestExe, kSupID_AppBin, true, a_szName SUPLIB_EXE_SUFF }, \
+        {   kSupIFT_TestDll, kSupID_AppBin, true, a_szName SUPLIB_DLL_SUFF }
+    HARDENED_TESTCASE_BIN_ENTRY("tstMicro"),
+    HARDENED_TESTCASE_BIN_ENTRY("tstPDMAsyncCompletion"),
+    HARDENED_TESTCASE_BIN_ENTRY("tstPDMAsyncCompletionStress"),
+    HARDENED_TESTCASE_BIN_ENTRY("tstVMM"),
+    HARDENED_TESTCASE_BIN_ENTRY("tstVMREQ"),
+# define HARDENED_TESTCASE_ENTRY(a_szName) \
+        {   kSupIFT_TestExe, kSupID_Testcase, true, a_szName SUPLIB_EXE_SUFF }, \
+        {   kSupIFT_TestDll, kSupID_Testcase, true, a_szName SUPLIB_DLL_SUFF }
+    HARDENED_TESTCASE_ENTRY("tstCFGM"),
+    HARDENED_TESTCASE_ENTRY("tstIntNet-1"),
+    HARDENED_TESTCASE_ENTRY("tstMMHyperHeap"),
+    HARDENED_TESTCASE_ENTRY("tstR0ThreadPreemptionDriver"),
+    HARDENED_TESTCASE_ENTRY("tstRTR0MemUserKernelDriver"),
+    HARDENED_TESTCASE_ENTRY("tstRTR0SemMutexDriver"),
+    HARDENED_TESTCASE_ENTRY("tstRTR0TimerDriver"),
+    HARDENED_TESTCASE_ENTRY("tstSSM"),
+#endif
 };
 
@@ -266,4 +287,15 @@
             rc = supR3HardenedPathAppPrivateNoArch(pszDst, cchDst);
             break;
+        case kSupID_Testcase:
+            rc = supR3HardenedPathExecDir(pszDst, cchDst);
+            if (RT_SUCCESS(rc))
+            {
+                size_t off = suplibHardenedStrLen(pszDst);
+                if (cchDst - off >= sizeof("/testcase"))
+                    suplibHardenedMemCopy(&pszDst[off], "/testcase", sizeof("/testcase"));
+                else
+                    rc = VERR_BUFFER_OVERFLOW;
+            }
+            break;
         default:
             return supR3HardenedError(VERR_INTERNAL_ERROR, fFatal,
@@ -353,5 +385,5 @@
     if (RT_SUCCESS(rc))
     {
-#if defined(RT_OS_WINDOWS)
+#if defined(RT_OS_WINDOWS) /** @todo use CreateFileW */
         HANDLE hDir = CreateFile(szPath,
                                  GENERIC_READ,
@@ -367,4 +399,9 @@
             g_aSupVerifiedDirs[enmDir].hDir = (intptr_t)hDir;
             g_aSupVerifiedDirs[enmDir].fValidated = true;
+        }
+        else if (enmDir == kSupID_Testcase)
+        {
+            g_aSupVerifiedDirs[enmDir].fValidated = true;
+            rc = VINF_SUCCESS; /* Optional directory, ignore if missing. */
         }
         else
@@ -420,4 +457,9 @@
             }
         }
+        else if (enmDir == kSupID_Testcase)
+        {
+            g_aSupVerifiedDirs[enmDir].fValidated = true;
+            rc = VINF_SUCCESS; /* Optional directory, ignore if missing. */
+        }
         else
         {
@@ -522,5 +564,7 @@
                 {
                     int err = GetLastError();
-                    if (!pFile->fOptional || err != ERROR_FILE_NOT_FOUND)
+                    if (   !pFile->fOptional
+                        || (    err != ERROR_FILE_NOT_FOUND
+                            &&  (err != ERROR_PATH_NOT_FOUND || pFile->enmDir != kSupID_Testcase) ) )
                         rc = supR3HardenedError(VERR_PATH_NOT_FOUND, fFatal,
                                                 "supR3HardenedVerifyFileInternal: Failed to open '%s': err=%d\n", szPath, err);
@@ -709,5 +753,6 @@
         if (!suplibHardenedStrNCmp(pszProgName, g_aSupInstallFiles[iFile].pszFile, cchProgName))
         {
-            if (    g_aSupInstallFiles[iFile].enmType == kSupIFT_Dll
+            if (    (   g_aSupInstallFiles[iFile].enmType == kSupIFT_Dll
+                     || g_aSupInstallFiles[iFile].enmType == kSupIFT_TestDll)
                 &&  !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgName], SUPLIB_DLL_SUFF))
             {
@@ -718,5 +763,6 @@
                 fDll = true;
             }
-            else if (   g_aSupInstallFiles[iFile].enmType == kSupIFT_Exe
+            else if (   (   g_aSupInstallFiles[iFile].enmType == kSupIFT_Exe
+                         || g_aSupInstallFiles[iFile].enmType == kSupIFT_TestExe)
                      && !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgName], SUPLIB_EXE_SUFF))
             {
@@ -1528,5 +1574,5 @@
      */
     HANDLE hVerify;
-    if (hNativeFile == RTHCUINTPTR_MAX)
+    if (hNativeFile == RTHCUINTPTR_MAX) /** @todo Need to use WCHAR on windows! */
         hVerify = CreateFile(pszFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     else if (!DuplicateHandle(GetCurrentProcess(), (HANDLE)hNativeFile, GetCurrentProcess(), &hVerify,
