VirtualBox

Changeset 50709 in vbox


Ignore:
Timestamp:
Mar 5, 2014 6:29:52 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
92670
Message:

6813 src-client/GuestProcessImpl.cpp

Location:
trunk/src/VBox/Main
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/GuestProcessImpl.h

    r50618 r50709  
    2020#define ____H_GUESTPROCESSIMPL
    2121
    22 #include "VirtualBoxBase.h"
    2322#include "GuestCtrlImplPrivate.h"
     23#include "GuestProcessWrap.h"
    2424
    2525class Console;
     
    3030 */
    3131class ATL_NO_VTABLE GuestProcess :
    32     public VirtualBoxBase,
    33     public GuestObject,
    34     VBOX_SCRIPTABLE_IMPL(IGuestProcess)
     32    public GuestProcessWrap,
     33    public GuestObject
    3534{
    3635public:
    3736    /** @name COM and internal init/term/mapping cruft.
    3837     * @{ */
    39     VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestProcess, IGuestProcess)
    40     DECLARE_NOT_AGGREGATABLE(GuestProcess)
    41     DECLARE_PROTECT_FINAL_CONSTRUCT()
    42     BEGIN_COM_MAP(GuestProcess)
    43         VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestProcess)
    44         COM_INTERFACE_ENTRY(IProcess)
    45     END_COM_MAP()
    4638    DECLARE_EMPTY_CTOR_DTOR(GuestProcess)
    4739
     
    5244    /** @}  */
    5345
    54     /** @name IProcess interface.
    55      * @{ */
    56     STDMETHOD(COMGETTER(Arguments))(ComSafeArrayOut(BSTR, aArguments));
    57     STDMETHOD(COMGETTER(Environment))(ComSafeArrayOut(BSTR, aEnvironment));
    58     STDMETHOD(COMGETTER(EventSource))(IEventSource ** aEventSource);
    59     STDMETHOD(COMGETTER(ExecutablePath))(BSTR *aExecutablePath);
    60     STDMETHOD(COMGETTER(ExitCode))(LONG *aExitCode);
    61     STDMETHOD(COMGETTER(Name))(BSTR *aName);
    62     STDMETHOD(COMGETTER(PID))(ULONG *aPID);
    63     STDMETHOD(COMGETTER(Status))(ProcessStatus_T *aStatus);
    64 
    65     STDMETHOD(Read)(ULONG aHandle, ULONG aToRead, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData));
    66     STDMETHOD(Terminate)(void);
    67     STDMETHOD(WaitFor)(ULONG aWaitFlags, ULONG aTimeoutMS, ProcessWaitResult_T *aReason);
    68     STDMETHOD(WaitForArray)(ComSafeArrayIn(ProcessWaitForFlag_T, aFlags), ULONG aTimeoutMS, ProcessWaitResult_T *aReason);
    69     STDMETHOD(Write)(ULONG aHandle, ULONG aFlags, ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten);
    70     STDMETHOD(WriteArray)(ULONG aHandle, ComSafeArrayIn(ProcessInputFlag_T, aFlags), ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten);
    71     /** @}  */
    7246
    7347public:
     
    7549     * @{ */
    7650    int i_callbackDispatcher(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCb);
    77     inline int checkPID(uint32_t uPID);
    78     static Utf8Str guestErrorToString(int guestRc);
     51    inline int i_checkPID(uint32_t uPID);
     52    static Utf8Str i_guestErrorToString(int guestRc);
    7953    int i_onRemove(void);
    80     int readData(uint32_t uHandle, uint32_t uSize, uint32_t uTimeoutMS, void *pvData, size_t cbData, uint32_t *pcbRead, int *pGuestRc);
    81     static HRESULT setErrorExternal(VirtualBoxBase *pInterface, int guestRc);
    82     int startProcess(uint32_t uTimeoutMS, int *pGuestRc);
    83     int startProcessAsync(void);
    84     int terminateProcess(uint32_t uTimeoutMS, int *pGuestRc);
    85     static ProcessWaitResult_T waitFlagsToResultEx(uint32_t fWaitFlags, ProcessStatus_T oldStatus, ProcessStatus_T newStatus, uint32_t uProcFlags, uint32_t uProtocol);
    86     ProcessWaitResult_T waitFlagsToResult(uint32_t fWaitFlags);
    87     int waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS, ProcessWaitResult_T &waitResult, int *pGuestRc);
    88     int waitForInputNotify(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS, ProcessInputStatus_T *pInputStatus, uint32_t *pcbProcessed);
    89     int waitForOutput(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS, void* pvData, size_t cbData, uint32_t *pcbRead);
    90     int waitForStatusChange(GuestWaitEvent *pEvent, uint32_t uTimeoutMS, ProcessStatus_T *pProcessStatus, int *pGuestRc);
    91     static bool waitResultImpliesEx(ProcessWaitResult_T waitResult, ProcessStatus_T procStatus, uint32_t uProcFlags, uint32_t uProtocol);
    92     int writeData(uint32_t uHandle, uint32_t uFlags, void *pvData, size_t cbData, uint32_t uTimeoutMS, uint32_t *puWritten, int *pGuestRc);
     54    int i_readData(uint32_t uHandle, uint32_t uSize, uint32_t uTimeoutMS, void *pvData, size_t cbData, uint32_t *pcbRead, int *pGuestRc);
     55    static HRESULT i_setErrorExternal(VirtualBoxBase *pInterface, int guestRc);
     56    int i_startProcess(uint32_t uTimeoutMS, int *pGuestRc);
     57    int i_startProcessAsync(void);
     58    int i_terminateProcess(uint32_t uTimeoutMS, int *pGuestRc);
     59    static ProcessWaitResult_T i_waitFlagsToResultEx(uint32_t fWaitFlags, ProcessStatus_T oldStatus, ProcessStatus_T newStatus, uint32_t uProcFlags, uint32_t uProtocol);
     60    ProcessWaitResult_T i_waitFlagsToResult(uint32_t fWaitFlags);
     61    int i_waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS, ProcessWaitResult_T &waitResult, int *pGuestRc);
     62    int i_waitForInputNotify(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS, ProcessInputStatus_T *pInputStatus, uint32_t *pcbProcessed);
     63    int i_waitForOutput(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS, void* pvData, size_t cbData, uint32_t *pcbRead);
     64    int i_waitForStatusChange(GuestWaitEvent *pEvent, uint32_t uTimeoutMS, ProcessStatus_T *pProcessStatus, int *pGuestRc);
     65    static bool i_waitResultImpliesEx(ProcessWaitResult_T waitResult, ProcessStatus_T procStatus, uint32_t uProcFlags, uint32_t uProtocol);
     66    int i_writeData(uint32_t uHandle, uint32_t uFlags, void *pvData, size_t cbData, uint32_t uTimeoutMS, uint32_t *puWritten, int *pGuestRc);
    9367    /** @}  */
    9468
     
    9670    /** @name Protected internal methods.
    9771     * @{ */
    98     inline bool isAlive(void);
    99     inline bool hasEnded(void);
    100     int onGuestDisconnected(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
    101     int onProcessInputStatus(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
    102     int onProcessNotifyIO(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
    103     int onProcessStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
    104     int onProcessOutput(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
    105     int prepareExecuteEnv(const char *pszEnv, void **ppvList, ULONG *pcbList, ULONG *pcEnvVars);
    106     int setProcessStatus(ProcessStatus_T procStatus, int procRc);
    107     static DECLCALLBACK(int) startProcessThread(RTTHREAD Thread, void *pvUser);
     72    inline bool i_isAlive(void);
     73    inline bool i_hasEnded(void);
     74    int i_onGuestDisconnected(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
     75    int i_onProcessInputStatus(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
     76    int i_onProcessNotifyIO(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
     77    int i_onProcessStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
     78    int i_onProcessOutput(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData);
     79    int i_prepareExecuteEnv(const char *pszEnv, void **ppvList, ULONG *pcbList, ULONG *pcEnvVars);
     80    int i_setProcessStatus(ProcessStatus_T procStatus, int procRc);
     81    static DECLCALLBACK(int) i_startProcessThread(RTTHREAD Thread, void *pvUser);
    10882    /** @}  */
    10983
    11084private:
     85    /** Wrapped @name IProcess data .
     86     * @{ */
     87     HRESULT getArguments(std::vector<com::Utf8Str> &aArguments);
     88     HRESULT getEnvironment(std::vector<com::Utf8Str> &aEnvironment);
     89     HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
     90     HRESULT getExecutablePath(com::Utf8Str &aExecutablePath);
     91     HRESULT getExitCode(LONG *aExitCode);
     92     HRESULT getName(com::Utf8Str &aName);
     93     HRESULT getPID(ULONG *aPID);
     94     HRESULT getStatus(ProcessStatus_T *aStatus);
     95
     96    /** Wrapped @name IProcess methods.
     97     * @{ */
     98     HRESULT waitFor(ULONG aWaitFor,
     99                     ULONG aTimeoutMS,
     100                     ProcessWaitResult_T *aReason);
     101     HRESULT waitForArray(const std::vector<ProcessWaitForFlag_T> &aWaitFor,
     102                          ULONG aTimeoutMS,
     103                          ProcessWaitResult_T *aReason);
     104     HRESULT read(ULONG aHandle,
     105                  ULONG aToRead,
     106                  ULONG aTimeoutMS,
     107                  std::vector<BYTE> &aData);
     108     HRESULT write(ULONG aHandle,
     109                   ULONG aFlags,
     110                   const std::vector<BYTE> &aData,
     111                   ULONG aTimeoutMS,
     112                   ULONG *aWritten);
     113     HRESULT writeArray(ULONG aHandle,
     114                        const std::vector<ProcessInputFlag_T> &aFlags,
     115                        const std::vector<BYTE> &aData,
     116                        ULONG aTimeoutMS,
     117                        ULONG *aWritten);
     118     HRESULT terminate();
    111119
    112120    /**
     
    160168    int Init(GuestSession *pGuestSession, const GuestProcessStartupInfo &startupInfo, bool fAsync, int *pGuestRc);
    161169
    162     GuestProcessStream &GetStdOut(void) { return mStdOut; }
    163 
    164     GuestProcessStream &GetStdErr(void) { return mStdErr; }
    165 
    166     int Wait(uint32_t fFlags, int *pGuestRc);
    167 
    168     int WaitEx(uint32_t fFlags, GuestProcessStreamBlock *pStreamBlock, int *pGuestRc);
    169 
    170     int GetCurrentBlock(uint32_t uHandle, GuestProcessStreamBlock &strmBlock);
    171 
    172     bool IsRunning(void);
    173 
    174     static int Run(GuestSession *pGuestSession, const GuestProcessStartupInfo &startupInfo, int *pGuestRc);
    175 
    176     static int RunEx(GuestSession *pGuestSession, const GuestProcessStartupInfo &startupInfo, GuestCtrlStreamObjects *pStrmOutObjects,
    177                      uint32_t cStrmOutObjects, int *pGuestRc);
    178 
    179     int TerminatedOk(LONG *pExitCode);
    180 
    181     int Terminate(uint32_t uTimeoutMS, int *pGuestRc);
     170    GuestProcessStream &i_getStdOut(void) { return mStdOut; }
     171
     172    GuestProcessStream &i_getStdErr(void) { return mStdErr; }
     173
     174    int i_wait(uint32_t fFlags, int *pGuestRc);
     175
     176    int i_waitEx(uint32_t fFlags, GuestProcessStreamBlock *pStreamBlock, int *pGuestRc);
     177
     178    int i_getCurrentBlock(uint32_t uHandle, GuestProcessStreamBlock &strmBlock);
     179
     180    bool i_isRunning(void);
     181
     182    static int i_run(GuestSession *pGuestSession, const GuestProcessStartupInfo &startupInfo, int *pGuestRc);
     183
     184    static int i_runEx(GuestSession *pGuestSession, const GuestProcessStartupInfo &startupInfo, GuestCtrlStreamObjects *pStrmOutObjects,
     185                       uint32_t cStrmOutObjects, int *pGuestRc);
     186
     187    int i_terminatedOk(LONG *pExitCode);
     188
     189    int i_terminate(uint32_t uTimeoutMS, int *pGuestRc);
    182190
    183191protected:
  • trunk/src/VBox/Main/src-client/GuestDirectoryImpl.cpp

    r50618 r50709  
    276276
    277277    int guestRc;
    278     int rc = mData.mProcessTool.Terminate(30 * 1000, &guestRc);
     278    int rc = mData.mProcessTool.i_terminate(30 * 1000, &guestRc);
    279279    if (RT_FAILURE(rc))
    280280    {
     
    282282        {
    283283            case VERR_GSTCTL_GUEST_ERROR:
    284                 hr = GuestProcess::setErrorExternal(this, guestRc);
     284                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    285285                break;
    286286
     
    321321    int guestRc;
    322322
    323     int rc = mData.mProcessTool.WaitEx(GUESTPROCESSTOOL_FLAG_STDOUT_BLOCK,
    324                                        &curBlock, &guestRc);
     323    int rc = mData.mProcessTool.i_waitEx(GUESTPROCESSTOOL_FLAG_STDOUT_BLOCK,
     324                                         &curBlock, &guestRc);
    325325
    326326    /*
     
    329329     */
    330330    if (   RT_SUCCESS(rc)
    331         && !mData.mProcessTool.IsRunning())
    332     {
    333         rc = mData.mProcessTool.TerminatedOk(NULL /* Exit code */);
     331        && !mData.mProcessTool.i_isRunning())
     332    {
     333        rc = mData.mProcessTool.i_terminatedOk(NULL /* Exit code */);
    334334        if (rc == VERR_NOT_EQUAL)
    335335            rc = VERR_ACCESS_DENIED;
     
    379379        {
    380380            case VERR_GSTCTL_GUEST_ERROR:
    381                 hr = GuestProcess::setErrorExternal(this, guestRc);
     381                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    382382                break;
    383383
  • trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp

    r50618 r50709  
    6565    virtual ~GuestProcessTask(void) { }
    6666
    67     int rc(void) const { return mRC; }
    68     bool isOk(void) const { return RT_SUCCESS(mRC); }
    69     const ComObjPtr<GuestProcess> &Process(void) const { return mProcess; }
     67    int i_rc(void) const { return mRC; }
     68    bool i_isOk(void) const { return RT_SUCCESS(mRC); }
     69    const ComObjPtr<GuestProcess> &i_process(void) const { return mProcess; }
    7070
    7171protected:
     
    271271    /* Terminate process if not already done yet. */
    272272    int guestRc = VINF_SUCCESS;
    273     int vrc = terminateProcess(30 * 1000, &guestRc); /** @todo Make timeouts configurable. */
     273    int vrc = i_terminateProcess(30 * 1000, &guestRc); /** @todo Make timeouts configurable. */
    274274    /* Note: Don't return here yet; first uninit all other stuff in
    275275     *       case of failure. */
     
    284284// implementation of public getters/setters for attributes
    285285/////////////////////////////////////////////////////////////////////////////
    286 
    287 STDMETHODIMP GuestProcess::COMGETTER(Arguments)(ComSafeArrayOut(BSTR, aArguments))
     286HRESULT GuestProcess::getArguments(std::vector<com::Utf8Str> &aArguments)
    288287{
    289288#ifndef VBOX_WITH_GUEST_CONTROL
     
    291290#else
    292291    LogFlowThisFuncEnter();
    293 
    294     CheckComArgOutSafeArrayPointerValid(aArguments);
    295 
    296     AutoCaller autoCaller(this);
    297     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    298292
    299293    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     
    304298         it != mData.mProcess.mArguments.end();
    305299         it++, s++)
    306     {
    307         Bstr tmp = *it;
    308         tmp.cloneTo(&collection[s]);
    309     }
    310 
    311     collection.detachTo(ComSafeArrayOutArg(aArguments));
     300         aArguments[s] = (*it);
    312301
    313302    return S_OK;
     
    315304}
    316305
    317 STDMETHODIMP GuestProcess::COMGETTER(Environment)(ComSafeArrayOut(BSTR, aEnvironment))
     306HRESULT GuestProcess::getEnvironment(std::vector<com::Utf8Str> &aEnvironment)
    318307{
    319308#ifndef VBOX_WITH_GUEST_CONTROL
     
    322311    LogFlowThisFuncEnter();
    323312
    324     CheckComArgOutSafeArrayPointerValid(aEnvironment);
    325 
    326     AutoCaller autoCaller(this);
    327     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    328 
    329313    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    330314
    331315    com::SafeArray<BSTR> arguments(mData.mProcess.mEnvironment.Size());
    332316    for (size_t i = 0; i < arguments.size(); i++)
    333     {
    334         Bstr tmp = mData.mProcess.mEnvironment.Get(i);
    335         tmp.cloneTo(&arguments[i]);
    336     }
    337     arguments.detachTo(ComSafeArrayOutArg(aEnvironment));
     317        aEnvironment[i] = mData.mProcess.mEnvironment.Get(i);
    338318
    339319    return S_OK;
     
    341321}
    342322
    343 STDMETHODIMP GuestProcess::COMGETTER(EventSource)(IEventSource ** aEventSource)
     323HRESULT GuestProcess::getEventSource(ComPtr<IEventSource> &aEventSource)
    344324{
    345325#ifndef VBOX_WITH_GUEST_CONTROL
     
    348328    LogFlowThisFuncEnter();
    349329
    350     CheckComArgOutPointerValid(aEventSource);
    351 
    352     AutoCaller autoCaller(this);
    353     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    354 
    355330    // no need to lock - lifetime constant
    356     mEventSource.queryInterfaceTo(aEventSource);
     331    mEventSource.queryInterfaceTo(aEventSource.asOutParam());
    357332
    358333    LogFlowThisFuncLeave();
     
    361336}
    362337
    363 STDMETHODIMP GuestProcess::COMGETTER(ExecutablePath)(BSTR *aExecutablePath)
     338HRESULT GuestProcess::getExecutablePath(com::Utf8Str &aExecutablePath)
    364339{
    365340#ifndef VBOX_WITH_GUEST_CONTROL
     
    368343    LogFlowThisFuncEnter();
    369344
    370     CheckComArgOutPointerValid(aExecutablePath);
    371 
    372     AutoCaller autoCaller(this);
    373     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    374 
    375345    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    376346
    377     mData.mProcess.mCommand.cloneTo(aExecutablePath);
     347    aExecutablePath = mData.mProcess.mCommand;
    378348
    379349    return S_OK;
     
    381351}
    382352
    383 STDMETHODIMP GuestProcess::COMGETTER(ExitCode)(LONG *aExitCode)
     353HRESULT GuestProcess::getExitCode(LONG *aExitCode)
    384354{
    385355#ifndef VBOX_WITH_GUEST_CONTROL
     
    388358    LogFlowThisFuncEnter();
    389359
    390     CheckComArgOutPointerValid(aExitCode);
    391 
    392     AutoCaller autoCaller(this);
    393     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    394 
    395360    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    396361
     
    401366}
    402367
    403 STDMETHODIMP GuestProcess::COMGETTER(Name)(BSTR *aName)
     368HRESULT GuestProcess::getName(com::Utf8Str &aName)
    404369{
    405370#ifndef VBOX_WITH_GUEST_CONTROL
     
    408373    LogFlowThisFuncEnter();
    409374
    410     CheckComArgOutPointerValid(aName);
    411 
    412     AutoCaller autoCaller(this);
    413     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    414 
    415375    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    416376
    417     mData.mProcess.mName.cloneTo(aName);
     377    aName = mData.mProcess.mName;
    418378
    419379    return S_OK;
     
    421381}
    422382
    423 STDMETHODIMP GuestProcess::COMGETTER(PID)(ULONG *aPID)
     383HRESULT GuestProcess::getPID(ULONG *aPID)
    424384{
    425385#ifndef VBOX_WITH_GUEST_CONTROL
     
    428388    LogFlowThisFuncEnter();
    429389
    430     CheckComArgOutPointerValid(aPID);
    431 
    432     AutoCaller autoCaller(this);
    433     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    434 
    435390    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    436391
     
    441396}
    442397
    443 STDMETHODIMP GuestProcess::COMGETTER(Status)(ProcessStatus_T *aStatus)
     398HRESULT GuestProcess::getStatus(ProcessStatus_T *aStatus)
    444399{
    445400#ifndef VBOX_WITH_GUEST_CONTROL
     
    447402#else
    448403    LogFlowThisFuncEnter();
    449 
    450     AutoCaller autoCaller(this);
    451     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    452404
    453405    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     
    476428        case GUEST_DISCONNECTED:
    477429        {
    478             vrc = onGuestDisconnected(pCbCtx, pSvcCb);
     430            vrc = i_onGuestDisconnected(pCbCtx, pSvcCb);
    479431            break;
    480432        }
     
    482434        case GUEST_EXEC_STATUS:
    483435        {
    484             vrc = onProcessStatusChange(pCbCtx, pSvcCb);
     436            vrc = i_onProcessStatusChange(pCbCtx, pSvcCb);
    485437            break;
    486438        }
     
    488440        case GUEST_EXEC_OUTPUT:
    489441        {
    490             vrc = onProcessOutput(pCbCtx, pSvcCb);
     442            vrc = i_onProcessOutput(pCbCtx, pSvcCb);
    491443            break;
    492444        }
     
    494446        case GUEST_EXEC_INPUT_STATUS:
    495447        {
    496             vrc = onProcessInputStatus(pCbCtx, pSvcCb);
     448            vrc = i_onProcessInputStatus(pCbCtx, pSvcCb);
    497449            break;
    498450        }
     
    526478 * @param   uPID                    PID to check.
    527479 */
    528 inline int GuestProcess::checkPID(uint32_t uPID)
     480inline int GuestProcess::i_checkPID(uint32_t uPID)
    529481{
    530482    int rc = VINF_SUCCESS;
     
    545497
    546498/* static */
    547 Utf8Str GuestProcess::guestErrorToString(int guestRc)
     499Utf8Str GuestProcess::i_guestErrorToString(int guestRc)
    548500{
    549501    Utf8Str strError;
     
    612564}
    613565
    614 inline bool GuestProcess::isAlive(void)
     566inline bool GuestProcess::i_isAlive(void)
    615567{
    616568    return (   mData.mStatus == ProcessStatus_Started
     
    619571}
    620572
    621 inline bool GuestProcess::hasEnded(void)
     573inline bool GuestProcess::i_hasEnded(void)
    622574{
    623575    return (   mData.mStatus == ProcessStatus_TerminatedNormally
     
    630582}
    631583
    632 int GuestProcess::onGuestDisconnected(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
     584int GuestProcess::i_onGuestDisconnected(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
    633585{
    634586    AssertPtrReturn(pCbCtx, VERR_INVALID_POINTER);
    635587    AssertPtrReturn(pSvcCbData, VERR_INVALID_POINTER);
    636588
    637     int vrc = setProcessStatus(ProcessStatus_Down, VINF_SUCCESS);
     589    int vrc = i_setProcessStatus(ProcessStatus_Down, VINF_SUCCESS);
    638590
    639591    LogFlowFuncLeaveRC(vrc);
     
    641593}
    642594
    643 int GuestProcess::onProcessInputStatus(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
     595int GuestProcess::i_onProcessInputStatus(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
    644596{
    645597    AssertPtrReturn(pCbCtx, VERR_INVALID_POINTER);
     
    664616                     dataCb.uPID, dataCb.uStatus, dataCb.uFlags, dataCb.uProcessed));
    665617
    666     vrc = checkPID(dataCb.uPID);
     618    vrc = i_checkPID(dataCb.uPID);
    667619    if (RT_SUCCESS(vrc))
    668620    {
     
    708660}
    709661
    710 int GuestProcess::onProcessNotifyIO(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
     662int GuestProcess::i_onProcessNotifyIO(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
    711663{
    712664    AssertPtrReturn(pCbCtx, VERR_INVALID_POINTER);
     
    716668}
    717669
    718 int GuestProcess::onProcessStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
     670int GuestProcess::i_onProcessStatusChange(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
    719671{
    720672    AssertPtrReturn(pCbCtx, VERR_INVALID_POINTER);
     
    738690                     dataCb.uPID, dataCb.uStatus, dataCb.uFlags));
    739691
    740     vrc = checkPID(dataCb.uPID);
     692    vrc = i_checkPID(dataCb.uPID);
    741693    if (RT_SUCCESS(vrc))
    742694    {
     
    817769
    818770        /* Set the process status. */
    819         int rc2 = setProcessStatus(procStatus, procRc);
     771        int rc2 = i_setProcessStatus(procStatus, procRc);
    820772        if (RT_SUCCESS(vrc))
    821773            vrc = rc2;
     
    826778}
    827779
    828 int GuestProcess::onProcessOutput(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
     780int GuestProcess::i_onProcessOutput(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRLHOSTCALLBACK pSvcCbData)
    829781{
    830782    AssertPtrReturn(pSvcCbData, VERR_INVALID_POINTER);
     
    847799                     dataCb.uPID, dataCb.uHandle, dataCb.uFlags, dataCb.pvData, dataCb.cbData));
    848800
    849     vrc = checkPID(dataCb.uPID);
     801    vrc = i_checkPID(dataCb.uPID);
    850802    if (RT_SUCCESS(vrc))
    851803    {
     
    890842}
    891843
    892 int GuestProcess::readData(uint32_t uHandle, uint32_t uSize, uint32_t uTimeoutMS,
    893                            void *pvData, size_t cbData, uint32_t *pcbRead, int *pGuestRc)
     844int GuestProcess::i_readData(uint32_t uHandle, uint32_t uSize, uint32_t uTimeoutMS,
     845                             void *pvData, size_t cbData, uint32_t *pcbRead, int *pGuestRc)
    894846{
    895847    LogFlowThisFunc(("uPID=%RU32, uHandle=%RU32, uSize=%RU32, uTimeoutMS=%RU32, pvData=%p, cbData=%RU32, pGuestRc=%p\n",
     
    961913
    962914    if (RT_SUCCESS(vrc))
    963         vrc = waitForOutput(pEvent, uHandle, uTimeoutMS,
    964                             pvData, cbData, pcbRead);
     915        vrc = i_waitForOutput(pEvent, uHandle, uTimeoutMS,
     916                              pvData, cbData, pcbRead);
    965917
    966918    unregisterWaitEvent(pEvent);
     
    971923
    972924/* Does not do locking; caller is responsible for that! */
    973 int GuestProcess::setProcessStatus(ProcessStatus_T procStatus, int procRc)
     925int GuestProcess::i_setProcessStatus(ProcessStatus_T procStatus, int procRc)
    974926{
    975927    LogFlowThisFuncEnter();
     
    1004956            hr = errorInfo->initEx(VBOX_E_IPRT_ERROR, mData.mLastError,
    1005957                                   COM_IIDOF(IGuestProcess), getComponentName(),
    1006                                    guestErrorToString(mData.mLastError));
     958                                   i_guestErrorToString(mData.mLastError));
    1007959            ComAssertComRC(hr);
    1008960        }
     
    1036988
    1037989/* static */
    1038 HRESULT GuestProcess::setErrorExternal(VirtualBoxBase *pInterface, int guestRc)
     990HRESULT GuestProcess::i_setErrorExternal(VirtualBoxBase *pInterface, int guestRc)
    1039991{
    1040992    AssertPtr(pInterface);
    1041993    AssertMsg(RT_FAILURE(guestRc), ("Guest rc does not indicate a failure when setting error\n"));
    1042994
    1043     return pInterface->setError(VBOX_E_IPRT_ERROR, GuestProcess::guestErrorToString(guestRc).c_str());
    1044 }
    1045 
    1046 int GuestProcess::startProcess(uint32_t uTimeoutMS, int *pGuestRc)
     995    return pInterface->setError(VBOX_E_IPRT_ERROR, GuestProcess::i_guestErrorToString(guestRc).c_str());
     996}
     997
     998int GuestProcess::i_startProcess(uint32_t uTimeoutMS, int *pGuestRc)
    1047999{
    10481000    LogFlowThisFunc(("uTimeoutMS=%RU32, procCmd=%s, procTimeoutMS=%RU32, procFlags=%x, sessionID=%RU32\n",
     
    11721124        if (RT_FAILURE(vrc))
    11731125        {
    1174             int rc2 = setProcessStatus(ProcessStatus_Error, vrc);
     1126            int rc2 = i_setProcessStatus(ProcessStatus_Error, vrc);
    11751127            AssertRC(rc2);
    11761128        }
     
    11821134
    11831135    if (RT_SUCCESS(vrc))
    1184         vrc = waitForStatusChange(pEvent, uTimeoutMS,
    1185                                   NULL /* Process status */, pGuestRc);
     1136        vrc = i_waitForStatusChange(pEvent, uTimeoutMS,
     1137                                    NULL /* Process status */, pGuestRc);
    11861138    unregisterWaitEvent(pEvent);
    11871139
     
    11901142}
    11911143
    1192 int GuestProcess::startProcessAsync(void)
     1144int GuestProcess::i_startProcessAsync(void)
    11931145{
    11941146    LogFlowThisFuncEnter();
     
    12011153         * worker thread. */
    12021154        std::auto_ptr<GuestProcessStartTask> pTask(new GuestProcessStartTask(this));
    1203         AssertReturn(pTask->isOk(), pTask->rc());
    1204 
    1205         vrc = RTThreadCreate(NULL, GuestProcess::startProcessThread,
     1155        AssertReturn(pTask->i_isOk(), pTask->i_rc());
     1156
     1157        vrc = RTThreadCreate(NULL, GuestProcess::i_startProcessThread,
    12061158                             (void *)pTask.get(), 0,
    12071159                             RTTHREADTYPE_MAIN_WORKER, 0,
     
    12231175
    12241176/* static */
    1225 DECLCALLBACK(int) GuestProcess::startProcessThread(RTTHREAD Thread, void *pvUser)
     1177DECLCALLBACK(int) GuestProcess::i_startProcessThread(RTTHREAD Thread, void *pvUser)
    12261178{
    12271179    LogFlowFunc(("pvUser=%p\n", pvUser));
     
    12301182    AssertPtr(pTask.get());
    12311183
    1232     const ComObjPtr<GuestProcess> pProcess(pTask->Process());
     1184    const ComObjPtr<GuestProcess> pProcess(pTask->i_process());
    12331185    Assert(!pProcess.isNull());
    12341186
     
    12361188    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    12371189
    1238     int vrc = pProcess->startProcess(30 * 1000 /* 30s timeout */,
    1239                                      NULL /* Guest rc, ignored */);
     1190    int vrc = pProcess->i_startProcess(30 * 1000 /* 30s timeout */,
     1191                                       NULL /* Guest rc, ignored */);
    12401192    /* Nothing to do here anymore. */
    12411193
     
    12441196}
    12451197
    1246 int GuestProcess::terminateProcess(uint32_t uTimeoutMS, int *pGuestRc)
     1198int GuestProcess::i_terminateProcess(uint32_t uTimeoutMS, int *pGuestRc)
    12471199{
    12481200    /* pGuestRc is optional. */
     
    12931245            vrc = sendCommand(HOST_EXEC_TERMINATE, i, paParms);
    12941246            if (RT_SUCCESS(vrc))
    1295                 vrc = waitForStatusChange(pEvent, uTimeoutMS,
    1296                                           NULL /* ProcessStatus */, pGuestRc);
     1247                vrc = i_waitForStatusChange(pEvent, uTimeoutMS,
     1248                                            NULL /* ProcessStatus */, pGuestRc);
    12971249            unregisterWaitEvent(pEvent);
    12981250        }
     
    13041256
    13051257/* static */
    1306 ProcessWaitResult_T GuestProcess::waitFlagsToResultEx(uint32_t fWaitFlags,
    1307                                                       ProcessStatus_T oldStatus, ProcessStatus_T newStatus,
    1308                                                       uint32_t uProcFlags, uint32_t uProtocol)
     1258ProcessWaitResult_T GuestProcess::i_waitFlagsToResultEx(uint32_t fWaitFlags,
     1259                                                        ProcessStatus_T oldStatus, ProcessStatus_T newStatus,
     1260                                                        uint32_t uProcFlags, uint32_t uProtocol)
    13091261{
    13101262    ProcessWaitResult_T waitResult = ProcessWaitResult_None;
     
    14031355}
    14041356
    1405 ProcessWaitResult_T GuestProcess::waitFlagsToResult(uint32_t fWaitFlags)
     1357ProcessWaitResult_T GuestProcess::i_waitFlagsToResult(uint32_t fWaitFlags)
    14061358{
    14071359    AssertPtr(mSession);
    1408     return GuestProcess::waitFlagsToResultEx(fWaitFlags,
    1409                                              mData.mStatus /* curStatus */, mData.mStatus /* newStatus */,
    1410                                              mData.mProcess.mFlags, mSession->getProtocolVersion());
    1411 }
    1412 
    1413 int GuestProcess::waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS,
    1414                           ProcessWaitResult_T &waitResult, int *pGuestRc)
     1360    return GuestProcess::i_waitFlagsToResultEx(fWaitFlags,
     1361                                               mData.mStatus /* curStatus */, mData.mStatus /* newStatus */,
     1362                                               mData.mProcess.mFlags, mSession->getProtocolVersion());
     1363}
     1364
     1365int GuestProcess::i_waitFor(uint32_t fWaitFlags, ULONG uTimeoutMS,
     1366                            ProcessWaitResult_T &waitResult, int *pGuestRc)
    14151367{
    14161368    AssertReturn(fWaitFlags, VERR_INVALID_PARAMETER);
     
    14331385    }
    14341386
    1435     waitResult = waitFlagsToResult(fWaitFlags);
     1387    waitResult = i_waitFlagsToResult(fWaitFlags);
    14361388
    14371389    /* No waiting needed? Return immediately using the last set error. */
     
    14831435        }
    14841436
    1485         vrc = waitForStatusChange(pEvent,
     1437        vrc = i_waitForStatusChange(pEvent,
    14861438                                    uTimeoutMS == RT_INDEFINITE_WAIT
    1487                                   ? RT_INDEFINITE_WAIT : uTimeoutMS - (uint32_t)u64ElapsedMS,
    1488                                   &newStatus, pGuestRc);
     1439                                    ? RT_INDEFINITE_WAIT : uTimeoutMS - (uint32_t)u64ElapsedMS,
     1440                                    &newStatus, pGuestRc);
    14891441        if (RT_SUCCESS(vrc))
    14901442        {
    14911443            alock.acquire();
    14921444
    1493             waitResult = waitFlagsToResultEx(fWaitFlags, curStatus, newStatus,
    1494                                              mData.mProcess.mFlags, mSession->getProtocolVersion());
     1445            waitResult = i_waitFlagsToResultEx(fWaitFlags, curStatus, newStatus,
     1446                                               mData.mProcess.mFlags, mSession->getProtocolVersion());
    14951447#ifdef DEBUG
    14961448            LogFlowThisFunc(("Got new status change: fWaitFlags=0x%x, newStatus=%RU32, waitResult=%RU32\n",
     
    15131465}
    15141466
    1515 int GuestProcess::waitForInputNotify(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS,
    1516                                      ProcessInputStatus_T *pInputStatus, uint32_t *pcbProcessed)
     1467int GuestProcess::i_waitForInputNotify(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS,
     1468                                       ProcessInputStatus_T *pInputStatus, uint32_t *pcbProcessed)
    15171469{
    15181470    AssertPtrReturn(pEvent, VERR_INVALID_POINTER);
     
    15491501}
    15501502
    1551 int GuestProcess::waitForOutput(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS,
    1552                                 void *pvData, size_t cbData, uint32_t *pcbRead)
     1503int GuestProcess::i_waitForOutput(GuestWaitEvent *pEvent, uint32_t uHandle, uint32_t uTimeoutMS,
     1504                                  void *pvData, size_t cbData, uint32_t *pcbRead)
    15531505{
    15541506    AssertPtrReturn(pEvent, VERR_INVALID_POINTER);
     
    16311583}
    16321584
    1633 int GuestProcess::waitForStatusChange(GuestWaitEvent *pEvent, uint32_t uTimeoutMS,
    1634                                       ProcessStatus_T *pProcessStatus, int *pGuestRc)
     1585int GuestProcess::i_waitForStatusChange(GuestWaitEvent *pEvent, uint32_t uTimeoutMS,
     1586                                        ProcessStatus_T *pProcessStatus, int *pGuestRc)
    16351587{
    16361588    AssertPtrReturn(pEvent, VERR_INVALID_POINTER);
     
    16771629
    16781630/* static */
    1679 bool GuestProcess::waitResultImpliesEx(ProcessWaitResult_T waitResult,
    1680                                        ProcessStatus_T procStatus, uint32_t uProcFlags,
    1681                                        uint32_t uProtocol)
     1631bool GuestProcess::i_waitResultImpliesEx(ProcessWaitResult_T waitResult,
     1632                                         ProcessStatus_T procStatus, uint32_t uProcFlags,
     1633                                         uint32_t uProtocol)
    16821634{
    16831635    bool fImplies;
     
    17071659}
    17081660
    1709 int GuestProcess::writeData(uint32_t uHandle, uint32_t uFlags,
    1710                             void *pvData, size_t cbData, uint32_t uTimeoutMS, uint32_t *puWritten, int *pGuestRc)
     1661int GuestProcess::i_writeData(uint32_t uHandle, uint32_t uFlags,
     1662                              void *pvData, size_t cbData, uint32_t uTimeoutMS, uint32_t *puWritten, int *pGuestRc)
    17111663{
    17121664    LogFlowThisFunc(("uPID=%RU32, uHandle=%RU32, uFlags=%RU32, pvData=%p, cbData=%RU32, uTimeoutMS=%RU32, puWritten=%p, pGuestRc=%p\n",
     
    17671719    {
    17681720        ProcessInputStatus_T inputStatus;
    1769         vrc = waitForInputNotify(pEvent, uHandle, uTimeoutMS,
    1770                                  &inputStatus, &cbProcessed);
     1721        vrc = i_waitForInputNotify(pEvent, uHandle, uTimeoutMS,
     1722                                   &inputStatus, &cbProcessed);
    17711723        if (RT_SUCCESS(vrc))
    17721724        {
     
    17891741/////////////////////////////////////////////////////////////////////////////
    17901742
    1791 STDMETHODIMP GuestProcess::Read(ULONG aHandle, ULONG aToRead, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData))
     1743HRESULT GuestProcess::read(ULONG aHandle, ULONG aToRead, ULONG aTimeoutMS, std::vector<BYTE> &aData)
    17921744{
    17931745#ifndef VBOX_WITH_GUEST_CONTROL
     
    17981750    if (aToRead == 0)
    17991751        return setError(E_INVALIDARG, tr("The size to read is zero"));
    1800     CheckComArgOutSafeArrayPointerValid(aData);
    1801 
    1802     AutoCaller autoCaller(this);
    1803     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    18041752
    18051753    com::SafeArray<BYTE> data((size_t)aToRead);
     
    18091757
    18101758    uint32_t cbRead; int guestRc;
    1811     int vrc = readData(aHandle, aToRead, aTimeoutMS, data.raw(), aToRead, &cbRead, &guestRc);
     1759    int vrc = i_readData(aHandle, aToRead, aTimeoutMS, data.raw(), aToRead, &cbRead, &guestRc);
    18121760    if (RT_SUCCESS(vrc))
    18131761    {
    18141762        if (data.size() != cbRead)
    18151763            data.resize(cbRead);
    1816         data.detachTo(ComSafeArrayOutArg(aData));
     1764        for(size_t i = 0; i < data.size(); ++i)
     1765            aData[i] = data[i];
    18171766    }
    18181767    else
     
    18211770        {
    18221771            case VERR_GSTCTL_GUEST_ERROR:
    1823                 hr = GuestProcess::setErrorExternal(this, guestRc);
     1772                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    18241773                break;
    18251774
     
    18391788}
    18401789
    1841 STDMETHODIMP GuestProcess::Terminate(void)
     1790HRESULT GuestProcess::terminate()
    18421791{
    18431792#ifndef VBOX_WITH_GUEST_CONTROL
    18441793    ReturnComNotImplemented();
    18451794#else
    1846     LogFlowThisFuncEnter();
    1847 
    1848     AutoCaller autoCaller(this);
    1849     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    18501795
    18511796    HRESULT hr = S_OK;
    18521797
    18531798    int guestRc;
    1854     int vrc = terminateProcess(30 * 1000 /* Timeout in ms */,
    1855                                &guestRc);
     1799    int vrc = i_terminateProcess(30 * 1000 /* Timeout in ms */,
     1800                                 &guestRc);
    18561801    if (RT_FAILURE(vrc))
    18571802    {
     
    18591804        {
    18601805           case VERR_GSTCTL_GUEST_ERROR:
    1861                 hr = GuestProcess::setErrorExternal(this, guestRc);
     1806                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    18621807                break;
    18631808
     
    18881833}
    18891834
    1890 STDMETHODIMP GuestProcess::WaitFor(ULONG aWaitFlags, ULONG aTimeoutMS, ProcessWaitResult_T *aReason)
     1835HRESULT GuestProcess::waitFor(ULONG aWaitFor,
     1836                              ULONG aTimeoutMS,
     1837                              ProcessWaitResult_T *aReason)
     1838{
     1839#ifndef VBOX_WITH_GUEST_CONTROL
     1840    ReturnComNotImplemented();
     1841#else
     1842
     1843    /*
     1844     * Note: Do not hold any locks here while waiting!
     1845     */
     1846    HRESULT hr = S_OK;
     1847
     1848    int guestRc; ProcessWaitResult_T waitResult;
     1849    int vrc = i_waitFor(aWaitFor, aTimeoutMS, waitResult, &guestRc);
     1850    if (RT_SUCCESS(vrc))
     1851    {
     1852        *aReason = waitResult;
     1853    }
     1854    else
     1855    {
     1856        switch (vrc)
     1857        {
     1858            case VERR_GSTCTL_GUEST_ERROR:
     1859                hr = GuestProcess::i_setErrorExternal(this, guestRc);
     1860                break;
     1861
     1862            case VERR_TIMEOUT:
     1863                *aReason = ProcessWaitResult_Timeout;
     1864                break;
     1865
     1866            default:
     1867                hr = setError(VBOX_E_IPRT_ERROR,
     1868                              tr("Waiting for process \"%s\" (PID %RU32) failed: %Rrc"),
     1869                              mData.mProcess.mCommand.c_str(), mData.mPID, vrc);
     1870                break;
     1871        }
     1872    }
     1873
     1874    LogFlowFuncLeaveRC(vrc);
     1875    return hr;
     1876#endif /* VBOX_WITH_GUEST_CONTROL */
     1877}
     1878
     1879HRESULT GuestProcess::waitForArray(const std::vector<ProcessWaitForFlag_T> &aWaitFor, ULONG aTimeoutMS, ProcessWaitResult_T *aReason)
     1880
     1881{
     1882#ifndef VBOX_WITH_GUEST_CONTROL
     1883    ReturnComNotImplemented();
     1884#else
     1885    /*
     1886     * Note: Do not hold any locks here while waiting!
     1887     */
     1888    uint32_t fWaitFor = ProcessWaitForFlag_None;
     1889    for (size_t i = 0; i < aWaitFor.size(); i++)
     1890        fWaitFor |= aWaitFor[i];
     1891
     1892    return WaitFor(fWaitFor, aTimeoutMS, aReason);
     1893#endif /* VBOX_WITH_GUEST_CONTROL */
     1894}
     1895
     1896HRESULT GuestProcess::write(ULONG aHandle, ULONG aFlags, const std::vector<BYTE> &aData,
     1897                            ULONG aTimeoutMS, ULONG *aWritten)
    18911898{
    18921899#ifndef VBOX_WITH_GUEST_CONTROL
     
    18951902    LogFlowThisFuncEnter();
    18961903
    1897     CheckComArgOutPointerValid(aReason);
    1898 
    1899     AutoCaller autoCaller(this);
    1900     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    1901 
    1902     /*
    1903      * Note: Do not hold any locks here while waiting!
    1904      */
    19051904    HRESULT hr = S_OK;
    1906 
    1907     int guestRc; ProcessWaitResult_T waitResult;
    1908     int vrc = waitFor(aWaitFlags, aTimeoutMS, waitResult, &guestRc);
    1909     if (RT_SUCCESS(vrc))
    1910     {
    1911         *aReason = waitResult;
    1912     }
    1913     else
     1905    com::SafeArray<BYTE> data;
     1906    for(size_t i = 0; i < aData.size(); ++i)
     1907        data[i] = aData[i];
     1908    uint32_t cbWritten; int guestRc;
     1909    int vrc = i_writeData(aHandle, aFlags, data.raw(), data.size(), aTimeoutMS, &cbWritten, &guestRc);
     1910    if (RT_FAILURE(vrc))
    19141911    {
    19151912        switch (vrc)
    19161913        {
    19171914            case VERR_GSTCTL_GUEST_ERROR:
    1918                 hr = GuestProcess::setErrorExternal(this, guestRc);
    1919                 break;
    1920 
    1921             case VERR_TIMEOUT:
    1922                 *aReason = ProcessWaitResult_Timeout;
     1915                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    19231916                break;
    19241917
    19251918            default:
    19261919                hr = setError(VBOX_E_IPRT_ERROR,
    1927                               tr("Waiting for process \"%s\" (PID %RU32) failed: %Rrc"),
     1920                              tr("Writing to process \"%s\" (PID %RU32) failed: %Rrc"),
    19281921                              mData.mProcess.mCommand.c_str(), mData.mPID, vrc);
    19291922                break;
    19301923        }
    19311924    }
     1925
     1926    LogFlowThisFunc(("rc=%Rrc, aWritten=%RU32\n", vrc, cbWritten));
     1927
     1928    *aWritten = (ULONG)cbWritten;
    19321929
    19331930    LogFlowFuncLeaveRC(vrc);
     
    19361933}
    19371934
    1938 STDMETHODIMP GuestProcess::WaitForArray(ComSafeArrayIn(ProcessWaitForFlag_T, aFlags), ULONG aTimeoutMS, ProcessWaitResult_T *aReason)
     1935HRESULT GuestProcess::writeArray(ULONG aHandle, const std::vector<ProcessInputFlag_T> &aFlags,
     1936                                 const std::vector<BYTE> &aData, ULONG aTimeoutMS, ULONG *aWritten)
    19391937{
    19401938#ifndef VBOX_WITH_GUEST_CONTROL
     
    19431941    LogFlowThisFuncEnter();
    19441942
    1945     CheckComArgOutPointerValid(aReason);
    1946 
    1947     AutoCaller autoCaller(this);
    1948     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    1949 
    1950     /*
    1951      * Note: Do not hold any locks here while waiting!
    1952      */
    1953     uint32_t fWaitFor = ProcessWaitForFlag_None;
    1954     com::SafeArray<ProcessWaitForFlag_T> flags(ComSafeArrayInArg(aFlags));
    1955     for (size_t i = 0; i < flags.size(); i++)
    1956         fWaitFor |= flags[i];
    1957 
    1958     return WaitFor(fWaitFor, aTimeoutMS, aReason);
    1959 #endif /* VBOX_WITH_GUEST_CONTROL */
    1960 }
    1961 
    1962 STDMETHODIMP GuestProcess::Write(ULONG aHandle, ULONG aFlags,
    1963                                  ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten)
    1964 {
    1965 #ifndef VBOX_WITH_GUEST_CONTROL
    1966     ReturnComNotImplemented();
    1967 #else
    1968     LogFlowThisFuncEnter();
    1969 
    1970     CheckComArgSafeArrayNotNull(aData);
    1971     CheckComArgOutPointerValid(aWritten);
    1972 
    1973     AutoCaller autoCaller(this);
    1974     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    1975 
    1976     com::SafeArray<BYTE> data(ComSafeArrayInArg(aData));
    1977 
    1978     HRESULT hr = S_OK;
    1979 
    1980     uint32_t cbWritten; int guestRc;
    1981     int vrc = writeData(aHandle, aFlags, data.raw(), data.size(), aTimeoutMS, &cbWritten, &guestRc);
    1982     if (RT_FAILURE(vrc))
    1983     {
    1984         switch (vrc)
    1985         {
    1986             case VERR_GSTCTL_GUEST_ERROR:
    1987                 hr = GuestProcess::setErrorExternal(this, guestRc);
    1988                 break;
    1989 
    1990             default:
    1991                 hr = setError(VBOX_E_IPRT_ERROR,
    1992                               tr("Writing to process \"%s\" (PID %RU32) failed: %Rrc"),
    1993                               mData.mProcess.mCommand.c_str(), mData.mPID, vrc);
    1994                 break;
    1995         }
    1996     }
    1997 
    1998     LogFlowThisFunc(("rc=%Rrc, aWritten=%RU32\n", vrc, cbWritten));
    1999 
    2000     *aWritten = (ULONG)cbWritten;
    2001 
    2002     LogFlowFuncLeaveRC(vrc);
    2003     return hr;
    2004 #endif /* VBOX_WITH_GUEST_CONTROL */
    2005 }
    2006 
    2007 STDMETHODIMP GuestProcess::WriteArray(ULONG aHandle, ComSafeArrayIn(ProcessInputFlag_T, aFlags),
    2008                                       ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten)
    2009 {
    2010 #ifndef VBOX_WITH_GUEST_CONTROL
    2011     ReturnComNotImplemented();
    2012 #else
    2013     LogFlowThisFuncEnter();
    2014 
    2015     CheckComArgSafeArrayNotNull(aData);
    2016     CheckComArgOutPointerValid(aWritten);
    2017 
    2018     AutoCaller autoCaller(this);
    2019     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    2020 
    20211943    /*
    20221944     * Note: Do not hold any locks here while writing!
    20231945     */
    20241946    ULONG fWrite = ProcessInputFlag_None;
    2025     com::SafeArray<ProcessInputFlag_T> flags(ComSafeArrayInArg(aFlags));
    2026     for (size_t i = 0; i < flags.size(); i++)
    2027         fWrite |= flags[i];
    2028 
    2029     return Write(aHandle, fWrite, ComSafeArrayInArg(aData), aTimeoutMS, aWritten);
     1947    for (size_t i = 0; i < aFlags.size(); i++)
     1948        fWrite |= aFlags[i];
     1949
     1950    return write(aHandle, fWrite, aData, aTimeoutMS, aWritten);
    20301951#endif /* VBOX_WITH_GUEST_CONTROL */
    20311952}
     
    20411962GuestProcessTool::~GuestProcessTool(void)
    20421963{
    2043     Terminate(30 * 1000, NULL /* pGuestRc */);
     1964    i_terminate(30 * 1000, NULL /* pGuestRc */);
    20441965}
    20451966
     
    20611982    if (RT_SUCCESS(vrc))
    20621983        vrc = fAsync
    2063             ? pProcess->startProcessAsync()
    2064             : pProcess->startProcess(30 * 1000 /* 30s timeout */, pGuestRc);
     1984            ? pProcess->i_startProcessAsync()
     1985            : pProcess->i_startProcess(30 * 1000 /* 30s timeout */, pGuestRc);
    20651986
    20661987    if (   RT_SUCCESS(vrc)
     
    20781999}
    20792000
    2080 int GuestProcessTool::GetCurrentBlock(uint32_t uHandle, GuestProcessStreamBlock &strmBlock)
     2001int GuestProcessTool::i_getCurrentBlock(uint32_t uHandle, GuestProcessStreamBlock &strmBlock)
    20812002{
    20822003    const GuestProcessStream *pStream = NULL;
     
    21032024}
    21042025
    2105 bool GuestProcessTool::IsRunning(void)
     2026bool GuestProcessTool::i_isRunning(void)
    21062027{
    21072028    AssertReturn(!pProcess.isNull(), false);
     
    21222043
    21232044/* static */
    2124 int GuestProcessTool::Run(      GuestSession            *pGuestSession,
    2125                           const GuestProcessStartupInfo &startupInfo,
    2126                                 int                     *pGuestRc)
    2127 {
    2128     return RunEx(pGuestSession, startupInfo,
    2129                  NULL /* pStrmOutObjects */, 0 /* cStrmOutObjects */,
    2130                  pGuestRc);
     2045int GuestProcessTool::i_run(      GuestSession            *pGuestSession,
     2046                            const GuestProcessStartupInfo &startupInfo,
     2047                            int                           *pGuestRc)
     2048{
     2049    return i_runEx(pGuestSession, startupInfo,
     2050                   NULL /* pStrmOutObjects */, 0 /* cStrmOutObjects */,
     2051                   pGuestRc);
    21312052}
    21322053
    21332054/* static */
    2134 int GuestProcessTool::RunEx(      GuestSession            *pGuestSession,
    2135                             const GuestProcessStartupInfo &startupInfo,
    2136                                   GuestCtrlStreamObjects  *pStrmOutObjects,
    2137                                   uint32_t                 cStrmOutObjects,
    2138                                   int                     *pGuestRc)
     2055int GuestProcessTool::i_runEx(      GuestSession            *pGuestSession,
     2056                              const GuestProcessStartupInfo &startupInfo,
     2057                                    GuestCtrlStreamObjects  *pStrmOutObjects,
     2058                                    uint32_t                 cStrmOutObjects,
     2059                                    int                     *pGuestRc)
    21392060{
    21402061    GuestProcessTool procTool; int guestRc;
     
    21472068            {
    21482069                GuestProcessStreamBlock strmBlk;
    2149                 vrc = procTool.WaitEx(  pStrmOutObjects
    2150                                       ? GUESTPROCESSTOOL_FLAG_STDOUT_BLOCK
    2151                                       : GUESTPROCESSTOOL_FLAG_NONE, &strmBlk, &guestRc);
     2070                vrc = procTool.i_waitEx(  pStrmOutObjects
     2071                                        ? GUESTPROCESSTOOL_FLAG_STDOUT_BLOCK
     2072                                        : GUESTPROCESSTOOL_FLAG_NONE, &strmBlk, &guestRc);
    21522073                if (pStrmOutObjects)
    21532074                    pStrmOutObjects->push_back(strmBlk);
     
    21632084    {
    21642085        /* Make sure the process runs until completion. */
    2165         vrc = procTool.Wait(GUESTPROCESSTOOL_FLAG_NONE, &guestRc);
     2086        vrc = procTool.i_wait(GUESTPROCESSTOOL_FLAG_NONE, &guestRc);
    21662087        if (RT_SUCCESS(vrc))
    21672088        {
    2168             guestRc = procTool.TerminatedOk(NULL /* Exit code */);
     2089            guestRc = procTool.i_terminatedOk(NULL /* Exit code */);
    21692090            if (RT_FAILURE(guestRc))
    21702091                vrc = VERR_GSTCTL_GUEST_ERROR;
     
    21792100}
    21802101
    2181 int GuestProcessTool::TerminatedOk(LONG *pExitCode)
     2102int GuestProcessTool::i_terminatedOk(LONG *pExitCode)
    21822103{
    21832104    Assert(!pProcess.isNull());
     
    21852106
    21862107    int vrc;
    2187     if (!IsRunning())
     2108    if (!i_isRunning())
    21882109    {
    21892110        LONG exitCode;
     
    22052126}
    22062127
    2207 int GuestProcessTool::Wait(uint32_t fFlags, int *pGuestRc)
    2208 {
    2209     return WaitEx(fFlags, NULL /* pStrmBlkOut */, pGuestRc);
    2210 }
    2211 
    2212 int GuestProcessTool::WaitEx(uint32_t fFlags, GuestProcessStreamBlock *pStrmBlkOut, int *pGuestRc)
     2128int GuestProcessTool::i_wait(uint32_t fFlags, int *pGuestRc)
     2129{
     2130    return i_waitEx(fFlags, NULL /* pStrmBlkOut */, pGuestRc);
     2131}
     2132
     2133int GuestProcessTool::i_waitEx(uint32_t fFlags, GuestProcessStreamBlock *pStrmBlkOut, int *pGuestRc)
    22132134{
    22142135    LogFlowThisFunc(("fFlags=0x%x, pStreamBlock=%p, pGuestRc=%p\n",
     
    22202141    {
    22212142        AssertPtr(pStrmBlkOut);
    2222         vrc = GetCurrentBlock(OUTPUT_HANDLE_ID_STDOUT, *pStrmBlkOut);
     2143        vrc = i_getCurrentBlock(OUTPUT_HANDLE_ID_STDOUT, *pStrmBlkOut);
    22232144        if (RT_SUCCESS(vrc))
    22242145            return vrc;
     
    22722193        UPDATE_AND_CHECK_ELAPSED_TIME();
    22732194
    2274         vrc = pProcess->waitFor(fWaitFlags, GET_REMAINING_TIME,
    2275                                 waitRes, &guestRc);
     2195        vrc = pProcess->i_waitFor(fWaitFlags, GET_REMAINING_TIME,
     2196                                  waitRes, &guestRc);
    22762197        if (RT_FAILURE(vrc))
    22772198            break;
     
    23312252
    23322253            cbRead = 0;
    2333             vrc = pProcess->readData(OUTPUT_HANDLE_ID_STDOUT, sizeof(byBuf),
    2334                                      GET_REMAINING_TIME,
    2335                                      byBuf, sizeof(byBuf),
    2336                                      &cbRead, &guestRc);
     2254            vrc = pProcess->i_readData(OUTPUT_HANDLE_ID_STDOUT, sizeof(byBuf),
     2255                                       GET_REMAINING_TIME,
     2256                                       byBuf, sizeof(byBuf),
     2257                                       &cbRead, &guestRc);
    23372258            if (   RT_FAILURE(vrc)
    23382259                || vrc == VWRN_GSTCTL_OBJECTSTATE_CHANGED)
     
    23482269                {
    23492270                    AssertPtr(pStrmBlkOut);
    2350                     vrc = GetCurrentBlock(OUTPUT_HANDLE_ID_STDOUT, *pStrmBlkOut);
     2271                    vrc = i_getCurrentBlock(OUTPUT_HANDLE_ID_STDOUT, *pStrmBlkOut);
    23512272
    23522273                    /* When successful, break out of the loop because we're done
     
    23652286
    23662287            cbRead = 0;
    2367             vrc = pProcess->readData(OUTPUT_HANDLE_ID_STDERR, sizeof(byBuf),
    2368                                      GET_REMAINING_TIME,
    2369                                      byBuf, sizeof(byBuf),
    2370                                      &cbRead, &guestRc);
     2288            vrc = pProcess->i_readData(OUTPUT_HANDLE_ID_STDERR, sizeof(byBuf),
     2289                                       GET_REMAINING_TIME,
     2290                                       byBuf, sizeof(byBuf),
     2291                                       &cbRead, &guestRc);
    23712292            if (   RT_FAILURE(vrc)
    23722293                || vrc == VWRN_GSTCTL_OBJECTSTATE_CHANGED)
     
    23992320}
    24002321
    2401 int GuestProcessTool::Terminate(uint32_t uTimeoutMS, int *pGuestRc)
     2322int GuestProcessTool::i_terminate(uint32_t uTimeoutMS, int *pGuestRc)
    24022323{
    24032324    LogFlowThisFuncEnter();
     
    24062327    if (!pProcess.isNull())
    24072328    {
    2408         rc = pProcess->terminateProcess(uTimeoutMS, pGuestRc);
     2329        rc = pProcess->i_terminateProcess(uTimeoutMS, pGuestRc);
    24092330        pProcess.setNull();
    24102331    }
  • trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp

    r50618 r50709  
    753753
    754754    if (RT_SUCCESS(vrc))
    755         vrc = GuestProcessTool::Run(this, procInfo, pGuestRc);
     755        vrc = GuestProcessTool::i_run(this, procInfo, pGuestRc);
    756756
    757757    LogFlowFuncLeaveRC(vrc);
     
    898898    int guestRc; GuestCtrlStreamObjects stdOut;
    899899    if (RT_SUCCESS(vrc))
    900         vrc = GuestProcessTool::RunEx(this, procInfo,
    901                                       &stdOut, 1 /* cStrmOutObjects */,
    902                                       &guestRc);
     900        vrc = GuestProcessTool::i_runEx(this, procInfo,
     901                                        &stdOut, 1 /* cStrmOutObjects */,
     902                                        &guestRc);
    903903    if (   RT_SUCCESS(vrc)
    904904        && RT_SUCCESS(guestRc))
     
    12891289
    12901290    if (RT_SUCCESS(vrc))
    1291         vrc = GuestProcessTool::Run(this, procInfo, pGuestRc);
     1291        vrc = GuestProcessTool::i_run(this, procInfo, pGuestRc);
    12921292
    12931293    LogFlowFuncLeaveRC(vrc);
     
    14481448    int guestRc; GuestCtrlStreamObjects stdOut;
    14491449    if (RT_SUCCESS(vrc))
    1450         vrc = GuestProcessTool::RunEx(this, procInfo,
    1451                                       &stdOut, 1 /* cStrmOutObjects */,
    1452                                       &guestRc);
     1450        vrc = GuestProcessTool::i_runEx(this, procInfo,
     1451                                        &stdOut, 1 /* cStrmOutObjects */,
     1452                                        &guestRc);
    14531453    if (   RT_SUCCESS(vrc)
    14541454        && RT_SUCCESS(guestRc))
     
    26742674        {
    26752675            case VERR_GSTCTL_GUEST_ERROR:
    2676                 hr = GuestProcess::setErrorExternal(this, guestRc);
     2676                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    26772677                break;
    26782678
     
    27152715        {
    27162716            case VERR_GSTCTL_GUEST_ERROR:
    2717                 hr = GuestProcess::setErrorExternal(this, guestRc);
     2717                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    27182718                break;
    27192719
     
    28342834        {
    28352835            case VERR_GSTCTL_GUEST_ERROR:
    2836                 hr = GuestProcess::setErrorExternal(this, guestRc);
     2836                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    28372837                break;
    28382838
     
    31573157    {
    31583158        case VERR_GSTCTL_GUEST_ERROR:
    3159             hr = GuestProcess::setErrorExternal(this, guestRc);
     3159            hr = GuestProcess::i_setErrorExternal(this, guestRc);
    31603160            break;
    31613161
     
    31963196        {
    31973197            case VERR_GSTCTL_GUEST_ERROR:
    3198                 hr = GuestProcess::setErrorExternal(this, guestRc);
     3198                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    31993199                break;
    32003200
     
    33363336        {
    33373337            case VERR_GSTCTL_GUEST_ERROR:
    3338                 hr = GuestProcess::setErrorExternal(this, guestRc);
     3338                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    33393339                break;
    33403340
     
    33803380        {
    33813381            case VERR_GSTCTL_GUEST_ERROR:
    3382                 hr = GuestProcess::setErrorExternal(this, guestRc);
     3382                hr = GuestProcess::i_setErrorExternal(this, guestRc);
    33833383                break;
    33843384
     
    35543554
    35553555            if (RT_SUCCESS(rc))
    3556                 rc = pProcess->startProcessAsync();
     3556                rc = pProcess->i_startProcessAsync();
    35573557        }
    35583558    }
  • trunk/src/VBox/Main/src-client/GuestSessionImplTasks.cpp

    r49630 r50709  
    323323    {
    324324        Assert(!pProcess.isNull());
    325         rc = pProcess->startProcess(30 * 1000 /* 30s timeout */,
    326                                     &guestRc);
     325        rc = pProcess->i_startProcess(30 * 1000 /* 30s timeout */,
     326                                      &guestRc);
    327327    }
    328328
     
    333333            case VERR_GSTCTL_GUEST_ERROR:
    334334                setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    335                                     GuestProcess::guestErrorToString(guestRc));
     335                                    GuestProcess::i_guestErrorToString(guestRc));
    336336                break;
    337337
     
    355355        for (;;)
    356356        {
    357             rc = pProcess->waitFor(ProcessWaitForFlag_StdIn,
    358                                    30 * 1000 /* Timeout */, waitRes, &guestRc);
     357            rc = pProcess->i_waitFor(ProcessWaitForFlag_StdIn,
     358                                     30 * 1000 /* Timeout */, waitRes, &guestRc);
    359359            if (   RT_FAILURE(rc)
    360360                || (   waitRes != ProcessWaitResult_StdIn
     
    419419            uint32_t cbWritten;
    420420            Assert(sizeof(byBuf) >= cbRead);
    421             rc = pProcess->writeData(0 /* StdIn */, fFlags,
    422                                      byBuf, cbRead,
    423                                      30 * 1000 /* Timeout */, &cbWritten, &guestRc);
     421            rc = pProcess->i_writeData(0 /* StdIn */, fFlags,
     422                                       byBuf, cbRead,
     423                                       30 * 1000 /* Timeout */, &cbWritten, &guestRc);
    424424            if (RT_FAILURE(rc))
    425425            {
     
    428428                    case VERR_GSTCTL_GUEST_ERROR:
    429429                        setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    430                                             GuestProcess::guestErrorToString(guestRc));
     430                                            GuestProcess::i_guestErrorToString(guestRc));
    431431                        break;
    432432
     
    499499            else
    500500            {
    501                 rc = pProcess->waitFor(ProcessWaitForFlag_Terminate,
    502                                        30 * 1000 /* Timeout */, waitRes, &guestRc);
     501                rc = pProcess->i_waitFor(ProcessWaitForFlag_Terminate,
     502                                         30 * 1000 /* Timeout */, waitRes, &guestRc);
    503503                if (   RT_FAILURE(rc)
    504504                    || waitRes != ProcessWaitResult_Terminate)
     
    643643            rc = pSession->processCreateExInteral(procInfo, pProcess);
    644644            if (RT_SUCCESS(rc))
    645                 rc = pProcess->startProcess(30 * 1000 /* 30s timeout */,
    646                                             &guestRc);
     645                rc = pProcess->i_startProcess(30 * 1000 /* 30s timeout */,
     646                                              &guestRc);
    647647            if (RT_FAILURE(rc))
    648648            {
     
    651651                    case VERR_GSTCTL_GUEST_ERROR:
    652652                        setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    653                                             GuestProcess::guestErrorToString(guestRc));
     653                                            GuestProcess::i_guestErrorToString(guestRc));
    654654                        break;
    655655
     
    672672                for (;;)
    673673                {
    674                     rc = pProcess->waitFor(ProcessWaitForFlag_StdOut,
    675                                            30 * 1000 /* Timeout */, waitRes, &guestRc);
     674                    rc = pProcess->i_waitFor(ProcessWaitForFlag_StdOut,
     675                                             30 * 1000 /* Timeout */, waitRes, &guestRc);
    676676                    if (RT_FAILURE(rc))
    677677                    {
     
    680680                            case VERR_GSTCTL_GUEST_ERROR:
    681681                                setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    682                                                     GuestProcess::guestErrorToString(guestRc));
     682                                                    GuestProcess::i_guestErrorToString(guestRc));
    683683                                break;
    684684
     
    702702
    703703                        uint32_t cbRead = 0; /* readData can return with VWRN_GSTCTL_OBJECTSTATE_CHANGED. */
    704                         rc = pProcess->readData(OUTPUT_HANDLE_ID_STDOUT, sizeof(byBuf),
    705                                                 30 * 1000 /* Timeout */, byBuf, sizeof(byBuf),
    706                                                 &cbRead, &guestRc);
     704                        rc = pProcess->i_readData(OUTPUT_HANDLE_ID_STDOUT, sizeof(byBuf),
     705                                                  30 * 1000 /* Timeout */, byBuf, sizeof(byBuf),
     706                                                  &cbRead, &guestRc);
    707707                        if (RT_FAILURE(rc))
    708708                        {
     
    711711                                case VERR_GSTCTL_GUEST_ERROR:
    712712                                    setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    713                                                         GuestProcess::guestErrorToString(guestRc));
     713                                                        GuestProcess::i_guestErrorToString(guestRc));
    714714                                    break;
    715715
     
    988988                    case VERR_GSTCTL_GUEST_ERROR:
    989989                        setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    990                                             GuestProcess::guestErrorToString(guestRc));
     990                                            GuestProcess::i_guestErrorToString(guestRc));
    991991                        break;
    992992
     
    10221022    {
    10231023        if (RT_SUCCESS(guestRc))
    1024             vrc = procTool.Wait(GUESTPROCESSTOOL_FLAG_NONE, &guestRc);
     1024            vrc = procTool.i_wait(GUESTPROCESSTOOL_FLAG_NONE, &guestRc);
    10251025        if (RT_SUCCESS(vrc))
    1026             vrc = procTool.TerminatedOk(&exitCode);
     1026            vrc = procTool.i_terminatedOk(&exitCode);
    10271027    }
    10281028
     
    10391039            case VERR_GSTCTL_GUEST_ERROR:
    10401040                setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    1041                                     GuestProcess::guestErrorToString(guestRc));
     1041                                    GuestProcess::i_guestErrorToString(guestRc));
    10421042                break;
    10431043
     
    12881288                    case VERR_GSTCTL_GUEST_ERROR:
    12891289                        hr = setProgressErrorMsg(VBOX_E_IPRT_ERROR,
    1290                                                  GuestProcess::guestErrorToString(guestRc));
     1290                                                 GuestProcess::i_guestErrorToString(guestRc));
    12911291                        break;
    12921292
  • trunk/src/VBox/Main/src-client/xpcom/module.cpp

    r50618 r50709  
    6969NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Guest, IGuest)
    7070 #ifdef VBOX_WITH_GUEST_CONTROL
    71 NS_DECL_CLASSINFO(GuestProcess)
    72 NS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestProcess, IGuestProcess, IProcess)
    7371NS_DECL_CLASSINFO(GuestSession)
    7472NS_IMPL_THREADSAFE_ISUPPORTS1_CI(GuestSession, IGuestSession)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette