VirtualBox

Changeset 48757 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Sep 28, 2013 10:47:38 PM (11 years ago)
Author:
vboxsync
Message:

Get VBoxInternal2 variables from both machine leveal as well as global level extra data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r48756 r48757  
    120120# include "ExtPackManagerImpl.h"
    121121#endif
    122 
    123122#if defined(RT_OS_DARWIN)
    124 
    125123# include "IOKit/IOKitLib.h"
     124#endif
     125
     126
     127/*******************************************************************************
     128*   Internal Functions                                                         *
     129*******************************************************************************/
     130static Utf8Str *GetExtraDataBoth(IVirtualBox *pVirtualBox, IMachine *pMachine, const char *pszName, Utf8Str *pStrValue);
     131
     132
     133
     134#if defined(RT_OS_DARWIN)
    126135
    127136static int DarwinSmcKey(char *pabKey, uint32_t cbKey)
     
    248257}
    249258
    250 static int getSmcDeviceKey(IMachine *pMachine, BSTR *aKey, bool *pfGetKeyFromRealSMC)
     259/**
     260 * @throws HRESULT on extra data retrival error.
     261 */
     262static int getSmcDeviceKey(IVirtualBox *pVirtualBox, IMachine *pMachine, Utf8Str *pStrKey, bool *pfGetKeyFromRealSMC)
    251263{
    252264    *pfGetKeyFromRealSMC = false;
     
    255267     * The extra data takes precedence (if non-zero).
    256268     */
    257     HRESULT hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/SmcDeviceKey").raw(),
    258                                          aKey);
    259     if (FAILED(hrc))
    260         return Global::vboxStatusCodeFromCOM(hrc);
    261     if (   SUCCEEDED(hrc)
    262         && *aKey
    263         && **aKey)
     269    GetExtraDataBoth(pVirtualBox, pMachine, "VBoxInternal2/SmcDeviceKey", pStrKey);
     270    if (pStrKey->isNotEmpty())
    264271        return VINF_SUCCESS;
    265272
     
    465472        throw ConfigError("CFGMR3RemoveValue", vrc, pcszName);
    466473}
     474
     475/**
     476 * Gets an extra data value, consulting both machine and global extra data.
     477 *
     478 * @throws  HRESULT on failure
     479 * @returns pStrValue for the callers convenience.
     480 * @param   pVirtualBox     Pointer to the IVirtualBox interface.
     481 * @param   pMachine        Pointer to the IMachine interface.
     482 * @param   pszName         The value to get.
     483 * @param   pStrValue       Where to return it's value (empty string if not
     484 *                          found).
     485 */
     486static Utf8Str *GetExtraDataBoth(IVirtualBox *pVirtualBox, IMachine *pMachine, const char *pszName, Utf8Str *pStrValue)
     487{
     488    pStrValue->setNull();
     489
     490    Bstr bstrName(pszName);
     491    Bstr bstrValue;
     492    HRESULT hrc = pMachine->GetExtraData(bstrName.raw(), bstrValue.asOutParam());
     493    if (FAILED(hrc))
     494        throw hrc;
     495    if (bstrValue.isEmpty())
     496    {
     497        hrc = pVirtualBox->GetExtraData(bstrName.raw(), bstrValue.asOutParam());
     498        if (FAILED(hrc))
     499            throw hrc;
     500    }
     501
     502    if (bstrValue.isNotEmpty())
     503        *pStrValue = bstrValue;
     504    return pStrValue;
     505}
     506
     507
    467508/** Helper that finds out the next SATA port used
    468509 */
     
    711752    int             rc;
    712753    HRESULT         hrc;
     754    Utf8Str         strTmp;
    713755    Bstr            bstr;
    714756
     
    12591301
    12601302            bool fGetKeyFromRealSMC;
    1261             Bstr bstrKey;
    1262             rc = getSmcDeviceKey(pMachine, bstrKey.asOutParam(), &fGetKeyFromRealSMC);
     1303            Utf8Str strKey;
     1304            rc = getSmcDeviceKey(virtualBox, pMachine, &strKey, &fGetKeyFromRealSMC);
    12631305            AssertRCReturn(rc, rc);
    12641306
    1265             InsertConfigString(pCfg,   "DeviceKey", bstrKey);
     1307            InsertConfigString(pCfg,   "DeviceKey", strKey);
    12661308            InsertConfigInteger(pCfg,  "GetKeyFromRealSMC", fGetKeyFromRealSMC);
    12671309        }
     
    14761518
    14771519            /* Get boot args */
    1478             Bstr bootArgs;
    1479             hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiBootArgs").raw(), bootArgs.asOutParam()); H();
     1520            Utf8Str bootArgs;
     1521            GetExtraDataBoth(virtualBox, pMachine, "VBoxInternal2/EfiBootArgs", &bootArgs);
    14801522
    14811523            /* Get device props */
    1482             Bstr deviceProps;
    1483             hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiDeviceProps").raw(), deviceProps.asOutParam()); H();
     1524            Utf8Str deviceProps;
     1525            GetExtraDataBoth(virtualBox, pMachine, "VBoxInternal2/EfiDeviceProps", &deviceProps);
    14841526
    14851527            /* Get GOP mode settings */
    14861528            uint32_t u32GopMode = UINT32_MAX;
    1487             hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiGopMode").raw(), bstr.asOutParam()); H();
    1488             if (!bstr.isEmpty())
    1489                 u32GopMode = Utf8Str(bstr).toUInt32();
     1529            GetExtraDataBoth(virtualBox, pMachine, "VBoxInternal2/EfiGopMode", &strTmp);
     1530            if (!strTmp.isEmpty())
     1531                u32GopMode = strTmp.toUInt32();
    14901532
    14911533            /* UGA mode settings */
    14921534            uint32_t u32UgaHorisontal = 0;
    1493             hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiUgaHorizontalResolution").raw(), bstr.asOutParam()); H();
    1494             if (!bstr.isEmpty())
    1495                 u32UgaHorisontal = Utf8Str(bstr).toUInt32();
     1535            GetExtraDataBoth(virtualBox, pMachine, "VBoxInternal2/EfiUgaHorizontalResolution", &strTmp);
     1536            if (!strTmp.isEmpty())
     1537                u32UgaHorisontal = strTmp.toUInt32();
    14961538
    14971539            uint32_t u32UgaVertical = 0;
    1498             hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiUgaVerticalResolution").raw(), bstr.asOutParam()); H();
    1499             if (!bstr.isEmpty())
    1500                 u32UgaVertical = Utf8Str(bstr).toUInt32();
     1540            GetExtraDataBoth(virtualBox, pMachine, "VBoxInternal2/EfiUgaVerticalResolution", &strTmp);
     1541            if (!strTmp.isEmpty())
     1542                u32UgaVertical = strTmp.toUInt32();
    15011543
    15021544            /*
     
    28272869        // InsertConfig threw something:
    28282870        return x.m_vrc;
     2871    }
     2872    catch (HRESULT hrcXcpt)
     2873    {
     2874        AssertMsgFailedReturn(("hrc=%Rhrc\n", hrcXcpt), VERR_GENERAL_FAILURE);
    28292875    }
    28302876
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette