GuestSessionImpl.h revision e86baafe99d1f1eb37adcca5fdecfd06e7f13bc5
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox Main - Guest session handling.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2012-2013 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
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#ifndef ____H_GUESTSESSIONIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ____H_GUESTSESSIONIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBoxBase.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "EventImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestCtrlImplPrivate.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestProcessImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestDirectoryImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestFileImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestFsObjInfoImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#include <iprt/isofs.h> /* For UpdateAdditions. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass Guest;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Abstract base class for a lenghtly per-session operation which
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync * runs in a Main worker thread.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass GuestSessionTask
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestSessionTask(GuestSession *pSession);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual ~GuestSessionTask(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual int Run(void) = 0;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync virtual int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress) = 0;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int getGuestProperty(const ComObjPtr<Guest> &pGuest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &strPath, Utf8Str &strValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int setProgress(ULONG uPercent);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int setProgressSuccess(void);
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync HRESULT setProgressErrorMsg(HRESULT hr, const Utf8Str &strMsg);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str mDesc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestSession *mSession;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress object for getting updated when running
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * asynchronously. Optional. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComObjPtr<Progress> mProgress;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Task for opening a guest session.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass SessionTaskOpen : public GuestSessionTask
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionTaskOpen(GuestSession *pSession,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uFlags,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uTimeoutMS);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual ~SessionTaskOpen(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int Run(int *pGuestRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session creation flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mFlags;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session creation timeout (in ms). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mTimeoutMS;
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * Task for copying files from host to the guest.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncclass SessionTaskCopyTo : public GuestSessionTask
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync{
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync SessionTaskCopyTo(GuestSession *pSession,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionTaskCopyTo(GuestSession *pSession,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PRTFILE pSourceFile, size_t cbSourceOffset, uint64_t cbSourceSize,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &strDest, uint32_t uFlags);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual ~SessionTaskCopyTo(void);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncpublic:
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync int Run(void);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncprotected:
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync Utf8Str mSource;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PRTFILE mSourceFile;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync size_t mSourceOffset;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint64_t mSourceSize;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str mDest;
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync uint32_t mCopyFileFlags;
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync};
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Task for copying files from guest to the host.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncclass SessionTaskCopyFrom : public GuestSessionTask
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync{
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncpublic:
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync SessionTaskCopyFrom(GuestSession *pSession,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync virtual ~SessionTaskCopyFrom(void);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncpublic:
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync int Run(void);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncprotected:
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync Utf8Str mSource;
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync Utf8Str mDest;
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync uint32_t mFlags;
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync};
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Task for automatically updating the Guest Additions on the guest.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncclass SessionTaskUpdateAdditions : public GuestSessionTask
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync{
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsyncpublic:
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync SessionTaskUpdateAdditions(GuestSession *pSession,
b8aaccdbdd143967110d499670605dd7ff6ecc72vboxsync const Utf8Str &strSource, const ProcessArguments &aArguments,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync uint32_t uFlags);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual ~SessionTaskUpdateAdditions(void);
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int Run(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static int taskThread(RTTHREAD Thread, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Suported OS types for automatic updating.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync enum eOSType
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync eOSType_Unknown = 0,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync eOSType_Windows = 1,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync eOSType_Linux = 2,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync eOSType_Solaris = 3
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Structure representing a file to
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * get off the .ISO, copied to the guest.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync struct InstallerFile
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync InstallerFile(const Utf8Str &aSource,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &aDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t aFlags = 0)
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync : strSource(aSource),
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync strDest(aDest),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fFlags(aFlags) { }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync InstallerFile(const Utf8Str &aSource,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const Utf8Str &aDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t aFlags,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestProcessStartupInfo startupInfo)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : strSource(aSource),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync strDest(aDest),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fFlags(aFlags),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mProcInfo(startupInfo)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mProcInfo.mCommand = strDest;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (mProcInfo.mName.isEmpty())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mProcInfo.mName = strDest;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Source file on .ISO. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str strSource;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Destination file on the guest. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str strDest;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** File flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t fFlags;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Optional arguments if this file needs to be
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * executed. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestProcessStartupInfo mProcInfo;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int addProcessArguments(ProcessArguments &aArgumentsDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ProcessArguments &aArgumentsSource);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int copyFileToGuest(GuestSession *pSession, PRTISOFSFILE pISO,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str const &strFileSource, const Utf8Str &strFileDest,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fOptional, uint32_t *pcbSize);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int runFileOnGuest(GuestSession *pSession, GuestProcessStartupInfo &procInfo);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Files to handle. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync std::vector<InstallerFile> mFiles;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The (optionally) specified Guest Additions .ISO on the host
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * which will be used for the updating process. */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync Utf8Str mSource;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /** (Optional) installer command line arguments. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ProcessArguments mArguments;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Update flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mFlags;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Guest session implementation.
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass ATL_NO_VTABLE GuestSession :
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync public VirtualBoxBase,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public GuestBase,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOX_SCRIPTABLE_IMPL(IGuestSession)
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync{
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name COM and internal init/term/mapping cruft.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @{ */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestSession, IGuestSession)
6b022885f2cb6a55167609edecd89570cd80001dvboxsync DECLARE_NOT_AGGREGATABLE(GuestSession)
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync BEGIN_COM_MAP(GuestSession)
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestSession)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync END_COM_MAP()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_EMPTY_CTOR_DTOR(GuestSession)
6b022885f2cb6a55167609edecd89570cd80001dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int init(Guest *pGuest, const GuestSessionStartupInfo &ssInfo, const GuestCredentials &guestCreds);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void uninit(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT FinalConstruct(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void FinalRelease(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name IGuestSession properties.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(User))(BSTR *aName);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Domain))(BSTR *aDomain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Name))(BSTR *aName);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Id))(ULONG *aId);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Status))(GuestSessionStatus_T *aStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Timeout))(ULONG *aTimeout);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMSETTER(Timeout))(ULONG aTimeout);
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 /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name IGuestSession methods.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(Close)(void);
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);
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync STDMETHOD(DirectoryRemove)(IN_BSTR aPath);
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(EnvironmentClear)(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(EnvironmentGet)(IN_BSTR aName, BSTR *aValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(EnvironmentSet)(IN_BSTR aName, IN_BSTR aValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(EnvironmentUnset)(IN_BSTR aName);
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(FileRemove)(IN_BSTR aPath);
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 IGuestProcess **aProcess);
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(SymlinkRemoveDirectory)(IN_BSTR aPath);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(SymlinkRemoveFile)(IN_BSTR aFile);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(WaitFor)(ULONG aWaitFlags, ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(WaitForArray)(ComSafeArrayIn(GuestSessionWaitForFlag_T, aFlags), ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @name Public internal methods.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
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 fileRemoveFromList(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 const GuestCredentials &getCredentials(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const GuestEnvironment &getEnvironment(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync EventSource *getEventSource(void) { return mEventSource; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str getName(void);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ULONG getId(void) { return mData.mSession.mID; }
0e77737b0ba913683e614db11463b31ca67aacbevboxsync static Utf8Str guestErrorToString(int guestRc);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync HRESULT isReadyExternal(void);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync int onRemove(void);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync int onSessionStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync int startSessionInternal(int *pGuestRc);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync int startSessionAsync(void);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync static DECLCALLBACK(int)
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync startSessionThread(RTTHREAD Thread, void *pvUser);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync Guest *getParent(void) { return mParent; }
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync uint32_t getProtocolVersion(void) { return mData.mProtocolVersion; }
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync int pathRenameInternal(const Utf8Str &strSource, const Utf8Str &strDest, uint32_t uFlags, int *pGuestRc);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync int processRemoveFromList(GuestProcess *pProcess);
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 queryInfo(void);
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);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync /** Pointer to the parent (Guest). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Guest *mParent;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
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 *
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.
e98b0df488a9ec7732b1d5c2e735ce707842e975vboxsync */
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync const ComObjPtr<EventSource> mEventSource;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync struct Data
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync /** The session credentials. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestCredentials mCredentials;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The session's startup info. */
6b022885f2cb6a55167609edecd89570cd80001dvboxsync GuestSessionStartupInfo mSession;
6b022885f2cb6a55167609edecd89570cd80001dvboxsync /** The session's current status. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestSessionStatus_T mStatus;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The session's environment block. Can be
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * overwritten/extended by ProcessCreate(Ex). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GuestEnvironment mEnvironment;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Directory objects bound to this session. */
6b022885f2cb6a55167609edecd89570cd80001dvboxsync SessionDirectories mDirectories;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** File objects bound to this session. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionFiles mFiles;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync /** Process objects bound to this session. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionProcesses mProcesses;
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 uint32_t mProtocolVersion;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Session timeout (in ms). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mTimeout;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Total number of session objects (processes,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * files, ...). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t mNumObjects;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** The last returned session status
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync * returned from the guest side. */
65eb75d34c65a45c0945358715253950d63e440cvboxsync int mRC;
65eb75d34c65a45c0945358715253950d63e440cvboxsync } mData;
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync};
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync#endif /* !____H_GUESTSESSIONIMPL */
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync