Changeset 95274 in vbox for trunk/src/VBox/Runtime/r3/win
- Timestamp:
- Jun 14, 2022 10:48:33 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/win/process-win.cpp
r93115 r95274 1612 1612 RTENV hEnv, DWORD dwCreationFlags, 1613 1613 STARTUPINFOW *pStartupInfo, PROCESS_INFORMATION *pProcInfo, 1614 uint32_t fFlags, const char *pszExec, uint32_t idDesiredSession) 1614 uint32_t fFlags, const char *pszExec, uint32_t idDesiredSession, 1615 HANDLE hUserToken) 1615 1616 { 1616 1617 /* … … 1642 1643 DWORD dwErr = NO_ERROR; 1643 1644 HANDLE hTokenLogon = INVALID_HANDLE_VALUE; 1644 int rc; 1645 if (fFlags & RTPROC_FLAGS_AS_IMPERSONATED_TOKEN) 1645 int rc = VINF_SUCCESS; 1646 if (fFlags & RTPROC_FLAGS_TOKEN_SUPPLIED) 1647 hTokenLogon = hUserToken; 1648 else if (fFlags & RTPROC_FLAGS_AS_IMPERSONATED_TOKEN) 1646 1649 rc = rtProcWinGetThreadTokenHandle(GetCurrentThread(), &hTokenLogon); 1647 1650 else if (pwszUser == NULL) … … 1850 1853 if (hTokenUserDesktop != INVALID_HANDLE_VALUE) 1851 1854 CloseHandle(hTokenUserDesktop); 1852 if (hTokenLogon != INVALID_HANDLE_VALUE) 1855 if ( !(fFlags & RTPROC_FLAGS_TOKEN_SUPPLIED) 1856 && hTokenLogon != INVALID_HANDLE_VALUE) 1853 1857 CloseHandle(hTokenLogon); 1854 1858 … … 2088 2092 RTENV hEnv, DWORD dwCreationFlags, 2089 2093 STARTUPINFOW *pStartupInfo, PROCESS_INFORMATION *pProcInfo, 2090 uint32_t fFlags, const char *pszExec, uint32_t idDesiredSession) 2094 uint32_t fFlags, const char *pszExec, uint32_t idDesiredSession, 2095 HANDLE hUserToken) 2091 2096 { 2092 2097 /* … … 2096 2101 * Note! This method is very slow on W2K. 2097 2102 */ 2098 if (!(fFlags & (RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN )))2103 if (!(fFlags & (RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN | RTPROC_FLAGS_TOKEN_SUPPLIED))) 2099 2104 { 2100 2105 AssertPtr(pwszUser); … … 2104 2109 return rc; 2105 2110 } 2106 return rtProcWinCreateAsUser2(pwszUser, pwszPassword, ppwszExec, pwszCmdLine, 2107 hEnv, dwCreationFlags, pStartupInfo, pProcInfo, fFlags, pszExec, idDesiredSession);2111 return rtProcWinCreateAsUser2(pwszUser, pwszPassword, ppwszExec, pwszCmdLine, hEnv, dwCreationFlags, 2112 pStartupInfo, pProcInfo, fFlags, pszExec, idDesiredSession, hUserToken); 2108 2113 } 2109 2114 … … 2282 2287 AssertReturn(!(fFlags & RTPROC_FLAGS_DESIRED_SESSION_ID), VERR_INVALID_FLAGS); 2283 2288 2289 HANDLE hUserToken = NULL; 2290 if (fFlags & RTPROC_FLAGS_TOKEN_SUPPLIED) 2291 hUserToken = *(HANDLE *)pvExtraData; 2292 2284 2293 /* 2285 2294 * Initialize the globals. … … 2287 2296 int rc = RTOnce(&g_rtProcWinInitOnce, rtProcWinInitOnce, NULL); 2288 2297 AssertRCReturn(rc, rc); 2289 if (pszAsUser || (fFlags & (RTPROC_FLAGS_PROFILE | RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN))) 2298 if ( pszAsUser 2299 || (fFlags & (RTPROC_FLAGS_PROFILE | RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN 2300 | RTPROC_FLAGS_TOKEN_SUPPLIED))) 2290 2301 { 2291 2302 rc = RTOnce(&g_rtProcWinResolveOnce, rtProcWinResolveOnce, NULL); … … 2445 2456 */ 2446 2457 if ( pszAsUser == NULL 2447 && !(fFlags & (RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN )))2458 && !(fFlags & (RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_AS_IMPERSONATED_TOKEN | RTPROC_FLAGS_TOKEN_SUPPLIED))) 2448 2459 { 2449 2460 /* Create the environment block first. */ … … 2483 2494 if (RT_SUCCESS(rc)) 2484 2495 { 2485 rc = rtProcWinCreateAsUser(pwszUser, pwszPassword, 2486 & pwszExec, pwszCmdLine, hEnv, dwCreationFlags,2487 &StartupInfo, &ProcInfo, fFlags, pszExec, idDesiredSession);2496 rc = rtProcWinCreateAsUser(pwszUser, pwszPassword, &pwszExec, pwszCmdLine, hEnv, dwCreationFlags, 2497 &StartupInfo, &ProcInfo, fFlags, pszExec, idDesiredSession, 2498 hUserToken); 2488 2499 2489 2500 if (pwszPassword && *pwszPassword)
Note:
See TracChangeset
for help on using the changeset viewer.