Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 81136)
+++ /trunk/include/iprt/mangling.h	(revision 81137)
@@ -2221,7 +2221,7 @@
 # define RTSymlinkRead                                  RT_MANGLER(RTSymlinkRead)
 # define RTSymlinkReadA                                 RT_MANGLER(RTSymlinkReadA)
-# define RTSystemFirmwareQueryType                      RT_MANGLER(RTSystemFirmwareQueryType)
-# define RTSystemFirmwareQueryValue                     RT_MANGLER(RTSystemFirmwareQueryValue)
-# define RTSystemFirmwareFreeValue                      RT_MANGLER(RTSystemFirmwareFreeValue)
+# define RTSystemQueryFirmwareType                      RT_MANGLER(RTSystemQueryFirmwareType)
+# define RTSystemQueryFirmwareBoolean                   RT_MANGLER(RTSystemQueryFirmwareBoolean)
+# define RTSystemFirmwareTypeName                       RT_MANGLER(RTSystemFirmwareTypeName)
 # define RTSystemIsInsideVM                             RT_MANGLER(RTSystemIsInsideVM)
 # define RTSystemQueryAvailableRam                      RT_MANGLER(RTSystemQueryAvailableRam)
Index: /trunk/include/iprt/system.h
===================================================================
--- /trunk/include/iprt/system.h	(revision 81136)
+++ /trunk/include/iprt/system.h	(revision 81137)
@@ -288,34 +288,13 @@
  * @param   penmType    Where to return the firmware type on success.
  */
-RTDECL(int) RTSystemFirmwareQueryType(PRTSYSFWTYPE penmType);
-
-/**
- * Enumeration for defining a system firmware value type.
- */
-typedef enum RTSYSFWVALUETYPE
-{
-    /** Invalid value type. */
-    RTSYSFWVALUETYPE_INVALID = 0,
-    /** Value is of type boolean. */
-    RTSYSFWVALUETYPE_BOOLEAN,
-    /** The usual 32-bit hack.  */
-    RTSYSFWVALUETYPE_32_BIT_HACK = 0x7fffffff
-} RTSYSFWVALUETYPE;
-
-/**
- * Structure for keeping a system firmware value.
- */
-typedef struct RTSYSFWVALUE
-{
-    /** Value type. */
-    RTSYSFWVALUETYPE enmType;
-    union
-    {
-        /** Boolean value. */
-        bool fVal;
-    } u;
-} RTSYSFWVALUE;
-/** Pointer to a system firmware value. */
-typedef RTSYSFWVALUE *PRTSYSFWVALUE;
+RTDECL(int) RTSystemQueryFirmwareType(PRTSYSFWTYPE penmType);
+
+/**
+ * Translates the @a enmType value to a string.
+ *
+ * @returns Read-only name.
+ * @param   enmType     The firmware type to convert to string.
+ */
+RTDECL(const char *) RTSystemFirmwareTypeName(RTSYSFWTYPE enmType);
 
 /**
@@ -342,15 +321,7 @@
  *          supported.
  * @param   enmProp     The property to query the value of.
- * @param   pValue      Where to return the value.  This is always zero'ed.
- */
-RTDECL(int) RTSystemFirmwareQueryValue(RTSYSFWPROP enmProp, PRTSYSFWVALUE pValue);
-
-/**
- * Free any allocations associated with a value returned by
- * RTSystemFirmwareQueryValue().
- *
- * @param   pValue  Result of a successful RTSystemFirmwareQueryValue() call.
- */
-RTDECL(void) RTSystemFirmwareFreeValue(PRTSYSFWVALUE pValue);
+ * @param   pfValue     Where to return the value.
+ */
+RTDECL(int) RTSystemQueryFirmwareBoolean(RTSYSFWPROP enmProp, bool *pfValue);
 
 #ifdef RT_OS_WINDOWS
Index: /trunk/src/VBox/Main/glue/VBoxLogRelCreate.cpp
===================================================================
--- /trunk/src/VBox/Main/glue/VBoxLogRelCreate.cpp	(revision 81136)
+++ /trunk/src/VBox/Main/glue/VBoxLogRelCreate.cpp	(revision 81137)
@@ -86,37 +86,20 @@
 
             RTSYSFWTYPE enmType;
-            vrc = RTSystemFirmwareQueryType(&enmType);
+            vrc = RTSystemQueryFirmwareType(&enmType);
             if (RT_SUCCESS(vrc))
             {
-                pfnLog(pReleaseLogger, "Firmware type: ");
-
-                switch (enmType)
-                {
-                    case RTSYSFWTYPE_BIOS:
-                        pfnLog(pReleaseLogger, "BIOS\n");
-                        break;
-                    case RTSYSFWTYPE_UEFI:
-                        pfnLog(pReleaseLogger, "UEFI\n");
-                        break;
-                    case RTSYSFWTYPE_UNKNOWN: /* Not implemented on this platforms? */
-                        pfnLog(pReleaseLogger, "Unknown\n");
-                        break;
-                    default:
-                        AssertFailed();
-                        break;
-                }
-
+                pfnLog(pReleaseLogger, "Firmware type: %s\n", RTSystemFirmwareTypeName(enmType));
                 if (enmType == RTSYSFWTYPE_UEFI)
                 {
-                     RTSYSFWVALUE Value;
-                     vrc = RTSystemFirmwareQueryValue(RTSYSFWPROP_SECURE_BOOT, &Value);
+                     bool fValue;
+                     vrc = RTSystemQueryFirmwareBoolean(RTSYSFWPROP_SECURE_BOOT, &fValue);
                      if (RT_SUCCESS(vrc))
-                     {
-                         Assert(Value.enmType == RTSYSFWVALUETYPE_BOOLEAN);
-                         pfnLog(pReleaseLogger, "Secure Boot: %s\n", Value.u.fVal ? "Enabled" : "Disabled");
-                         RTSystemFirmwareFreeValue(&Value);
-                     }
+                         pfnLog(pReleaseLogger, "Secure Boot: %s\n", fValue ? "Enabled" : "Disabled");
+                     else
+                         pfnLog(pReleaseLogger, "Secure Boot: %Rrc\n", vrc);
                 }
             }
+            else
+                pfnLog(pReleaseLogger, "Firmware type: failed - %Rrc\n", vrc);
 
             uint64_t cbHostRam = 0, cbHostRamAvail = 0;
@@ -154,4 +137,5 @@
             break;
         }
+
         case RTLOGPHASE_PREROTATE:
             pfnLog(pReleaseLogger, "Log rotated - Log started %s\n", szTmp);
Index: /trunk/src/VBox/Runtime/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Runtime/Makefile.kmk	(revision 81136)
+++ /trunk/src/VBox/Runtime/Makefile.kmk	(revision 81137)
@@ -484,4 +484,5 @@
 	common/misc/RTFileOpenV.cpp \
 	common/misc/RTMemWipeThoroughly.cpp \
+	common/misc/RTSystemFirmwareTypeName.cpp \
 	common/misc/assert.cpp \
 	common/misc/buildconfig.cpp \
Index: /trunk/src/VBox/Runtime/common/misc/RTSystemFirmwareTypeName.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/misc/RTSystemFirmwareTypeName.cpp	(revision 81137)
+++ /trunk/src/VBox/Runtime/common/misc/RTSystemFirmwareTypeName.cpp	(revision 81137)
@@ -0,0 +1,50 @@
+/* $Id$ */
+/** @file
+ * IPRT - RTSystemFirmwareTypeName.
+ */
+
+/*
+ * Copyright (C) 2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include "internal/iprt.h"
+#include <iprt/system.h>
+
+
+RTDECL(const char *) RTSystemFirmwareTypeName(RTSYSFWTYPE enmType)
+{
+    switch (enmType)
+    {
+        case RTSYSFWTYPE_INVALID:       return "Invalid";
+        case RTSYSFWTYPE_UNKNOWN:       return "Unknown";
+        case RTSYSFWTYPE_BIOS:          return "BIOS";
+        case RTSYSFWTYPE_UEFI:          return "UEFI";
+        case RTSYSFWTYPE_END:
+        case RTSYSFWTYPE_32_BIT_HACK:
+            break;
+    }
+    return "bad-firmware-type";
+}
+RT_EXPORT_SYMBOL(RTSystemFirmwareTypeName);
+
Index: /trunk/src/VBox/Runtime/generic/RTSystemFirmware-generic.cpp
===================================================================
--- /trunk/src/VBox/Runtime/generic/RTSystemFirmware-generic.cpp	(revision 81136)
+++ /trunk/src/VBox/Runtime/generic/RTSystemFirmware-generic.cpp	(revision 81137)
@@ -36,5 +36,5 @@
 
 
-RTDECL(int) RTSystemFirmwareQueryType(PRTSYSFWTYPE penmFirmwareType)
+RTDECL(int) RTSystemQueryFirmwareType(PRTSYSFWTYPE penmFirmwareType)
 {
     RT_NOREF(penmFirmwareType);
@@ -42,20 +42,12 @@
     return VERR_NOT_SUPPORTED;
 }
-RT_EXPORT_SYMBOL(RTSystemFirmwareQueryType);
+RT_EXPORT_SYMBOL(RTSystemQueryFirmwareType);
 
 
-RTDECL(void) RTSystemFirmwareFreeValue(PRTSYSFWVALUE pValue)
+RTDECL(int) RTSystemQueryFirmwareBoolean(RTSYSFWPROP enmProp, bool *pfValue)
 {
-    RT_NOREF(pValue);
-}
-RT_EXPORT_SYMBOL(RTSystemFirmwareFreeValue);
-
-
-RTDECL(int) RTSystemFirmwareQueryValue(RTSYSFWPROP enmProp, PRTSYSFWVALUE pValue)
-{
-    RT_ZERO(*pValue);
-    RT_NOREF(enmProp);
+    RT_NOREF(enmProp, pfValue);
     return VERR_NOT_SUPPORTED;
 }
-RT_EXPORT_SYMBOL(RTSystemFirmwareQueryValue);
+RT_EXPORT_SYMBOL(RTSystemQueryFirmwareBoolean);
 
Index: /trunk/src/VBox/Runtime/r3/linux/RTSystemFirmware-linux.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/linux/RTSystemFirmware-linux.cpp	(revision 81136)
+++ /trunk/src/VBox/Runtime/r3/linux/RTSystemFirmware-linux.cpp	(revision 81137)
@@ -45,5 +45,5 @@
 
 
-RTDECL(int) RTSystemFirmwareQueryType(PRTSYSFWTYPE penmFirmwareType)
+RTDECL(int) RTSystemQueryFirmwareType(PRTSYSFWTYPE penmFirmwareType)
 {
     if (RTLinuxSysFsExists("firmware/efi/"))
@@ -58,20 +58,13 @@
     return VINF_SUCCESS;
 }
-RT_EXPORT_SYMBOL(RTSystemFirmwareQueryType);
+RT_EXPORT_SYMBOL(RTSystemQueryFirmwareType);
 
 
-RTDECL(void) RTSystemFirmwareFreeValue(PRTSYSFWVALUE pValue)
+RTDECL(int) RTSystemQueryFirmwareBoolean(RTSYSFWPROP enmProp, bool *pfValue)
 {
-    RT_NOREF(pValue);
-}
-RT_EXPORT_SYMBOL(RTSystemFirmwareFreeValue);
-
-
-RTDECL(int) RTSystemFirmwareQueryValue(RTSYSFWPROP enmProp, PRTSYSFWVALUE pValue)
-{
-    RT_ZERO(*pValue);
+    *pfValue = false;
 
     /*
-     * Translate the property into type and variable base filename.
+     * Translate the property to variable base filename.
      */
     const char *pszName;
@@ -79,5 +72,4 @@
     {
         case RTSYSFWPROP_SECURE_BOOT:
-            pValue->enmType = RTSYSFWVALUETYPE_BOOLEAN;
             pszName = "firmware/efi/efivars/SecureBoot";
             break;
@@ -95,30 +87,19 @@
     int rc = RTLinuxSysFsOpen(&hFile, "%s-" VBOX_UEFI_UUID_GLOBALS, pszName);
     /** @todo try other suffixes if file-not-found. */
-
-    switch (pValue->enmType)
+    if (RT_SUCCESS(rc))
     {
-        case RTSYSFWVALUETYPE_BOOLEAN:
-        {
-            if (RT_SUCCESS(rc))
-            {
-                uint8_t abBuf[16];
-                size_t  cbRead = 0;
-                rc = RTLinuxSysFsReadFile(hFile, abBuf, sizeof(abBuf), &cbRead);
-                pValue->u.fVal = cbRead > 1 && abBuf[cbRead - 1] != 0;
-                RTFileClose(hFile);
-            }
-            else if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND)
-                rc = VINF_SUCCESS;
-            else if (rc == VERR_PERMISSION_DENIED)
-                rc = VERR_NOT_SUPPORTED;
-            break;
-        }
-
-        default:
-            AssertFailedReturn(VERR_INTERNAL_ERROR);
+        uint8_t abBuf[16];
+        size_t  cbRead = 0;
+        rc = RTLinuxSysFsReadFile(hFile, abBuf, sizeof(abBuf), &cbRead);
+        *pfValue = cbRead > 1 && abBuf[cbRead - 1] != 0;
+        RTFileClose(hFile);
     }
+    else if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND)
+        rc = VINF_SUCCESS;
+    else if (rc == VERR_PERMISSION_DENIED)
+        rc = VERR_NOT_SUPPORTED;
 
     return rc;
 }
-RT_EXPORT_SYMBOL(RTSystemFirmwareQueryValue);
+RT_EXPORT_SYMBOL(RTSystemQueryFirmwareBoolean);
 
Index: /trunk/src/VBox/Runtime/r3/win/RTSystemFirmware-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/RTSystemFirmware-win.cpp	(revision 81136)
+++ /trunk/src/VBox/Runtime/r3/win/RTSystemFirmware-win.cpp	(revision 81137)
@@ -119,5 +119,5 @@
 
 
-RTDECL(int) RTSystemFirmwareQueryType(PRTSYSFWTYPE penmFirmwareType)
+RTDECL(int) RTSystemQueryFirmwareType(PRTSYSFWTYPE penmFirmwareType)
 {
     AssertPtrReturn(penmFirmwareType, VERR_INVALID_POINTER);
@@ -173,16 +173,10 @@
 
 
-RTDECL(void) RTSystemFirmwareFreeValue(PRTSYSFWVALUE pValue)
-{
-    RT_NOREF(pValue);
-}
-
-
-RTDECL(int) RTSystemFirmwareQueryValue(RTSYSFWPROP enmProp, PRTSYSFWVALUE pValue)
-{
-    RT_ZERO(*pValue);
+RTDECL(int) RTSystemQueryFirmwareBoolean(RTSYSFWPROP enmProp, bool *pfValue)
+{
+    *pfValue = false;
 
     /*
-     * Translate the enmProp to a name and type:
+     * Translate the enmProp to a name:
      */
     const wchar_t *pwszName = NULL;
@@ -191,5 +185,4 @@
         case RTSYSFWPROP_SECURE_BOOT:
             pwszName = L"SecureBoot";
-            pValue->enmType = RTSYSFWVALUETYPE_BOOLEAN;
             break;
 
@@ -200,5 +193,5 @@
 
     /*
-     * Do type specific query.
+     * Do the query.
      */
     if (!g_pfnGetFirmwareEnvironmentVariableW)
@@ -206,21 +199,8 @@
     rtSystemFirmwareGetPrivileges(SE_SYSTEM_ENVIRONMENT_NAME);
 
-    int rc;
-    switch (pValue->enmType)
-    {
-        case RTSYSFWVALUETYPE_BOOLEAN:
-        {
-            uint8_t bValue = 0;
-            DWORD cbRet = g_pfnGetFirmwareEnvironmentVariableW(pwszName, VBOX_UEFI_UUID_GLOBALS, &bValue, sizeof(bValue));
-            pValue->u.fVal = cbRet != 0 && bValue != 0;
-            rc = cbRet != 0 || GetLastError() == ERROR_INVALID_FUNCTION ? VINF_SUCCESS : RTErrConvertFromWin32(GetLastError());
-            break;
-        }
-
-        default:
-            AssertFailedReturn(VERR_INTERNAL_ERROR);
-    }
-
-    return rc;
-}
-
+    uint8_t bValue = 0;
+    DWORD cbRet = g_pfnGetFirmwareEnvironmentVariableW(pwszName, VBOX_UEFI_UUID_GLOBALS, &bValue, sizeof(bValue));
+    *pfValue = cbRet != 0 && bValue != 0;
+    return cbRet != 0 || GetLastError() == ERROR_INVALID_FUNCTION ? VINF_SUCCESS : RTErrConvertFromWin32(GetLastError());
+}
+
Index: /trunk/src/VBox/Runtime/testcase/tstRTSystemQueryFirmware.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstRTSystemQueryFirmware.cpp	(revision 81136)
+++ /trunk/src/VBox/Runtime/testcase/tstRTSystemQueryFirmware.cpp	(revision 81137)
@@ -46,9 +46,9 @@
 
     /*
-     * RTSystemFirmwareQueryType
+     * RTSystemQueryFirmwareType
      */
-    RTTestSub(hTest, "RTSystemFirmwareQueryType");
+    RTTestSub(hTest, "RTSystemQueryFirmwareType");
     RTSYSFWTYPE enmType = (RTSYSFWTYPE)-42;
-    int rc = RTSystemFirmwareQueryType(&enmType);
+    int rc = RTSystemQueryFirmwareType(&enmType);
     if (RT_SUCCESS(rc))
     {
@@ -56,35 +56,26 @@
         {
             case RTSYSFWTYPE_BIOS:
-                RTTestPrintf(hTest, RTTESTLVL_INFO, "  Firmware type: BIOS (Legacy)\n");
-                break;
             case RTSYSFWTYPE_UEFI:
-                RTTestPrintf(hTest, RTTESTLVL_INFO, "  Firmware type: UEFI\n");
-                break;
             case RTSYSFWTYPE_UNKNOWN: /* Do not fail on not-implemented platforms. */
-                RTTestPrintf(hTest, RTTESTLVL_INFO, "  Firmware type: Unknown\n");
+                RTTestPrintf(hTest, RTTESTLVL_INFO, "  Firmware type: %s\n", RTSystemFirmwareTypeName(enmType));
                 break;
             default:
-                RTTestFailed(hTest, "RTSystemFirmwareQueryType return invalid type: %d (%#x)", enmType, enmType);
+                RTTestFailed(hTest, "RTSystemQueryFirmwareType return invalid type: %d (%#x)", enmType, enmType);
                 break;
         }
     }
     else if (rc != VERR_NOT_SUPPORTED)
-        RTTestFailed(hTest, "RTSystemFirmwareQueryType failed: %Rrc", rc);
+        RTTestFailed(hTest, "RTSystemQueryFirmwareType failed: %Rrc", rc);
 
     /*
-     * RTSystemFirmwareQueryValue
+     * RTSystemQueryFirmwareBoolean
      */
-    RTTestSub(hTest, "RTSystemFirmwareQueryValue");
-    RTSYSFWVALUE Value;
-    rc = RTSystemFirmwareQueryValue(RTSYSFWPROP_SECURE_BOOT, &Value);
+    RTTestSub(hTest, "RTSystemQueryFirmwareBoolean");
+    bool fValue;
+    rc = RTSystemQueryFirmwareBoolean(RTSYSFWPROP_SECURE_BOOT, &fValue);
     if (RT_SUCCESS(rc))
-    {
-        RTTEST_CHECK(hTest, Value.enmType == RTSYSFWVALUETYPE_BOOLEAN);
-        RTTestPrintf(hTest, RTTESTLVL_INFO, "  Secure Boot:   %s\n", Value.u.fVal ? "enabled" : "disabled");
-        RTSystemFirmwareFreeValue(&Value);
-        RTSystemFirmwareFreeValue(&Value);
-    }
+        RTTestPrintf(hTest, RTTESTLVL_INFO, "  Secure Boot:   %s\n", fValue ? "enabled" : "disabled");
     else if (rc != VERR_NOT_SUPPORTED && rc != VERR_SYS_UNSUPPORTED_FIRMWARE_PROPERTY)
-        RTTestIFailed("RTSystemFirmwareQueryValue/RTSYSFWPROP_SECURE_BOOT failed: %Rrc", rc);
+        RTTestIFailed("RTSystemQueryFirmwareBoolean/RTSYSFWPROP_SECURE_BOOT failed: %Rrc", rc);
 
     return RTTestSummaryAndDestroy(hTest);
