VirtualBox

Changeset 27487 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Mar 18, 2010 3:54:26 PM (15 years ago)
Author:
vboxsync
Message:

IPRT/process-win: Now works on Windows 7.

File:
1 edited

Legend:

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

    r27475 r27487  
    209209    StartupInfo.cb = sizeof(StartupInfo);
    210210    StartupInfo.dwFlags   = STARTF_USESTDHANDLES;
    211     /* Use WTSEnumerateSessions() for getting a list of sessions (WTS_SESSION_INFO array),
    212      * get wanted user with WTSQuerySessionInformation() and get session ID token with
    213      * WTSQueryUserToken() to use with CreateProcessAsUser(). */
    214     StartupInfo.lpDesktop = L"Winsta0\\Default";
    215211#if 1 /* The CRT should keep the standard handles up to date. */
    216212    StartupInfo.hStdInput  = GetStdHandle(STD_INPUT_HANDLE);
     
    308304                             * The following rights are needed in order to use
    309305                             * LogonUserW and CreateProcessAsUserW:
    310                              *
    311306                             * - SE_ASSIGNPRIMARYTOKEN_NAME
    312307                             * - SE_INCREASE_QUOTA_NAME
    313308                             * - SE_TCB_NAME
     309                             *
     310                             * So the local policy has to be modified to:
     311                             * - Act as part of the operating system
     312                             * - Create a token object
     313                             * - Log on as a batch job
    314314                             */
    315315                            fRc = LogonUserW(pwszUser,
     
    319319                                             LOGON32_PROVIDER_DEFAULT,
    320320                                             &hToken);
     321                            /** @todo Add SecureZeroMemory() here for wiping the password? */
    321322                            if (fRc)
    322323                            {
     
    348349                                    if (ERROR_PRIVILEGE_NOT_HELD == dwErr)
    349350                                    {
    350 #if 0
    351                                         PROFILEINFOW profileInfo;
    352                                         RT_ZERO(profileInfo);
    353                                         profileInfo.dwSize = sizeof(PROFILEINFOW);
    354                                         profileInfo.lpUserName = pwszUser;
    355                                         fRc = LoadUserProfileW(hToken, &profileInfo);
    356 
    357351                                        RTLDRMOD modAdvAPI32;
    358352                                        rc = RTLdrLoad("Advapi32.dll", &modAdvAPI32);
     
    360354                                        if (RT_SUCCESS(rc))
    361355                                        {
     356                                            /* This may fail on too old (NT4) platforms. */
    362357                                            rc = RTLdrGetSymbol(modAdvAPI32, "CreateProcessWithLogonW", (void**)&pfnCreateProcessWithLogonW);
    363358                                            if (RT_SUCCESS(rc))
    364359                                            {
    365 #endif
    366                                                 fRc = ImpersonateLoggedOnUser(hToken);
    367                                                 if (fRc)
    368                                                 {
    369                                                     fRc = CreateProcessW(pwszExec,
    370                                                                          pwszCmdLine,
    371                                                                          NULL,         /* pProcessAttributes */
    372                                                                          NULL,         /* pThreadAttributes */
    373                                                                          TRUE,         /* fInheritHandles */
    374                                                                          CREATE_UNICODE_ENVIRONMENT, /* dwCreationFlags */
    375                                                                          pwszzBlock,
    376                                                                          NULL,          /* pCurrentDirectory */
    377                                                                          &StartupInfo,
    378                                                                          &ProcInfo);
    379                                                     RevertToSelf();
    380                                                 }
    381 #if 0
    382360                                                fRc = pfnCreateProcessWithLogonW(pwszUser,
    383361                                                                                 NULL,                       /* lpDomain*/
    384362                                                                                 pwszPassword,
    385                                                                                  0 /*LOGON_WITH_PROFILE*/,   /* dwLogonFlags */
     363                                                                                 1 /*LOGON_WITH_PROFILE*/,   /* dwLogonFlags */
    386364                                                                                 pwszExec,
    387365                                                                                 pwszCmdLine,
     
    394372                                            RTLdrClose(modAdvAPI32);
    395373                                        }
    396 #endif
    397374                                    }
    398375                                }
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