aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/elevation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/elevation.cpp')
-rw-r--r--src/burn/engine/elevation.cpp74
1 files changed, 49 insertions, 25 deletions
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp
index db2a82a6..a0ad6685 100644
--- a/src/burn/engine/elevation.cpp
+++ b/src/burn/engine/elevation.cpp
@@ -88,6 +88,7 @@ typedef struct _BURN_ELEVATION_CHILD_MESSAGE_CONTEXT
88 HANDLE* phLock; 88 HANDLE* phLock;
89 BOOL* pfDisabledAutomaticUpdates; 89 BOOL* pfDisabledAutomaticUpdates;
90 BURN_APPROVED_EXES* pApprovedExes; 90 BURN_APPROVED_EXES* pApprovedExes;
91 BURN_CACHE* pCache;
91 BURN_CONTAINERS* pContainers; 92 BURN_CONTAINERS* pContainers;
92 BURN_PACKAGES* pPackages; 93 BURN_PACKAGES* pPackages;
93 BURN_PAYLOADS* pPayloads; 94 BURN_PAYLOADS* pPayloads;
@@ -164,6 +165,7 @@ static HRESULT OnApplyUninitialize(
164 __in HANDLE* phLock 165 __in HANDLE* phLock
165 ); 166 );
166static HRESULT OnSessionBegin( 167static HRESULT OnSessionBegin(
168 __in BURN_CACHE* pCache,
167 __in BURN_REGISTRATION* pRegistration, 169 __in BURN_REGISTRATION* pRegistration,
168 __in BURN_VARIABLES* pVariables, 170 __in BURN_VARIABLES* pVariables,
169 __in BYTE* pbData, 171 __in BYTE* pbData,
@@ -176,6 +178,7 @@ static HRESULT OnSessionResume(
176 __in SIZE_T cbData 178 __in SIZE_T cbData
177 ); 179 );
178static HRESULT OnSessionEnd( 180static HRESULT OnSessionEnd(
181 __in BURN_CACHE* pCache,
179 __in BURN_PACKAGES* pPackages, 182 __in BURN_PACKAGES* pPackages,
180 __in BURN_REGISTRATION* pRegistration, 183 __in BURN_REGISTRATION* pRegistration,
181 __in BURN_VARIABLES* pVariables, 184 __in BURN_VARIABLES* pVariables,
@@ -188,12 +191,14 @@ static HRESULT OnSaveState(
188 __in SIZE_T cbData 191 __in SIZE_T cbData
189 ); 192 );
190static HRESULT OnCachePreparePackage( 193static HRESULT OnCachePreparePackage(
194 __in BURN_CACHE* pCache,
191 __in BURN_PACKAGES* pPackages, 195 __in BURN_PACKAGES* pPackages,
192 __in BYTE* pbData, 196 __in BYTE* pbData,
193 __in SIZE_T cbData 197 __in SIZE_T cbData
194 ); 198 );
195static HRESULT OnCacheCompletePayload( 199static HRESULT OnCacheCompletePayload(
196 __in HANDLE hPipe, 200 __in HANDLE hPipe,
201 __in BURN_CACHE* pCache,
197 __in BURN_PACKAGES* pPackages, 202 __in BURN_PACKAGES* pPackages,
198 __in BURN_PAYLOADS* pPayloads, 203 __in BURN_PAYLOADS* pPayloads,
199 __in BYTE* pbData, 204 __in BYTE* pbData,
@@ -207,7 +212,7 @@ static HRESULT OnCacheVerifyPayload(
207 __in SIZE_T cbData 212 __in SIZE_T cbData
208 ); 213 );
209static void OnCacheCleanup( 214static void OnCacheCleanup(
210 __in_z LPCWSTR wzBundleId 215 __in BURN_CACHE* pCache
211 ); 216 );
212static HRESULT OnProcessDependentRegistration( 217static HRESULT OnProcessDependentRegistration(
213 __in const BURN_REGISTRATION* pRegistration, 218 __in const BURN_REGISTRATION* pRegistration,
@@ -216,6 +221,7 @@ static HRESULT OnProcessDependentRegistration(
216 ); 221 );
217static HRESULT OnExecuteExePackage( 222static HRESULT OnExecuteExePackage(
218 __in HANDLE hPipe, 223 __in HANDLE hPipe,
224 __in BURN_CACHE* pCache,
219 __in BURN_PACKAGES* pPackages, 225 __in BURN_PACKAGES* pPackages,
220 __in BURN_RELATED_BUNDLES* pRelatedBundles, 226 __in BURN_RELATED_BUNDLES* pRelatedBundles,
221 __in BURN_VARIABLES* pVariables, 227 __in BURN_VARIABLES* pVariables,
@@ -224,6 +230,7 @@ static HRESULT OnExecuteExePackage(
224 ); 230 );
225static HRESULT OnExecuteMsiPackage( 231static HRESULT OnExecuteMsiPackage(
226 __in HANDLE hPipe, 232 __in HANDLE hPipe,
233 __in BURN_CACHE* pCache,
227 __in BURN_PACKAGES* pPackages, 234 __in BURN_PACKAGES* pPackages,
228 __in BURN_VARIABLES* pVariables, 235 __in BURN_VARIABLES* pVariables,
229 __in BYTE* pbData, 236 __in BYTE* pbData,
@@ -231,6 +238,7 @@ static HRESULT OnExecuteMsiPackage(
231 ); 238 );
232static HRESULT OnExecuteMspPackage( 239static HRESULT OnExecuteMspPackage(
233 __in HANDLE hPipe, 240 __in HANDLE hPipe,
241 __in BURN_CACHE* pCache,
234 __in BURN_PACKAGES* pPackages, 242 __in BURN_PACKAGES* pPackages,
235 __in BURN_VARIABLES* pVariables, 243 __in BURN_VARIABLES* pVariables,
236 __in BYTE* pbData, 244 __in BYTE* pbData,
@@ -238,6 +246,7 @@ static HRESULT OnExecuteMspPackage(
238 ); 246 );
239static HRESULT OnExecuteMsuPackage( 247static HRESULT OnExecuteMsuPackage(
240 __in HANDLE hPipe, 248 __in HANDLE hPipe,
249 __in BURN_CACHE* pCache,
241 __in BURN_PACKAGES* pPackages, 250 __in BURN_PACKAGES* pPackages,
242 __in BURN_VARIABLES* pVariables, 251 __in BURN_VARIABLES* pVariables,
243 __in BYTE* pbData, 252 __in BYTE* pbData,
@@ -279,6 +288,7 @@ static int MsiExecuteMessageHandler(
279 __in_opt LPVOID pvContext 288 __in_opt LPVOID pvContext
280 ); 289 );
281static HRESULT OnCleanPackage( 290static HRESULT OnCleanPackage(
291 __in BURN_CACHE* pCache,
282 __in BURN_PACKAGES* pPackages, 292 __in BURN_PACKAGES* pPackages,
283 __in BYTE* pbData, 293 __in BYTE* pbData,
284 __in SIZE_T cbData 294 __in SIZE_T cbData
@@ -286,6 +296,7 @@ static HRESULT OnCleanPackage(
286static HRESULT OnLaunchApprovedExe( 296static HRESULT OnLaunchApprovedExe(
287 __in HANDLE hPipe, 297 __in HANDLE hPipe,
288 __in BURN_APPROVED_EXES* pApprovedExes, 298 __in BURN_APPROVED_EXES* pApprovedExes,
299 __in BURN_CACHE* pCache,
289 __in BURN_VARIABLES* pVariables, 300 __in BURN_VARIABLES* pVariables,
290 __in BYTE* pbData, 301 __in BYTE* pbData,
291 __in SIZE_T cbData 302 __in SIZE_T cbData
@@ -1284,6 +1295,7 @@ extern "C" HRESULT ElevationChildPumpMessages(
1284 __in HANDLE hPipe, 1295 __in HANDLE hPipe,
1285 __in HANDLE hCachePipe, 1296 __in HANDLE hCachePipe,
1286 __in BURN_APPROVED_EXES* pApprovedExes, 1297 __in BURN_APPROVED_EXES* pApprovedExes,
1298 __in BURN_CACHE* pCache,
1287 __in BURN_CONTAINERS* pContainers, 1299 __in BURN_CONTAINERS* pContainers,
1288 __in BURN_PACKAGES* pPackages, 1300 __in BURN_PACKAGES* pPackages,
1289 __in BURN_PAYLOADS* pPayloads, 1301 __in BURN_PAYLOADS* pPayloads,
@@ -1304,6 +1316,7 @@ extern "C" HRESULT ElevationChildPumpMessages(
1304 1316
1305 cacheContext.dwLoggingTlsId = dwLoggingTlsId; 1317 cacheContext.dwLoggingTlsId = dwLoggingTlsId;
1306 cacheContext.hPipe = hCachePipe; 1318 cacheContext.hPipe = hCachePipe;
1319 cacheContext.pCache = pCache;
1307 cacheContext.pContainers = pContainers; 1320 cacheContext.pContainers = pContainers;
1308 cacheContext.pPackages = pPackages; 1321 cacheContext.pPackages = pPackages;
1309 cacheContext.pPayloads = pPayloads; 1322 cacheContext.pPayloads = pPayloads;
@@ -1316,6 +1329,7 @@ extern "C" HRESULT ElevationChildPumpMessages(
1316 context.phLock = phLock; 1329 context.phLock = phLock;
1317 context.pfDisabledAutomaticUpdates = pfDisabledAutomaticUpdates; 1330 context.pfDisabledAutomaticUpdates = pfDisabledAutomaticUpdates;
1318 context.pApprovedExes = pApprovedExes; 1331 context.pApprovedExes = pApprovedExes;
1332 context.pCache = pCache;
1319 context.pContainers = pContainers; 1333 context.pContainers = pContainers;
1320 context.pPackages = pPackages; 1334 context.pPackages = pPackages;
1321 context.pPayloads = pPayloads; 1335 context.pPayloads = pPayloads;
@@ -1826,7 +1840,7 @@ static HRESULT ProcessElevatedChildMessage(
1826 break; 1840 break;
1827 1841
1828 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN: 1842 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_BEGIN:
1829 hrResult = OnSessionBegin(pContext->pRegistration, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1843 hrResult = OnSessionBegin(pContext->pCache, pContext->pRegistration, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1830 break; 1844 break;
1831 1845
1832 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_RESUME: 1846 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_RESUME:
@@ -1834,7 +1848,7 @@ static HRESULT ProcessElevatedChildMessage(
1834 break; 1848 break;
1835 1849
1836 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_END: 1850 case BURN_ELEVATION_MESSAGE_TYPE_SESSION_END:
1837 hrResult = OnSessionEnd(pContext->pPackages, pContext->pRegistration, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1851 hrResult = OnSessionEnd(pContext->pCache, pContext->pPackages, pContext->pRegistration, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1838 break; 1852 break;
1839 1853
1840 case BURN_ELEVATION_MESSAGE_TYPE_SAVE_STATE: 1854 case BURN_ELEVATION_MESSAGE_TYPE_SAVE_STATE:
@@ -1846,19 +1860,19 @@ static HRESULT ProcessElevatedChildMessage(
1846 break; 1860 break;
1847 1861
1848 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_EXE_PACKAGE: 1862 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_EXE_PACKAGE:
1849 hrResult = OnExecuteExePackage(pContext->hPipe, pContext->pPackages, &pContext->pRegistration->relatedBundles, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1863 hrResult = OnExecuteExePackage(pContext->hPipe, pContext->pCache, pContext->pPackages, &pContext->pRegistration->relatedBundles, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1850 break; 1864 break;
1851 1865
1852 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSI_PACKAGE: 1866 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSI_PACKAGE:
1853 hrResult = OnExecuteMsiPackage(pContext->hPipe, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1867 hrResult = OnExecuteMsiPackage(pContext->hPipe, pContext->pCache, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1854 break; 1868 break;
1855 1869
1856 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSP_PACKAGE: 1870 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSP_PACKAGE:
1857 hrResult = OnExecuteMspPackage(pContext->hPipe, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1871 hrResult = OnExecuteMspPackage(pContext->hPipe, pContext->pCache, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1858 break; 1872 break;
1859 1873
1860 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSU_PACKAGE: 1874 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSU_PACKAGE:
1861 hrResult = OnExecuteMsuPackage(pContext->hPipe, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1875 hrResult = OnExecuteMsuPackage(pContext->hPipe, pContext->pCache, pContext->pPackages, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1862 break; 1876 break;
1863 1877
1864 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER: 1878 case BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER:
@@ -1870,11 +1884,11 @@ static HRESULT ProcessElevatedChildMessage(
1870 break; 1884 break;
1871 1885
1872 case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE: 1886 case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE:
1873 hrResult = OnCleanPackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData); 1887 hrResult = OnCleanPackage(pContext->pCache, pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData);
1874 break; 1888 break;
1875 1889
1876 case BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_APPROVED_EXE: 1890 case BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_APPROVED_EXE:
1877 hrResult = OnLaunchApprovedExe(pContext->hPipe, pContext->pApprovedExes, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData); 1891 hrResult = OnLaunchApprovedExe(pContext->hPipe, pContext->pApprovedExes, pContext->pCache, pContext->pVariables, (BYTE*)pMsg->pvData, pMsg->cbData);
1878 break; 1892 break;
1879 1893
1880 default: 1894 default:
@@ -1901,11 +1915,11 @@ static HRESULT ProcessElevatedChildCacheMessage(
1901 switch (pMsg->dwMessage) 1915 switch (pMsg->dwMessage)
1902 { 1916 {
1903 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_PREPARE_PACKAGE: 1917 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_PREPARE_PACKAGE:
1904 hrResult = OnCachePreparePackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData); 1918 hrResult = OnCachePreparePackage(pContext->pCache, pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData);
1905 break; 1919 break;
1906 1920
1907 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_COMPLETE_PAYLOAD: 1921 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_COMPLETE_PAYLOAD:
1908 hrResult = OnCacheCompletePayload(pContext->hPipe, pContext->pPackages, pContext->pPayloads, (BYTE*)pMsg->pvData, pMsg->cbData); 1922 hrResult = OnCacheCompletePayload(pContext->hPipe, pContext->pCache, pContext->pPackages, pContext->pPayloads, (BYTE*)pMsg->pvData, pMsg->cbData);
1909 break; 1923 break;
1910 1924
1911 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_VERIFY_PAYLOAD: 1925 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_VERIFY_PAYLOAD:
@@ -1913,12 +1927,12 @@ static HRESULT ProcessElevatedChildCacheMessage(
1913 break; 1927 break;
1914 1928
1915 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_CLEANUP: 1929 case BURN_ELEVATION_MESSAGE_TYPE_CACHE_CLEANUP:
1916 OnCacheCleanup(pContext->pRegistration->sczId); 1930 OnCacheCleanup(pContext->pCache);
1917 hrResult = S_OK; 1931 hrResult = S_OK;
1918 break; 1932 break;
1919 1933
1920 case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE: 1934 case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE:
1921 hrResult = OnCleanPackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData); 1935 hrResult = OnCleanPackage(pContext->pCache, pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData);
1922 break; 1936 break;
1923 1937
1924 default: 1938 default:
@@ -2080,6 +2094,7 @@ static HRESULT OnApplyUninitialize(
2080} 2094}
2081 2095
2082static HRESULT OnSessionBegin( 2096static HRESULT OnSessionBegin(
2097 __in BURN_CACHE* pCache,
2083 __in BURN_REGISTRATION* pRegistration, 2098 __in BURN_REGISTRATION* pRegistration,
2084 __in BURN_VARIABLES* pVariables, 2099 __in BURN_VARIABLES* pVariables,
2085 __in BYTE* pbData, 2100 __in BYTE* pbData,
@@ -2120,7 +2135,7 @@ static HRESULT OnSessionBegin(
2120 ExitOnFailure(hr, "Failed to read variables."); 2135 ExitOnFailure(hr, "Failed to read variables.");
2121 2136
2122 // Begin session in per-machine process. 2137 // Begin session in per-machine process.
2123 hr = RegistrationSessionBegin(sczEngineWorkingPath, pRegistration, pVariables, dwRegistrationOperations, (BURN_DEPENDENCY_REGISTRATION_ACTION)dwDependencyRegistrationAction, qwEstimatedSize, (BOOTSTRAPPER_REGISTRATION_TYPE)dwRegistrationType); 2138 hr = RegistrationSessionBegin(sczEngineWorkingPath, pRegistration, pCache, pVariables, dwRegistrationOperations, (BURN_DEPENDENCY_REGISTRATION_ACTION)dwDependencyRegistrationAction, qwEstimatedSize, (BOOTSTRAPPER_REGISTRATION_TYPE)dwRegistrationType);
2124 ExitOnFailure(hr, "Failed to begin registration session."); 2139 ExitOnFailure(hr, "Failed to begin registration session.");
2125 2140
2126LExit: 2141LExit:
@@ -2162,6 +2177,7 @@ LExit:
2162} 2177}
2163 2178
2164static HRESULT OnSessionEnd( 2179static HRESULT OnSessionEnd(
2180 __in BURN_CACHE* pCache,
2165 __in BURN_PACKAGES* pPackages, 2181 __in BURN_PACKAGES* pPackages,
2166 __in BURN_REGISTRATION* pRegistration, 2182 __in BURN_REGISTRATION* pRegistration,
2167 __in BURN_VARIABLES* pVariables, 2183 __in BURN_VARIABLES* pVariables,
@@ -2190,7 +2206,7 @@ static HRESULT OnSessionEnd(
2190 ExitOnFailure(hr, "Failed to read dependency registration action."); 2206 ExitOnFailure(hr, "Failed to read dependency registration action.");
2191 2207
2192 // suspend session in per-machine process 2208 // suspend session in per-machine process
2193 hr = RegistrationSessionEnd(pRegistration, pVariables, pPackages, (BURN_RESUME_MODE)dwResumeMode, (BOOTSTRAPPER_APPLY_RESTART)dwRestart, (BURN_DEPENDENCY_REGISTRATION_ACTION)dwDependencyRegistrationAction, (BOOTSTRAPPER_REGISTRATION_TYPE)dwRegistrationType); 2209 hr = RegistrationSessionEnd(pRegistration, pCache, pVariables, pPackages, (BURN_RESUME_MODE)dwResumeMode, (BOOTSTRAPPER_APPLY_RESTART)dwRestart, (BURN_DEPENDENCY_REGISTRATION_ACTION)dwDependencyRegistrationAction, (BOOTSTRAPPER_REGISTRATION_TYPE)dwRegistrationType);
2194 ExitOnFailure(hr, "Failed to suspend registration session."); 2210 ExitOnFailure(hr, "Failed to suspend registration session.");
2195 2211
2196LExit: 2212LExit:
@@ -2214,6 +2230,7 @@ LExit:
2214} 2230}
2215 2231
2216static HRESULT OnCachePreparePackage( 2232static HRESULT OnCachePreparePackage(
2233 __in BURN_CACHE* pCache,
2217 __in BURN_PACKAGES* pPackages, 2234 __in BURN_PACKAGES* pPackages,
2218 __in BYTE* pbData, 2235 __in BYTE* pbData,
2219 __in SIZE_T cbData 2236 __in SIZE_T cbData
@@ -2239,7 +2256,7 @@ static HRESULT OnCachePreparePackage(
2239 ExitOnRootFailure(hr, "Invalid data passed to cache prepare package."); 2256 ExitOnRootFailure(hr, "Invalid data passed to cache prepare package.");
2240 } 2257 }
2241 2258
2242 hr = CachePreparePackage(pPackage); 2259 hr = CachePreparePackage(pCache, pPackage);
2243 ExitOnFailure(hr, "Failed to prepare cache package."); 2260 ExitOnFailure(hr, "Failed to prepare cache package.");
2244 2261
2245LExit: 2262LExit:
@@ -2250,6 +2267,7 @@ LExit:
2250 2267
2251static HRESULT OnCacheCompletePayload( 2268static HRESULT OnCacheCompletePayload(
2252 __in HANDLE hPipe, 2269 __in HANDLE hPipe,
2270 __in BURN_CACHE* pCache,
2253 __in BURN_PACKAGES* pPackages, 2271 __in BURN_PACKAGES* pPackages,
2254 __in BURN_PAYLOADS* pPayloads, 2272 __in BURN_PAYLOADS* pPayloads,
2255 __in BYTE* pbData, 2273 __in BYTE* pbData,
@@ -2291,7 +2309,7 @@ static HRESULT OnCacheCompletePayload(
2291 2309
2292 if (pPackage && pPayload) // complete payload. 2310 if (pPackage && pPayload) // complete payload.
2293 { 2311 {
2294 hr = CacheCompletePayload(pPackage->fPerMachine, pPayload, pPackage->sczCacheId, sczUnverifiedPath, fMove, BurnCacheMessageHandler, ElevatedProgressRoutine, hPipe); 2312 hr = CacheCompletePayload(pCache, pPackage->fPerMachine, pPayload, pPackage->sczCacheId, sczUnverifiedPath, fMove, BurnCacheMessageHandler, ElevatedProgressRoutine, hPipe);
2295 ExitOnFailure(hr, "Failed to cache payload: %ls", pPayload->sczKey); 2313 ExitOnFailure(hr, "Failed to cache payload: %ls", pPayload->sczKey);
2296 } 2314 }
2297 else 2315 else
@@ -2364,10 +2382,10 @@ LExit:
2364} 2382}
2365 2383
2366static void OnCacheCleanup( 2384static void OnCacheCleanup(
2367 __in_z LPCWSTR wzBundleId 2385 __in BURN_CACHE* pCache
2368 ) 2386 )
2369{ 2387{
2370 CacheCleanup(TRUE, wzBundleId); 2388 CacheCleanup(TRUE, pCache);
2371} 2389}
2372 2390
2373static HRESULT OnProcessDependentRegistration( 2391static HRESULT OnProcessDependentRegistration(
@@ -2405,6 +2423,7 @@ LExit:
2405 2423
2406static HRESULT OnExecuteExePackage( 2424static HRESULT OnExecuteExePackage(
2407 __in HANDLE hPipe, 2425 __in HANDLE hPipe,
2426 __in BURN_CACHE* pCache,
2408 __in BURN_PACKAGES* pPackages, 2427 __in BURN_PACKAGES* pPackages,
2409 __in BURN_RELATED_BUNDLES* pRelatedBundles, 2428 __in BURN_RELATED_BUNDLES* pRelatedBundles,
2410 __in BURN_VARIABLES* pVariables, 2429 __in BURN_VARIABLES* pVariables,
@@ -2464,7 +2483,7 @@ static HRESULT OnExecuteExePackage(
2464 } 2483 }
2465 2484
2466 // Execute EXE package. 2485 // Execute EXE package.
2467 hr = ExeEngineExecutePackage(&executeAction, pVariables, static_cast<BOOL>(dwRollback), GenericExecuteMessageHandler, hPipe, &exeRestart); 2486 hr = ExeEngineExecutePackage(&executeAction, pCache, pVariables, static_cast<BOOL>(dwRollback), GenericExecuteMessageHandler, hPipe, &exeRestart);
2468 ExitOnFailure(hr, "Failed to execute EXE package."); 2487 ExitOnFailure(hr, "Failed to execute EXE package.");
2469 2488
2470LExit: 2489LExit:
@@ -2490,6 +2509,7 @@ LExit:
2490 2509
2491static HRESULT OnExecuteMsiPackage( 2510static HRESULT OnExecuteMsiPackage(
2492 __in HANDLE hPipe, 2511 __in HANDLE hPipe,
2512 __in BURN_CACHE* pCache,
2493 __in BURN_PACKAGES* pPackages, 2513 __in BURN_PACKAGES* pPackages,
2494 __in BURN_VARIABLES* pVariables, 2514 __in BURN_VARIABLES* pVariables,
2495 __in BYTE* pbData, 2515 __in BYTE* pbData,
@@ -2563,7 +2583,7 @@ static HRESULT OnExecuteMsiPackage(
2563 ExitOnFailure(hr, "Failed to read variables."); 2583 ExitOnFailure(hr, "Failed to read variables.");
2564 2584
2565 // Execute MSI package. 2585 // Execute MSI package.
2566 hr = MsiEngineExecutePackage(hwndParent, &executeAction, pVariables, fRollback, MsiExecuteMessageHandler, hPipe, &msiRestart); 2586 hr = MsiEngineExecutePackage(hwndParent, &executeAction, pCache, pVariables, fRollback, MsiExecuteMessageHandler, hPipe, &msiRestart);
2567 ExitOnFailure(hr, "Failed to execute MSI package."); 2587 ExitOnFailure(hr, "Failed to execute MSI package.");
2568 2588
2569LExit: 2589LExit:
@@ -2587,6 +2607,7 @@ LExit:
2587 2607
2588static HRESULT OnExecuteMspPackage( 2608static HRESULT OnExecuteMspPackage(
2589 __in HANDLE hPipe, 2609 __in HANDLE hPipe,
2610 __in BURN_CACHE* pCache,
2590 __in BURN_PACKAGES* pPackages, 2611 __in BURN_PACKAGES* pPackages,
2591 __in BURN_VARIABLES* pVariables, 2612 __in BURN_VARIABLES* pVariables,
2592 __in BYTE* pbData, 2613 __in BYTE* pbData,
@@ -2658,7 +2679,7 @@ static HRESULT OnExecuteMspPackage(
2658 ExitOnFailure(hr, "Failed to read rollback flag."); 2679 ExitOnFailure(hr, "Failed to read rollback flag.");
2659 2680
2660 // Execute MSP package. 2681 // Execute MSP package.
2661 hr = MspEngineExecutePackage(hwndParent, &executeAction, pVariables, fRollback, MsiExecuteMessageHandler, hPipe, &restart); 2682 hr = MspEngineExecutePackage(hwndParent, &executeAction, pCache, pVariables, fRollback, MsiExecuteMessageHandler, hPipe, &restart);
2662 ExitOnFailure(hr, "Failed to execute MSP package."); 2683 ExitOnFailure(hr, "Failed to execute MSP package.");
2663 2684
2664LExit: 2685LExit:
@@ -2682,6 +2703,7 @@ LExit:
2682 2703
2683static HRESULT OnExecuteMsuPackage( 2704static HRESULT OnExecuteMsuPackage(
2684 __in HANDLE hPipe, 2705 __in HANDLE hPipe,
2706 __in BURN_CACHE* pCache,
2685 __in BURN_PACKAGES* pPackages, 2707 __in BURN_PACKAGES* pPackages,
2686 __in BURN_VARIABLES* pVariables, 2708 __in BURN_VARIABLES* pVariables,
2687 __in BYTE* pbData, 2709 __in BYTE* pbData,
@@ -2718,7 +2740,7 @@ static HRESULT OnExecuteMsuPackage(
2718 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); 2740 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage);
2719 2741
2720 // execute MSU package 2742 // execute MSU package
2721 hr = MsuEngineExecutePackage(&executeAction, pVariables, static_cast<BOOL>(dwRollback), static_cast<BOOL>(dwStopWusaService), GenericExecuteMessageHandler, hPipe, &restart); 2743 hr = MsuEngineExecutePackage(&executeAction, pCache, pVariables, static_cast<BOOL>(dwRollback), static_cast<BOOL>(dwStopWusaService), GenericExecuteMessageHandler, hPipe, &restart);
2722 ExitOnFailure(hr, "Failed to execute MSU package."); 2744 ExitOnFailure(hr, "Failed to execute MSU package.");
2723 2745
2724LExit: 2746LExit:
@@ -3051,6 +3073,7 @@ LExit:
3051} 3073}
3052 3074
3053static HRESULT OnCleanPackage( 3075static HRESULT OnCleanPackage(
3076 __in BURN_CACHE* pCache,
3054 __in BURN_PACKAGES* pPackages, 3077 __in BURN_PACKAGES* pPackages,
3055 __in BYTE* pbData, 3078 __in BYTE* pbData,
3056 __in SIZE_T cbData 3079 __in SIZE_T cbData
@@ -3069,7 +3092,7 @@ static HRESULT OnCleanPackage(
3069 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); 3092 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage);
3070 3093
3071 // Remove the package from the cache. 3094 // Remove the package from the cache.
3072 hr = CacheRemovePackage(TRUE, pPackage->sczId, pPackage->sczCacheId); 3095 hr = CacheRemovePackage(pCache, TRUE, pPackage->sczId, pPackage->sczCacheId);
3073 ExitOnFailure(hr, "Failed to remove from cache package: %ls", pPackage->sczId); 3096 ExitOnFailure(hr, "Failed to remove from cache package: %ls", pPackage->sczId);
3074 3097
3075LExit: 3098LExit:
@@ -3080,6 +3103,7 @@ LExit:
3080static HRESULT OnLaunchApprovedExe( 3103static HRESULT OnLaunchApprovedExe(
3081 __in HANDLE hPipe, 3104 __in HANDLE hPipe,
3082 __in BURN_APPROVED_EXES* pApprovedExes, 3105 __in BURN_APPROVED_EXES* pApprovedExes,
3106 __in BURN_CACHE* pCache,
3083 __in BURN_VARIABLES* pVariables, 3107 __in BURN_VARIABLES* pVariables,
3084 __in BYTE* pbData, 3108 __in BYTE* pbData,
3085 __in SIZE_T cbData 3109 __in SIZE_T cbData
@@ -3124,7 +3148,7 @@ static HRESULT OnLaunchApprovedExe(
3124 hr = RegReadString(hKey, pApprovedExe->sczValueName, &pLaunchApprovedExe->sczExecutablePath); 3148 hr = RegReadString(hKey, pApprovedExe->sczValueName, &pLaunchApprovedExe->sczExecutablePath);
3125 ExitOnFailure(hr, "Failed to read the value for the approved exe path."); 3149 ExitOnFailure(hr, "Failed to read the value for the approved exe path.");
3126 3150
3127 hr = ApprovedExesVerifySecureLocation(pVariables, pLaunchApprovedExe); 3151 hr = ApprovedExesVerifySecureLocation(pCache, pVariables, pLaunchApprovedExe);
3128 ExitOnFailure(hr, "Failed to verify the executable path is in a secure location: %ls", pLaunchApprovedExe->sczExecutablePath); 3152 ExitOnFailure(hr, "Failed to verify the executable path is in a secure location: %ls", pLaunchApprovedExe->sczExecutablePath);
3129 if (S_FALSE == hr) 3153 if (S_FALSE == hr)
3130 { 3154 {