VirtualBox

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


Ignore:
Timestamp:
Jan 24, 2012 9:24:52 PM (13 years ago)
Author:
vboxsync
Message:

process-win.cpp: address previous todo, added new ones, some clean up.

File:
1 edited

Legend:

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

    r39863 r39864  
    343343            {
    344344                PTOKEN_USER pTokenUser = (PTOKEN_USER)RTMemAlloc(dwSize);
    345                 AssertPtrReturn(pTokenUser, VERR_NO_MEMORY);
     345                AssertPtrReturn(pTokenUser, VERR_NO_MEMORY); /** @todo r=bird: Leaking handles when we're out of memory...  */
    346346                RT_ZERO(*pTokenUser);
    347347                if (   GetTokenInformation(hTokenProc,
     
    396396 * @returns Success indicator.
    397397 * @param   papszNames      The process candidates, in prioritized order.
    398  * @param   pSID            The secure identifier of the user.
     398 * @param   pSid            The secure identifier of the user.
    399399 * @param   phToken         Where to return the token handle - duplicate,
    400400 *                          caller closes it on success.
    401401 */
    402 static bool rtProcFindProcessByName(const char * const *papszNames, PSID pSID, PHANDLE phToken)
     402static bool rtProcFindProcessByName(const char * const *papszNames, PSID pSid, PHANDLE phToken)
    403403{
    404404    AssertPtr(papszNames);
    405     AssertPtr(pSID);
     405    AssertPtr(pSid);
    406406    AssertPtr(phToken);
    407407
     
    441441                                {
    442442                                    if (   _stricmp(procEntry.szExeFile, papszNames[i]) == 0
    443                                         && RT_SUCCESS(rtProcGetProcessHandle(procEntry.th32ProcessID, pSID, phToken)))
     443                                        && RT_SUCCESS(rtProcGetProcessHandle(procEntry.th32ProcessID, pSid, phToken)))
    444444                                    {
    445445                                        fFound = true;
     
    506506                                        {
    507507                                            if (   _stricmp(pszProcName, papszNames[i]) == 0
    508                                                 && RT_SUCCESS(rtProcGetProcessHandle(adwPIDs[dwIdx], pSID, phToken)))
     508                                                && RT_SUCCESS(rtProcGetProcessHandle(adwPIDs[dwIdx], pSid, phToken)))
    509509                                            {
    510510                                                fFound = true;
     
    756756                                                     pProcInfo);
    757757                    if (!fRc)
    758                         dwErr = GetLastError();
     758                        rc = rtProcMapErrorCodes(GetLastError());
    759759                    rtProcEnvironmentDestroy(pwszzBlock);
    760760                }
     
    768768     * we're running as a Windows service?
    769769     */
    770     if (   RT_FAILURE(rc) /** @todo r=bird: you don't set rc when pfnCreateProcesswithLogonW fails... Using too many variables to control flow is confusing. */
     770    if (   RT_FAILURE(rc)
    771771        || (fFlags & RTPROC_FLAGS_SERVICE))
    772772    {
     
    807807            if (fFlags & RTPROC_FLAGS_SERVICE)
    808808            {
    809                 DWORD cbName = 0; /* Must be zero to query size! */
    810                 DWORD cbDomain = 0;
     809                DWORD cbSid = 0; /* Must be zero to query size! */
     810                DWORD cchDomain = 0;
    811811                SID_NAME_USE sidNameUse = SidTypeUser;
    812812                fRc = LookupAccountNameW(NULL,
    813813                                         pwszUser,
    814814                                         NULL,
    815                                          &cbName,
     815                                         &cbSid,
    816816                                         NULL,
    817                                          &cbDomain,
     817                                         &cchDomain,
    818818                                         &sidNameUse);
    819819                if (!fRc)
     
    821821                if (   !fRc
    822822                    && dwErr == ERROR_INSUFFICIENT_BUFFER
    823                     && cbName > 0)
     823                    && cbSid > 0)
    824824                {
    825825                    dwErr = NO_ERROR;
    826826
    827                     PSID pSID = (PSID)RTMemAlloc(cbName * sizeof(wchar_t));
    828                     AssertPtrReturn(pSID, VERR_NO_MEMORY);
    829 
    830                     /** @todo No way to allocate a PRTUTF16 directly? */
     827                    PSID pSid = (PSID)RTMemAlloc(cbSid * sizeof(wchar_t)); /** @todo r=bird: What's the relationship between wchar_t and PSID? */
     828                    AssertPtrReturn(pSid, VERR_NO_MEMORY); /** @todo r=bird: Leaking token handles when we're out of memory...  */
     829
    831830                    PRTUTF16 pwszDomain = NULL;
    832                     if (cbDomain > 0)
     831                    if (cchDomain > 0)
    833832                    {
    834                         pwszDomain = (PRTUTF16)RTMemAlloc(cbDomain * sizeof(RTUTF16));
    835                         AssertPtrReturn(pwszDomain, VERR_NO_MEMORY);
     833                        pwszDomain = (PRTUTF16)RTMemAlloc(cchDomain * sizeof(RTUTF16));
     834                        AssertPtrReturn(pwszDomain, VERR_NO_MEMORY); /** @todo r=bird: Leaking token handles when we're out of memory...  */
    836835                    }
    837836
     
    839838                    if (   LookupAccountNameW(NULL,            /* lpSystemName */
    840839                                              pwszUser,
    841                                               pSID,
    842                                               &cbName,
     840                                              pSid,
     841                                              &cbSid,
    843842                                              pwszDomain,
    844                                               &cbDomain,
     843                                              &cchDomain,
    845844                                              &sidNameUse)
    846                         && IsValidSid(pSID))
     845                        && IsValidSid(pSid))
    847846                    {
    848847                        /* Array of process names we want to look for. */
     
    855854                            NULL
    856855                        };
    857                         fFound = rtProcFindProcessByName(s_papszProcNames, pSID, &hTokenUserDesktop);
     856                        fFound = rtProcFindProcessByName(s_papszProcNames, pSid, &hTokenUserDesktop);
    858857                    }
    859858                    else
    860859                        dwErr = GetLastError(); /* LookupAccountNameW() failed. */
    861860                    RTMemFree(pSID);
    862                     if (pwszDomain != NULL)
    863                         RTUtf16Free(pwszDomain);
     861                    RTMemFree(pwszDomain);
    864862                }
    865863            }
     
    897895                            if (!(fFlags & RTPROC_FLAGS_NO_PROFILE))
    898896                            {
    899                                 ZeroMemory(&profileInfo, sizeof(profileInfo));
     897                                RT_ZERO(profileInfo);
    900898                                profileInfo.dwSize = sizeof(profileInfo);
    901899                                profileInfo.lpUserName = pwszUser;
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