VirtualBox

Changeset 40685 in vbox for trunk/src/VBox/Main/include


Ignore:
Timestamp:
Mar 28, 2012 2:48:00 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77139
Message:

Main/GuestCtrl: Introduced host<->guest PID mapping for immediate returns of executeProcess(); bugfixes.

File:
1 edited

Legend:

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

    r40084 r40685  
    175175    HRESULT getProcessOutputInternal(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS,
    176176                                     LONG64 aSize, ComSafeArrayOut(BYTE, aData), int *pRC);
    177     HRESULT executeProcessResult(const char *pszCommand, const char *pszUser, ULONG ulTimeout, PCALLBACKDATAEXECSTATUS pExecStatus, ULONG *puPID);
     177    HRESULT executeSetResult(const char *pszCommand, const char *pszUser, ULONG ulTimeout, PCALLBACKDATAEXECSTATUS pExecStatus, ULONG *puPID);
    178178    int     executeStreamQueryFsObjInfo(IN_BSTR aObjName,GuestProcessStreamBlock &streamBlock, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttribs);
    179     int     executeStreamDrain(ULONG aPID, ULONG ulFlags, GuestProcessStream &stream);
     179    int     executeStreamDrain(ULONG aPID, ULONG ulFlags, GuestProcessStream *pStream);
    180180    int     executeStreamGetNextBlock(ULONG ulPID, ULONG ulFlags, GuestProcessStream &stream, GuestProcessStreamBlock &streamBlock);
    181181    int     executeStreamParseNextBlock(ULONG ulPID, ULONG ulFlags, GuestProcessStream &stream, GuestProcessStreamBlock &streamBlock);
    182182    HRESULT executeStreamParse(ULONG uPID, ULONG ulFlags, GuestCtrlStreamObjects &streamObjects);
    183     HRESULT executeWaitForExit(ULONG uPID, ComPtr<IProgress> pProgress, ULONG uTimeoutMS,
    184                                ExecuteProcessStatus_T *pRetStatus, ULONG *puRetExitCode);
     183    HRESULT executeWaitForExit(ULONG uPID, ComPtr<IProgress> pProgress, ULONG uTimeoutMS);
    185184    // Internal guest file functions
    186185    HRESULT fileExistsInternal(IN_BSTR aFile, IN_BSTR aUsername, IN_BSTR aPassword, BOOL *aExists);
     
    211210        /** Size of user-supplied data. */
    212211        uint32_t                    cbData;
     212        /** The host PID. Needed for translating to
     213         *  a guest PID. */
     214        uint32_t                    uHostPID;
    213215        /** Pointer to user-supplied IProgress. */
    214216        ComObjPtr<Progress>         pProgress;
     
    219221
    220222    int callbackAdd(const PVBOXGUESTCTRL_CALLBACK pCallbackData, uint32_t *puContextID);
     223    int callbackAssignHostPID(uint32_t uContextID, uint32_t uHostPID);
    221224    void callbackDestroy(uint32_t uContextID);
    222225    void callbackRemove(uint32_t uContextID);
    223226    bool callbackExists(uint32_t uContextID);
    224227    void callbackFreeUserData(void *pvData);
     228    uint32_t callbackGetHostPID(uint32_t uContextID);
    225229    int callbackGetUserData(uint32_t uContextID, eVBoxGuestCtrlCallbackType *pEnmType, void **ppvData, size_t *pcbData);
    226230    void* callbackGetUserDataMutableRaw(uint32_t uContextID, size_t *pcbData);
     
    231235    int callbackNotifyEx(uint32_t uContextID, int iRC, const char *pszMessage);
    232236    int callbackNotifyComplete(uint32_t uContextID);
    233     int callbackNotifyAllForPID(uint32_t uPID, int iRC, const char *pszMessage);
     237    int callbackNotifyAllForPID(uint32_t uGuestPID, int iRC, const char *pszMessage);
    234238    int callbackWaitForCompletion(uint32_t uContextID, LONG lStage, LONG lTimeout);
    235239
     
    242246    typedef struct VBOXGUESTCTRL_PROCESS
    243247    {
     248        /** The guest PID -- needed for controlling the actual guest
     249         *  process which has its own PID (generated by the guest OS). */
     250        uint32_t                    mGuestPID;
     251        /** The last reported process status. */
    244252        ExecuteProcessStatus_T      mStatus;
     253        /** The process execution flags. */
    245254        uint32_t                    mFlags;
     255        /** The process' exit code. */
    246256        uint32_t                    mExitCode;
    247257    } VBOXGUESTCTRL_PROCESS, *PVBOXGUESTCTRL_PROCESS;
     
    250260    typedef std::map< uint32_t, VBOXGUESTCTRL_PROCESS >::const_iterator GuestProcessMapIterConst;
    251261
    252     int  processGetStatus(uint32_t u32PID, PVBOXGUESTCTRL_PROCESS pProcess, bool fRemove);
    253     int  processSetStatus(uint32_t u32PID, ExecuteProcessStatus_T enmStatus, uint32_t uExitCode, uint32_t uFlags);
     262    uint32_t processGetGuestPID(uint32_t uHostPID);
     263    int  processGetStatus(uint32_t uHostPID, PVBOXGUESTCTRL_PROCESS pProcess, bool fRemove);
     264    int  processSetStatus(uint32_t uHostPID, uint32_t uGuestPID,
     265                          ExecuteProcessStatus_T enmStatus, uint32_t uExitCode, uint32_t uFlags);
    254266
    255267    // Internal guest directory representation.
     
    259271        Bstr                        mFilter;
    260272        ULONG                       mFlags;
    261         /** Associated PID of started vbox_ls tool. */
     273        /** Associated host PID of started vbox_ls tool. */
    262274        ULONG                       mPID;
    263275        GuestProcessStream          mStream;
    264 #if 0
    265         /** Next enetry in our stream objects vector
    266          *  to process. */
    267         uint32_t                    mNextEntry;
    268         /** The guest stream object containing all */
    269         GuestCtrlStreamObjects      mStream;
    270 #endif
    271276    } VBOXGUESTCTRL_DIRECTORY, *PVBOXGUESTCTRL_DIRECTORY;
    272277    typedef std::map< uint32_t, VBOXGUESTCTRL_DIRECTORY > GuestDirectoryMap;
     
    280285     * Handler for guest execution control notifications.
    281286     */
    282     HRESULT handleErrorCompletion(int rc);
    283     HRESULT handleErrorHGCM(int rc);
     287    HRESULT setErrorCompletion(int rc);
     288    HRESULT setErrorFromProgress(ComPtr<IProgress> pProgress);
     289    HRESULT setErrorHGCM(int rc);
    284290# endif
    285291
     
    319325    /** Next upcoming context ID. */
    320326    volatile uint32_t mNextContextID;
     327    /** Next upcoming host PID */
     328    volatile uint32_t mNextHostPID;
    321329    /** Next upcoming directory handle ID. */
    322330    volatile uint32_t mNextDirectoryID;
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