GuestFileImpl.h revision 5050fc8de0b121eab1b738d7c1007cde4903284d
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox Main - XXX.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2012 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef ____H_GUESTFILEIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ____H_GUESTFILEIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBoxBase.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestFsObjInfoImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass GuestSession;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsyncclass GuestProcess;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d31ded334a29f575e23dc889b603b1a586759348vboxsync * TODO
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d31ded334a29f575e23dc889b603b1a586759348vboxsyncclass ATL_NO_VTABLE GuestFile :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public VirtualBoxBase,
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync VBOX_SCRIPTABLE_IMPL(IGuestFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name COM and internal init/term/mapping cruft.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
2f0d866e126dd288169fed591c259c1c6b4016e5vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestFile, IGuestFile)
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync DECLARE_NOT_AGGREGATABLE(GuestFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync BEGIN_COM_MAP(GuestFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync COM_INTERFACE_ENTRY(IFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync END_COM_MAP()
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync DECLARE_EMPTY_CTOR_DTOR(GuestFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync int init(GuestSession *pSession, const Utf8Str &strPath, const Utf8Str &strOpenMode, const Utf8Str &strDisposition, uint32_t uCreationMode, int64_t iOffset, int *pGuestRc);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync void uninit(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT FinalConstruct(void);
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync void FinalRelease(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name IFile interface.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync STDMETHOD(COMGETTER(CreationMode))(ULONG *aCreationMode);
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync STDMETHOD(COMGETTER(Disposition))(ULONG *aDisposition);
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync STDMETHOD(COMGETTER(FileName))(BSTR *aFileName);
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync STDMETHOD(COMGETTER(InitialSize))(LONG64 *aInitialSize);
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync STDMETHOD(COMGETTER(Offset))(LONG64 *aOffset);
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync STDMETHOD(COMGETTER(OpenMode))(ULONG *aOpenMode);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync STDMETHOD(Close)(void);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync STDMETHOD(QueryInfo)(IFsObjInfo **aInfo);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync STDMETHOD(Read)(ULONG aToRead, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData));
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync STDMETHOD(ReadAt)(LONG64 aOffset, ULONG aToRead, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData));
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync STDMETHOD(Seek)(LONG64 aOffset, FileSeekType_T aType);
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync STDMETHOD(SetACL)(IN_BSTR aACL);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(Write)(ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(WriteAt)(LONG64 aOffset, ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name Public internal methods.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static uint32_t getDispositionFromString(const Utf8Str &strDisposition);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static uint32_t getOpenModeFromString(const Utf8Str &strOpenMode);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync struct Data
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The associate session this file belongs to. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestSession *mSession;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mCreationMode;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mDisposition;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str mFileName;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int64_t mInitialSize;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync uint32_t mOpenMode;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync int64_t mOffset;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync } mData;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync};
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync#endif /* !____H_GUESTFILEIMPL */
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync