VirtualBox

Changeset 59519 in vbox for trunk/src/VBox/Runtime/r3/win


Ignore:
Timestamp:
Jan 29, 2016 10:32:47 AM (9 years ago)
Author:
vboxsync
Message:

IPRT: r3/win/process-win.cpp: Error checking.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/win/process-win.cpp

    r59133 r59519  
    609609static int rtProcWinUserLogon(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, HANDLE *phToken)
    610610{
    611     AssertPtrReturn(pwszUser, VERR_INVALID_POINTER);
     611    AssertPtrReturn(pwszUser,     VERR_INVALID_POINTER);
    612612    AssertPtrReturn(pwszPassword, VERR_INVALID_POINTER);
     613    AssertPtrReturn(phToken,      VERR_INVALID_POINTER);
    613614
    614615    /*
     
    13301331            if (pSid)
    13311332            {
    1332                 cwcDomain = fRc ? cwcDomain + 2 : _512K;
     1333                cwcDomain = fRc ? cwcDomain + 2 : _4K;
    13331334                PRTUTF16 pwszDomain = (PRTUTF16)RTMemAllocZ(cwcDomain * sizeof(RTUTF16));
    13341335                if (pwszDomain)
    13351336                {
    1336                     /* Note: Also supports FQDNs! */
    1337                     if (   LookupAccountNameW(NULL /*lpSystemName*/, pwszUser, pSid, &cbSid, pwszDomain, &cwcDomain, &SidNameUse)
    1338                         && IsValidSid(pSid))
     1337                    /* Note: Just pass in the UPN (User Principal Name), e.g. [email protected] */
     1338                    if (LookupAccountNameW(NULL /*lpSystemName*/, pwszUser, pSid, &cbSid, pwszDomain, &cwcDomain, &SidNameUse))
    13391339                    {
    1340                         /* Array of process names we want to look for. */
    1341                         static const char * const s_papszProcNames[] =
     1340                        if (IsValidSid(pSid))
    13421341                        {
    1343 #ifdef VBOX                 /* The explorer entry is a fallback in case GA aren't installed. */
    1344                             { "VBoxTray.exe" },
     1342                            /* Array of process names we want to look for. */
     1343                            static const char * const s_papszProcNames[] =
     1344                            {
     1345#ifdef VBOX                     /* The explorer entry is a fallback in case GA aren't installed. */
     1346                                { "VBoxTray.exe" },
    13451347#endif
    1346                             { "explorer.exe" },
    1347                             NULL
    1348                         };
    1349                         fFound = rtProcWinFindTokenByProcess(s_papszProcNames, pSid, &hTokenUserDesktop);
     1348                                { "explorer.exe" },
     1349                                NULL
     1350                            };
     1351                            fFound = rtProcWinFindTokenByProcess(s_papszProcNames, pSid, &hTokenUserDesktop);
     1352                        }
     1353                        else
     1354                        {
     1355                            dwErr = GetLastError();
     1356                            rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_4;
     1357                        }
    13501358                    }
    13511359                    else
     
    13561364                    RTMemFree(pwszDomain);
    13571365                }
     1366                else
     1367                    rc = VERR_NO_MEMORY;
     1368
    13581369                RTMemFree(pSid);
    13591370            }
     1371            else
     1372                rc = VERR_NO_MEMORY;
    13601373        }
    13611374        /* else: !RTPROC_FLAGS_SERVICE: Nothing to do here right now. */
     
    14861499        if (hTokenUserDesktop != INVALID_HANDLE_VALUE)
    14871500            CloseHandle(hTokenUserDesktop);
    1488         CloseHandle(hTokenLogon);
     1501        if (hTokenLogon != INVALID_HANDLE_VALUE)
     1502            CloseHandle(hTokenLogon);
    14891503
    14901504        if (rc == VERR_UNRESOLVED_ERROR)
     
    16181632    else
    16191633    {
    1620         RTENV  hEnvToUse = NIL_RTENV;
    1621         HANDLE hToken;
    1622         rc = rtProcWinUserLogon(pwszUser, pwszPassword, &hToken);
     1634        RTENV  hEnvToUse   = NIL_RTENV;
     1635        HANDLE hTokenLogon = INVALID_HANDLE_VALUE;
     1636        rc = rtProcWinUserLogon(pwszUser, pwszPassword, &hTokenLogon);
    16231637        if (RT_SUCCESS(rc))
    16241638        {
     
    16321646            ProfileInfo.dwFlags    = PI_NOUI; /* Prevents the display of profile error messages. */
    16331647
    1634             if (g_pfnLoadUserProfileW(hToken, &ProfileInfo))
     1648            if (g_pfnLoadUserProfileW(hTokenLogon, &ProfileInfo))
    16351649            {
    16361650                /*
    16371651                 * Do what we need to do.  Don't keep any temp environment object.
    16381652                 */
    1639                 rc = rtProcWinCreateEnvFromToken(hToken, hEnv, fFlags, &hEnvToUse);
     1653                rc = rtProcWinCreateEnvFromToken(hTokenLogon, hEnv, fFlags, &hEnvToUse);
    16401654                if (RT_SUCCESS(rc))
    16411655                {
     
    16471661                }
    16481662
    1649                 if (!g_pfnUnloadUserProfile(hToken, ProfileInfo.hProfile))
     1663                if (!g_pfnUnloadUserProfile(hTokenLogon, ProfileInfo.hProfile))
    16501664                    AssertFailed();
    16511665            }
    16521666            else
    16531667                rc = RTErrConvertFromWin32(GetLastError());
    1654             CloseHandle(hToken);
     1668
     1669            if (hTokenLogon != INVALID_HANDLE_VALUE)
     1670                CloseHandle(hTokenLogon);
    16551671        }
    16561672    }
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