GuestSessionImpl.h revision e86baafe99d1f1eb37adcca5fdecfd06e7f13bc5
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox Main - Guest session handling.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2012-2013 Oracle Corporation
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
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Abstract base class for a lenghtly per-session operation which
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync * runs in a Main worker thread.
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync virtual int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress) = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int getGuestProperty(const ComObjPtr<Guest> &pGuest,
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync HRESULT setProgressErrorMsg(HRESULT hr, const Utf8Str &strMsg);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress object for getting updated when running
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * asynchronously. Optional. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Task for opening a guest session.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session creation flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session creation timeout (in ms). */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * Task for copying files from host to the guest.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PRTFILE pSourceFile, size_t cbSourceOffset, uint64_t cbSourceSize,
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Task for copying files from guest to the host.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Task for automatically updating the Guest Additions on the guest.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncclass SessionTaskUpdateAdditions : public GuestSessionTask
b8aaccdbdd143967110d499670605dd7ff6ecc72vboxsync const Utf8Str &strSource, const ProcessArguments &aArguments,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Suported OS types for automatic updating.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Structure representing a file to
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * get off the .ISO, copied to the guest.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Source file on .ISO. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Destination file on the guest. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** File flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Optional arguments if this file needs to be
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * executed. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int addProcessArguments(ProcessArguments &aArgumentsDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int copyFileToGuest(GuestSession *pSession, PRTISOFSFILE pISO,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str const &strFileSource, const Utf8Str &strFileDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int runFileOnGuest(GuestSession *pSession, GuestProcessStartupInfo &procInfo);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Files to handle. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The (optionally) specified Guest Additions .ISO on the host
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * which will be used for the updating process. */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /** (Optional) installer command line arguments. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Update flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Guest session implementation.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name COM and internal init/term/mapping cruft.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestSession, IGuestSession)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int init(Guest *pGuest, const GuestSessionStartupInfo &ssInfo, const GuestCredentials &guestCreds);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name IGuestSession properties.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Status))(GuestSessionStatus_T *aStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(ProtocolVersion))(ULONG *aVersion);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Environment))(ComSafeArrayOut(BSTR, aEnvironment));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMSETTER(Environment))(ComSafeArrayIn(IN_BSTR, aEnvironment));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Processes))(ComSafeArrayOut(IGuestProcess *, aProcesses));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Directories))(ComSafeArrayOut(IGuestDirectory *, aDirectories));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Files))(ComSafeArrayOut(IGuestFile *, aFiles));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(EventSource))(IEventSource ** aEventSource);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name IGuestSession methods.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(CopyFrom)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(CopyFileFlag_T, aFlags), IProgress **aProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(CopyTo)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(CopyFileFlag_T, aFlags), IProgress **aProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(DirectoryCreate)(IN_BSTR aPath, ULONG aMode, ComSafeArrayIn(DirectoryCreateFlag_T, aFlags));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(DirectoryCreateTemp)(IN_BSTR aTemplate, ULONG aMode, IN_BSTR aPath, BOOL aSecure, BSTR *aDirectory);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(DirectoryExists)(IN_BSTR aPath, BOOL *aExists);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync STDMETHOD(DirectoryOpen)(IN_BSTR aPath, IN_BSTR aFilter, ComSafeArrayIn(DirectoryOpenFlag_T, aFlags), IGuestDirectory **aDirectory);
9782b553bdb12385214a3ac596aff1476bcb7cbdvboxsync STDMETHOD(DirectoryQueryInfo)(IN_BSTR aPath, IGuestFsObjInfo **aInfo);
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync STDMETHOD(DirectoryRemoveRecursive)(IN_BSTR aPath, ComSafeArrayIn(DirectoryRemoveRecFlag_T, aFlags), IProgress **aProgress);
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync STDMETHOD(DirectoryRename)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(PathRenameFlag_T, aFlags));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(DirectorySetACL)(IN_BSTR aPath, IN_BSTR aACL);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(EnvironmentGet)(IN_BSTR aName, BSTR *aValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(EnvironmentSet)(IN_BSTR aName, IN_BSTR aValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileCreateTemp)(IN_BSTR aTemplate, ULONG aMode, IN_BSTR aPath, BOOL aSecure, IGuestFile **aFile);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileExists)(IN_BSTR aPath, BOOL *aExists);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileOpen)(IN_BSTR aPath, IN_BSTR aOpenMode, IN_BSTR aDisposition, ULONG aCreationMode, IGuestFile **aFile);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync STDMETHOD(FileOpenEx)(IN_BSTR aPath, IN_BSTR aOpenMode, IN_BSTR aDisposition, IN_BSTR aSharingMode, ULONG aCreationMode, LONG64 aOffset, IGuestFile **aFile);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync STDMETHOD(FileQueryInfo)(IN_BSTR aPath, IGuestFsObjInfo **aInfo);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileQuerySize)(IN_BSTR aPath, LONG64 *aSize);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileRename)(IN_BSTR aSource, IN_BSTR aDest, ComSafeArrayIn(PathRenameFlag_T, aFlags));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(FileSetACL)(IN_BSTR aPath, IN_BSTR aACL);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(ProcessCreate)(IN_BSTR aCommand, ComSafeArrayIn(IN_BSTR, aArguments), ComSafeArrayIn(IN_BSTR, aEnvironment),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComSafeArrayIn(ProcessCreateFlag_T, aFlags), ULONG aTimeoutMS, IGuestProcess **aProcess);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(ProcessCreateEx)(IN_BSTR aCommand, ComSafeArrayIn(IN_BSTR, aArguments), ComSafeArrayIn(IN_BSTR, aEnvironment),
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync ComSafeArrayIn(ProcessCreateFlag_T, aFlags), ULONG aTimeoutMS,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ProcessPriority_T aPriority, ComSafeArrayIn(LONG, aAffinity),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(ProcessGet)(ULONG aPID, IGuestProcess **aProcess);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(SymlinkCreate)(IN_BSTR aSource, IN_BSTR aTarget, SymlinkType_T aType);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(SymlinkExists)(IN_BSTR aSymlink, BOOL *aExists);
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync STDMETHOD(SymlinkRead)(IN_BSTR aSymlink, ComSafeArrayIn(SymlinkReadFlag_T, aFlags), BSTR *aTarget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(WaitFor)(ULONG aWaitFlags, ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(WaitForArray)(ComSafeArrayIn(GuestSessionWaitForFlag_T, aFlags), ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Map of guest directories. The key specifies the internal directory ID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef std::map <uint32_t, ComObjPtr<GuestDirectory> > SessionDirectories;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Map of guest files. The key specifies the internal file ID. */
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync typedef std::map <uint32_t, ComObjPtr<GuestFile> > SessionFiles;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Map of guest processes. The key specifies the internal process number.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * To retrieve the process' guest PID use the Id() method of the IProcess interface. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef std::map <uint32_t, ComObjPtr<GuestProcess> > SessionProcesses;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name Public internal methods.
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync int closeSession(uint32_t uFlags, uint32_t uTimeoutMS, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync inline bool directoryExists(uint32_t uDirID, ComObjPtr<GuestDirectory> *pDir);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int directoryRemoveFromList(GuestDirectory *pDirectory);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int directoryRemoveInternal(const Utf8Str &strPath, uint32_t uFlags, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int directoryCreateInternal(const Utf8Str &strPath, uint32_t uMode, uint32_t uFlags, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int objectCreateTempInternal(const Utf8Str &strTemplate, const Utf8Str &strPath, bool fDirectory, const Utf8Str &strName, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int directoryOpenInternal(const GuestDirectoryOpenInfo &openInfo, ComObjPtr<GuestDirectory> &pDirectory, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int directoryQueryInfoInternal(const Utf8Str &strPath, GuestFsObjData &objData, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int dispatchToDirectory(PVBOXGUESTCTRLHOSTCBCTX pCtxCb, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int dispatchToFile(PVBOXGUESTCTRLHOSTCBCTX pCtxCb, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int dispatchToObject(PVBOXGUESTCTRLHOSTCBCTX pCtxCb, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int dispatchToProcess(PVBOXGUESTCTRLHOSTCBCTX pCtxCb, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync int dispatchToThis(PVBOXGUESTCTRLHOSTCBCTX pCtxCb, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
e52f819639386db020b2a635b47a415248c7fbf9vboxsync inline bool fileExists(uint32_t uFileID, ComObjPtr<GuestFile> *pFile);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int fileRemoveInternal(const Utf8Str &strPath, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int fileOpenInternal(const GuestFileOpenInfo &openInfo, ComObjPtr<GuestFile> &pFile, int *pGuestRc);
e02db9e0d46f862430895b82b10e8ecde075cf11vboxsync int fileQueryInfoInternal(const Utf8Str &strPath, GuestFsObjData &objData, int *pGuestRc);
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync int fileQuerySizeInternal(const Utf8Str &strPath, int64_t *pllSize, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int fsQueryInfoInternal(const Utf8Str &strPath, GuestFsObjData &objData, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync EventSource *getEventSource(void) { return mEventSource; }
0e77737b0ba913683e614db11463b31ca67aacbevboxsync int onSessionStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync uint32_t getProtocolVersion(void) { return mData.mProtocolVersion; }
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int pathRenameInternal(const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags, int *pGuestRc);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int processCreateExInteral(GuestProcessStartupInfo &procInfo, ComObjPtr<GuestProcess> &pProgress);
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync inline bool processExists(uint32_t uProcessID, ComObjPtr<GuestProcess> *pProcess);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync inline int processGetByPID(ULONG uPID, ComObjPtr<GuestProcess> *pProcess);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int sendCommand(uint32_t uFunction, uint32_t uParms, PVBOXHGCMSVCPARM paParms);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync static HRESULT setErrorExternal(VirtualBoxBase *pInterface, int guestRc);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync int setSessionStatus(GuestSessionStatus_T sessionStatus, int sessionRc);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int signalWaiters(GuestSessionWaitResult_T enmWaitResult, int rc /*= VINF_SUCCESS */);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int startTaskAsync(const Utf8Str &strTaskDesc, GuestSessionTask *pTask, ComObjPtr<Progress> &pProgress);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync int waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS, GuestSessionWaitResult_T &waitResult, int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int waitForStatusChange(GuestWaitEvent *pEvent, uint32_t fWaitFlags, uint32_t uTimeoutMS, GuestSessionStatus_T *pSessionStatus, int *pGuestRc);
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync /** Pointer to the parent (Guest). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * The session's event source. This source is used for
6b022885f2cb6a55167609edecd89570cd80001dvboxsync * serving the internal listener as well as all other
6b022885f2cb6a55167609edecd89570cd80001dvboxsync * external listeners that may register to it.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Note: This can safely be used without holding any locks.
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync * An AutoCaller suffices to prevent it being destroy while in use and
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * internally there is a lock providing the necessary serialization.
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync /** The session credentials. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The session's startup info. */
6b022885f2cb6a55167609edecd89570cd80001dvboxsync /** The session's current status. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The session's environment block. Can be
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * overwritten/extended by ProcessCreate(Ex). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Directory objects bound to this session. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** File objects bound to this session. */
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync /** Process objects bound to this session. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Guest control protocol version to be used.
6b022885f2cb6a55167609edecd89570cd80001dvboxsync * Guest Additions < VBox 4.3 have version 1,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * any newer version will have version 2. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session timeout (in ms). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Total number of session objects (processes,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * files, ...). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The last returned session status
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync * returned from the guest side. */
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync#endif /* !____H_GUESTSESSIONIMPL */