4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * VirtualBox COM class implementation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Copyright (C) 2006-2015 Oracle Corporation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * available from http://www.virtualbox.org. This file is free software;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * you can redistribute it and/or modify it under the terms of the GNU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * General Public License (GPL) as published by the Free Software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "MediumAttachmentImpl.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "MachineImpl.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "MediumImpl.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Global.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "AutoCaller.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Logging.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <iprt/cpp/utils.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync////////////////////////////////////////////////////////////////////////////////
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// private member data definition
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync////////////////////////////////////////////////////////////////////////////////
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct BackupableMediumAttachmentData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BackupableMediumAttachmentData()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync : lPort(0),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync lDevice(0),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync type(DeviceType_Null),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fPassthrough(false),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fTempEject(false),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fNonRotational(false),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fDiscard(false),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fImplicit(false),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fHotPluggable(false)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ComObjPtr<Medium> pMedium;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Since MediumAttachment is not a first class citizen when it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * comes to managing settings, having a reference to the storage
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * controller will not work - when settings are changed it will point
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * to the old, uninitialized instance. Changing this requires
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * substantial changes to MediumImpl.cpp. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const Bstr bstrControllerName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Same counts for the assigned bandwidth group */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Utf8Str strBandwidthGroup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const LONG lPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const LONG lDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const DeviceType_T type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fPassthrough;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fTempEject;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fNonRotational;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fDiscard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fImplicit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fHotPluggable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct MediumAttachment::Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data(Machine * const aMachine = NULL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync : pMachine(aMachine),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fIsEjected(false)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /** Reference to Machine object, for checking mutable state. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Machine * const pMachine;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* later: const ComObjPtr<MediumAttachment> mPeer; */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool fIsEjected;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Backupable<BackupableMediumAttachmentData> bd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// constructor / destructor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/////////////////////////////////////////////////////////////////////////////
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDEFINE_EMPTY_CTOR_DTOR(MediumAttachment)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::FinalConstruct()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("\n"));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return BaseFinalConstruct();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::FinalRelease()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uninit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BaseFinalRelease();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// public initializer/uninitializer for internal purposes only
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/////////////////////////////////////////////////////////////////////////////
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Initializes the medium attachment object.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aParent Machine object.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aMedium Medium object.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aController Controller the hard disk is attached to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aPort Port number.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aDevice Device number on the port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aPassthrough Whether accesses are directly passed to the host drive.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aBandwidthLimit Bandwidth limit in Mbps
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::init(Machine *aParent,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Medium *aMedium,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const Bstr &aControllerName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LONG aPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LONG aDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceType_T aType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aImplicit,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aPassthrough,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aTempEject,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aNonRotational,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aDiscard,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool aHotPluggable,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const Utf8Str &strBandwidthGroup)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("aParent=%p aMedium=%p aControllerName=%ls aPort=%d aDevice=%d aType=%d aImplicit=%d aPassthrough=%d aTempEject=%d aNonRotational=%d aDiscard=%d aHotPluggable=%d strBandwithGroup=%s\n", aParent, aMedium, aControllerName.raw(), aPort, aDevice, aType, aImplicit, aPassthrough, aTempEject, aNonRotational, aDiscard, aHotPluggable, strBandwidthGroup.c_str()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (aType == DeviceType_HardDisk)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertReturn(aMedium, E_INVALIDARG);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Enclose the state transition NotReady->InInit->Ready */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoInitSpan autoInitSpan(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertReturn(autoInitSpan.isOk(), E_FAIL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m = new Data();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->pMachine) = aParent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.allocate();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->pMedium = aMedium;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->bd->strBandwidthGroup) = strBandwidthGroup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->bd->bstrControllerName) = aControllerName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->bd->lPort) = aPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->bd->lDevice) = aDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->bd->type) = aType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fPassthrough = aPassthrough;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fTempEject = aTempEject;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fNonRotational = aNonRotational;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fDiscard = aDiscard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fImplicit = aImplicit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fHotPluggable = aHotPluggable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Confirm a successful initialization when it's the case */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync autoInitSpan.setSucceeded();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Construct a short log name for this attachment. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Utf8Str ctlName(aControllerName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const char *psz = strpbrk(ctlName.c_str(), " \t:-");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mLogName = Utf8StrFmt("MA%p[%.*s:%u:%u:%s%s]",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync psz ? psz - ctlName.c_str() : 4, ctlName.c_str(),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync aPort, aDevice, Global::stringifyDeviceType(aType),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fImplicit ? ":I" : "");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("LEAVE - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Initializes the medium attachment object given another guest object
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * (a kind of copy constructor). This object makes a private copy of data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * of the original object passed as an argument.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::initCopy(Machine *aParent, MediumAttachment *aThat)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("aParent=%p, aThat=%p\n", aParent, aThat));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ComAssertRet(aParent && aThat, E_INVALIDARG);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Enclose the state transition NotReady->InInit->Ready */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoInitSpan autoInitSpan(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertReturn(autoInitSpan.isOk(), E_FAIL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m = new Data(aParent);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* m->pPeer is left null */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoCaller thatCaller(aThat);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertComRCReturnRC(thatCaller.rc());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock thatlock(aThat COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.attachCopy(aThat->m->bd);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Confirm a successful initialization */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync autoInitSpan.setSucceeded();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Uninitializes the instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Called from FinalRelease().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::uninit()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("ENTER - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Enclose the state transition Ready->InUninit->NotReady */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoUninitSpan autoUninitSpan(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (autoUninitSpan.uninitDone())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.free();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->pMachine) = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync delete m;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// IHardDiskAttachment properties
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/////////////////////////////////////////////////////////////////////////////
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getMedium(ComPtr<IMedium> &aHardDisk)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync aHardDisk = m->bd->pMedium;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getController(com::Utf8Str &aController)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* m->controller is constant during life time, no need to lock */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync aController = Utf8Str(m->bd->bstrControllerName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getPort(LONG *aPort)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* m->bd->port is constant during life time, no need to lock */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aPort = m->bd->lPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getDevice(LONG *aDevice)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* m->bd->device is constant during life time, no need to lock */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aDevice = m->bd->lDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getType(DeviceType_T *aType)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* m->bd->type is constant during life time, no need to lock */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aType = m->bd->type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getPassthrough(BOOL *aPassthrough)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aPassthrough = m->bd->fPassthrough;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getTemporaryEject(BOOL *aTemporaryEject)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aTemporaryEject = m->bd->fTempEject;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getIsEjected(BOOL *aEjected)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aEjected = m->fIsEjected;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getNonRotational(BOOL *aNonRotational)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aNonRotational = m->bd->fNonRotational;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getDiscard(BOOL *aDiscard)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aDiscard = m->bd->fDiscard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getBandwidthGroup(ComPtr<IBandwidthGroup> &aBandwidthGroup)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT hrc = S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (m->bd->strBandwidthGroup.isNotEmpty())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ComObjPtr<BandwidthGroup> pBwGroup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hrc = m->pMachine->i_getBandwidthGroup(m->bd->strBandwidthGroup, pBwGroup, true /* fSetError */);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(SUCCEEDED(hrc)); /* This is not allowed to fail because the existence of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync group was checked when it was attached. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (SUCCEEDED(hrc))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pBwGroup.queryInterfaceTo(aBandwidthGroup.asOutParam());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return hrc;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHRESULT MediumAttachment::getHotPluggable(BOOL *aHotPluggable)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *aHotPluggable = m->bd->fHotPluggable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return S_OK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @note Locks this object for writing.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_rollback()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("ENTER - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* sanity */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoCaller autoCaller(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertComRCReturnVoid(autoCaller.rc());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.rollback();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("LEAVE - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @note Locks this object for writing.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_commit()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("ENTER - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* sanity */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoCaller autoCaller(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertComRCReturnVoid (autoCaller.rc());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (m->bd.isBackedUp())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.commit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("LEAVE - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_isImplicit() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fImplicit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_setImplicit(bool aImplicit)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fImplicit = aImplicit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncconst ComObjPtr<Medium>& MediumAttachment::i_getMedium() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->pMedium;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncconst Bstr MediumAttachment::i_getControllerName() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->bstrControllerName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncLONG MediumAttachment::i_getPort() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->lPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncLONG MediumAttachment::i_getDevice() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->lDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDeviceType_T MediumAttachment::i_getType() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_getPassthrough() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fPassthrough;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_getTempEject() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fTempEject;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_getNonRotational() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fNonRotational;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_getDiscard() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fDiscard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_getHotPluggable() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoReadLock lock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->fHotPluggable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUtf8Str& MediumAttachment::i_getBandwidthGroup() const
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return m->bd->strBandwidthGroup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncbool MediumAttachment::i_matches(CBSTR aControllerName, LONG aPort, LONG aDevice)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ( aControllerName == m->bd->bstrControllerName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync && aPort == m->bd->lPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync && aDevice == m->bd->lDevice);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Sets the medium of this attachment and unsets the "implicit" flag.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @param aMedium
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateMedium(const ComObjPtr<Medium> &aMedium)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->pMedium = aMedium;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fImplicit = false;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->fIsEjected = false;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updatePassthrough(bool aPassthrough)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fPassthrough = aPassthrough;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateTempEject(bool aTempEject)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fTempEject = aTempEject;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateEjected()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->fIsEjected = true;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateNonRotational(bool aNonRotational)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fNonRotational = aNonRotational;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateDiscard(bool aDiscard)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fDiscard = aDiscard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** Must be called from under this object's write lock. */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateHotPluggable(bool aHotPluggable)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->fHotPluggable = aHotPluggable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateBandwidthGroup(const Utf8Str &aBandwidthGroup)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncEnter();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assert(isWriteLockOnCurrentThread());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd.backup();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync m->bd->strBandwidthGroup = aBandwidthGroup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFuncLeave();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid MediumAttachment::i_updateParentMachine(Machine * const pMachine)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("ENTER - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* sanity */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoCaller autoCaller(this);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AssertComRCReturnVoid (autoCaller.rc());
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unconst(m->pMachine) = pMachine;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogFlowThisFunc(("LEAVE - %s\n", i_getLogName()));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync