VirtualBox

Changeset 29807 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 26, 2010 10:13:20 AM (15 years ago)
Author:
vboxsync
Message:

Guest Control/IPRT/VBoxManage: More gentle error messages, bug fix for process lookup with different user, correct return value of process start error.

Location:
trunk/src/VBox
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp

    r29762 r29807  
    823823                                rc = RTProcCreateEx(pData->pszCmd, pData->papszArgs, hEnv, RTPROC_FLAGS_SERVICE,
    824824                                                    phStdIn, phStdOut, phStdErr,
    825                                                     strlen(pData->pszUser) ? pData->pszUser : NULL,
    826                                                     strlen(pData->pszUser) && strlen(pData->pszPassword) ? pData->pszPassword : NULL,
     825                                                    pData->pszUser, pData->pszPassword,
    827826                                                    &hProcess);
    828827                                if (RT_SUCCESS(rc))
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r29786 r29807  
    322322            if (FAILED(rc))
    323323            {
     324                /* If we got a VBOX_E_IPRT error we handle the error in a more gentle way
     325                 * because it contains more accurate info about what went wrong. */
    324326                ErrorInfo info(guest);
    325327                if (info.isFullAvailable())
    326                     RTPrintf("ERROR: %ls (%Rhrc).\n", info.getText().raw(), info.getResultCode());
     328                {
     329                    if (rc == VBOX_E_IPRT_ERROR)
     330                    {
     331                        RTPrintf("%ls.\n", info.getText().raw());
     332                    }
     333                    else
     334                    {
     335                        RTPrintf("ERROR: %ls (%Rhrc).\n", info.getText().raw(), info.getResultCode());
     336                    }
     337                }
    327338                break;
    328339            }
  • trunk/src/VBox/Main/GuestImpl.cpp

    r29785 r29807  
    10601060                                          tr("The guest did not respond within time (%ums)"), aTimeoutMS);
    10611061                        }
    1062                         else if (vrc == VERR_INVALID_PARAMETER)
    1063                         {
    1064                             rc = setError(VBOX_E_IPRT_ERROR,
    1065                                           tr("The guest reported an unknown process status (%u)"), pData->u32Status);
    1066                         }
    10671062                        else if (vrc == VERR_PERMISSION_DENIED)
    10681063                        {
     
    10721067                        else
    10731068                        {
    1074                             rc = setError(E_UNEXPECTED,
    1075                                           tr("The service call failed with error %Rrc"), vrc);
     1069                            if (pData->u32Status == PROC_STS_ERROR)
     1070                                rc = setError(VBOX_E_IPRT_ERROR,
     1071                                              tr("Process could not be started: %Rrc"), pData->u32Flags);
     1072                            else
     1073                                rc = setError(E_UNEXPECTED,
     1074                                              tr("The service call failed with error %Rrc"), vrc);
    10761075                        }               
    10771076                    }
  • trunk/src/VBox/Runtime/r3/win/process-win.cpp

    r29728 r29807  
    287287                                           (LPVOID)pTokenUser,
    288288                                           dwSize,
    289                                            &dwSize)
    290                     && IsValidSid(pTokenUser->User.Sid)
    291                     && EqualSid(pTokenUser->User.Sid, pSID))
     289                                           &dwSize))
    292290                {
    293                     if (DuplicateTokenEx(hTokenProc, MAXIMUM_ALLOWED,
    294                                          NULL, SecurityIdentification, TokenPrimary, phToken))
     291                    if (   IsValidSid(pTokenUser->User.Sid)
     292                        && EqualSid(pTokenUser->User.Sid, pSID))
    295293                    {
    296                         /*
    297                          * So we found the process instance which belongs to the user we want to
    298                          * to run our new process under. This duplicated token will be used for
    299                          * the actual CreateProcessAsUserW() call then.
    300                          */
    301                         fFound = TRUE;
     294                        if (DuplicateTokenEx(hTokenProc, MAXIMUM_ALLOWED,
     295                                             NULL, SecurityIdentification, TokenPrimary, phToken))
     296                        {
     297                            /*
     298                             * So we found the process instance which belongs to the user we want to
     299                             * to run our new process under. This duplicated token will be used for
     300                             * the actual CreateProcessAsUserW() call then.
     301                             */
     302                            fFound = TRUE;
     303                        }
     304                        else
     305                            dwErr = GetLastError();
    302306                    }
    303                     else
    304                         dwErr = GetLastError();
    305307                }
    306308                else
     
    320322    if (fFound)
    321323        return VINF_SUCCESS;
    322     return RTErrConvertFromWin32(dwErr);
     324    if (dwErr != NO_ERROR)
     325        return RTErrConvertFromWin32(dwErr);
     326    return VERR_NOT_FOUND; /* No error occured, but we didn't find the right process. */
    323327}
    324328
     
    649653                break;
    650654
    651             case ERROR_PASSWORD_EXPIRED:
    652             case ERROR_ACCOUNT_RESTRICTION:
     655            case ERROR_PASSWORD_EXPIRED:           
     656            case ERROR_ACCOUNT_RESTRICTION: /* See: http://support.microsoft.com/kb/303846/ */
    653657                rc = VERR_LOGON_FAILURE;
    654658                break;
Note: See TracChangeset for help on using the changeset viewer.

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