diff options
Diffstat (limited to 'src/burn/engine/engine.cpp')
-rw-r--r-- | src/burn/engine/engine.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/burn/engine/engine.cpp b/src/burn/engine/engine.cpp index e6cb1708..0c2c8dc5 100644 --- a/src/burn/engine/engine.cpp +++ b/src/burn/engine/engine.cpp | |||
@@ -244,8 +244,8 @@ LExit: | |||
244 | 244 | ||
245 | UserExperienceRemove(&engineState.userExperience); | 245 | UserExperienceRemove(&engineState.userExperience); |
246 | 246 | ||
247 | CacheRemoveWorkingFolder(engineState.registration.sczId); | 247 | CacheRemoveWorkingFolder(&engineState.cache); |
248 | CacheUninitialize(); | 248 | CacheUninitialize(&engineState.cache); |
249 | 249 | ||
250 | // If this is a related bundle (but not an update) suppress restart and return the standard restart error code. | 250 | // If this is a related bundle (but not an update) suppress restart and return the standard restart error code. |
251 | if (fRestart && BOOTSTRAPPER_RELATION_NONE != engineState.command.relationType && BOOTSTRAPPER_RELATION_UPDATE != engineState.command.relationType) | 251 | if (fRestart && BOOTSTRAPPER_RELATION_NONE != engineState.command.relationType && BOOTSTRAPPER_RELATION_UPDATE != engineState.command.relationType) |
@@ -334,6 +334,9 @@ static HRESULT InitializeEngineState( | |||
334 | PipeConnectionInitialize(&pEngineState->companionConnection); | 334 | PipeConnectionInitialize(&pEngineState->companionConnection); |
335 | PipeConnectionInitialize(&pEngineState->embeddedConnection); | 335 | PipeConnectionInitialize(&pEngineState->embeddedConnection); |
336 | 336 | ||
337 | // Retain whether bundle was initially run elevated. | ||
338 | ProcElevated(::GetCurrentProcess(), &pEngineState->internalCommand.fInitiallyElevated); | ||
339 | |||
337 | // Parse command line. | 340 | // Parse command line. |
338 | hr = CoreParseCommandLine(pEngineState->argc, pEngineState->argv, &pEngineState->command, &pEngineState->companionConnection, &pEngineState->embeddedConnection, &pEngineState->mode, &pEngineState->automaticUpdates, &pEngineState->fDisableSystemRestore, &pEngineState->internalCommand.sczSourceProcessPath, &pEngineState->internalCommand.sczOriginalSource, &hSectionFile, &hSourceEngineFile, &pEngineState->fDisableUnelevate, &pEngineState->log.dwAttributes, &pEngineState->log.sczPath, &pEngineState->registration.sczActiveParent, &pEngineState->sczIgnoreDependencies, &pEngineState->registration.sczAncestors, &pEngineState->fInvalidCommandLine, &pEngineState->cUnknownArgs, &pEngineState->rgUnknownArgs); | 341 | hr = CoreParseCommandLine(pEngineState->argc, pEngineState->argv, &pEngineState->command, &pEngineState->companionConnection, &pEngineState->embeddedConnection, &pEngineState->mode, &pEngineState->automaticUpdates, &pEngineState->fDisableSystemRestore, &pEngineState->internalCommand.sczSourceProcessPath, &pEngineState->internalCommand.sczOriginalSource, &hSectionFile, &hSourceEngineFile, &pEngineState->fDisableUnelevate, &pEngineState->log.dwAttributes, &pEngineState->log.sczPath, &pEngineState->registration.sczActiveParent, &pEngineState->sczIgnoreDependencies, &pEngineState->registration.sczAncestors, &pEngineState->fInvalidCommandLine, &pEngineState->cUnknownArgs, &pEngineState->rgUnknownArgs); |
339 | ExitOnFailure(hr, "Fatal error while parsing command line."); | 342 | ExitOnFailure(hr, "Fatal error while parsing command line."); |
@@ -341,6 +344,9 @@ static HRESULT InitializeEngineState( | |||
341 | hr = SectionInitialize(&pEngineState->section, hSectionFile, hSourceEngineFile); | 344 | hr = SectionInitialize(&pEngineState->section, hSectionFile, hSourceEngineFile); |
342 | ExitOnFailure(hr, "Failed to initialize engine section."); | 345 | ExitOnFailure(hr, "Failed to initialize engine section."); |
343 | 346 | ||
347 | hr = CacheInitialize(&pEngineState->cache, &pEngineState->internalCommand); | ||
348 | ExitOnFailure(hr, "Failed to initialize internal cache functionality."); | ||
349 | |||
344 | LExit: | 350 | LExit: |
345 | return hr; | 351 | return hr; |
346 | } | 352 | } |
@@ -421,8 +427,6 @@ static HRESULT RunUntrusted( | |||
421 | hr = PathForCurrentProcess(&sczCurrentProcessPath, NULL); | 427 | hr = PathForCurrentProcess(&sczCurrentProcessPath, NULL); |
422 | ExitOnFailure(hr, "Failed to get path for current process."); | 428 | ExitOnFailure(hr, "Failed to get path for current process."); |
423 | 429 | ||
424 | BOOL fRunningFromCache = CacheBundleRunningFromCache(); | ||
425 | |||
426 | // If we're running from the package cache, we're in a secure | 430 | // If we're running from the package cache, we're in a secure |
427 | // folder (DLLs cannot be inserted here for hijacking purposes) | 431 | // folder (DLLs cannot be inserted here for hijacking purposes) |
428 | // so just launch the current process's path as the clean room | 432 | // so just launch the current process's path as the clean room |
@@ -431,13 +435,13 @@ static HRESULT RunUntrusted( | |||
431 | // a secure folder) but it makes the code that only wants to run | 435 | // a secure folder) but it makes the code that only wants to run |
432 | // in clean room more complicated if we don't launch an explicit | 436 | // in clean room more complicated if we don't launch an explicit |
433 | // clean room process. | 437 | // clean room process. |
434 | if (fRunningFromCache) | 438 | if (CacheBundleRunningFromCache(&pEngineState->cache)) |
435 | { | 439 | { |
436 | wzCleanRoomBundlePath = sczCurrentProcessPath; | 440 | wzCleanRoomBundlePath = sczCurrentProcessPath; |
437 | } | 441 | } |
438 | else | 442 | else |
439 | { | 443 | { |
440 | hr = CacheBundleToCleanRoom(&pEngineState->section, &sczCachedCleanRoomBundlePath); | 444 | hr = CacheBundleToCleanRoom(&pEngineState->cache, &pEngineState->section, &sczCachedCleanRoomBundlePath); |
441 | ExitOnFailure(hr, "Failed to cache to clean room."); | 445 | ExitOnFailure(hr, "Failed to cache to clean room."); |
442 | 446 | ||
443 | wzCleanRoomBundlePath = sczCachedCleanRoomBundlePath; | 447 | wzCleanRoomBundlePath = sczCachedCleanRoomBundlePath; |
@@ -658,7 +662,7 @@ static HRESULT RunElevated( | |||
658 | SrpInitialize(TRUE); | 662 | SrpInitialize(TRUE); |
659 | 663 | ||
660 | // Pump messages from parent process. | 664 | // Pump messages from parent process. |
661 | hr = ElevationChildPumpMessages(pEngineState->dwElevatedLoggingTlsId, pEngineState->companionConnection.hPipe, pEngineState->companionConnection.hCachePipe, &pEngineState->approvedExes, &pEngineState->containers, &pEngineState->packages, &pEngineState->payloads, &pEngineState->variables, &pEngineState->registration, &pEngineState->userExperience, &hLock, &fDisabledAutomaticUpdates, &pEngineState->userExperience.dwExitCode, &pEngineState->fRestart); | 665 | hr = ElevationChildPumpMessages(pEngineState->dwElevatedLoggingTlsId, pEngineState->companionConnection.hPipe, pEngineState->companionConnection.hCachePipe, &pEngineState->approvedExes, &pEngineState->cache, &pEngineState->containers, &pEngineState->packages, &pEngineState->payloads, &pEngineState->variables, &pEngineState->registration, &pEngineState->userExperience, &hLock, &fDisabledAutomaticUpdates, &pEngineState->userExperience.dwExitCode, &pEngineState->fRestart); |
662 | LogRedirect(NULL, NULL); // reset logging so the next failure gets written to "log buffer" for the failure log. | 666 | LogRedirect(NULL, NULL); // reset logging so the next failure gets written to "log buffer" for the failure log. |
663 | ExitOnFailure(hr, "Failed to pump messages from parent process."); | 667 | ExitOnFailure(hr, "Failed to pump messages from parent process."); |
664 | 668 | ||