GuestSessionImpl.h revision 9bff17fe6983cfda2ddd98f1979841bcb48e78e7
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * VirtualBox Main - Guest session handling.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Copyright (C) 2012-2013 Oracle Corporation
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * available from http://www.virtualbox.org. This file is free software;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * you can redistribute it and/or modify it under the terms of the GNU
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * General Public License (GPL) as published by the Free Software
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Abstract base class for a lenghtly per-session operation which
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * runs in a Main worker thread.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync virtual int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress) = 0;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int getGuestProperty(const ComObjPtr<Guest> &pGuest,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync HRESULT setProgressErrorMsg(HRESULT hr, const Utf8Str &strMsg);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Progress object for getting updated when running
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * asynchronously. Optional. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Task for opening a guest session.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Session creation flags. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Session creation timeout (in ms). */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Task for copying files from host to the guest.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PRTFILE pSourceFile, size_t cbSourceOffset, uint64_t cbSourceSize,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Task for copying files from guest to the host.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Task for automatically updating the Guest Additions on the guest.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncclass SessionTaskUpdateAdditions : public GuestSessionTask
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Suported OS types for automatic updating.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Structure representing a file to
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * get off the .ISO, copied to the guest.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Source file on .ISO. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Destination file on the guest. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** File flags. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Optional arguments if this file needs to be
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * executed. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int copyFileToGuest(GuestSession *pSession, PRTISOFSFILE pISO,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Utf8Str const &strFileSource, const Utf8Str &strFileDest,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int runFileOnGuest(GuestSession *pSession, GuestProcessStartupInfo &procInfo);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Files to handle. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** The (optionally) specified Guest Additions .ISO on the host
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * which will be used for the updating process. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** Update flags. */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Guest session implementation.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** @name COM and internal init/term/mapping cruft.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestSession, IGuestSession)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int init(Guest *pGuest, const GuestSessionStartupInfo &ssInfo, const GuestCredentials &guestCreds);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /** @name IGuestSession properties.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync STDMETHOD(COMGETTER(Status))(GuestSessionStatus_T *aStatus);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync STDMETHOD(COMGETTER(Environment))(ComSafeArrayOut(BSTR, aEnvironment));
STDMETHOD(CopyFrom)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(CopyFileFlag_T, aFlags), IProgress **aProgress);
STDMETHOD(CopyTo)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(CopyFileFlag_T, aFlags), IProgress **aProgress);
STDMETHOD(DirectoryCreate)(IN_BSTR aPath, ULONG aMode, ComSafeArrayIn(DirectoryCreateFlag_T, aFlags));
STDMETHOD(DirectoryCreateTemp)(IN_BSTR aTemplate, ULONG aMode, IN_BSTR aPath, BOOL aSecure, BSTR *aDirectory);
STDMETHOD(DirectoryOpen)(IN_BSTR aPath, IN_BSTR aFilter, ComSafeArrayIn(DirectoryOpenFlag_T, aFlags), IGuestDirectory **aDirectory);
STDMETHOD(DirectoryRemoveRecursive)(IN_BSTR aPath, ComSafeArrayIn(DirectoryRemoveRecFlag_T, aFlags), IProgress **aProgress);
STDMETHOD(DirectoryRename)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(PathRenameFlag_T, aFlags));
STDMETHOD(FileCreateTemp)(IN_BSTR aTemplate, ULONG aMode, IN_BSTR aPath, BOOL aSecure, IGuestFile **aFile);
STDMETHOD(FileOpen)(IN_BSTR aPath, IN_BSTR aOpenMode, IN_BSTR aDisposition, ULONG aCreationMode, LONG64 aOffset, IGuestFile **aFile);
STDMETHOD(ProcessCreate)(IN_BSTR aCommand, ComSafeArrayIn(IN_BSTR, aArguments), ComSafeArrayIn(IN_BSTR, aEnvironment),
STDMETHOD(ProcessCreateEx)(IN_BSTR aCommand, ComSafeArrayIn(IN_BSTR, aArguments), ComSafeArrayIn(IN_BSTR, aEnvironment),
STDMETHOD(WaitForArray)(ComSafeArrayIn(GuestSessionWaitForFlag_T, aFlags), ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason);
int directoryCreateInternal(const Utf8Str &strPath, uint32_t uMode, uint32_t uFlags, int *pGuestRc);
int objectCreateTempInternal(const Utf8Str &strTemplate, const Utf8Str &strPath, bool fDirectory, const Utf8Str &strName, int *pGuestRc);
int directoryOpenInternal(const Utf8Str &strPath, const Utf8Str &strFilter, uint32_t uFlags, ComObjPtr<GuestDirectory> &pDirectory);
int fileOpenInternal(const GuestFileOpenInfo &openInfo, ComObjPtr<GuestFile> &pFile, int *pGuestRc);
int onSessionStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, GuestCtrlCallback *pCallback, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
int startSessionAsync(void);
static DECLCALLBACK(int)
int startTaskAsync(const Utf8Str &strTaskDesc, GuestSessionTask *pTask, ComObjPtr<Progress> &pProgress);
int queryInfo(void);
int waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS, GuestSessionWaitResult_T &waitResult, int *pGuestRc);
struct Data
* overwritten/extended by ProcessCreate(Ex). */
int mRC;
} mData;