VirtualBox

vbox的更動 99120 路徑 trunk/src/VBox/Additions/common


忽略:
時間撮記:
2023-3-22 下午05:30:14 (20 月 以前)
作者:
vboxsync
訊息:

Guest Control: Added ability of specifying an optional current working directory to started guest processes. This needs Guest Additions which support this. bugref:8053

位置:
trunk/src/VBox/Additions/common
檔案:
修改 4 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp

    r99088 r99120  
    13911391 * @param   pStartupInfo        Process startup info to initializes.
    13921392 * @param   cbCmd               Size (in bytes) to use for the command buffer.
     1393 * @param   cbCwd               Size (in bytes) to use for the current working directory.
    13931394 * @param   cbUser              Size (in bytes) to use for the user name buffer.
    13941395 * @param   cbPassword          Size (in bytes) to use for the password buffer.
     
    13991400VBGLR3DECL(int) VbglR3GuestCtrlProcStartupInfoInitEx(PVBGLR3GUESTCTRLPROCSTARTUPINFO pStartupInfo,
    14001401                                                     size_t cbCmd,
     1402                                                     size_t cbCwd,
    14011403                                                     size_t cbUser, size_t cbPassword, size_t cbDomain,
    14021404                                                     size_t cbArgs, size_t cbEnv)
     
    14041406    AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
    14051407    AssertReturn(cbCmd,           VERR_INVALID_PARAMETER);
     1408    AssertReturn(cbCwd,           VERR_INVALID_PARAMETER);
    14061409    AssertReturn(cbUser,          VERR_INVALID_PARAMETER);
    14071410    AssertReturn(cbPassword,      VERR_INVALID_PARAMETER);
     
    14231426    {
    14241427        ALLOC_STR(Cmd,      cbCmd);
     1428        ALLOC_STR(Cwd,      cbCwd);
    14251429        ALLOC_STR(Args,     cbArgs);
    14261430        ALLOC_STR(Env,      cbEnv);
     
    14481452    return VbglR3GuestCtrlProcStartupInfoInitEx(pStartupInfo,
    14491453                                                GUEST_PROC_DEF_CMD_LEN,
     1454                                                GUEST_PROC_DEF_CWD_LEN,
    14501455                                                GUEST_PROC_DEF_USER_LEN     /* Deprecated, now handled via session creation. */,
    14511456                                                GUEST_PROC_DEF_PASSWORD_LEN /* Ditto. */,
     
    14651470
    14661471    RTStrFree(pStartupInfo->pszCmd);
     1472    RTStrFree(pStartupInfo->pszCwd);
    14671473    RTStrFree(pStartupInfo->pszArgs);
    14681474    RTStrFree(pStartupInfo->pszEnv);
     
    16051611            VbglHGCMParmUInt32Set(&Msg.u.v2.num_affinity, 0);
    16061612            VbglHGCMParmPtrSet(&Msg.u.v2.affinity, pStartupInfo->uAffinity, sizeof(pStartupInfo->uAffinity));
     1613            /* v2.cwd was added in 7.1.  If the host is older, the Msg struct it sends is
     1614             * shorter and these fields are zero-filled, which equals 'no cwd requested'. */
     1615            VbglHGCMParmPtrSet(&Msg.u.v2.cwd, pStartupInfo->pszCwd, pStartupInfo->cbCwd);
    16071616        }
    16081617
     
    16101619        if (RT_FAILURE(rc))
    16111620        {
    1612             LogRel(("VbglR3GuestCtrlProcGetStart: 1 - %Rrc (retry %u, cbCmd=%RU32, cbArgs=%RU32, cbEnv=%RU32)\n",
    1613                     rc, cRetries, pStartupInfo->cbCmd, pStartupInfo->cbArgs, pStartupInfo->cbEnv));
     1621            LogRel(("VbglR3GuestCtrlProcGetStart: 1 - %Rrc (retry %u, cbCmd=%RU32, cbCwd=%RU32, cbArgs=%RU32, cbEnv=%RU32)\n",
     1622                    rc, cRetries, pStartupInfo->cbCmd, pStartupInfo->cbCwd, pStartupInfo->cbArgs, pStartupInfo->cbEnv));
    16141623
    16151624            if (   rc == VERR_BUFFER_OVERFLOW
     
    16241633                /* We can't tell which parameter doesn't fit, so we have to resize all. */
    16251634                GROW_STR(Cmd , GUEST_PROC_MAX_CMD_LEN);
     1635                GROW_STR(Cwd,  GUEST_PROC_MAX_CWD_LEN);
    16261636                GROW_STR(Args, GUEST_PROC_MAX_ARGS_LEN);
    16271637                GROW_STR(Env,  GUEST_PROC_MAX_ENV_LEN);
    16281638
    16291639#undef GROW_STR
    1630                 LogRel(("VbglR3GuestCtrlProcGetStart: 2 - %Rrc (retry %u, cbCmd=%RU32, cbArgs=%RU32, cbEnv=%RU32)\n",
    1631                         rc, cRetries, pStartupInfo->cbCmd, pStartupInfo->cbArgs, pStartupInfo->cbEnv));
     1640                LogRel(("VbglR3GuestCtrlProcGetStart: 2 - %Rrc (retry %u, cbCmd=%RU32, cbCwd=%RU32, cbArgs=%RU32, cbEnv=%RU32)\n",
     1641                        rc, cRetries, pStartupInfo->cbCmd, pStartupInfo->cbCwd, pStartupInfo->cbArgs, pStartupInfo->cbEnv));
    16321642                LogRel(("g_fVbglR3GuestCtrlHavePeekGetCancel=%RTbool\n", RT_BOOL(g_fVbglR3GuestCtrlHavePeekGetCancel)));
    16331643            }
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp

    r98526 r99120  
    258258                                      | VBOX_GUESTCTRL_GF_0_PROCESS_ARGV0
    259259                                      | VBOX_GUESTCTRL_GF_0_PROCESS_DYNAMIC_SIZES
     260                                      | VBOX_GUESTCTRL_GF_0_PROCESS_CWD
    260261#ifdef VBOX_WITH_GSTCTL_TOOLBOX_AS_CMDS
    261262                                      | VBOX_GUESTCTRL_GF_0_TOOLBOX_AS_CMDS
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp

    r98103 r99120  
    12541254 * @param   pszPassword                 Password of the specified user.
    12551255 * @param   pszDomain                   Domain to use for authentication.
     1256 * @param   pszCwd                      Current working directory to use for the created process.
     1257 *                                      Set to NULL if not being used.
    12561258 * @param   phProcess                   Pointer which will receive the process handle after
    12571259 *                                      successful process start.
     
    12601262                                            PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr,
    12611263                                            const char *pszAsUser, const char *pszPassword, const char *pszDomain,
    1262                                             PRTPROCESS phProcess)
     1264                                            const char *pszCwd, PRTPROCESS phProcess)
    12631265{
    12641266#ifndef RT_OS_WINDOWS
     
    12721274    /* pszPassword is optional. */
    12731275    /* pszDomain is optional. */
     1276    /* pszCwd is optional. */
    12741277    AssertPtrReturn(phProcess, VERR_INVALID_PARAMETER);
    12751278
     
    14111414                    fProcCreateFlags |= RTPROC_FLAGS_UNQUOTED_ARGS;
    14121415            }
     1416            if (pszCwd && *pszCwd)
     1417                fProcCreateFlags |= RTPROC_FLAGS_CWD;
     1418            else
     1419                pszCwd = NULL;
    14131420
    14141421            /* If no user name specified run with current credentials (e.g.
     
    14471454                                    pszAsUser,
    14481455                                    pszPassword && *pszPassword ? pszPassword : NULL,
    1449                                     NULL /*pvExtraData*/,
     1456                                    (void *)pszCwd /*pvExtraData*/,
    14501457                                    phProcess);
    14511458
     
    15451552    VGSvcVerbose(3, "vgsvcGstCtrlProcessProcessWorker: fHostFeatures0       = %#x\n",     g_fControlHostFeatures0);
    15461553    VGSvcVerbose(3, "vgsvcGstCtrlProcessProcessWorker: StartupInfo.szCmd    = '%s'\n",    pProcess->pStartupInfo->pszCmd);
     1554    VGSvcVerbose(3, "vgsvcGstCtrlProcessProcessWorker: StartupInfo.szCwd    = '%s'\n",    pProcess->pStartupInfo->pszCwd
     1555                                                                                        ? pProcess->pStartupInfo->pszCwd : "<None>");
    15471556    VGSvcVerbose(3, "vgsvcGstCtrlProcessProcessWorker: StartupInfo.uNumArgs = '%RU32'\n", pProcess->pStartupInfo->cArgs);
    15481557#ifdef DEBUG /* Never log this stuff in release mode! */
     
    16781687                                                                     fNeedsImpersonation ? pProcess->pStartupInfo->pszPassword : NULL,
    16791688                                                                     fNeedsImpersonation ? pProcess->pStartupInfo->pszDomain   : NULL,
    1680                                                                      &pProcess->hProcess);
     1689                                                                     pProcess->pStartupInfo->pszCwd, &pProcess->hProcess);
    16811690                                    if (RT_FAILURE(rc))
    16821691                                        VGSvcError("Error starting process, rc=%Rrc\n", rc);
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp

    r99087 r99120  
    16921692    if (RT_SUCCESS(rc))
    16931693    {
    1694         VGSvcVerbose(3, "Request to start process szCmd=%s, fFlags=0x%x, szArgs=%s, szEnv=%s, uTimeout=%RU32\n",
     1694        VGSvcVerbose(3, "Request to start process szCmd=%s, fFlags=0x%x, szArgs=%s, szEnv=%s, szCwd=%s, uTimeout=%RU32\n",
    16951695                     pStartupInfo->pszCmd, pStartupInfo->fFlags,
    16961696                     pStartupInfo->cArgs    ? pStartupInfo->pszArgs : "<None>",
    16971697                     pStartupInfo->cEnvVars ? pStartupInfo->pszEnv  : "<None>",
     1698                     pStartupInfo->cbCwd    ? pStartupInfo->pszCwd  : "<None>",
    16981699                     pStartupInfo->uTimeLimitMS);
    16991700
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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