StorageControllerImpl.h revision bf88068260ded16af90b7da4867240fbdd9c8017
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync/* $Id$ */
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync/** @file
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync *
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * VBox StorageController COM Class declaration.
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync */
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync/*
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync * Copyright (C) 2008 Oracle Corporation
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync *
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * available from http://www.virtualbox.org. This file is free software;
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * General Public License (GPL) as published by the Free Software
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync */
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync#ifndef ____H_STORAGECONTROLLERIMPL
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync#define ____H_STORAGECONTROLLERIMPL
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync#include "VirtualBoxBase.h"
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsyncclass ATL_NO_VTABLE StorageController :
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync public VirtualBoxBase,
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync VBOX_SCRIPTABLE_IMPL(IStorageController)
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync{
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsyncpublic:
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(StorageController, IStorageController)
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync DECLARE_NOT_AGGREGATABLE (StorageController)
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync
c8faf7a704e698dec3679d7df43ae55b1bab3eadvboxsync BEGIN_COM_MAP(StorageController)
bf88068260ded16af90b7da4867240fbdd9c8017vboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
bf88068260ded16af90b7da4867240fbdd9c8017vboxsync COM_INTERFACE_ENTRY (IStorageController)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync COM_INTERFACE_ENTRY2 (IDispatch, IStorageController)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync END_COM_MAP()
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync StorageController() { };
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync ~StorageController() { };
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync HRESULT FinalConstruct();
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync void FinalRelease();
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync // public initializer/uninitializer for internal purposes only
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync HRESULT init(Machine *aParent,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync const Utf8Str &aName,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync StorageBus_T aBus,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync ULONG aInstance,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync bool fBootable);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync HRESULT init(Machine *aParent,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync StorageController *aThat,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync bool aReshare = false);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync HRESULT initCopy(Machine *aParent,
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync StorageController *aThat);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync void uninit();
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync // IStorageController properties
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMGETTER(Name)) (BSTR *aName);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(Bus)) (StorageBus_T *aBus);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMGETTER(ControllerType)) (StorageControllerType_T *aControllerType);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMSETTER(ControllerType)) (StorageControllerType_T aControllerType);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(MaxDevicesPerPortCount)) (ULONG *aMaxDevices);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(MinPortCount)) (ULONG *aMinPortCount);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMGETTER(MaxPortCount)) (ULONG *aMaxPortCount);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMGETTER(PortCount)) (ULONG *aPortCount);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync STDMETHOD(COMSETTER(PortCount)) (ULONG aPortCount);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(Instance)) (ULONG *aInstance);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMSETTER(Instance)) (ULONG aInstance);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(UseHostIOCache)) (BOOL *fUseHostIOCache);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMSETTER(UseHostIOCache)) (BOOL fUseHostIOCache);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(COMGETTER(Bootable)) (BOOL *fBootable);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync // StorageController methods
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(GetIDEEmulationPort) (LONG DevicePosition, LONG *aPortNumber);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync STDMETHOD(SetIDEEmulationPort) (LONG DevicePosition, LONG aPortNumber);
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync // public methods only for internal purposes
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync const Utf8Str &getName() const;
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync StorageControllerType_T getControllerType() const;
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync StorageBus_T getStorageBus() const;
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync ULONG getInstance() const;
7b01db654c23d4e432465aebc1a1853e8d6b3194vboxsync bool getBootable() const;
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
4182d14dc02dba6587c15e358b87e5c9a6e60d15vboxsync HRESULT checkPortAndDeviceValid(LONG aControllerPort,
4182d14dc02dba6587c15e358b87e5c9a6e60d15vboxsync LONG aDevice);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync void setBootable(BOOL fBootable);
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync
7189dad3705d42e9874af1e1c8a8c7e5cceee9f7vboxsync void rollback();
void commit();
// public methods for internal purposes only
// (ensure there is a caller and a read lock before calling them!)
void unshare();
/** @note this doesn't require a read lock since mParent is constant. */
Machine* getMachine();
ComObjPtr<StorageController> getPeer();
private:
void printList();
struct Data;
Data *m;
};
#endif //!____H_STORAGECONTROLLERIMPL
/* vi: set tabstop=4 shiftwidth=4 expandtab: */