/** * Initializes the system information object. * * @returns COM result indicator */ HRESULT SystemProperties::init(VirtualBox *aParent) { LogFlowThisFunc(("aParent=%p\n", aParent)); ComAssertRet(aParent, E_FAIL); /* Enclose the state transition NotReady->InInit->Ready */ AutoInitSpan autoInitSpan(this); AssertReturn(autoInitSpan.isOk(), E_FAIL); unconst(mParent) = aParent; setDefaultMachineFolder(Utf8Str::Empty); setDefaultHardDiskFormat(Utf8Str::Empty); setVRDEAuthLibrary(Utf8Str::Empty); setDefaultVRDEExtPack(Utf8Str::Empty); m->ulLogHistoryCount = 3; HRESULT rc = S_OK; /* Fetch info of all available hd backends. */ /// @todo NEWMEDIA VDBackendInfo needs to be improved to let us enumerate /// any number of backends VDBACKENDINFO aVDInfo[100]; unsigned cEntries; int vrc = VDBackendInfo(RT_ELEMENTS(aVDInfo), aVDInfo, &cEntries); AssertRC(vrc); if (RT_SUCCESS(vrc)) { for (unsigned i = 0; i < cEntries; ++ i) { ComObjPtr<MediumFormat> hdf; rc = hdf.createObject(); if (FAILED(rc)) break; rc = hdf->init(&aVDInfo[i]); if (FAILED(rc)) break; m_llMediumFormats.push_back(hdf); } } /* Confirm a successful initialization */ if (SUCCEEDED(rc)) autoInitSpan.setSucceeded(); return rc; }
/** * Initializes the system information object. * * @returns COM result indicator */ HRESULT SystemProperties::init(VirtualBox *aParent) { LogFlowThisFunc(("aParent=%p\n", aParent)); ComAssertRet(aParent, E_FAIL); /* Enclose the state transition NotReady->InInit->Ready */ AutoInitSpan autoInitSpan(this); AssertReturn(autoInitSpan.isOk(), E_FAIL); unconst(mParent) = aParent; i_setDefaultMachineFolder(Utf8Str::Empty); i_setLoggingLevel(Utf8Str::Empty); i_setDefaultHardDiskFormat(Utf8Str::Empty); i_setVRDEAuthLibrary(Utf8Str::Empty); i_setDefaultVRDEExtPack(Utf8Str::Empty); m->ulLogHistoryCount = 3; /* On Windows and OS X, HW virtualization use isn't exclusive by * default so that VT-x or AMD-V can be shared with other * hypervisors without requiring user intervention. * NB: See also SystemProperties constructor in settings.h */ #if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS) m->fExclusiveHwVirt = false; #else m->fExclusiveHwVirt = true; #endif HRESULT rc = S_OK; /* Fetch info of all available hd backends. */ /// @todo NEWMEDIA VDBackendInfo needs to be improved to let us enumerate /// any number of backends VDBACKENDINFO aVDInfo[100]; unsigned cEntries; int vrc = VDBackendInfo(RT_ELEMENTS(aVDInfo), aVDInfo, &cEntries); AssertRC(vrc); if (RT_SUCCESS(vrc)) { for (unsigned i = 0; i < cEntries; ++ i) { ComObjPtr<MediumFormat> hdf; rc = hdf.createObject(); if (FAILED(rc)) break; rc = hdf->init(&aVDInfo[i]); if (FAILED(rc)) break; m_llMediumFormats.push_back(hdf); } } /* Confirm a successful initialization */ if (SUCCEEDED(rc)) autoInitSpan.setSucceeded(); return rc; }
static int tstVDBackendInfo(void) { int rc; #define MAX_BACKENDS 100 VDBACKENDINFO aVDInfo[MAX_BACKENDS]; unsigned cEntries; #define CHECK(str) \ do \ { \ RTPrintf("%s rc=%Rrc\n", str, rc); \ if (RT_FAILURE(rc)) \ return rc; \ } while (0) rc = VDBackendInfo(MAX_BACKENDS, aVDInfo, &cEntries); CHECK("VDBackendInfo()"); for (unsigned i=0; i < cEntries; i++) { RTPrintf("Backend %u: name=%s capabilities=%#06x extensions=", i, aVDInfo[i].pszBackend, aVDInfo[i].uBackendCaps); if (aVDInfo[i].paFileExtensions) { PCVDFILEEXTENSION pa = aVDInfo[i].paFileExtensions; while (pa->pszExtension != NULL) { if (pa != aVDInfo[i].paFileExtensions) RTPrintf(","); RTPrintf("%s (%s)", pa->pszExtension, tstVDDeviceType(pa->enmType)); pa++; } if (pa == aVDInfo[i].paFileExtensions) RTPrintf("<EMPTY>"); } else RTPrintf("<NONE>"); RTPrintf(" config="); if (aVDInfo[i].paConfigInfo) { PCVDCONFIGINFO pa = aVDInfo[i].paConfigInfo; while (pa->pszKey != NULL) { if (pa != aVDInfo[i].paConfigInfo) RTPrintf(","); RTPrintf("(key=%s type=", pa->pszKey); switch (pa->enmValueType) { case VDCFGVALUETYPE_INTEGER: RTPrintf("integer"); break; case VDCFGVALUETYPE_STRING: RTPrintf("string"); break; case VDCFGVALUETYPE_BYTES: RTPrintf("bytes"); break; default: RTPrintf("INVALID!"); } RTPrintf(" default="); if (pa->pszDefaultValue) RTPrintf("%s", pa->pszDefaultValue); else RTPrintf("<NONE>"); RTPrintf(" flags="); if (!pa->uKeyFlags) RTPrintf("none"); unsigned cFlags = 0; if (pa->uKeyFlags & VD_CFGKEY_MANDATORY) { if (cFlags) RTPrintf(","); RTPrintf("mandatory"); cFlags++; } if (pa->uKeyFlags & VD_CFGKEY_EXPERT) { if (cFlags) RTPrintf(","); RTPrintf("expert"); cFlags++; } RTPrintf(")"); pa++; } if (pa == aVDInfo[i].paConfigInfo) RTPrintf("<EMPTY>"); } else RTPrintf("<NONE>"); RTPrintf("\n"); PVDINTERFACE pVDIfs = NULL; VDINTERFACECONFIG ic; ic.pfnAreKeysValid = tstAreKeysValid; ic.pfnQuerySize = tstQuerySize; ic.pfnQuery = tstQuery; rc = VDInterfaceAdd(&ic.Core, "tstVD-2_Config", VDINTERFACETYPE_CONFIG, NULL, sizeof(VDINTERFACECONFIG), &pVDIfs); AssertRC(rc); char *pszLocation, *pszName; rc = aVDInfo[i].pfnComposeLocation(pVDIfs, &pszLocation); CHECK("pfnComposeLocation()"); if (pszLocation) { RTMemFree(pszLocation); if (aVDInfo[i].uBackendCaps & VD_CAP_FILE) { RTPrintf("Non-NULL location returned for file-based backend!\n"); return VERR_INTERNAL_ERROR; } } rc = aVDInfo[i].pfnComposeName(pVDIfs, &pszName); CHECK("pfnComposeName()"); if (pszName) { RTMemFree(pszName); if (aVDInfo[i].uBackendCaps & VD_CAP_FILE) { RTPrintf("Non-NULL name returned for file-based backend!\n"); return VERR_INTERNAL_ERROR; } } } #undef CHECK return 0; }