main
h 267 lines 7.19 KB
Raw
1 #pragma once
2 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4 #define BURN_CACHE_MAX_SEARCH_PATHS 7
5
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9
10
11 enum BURN_CACHE_MESSAGE_TYPE
12 {
13 BURN_CACHE_MESSAGE_BEGIN,
14 BURN_CACHE_MESSAGE_SUCCESS,
15 BURN_CACHE_MESSAGE_COMPLETE,
16 BURN_CACHE_MESSAGE_FAILURE,
17 };
18
19 enum BURN_CACHE_STEP
20 {
21 BURN_CACHE_STEP_HASH_TO_SKIP_ACQUIRE,
22 BURN_CACHE_STEP_HASH_TO_SKIP_VERIFY,
23 BURN_CACHE_STEP_STAGE,
24 BURN_CACHE_STEP_HASH,
25 BURN_CACHE_STEP_FINALIZE,
26 };
27
28 typedef struct _BURN_CACHE
29 {
30 BOOL fInitializedCache;
31 BOOL fPerMachineCacheRootVerified;
32 BOOL fOriginalPerMachineCacheRootVerified;
33 BOOL fUnverifiedCacheFolderCreated;
34 BOOL fCustomMachinePackageCache;
35 LPWSTR sczDefaultUserPackageCache;
36 LPWSTR sczDefaultMachinePackageCache;
37 LPWSTR sczCurrentMachinePackageCache;
38
39 WCHAR wzGuid[GUID_STRING_LENGTH + 1];
40 LPWSTR* rgsczPotentialBaseWorkingFolders;
41 DWORD cPotentialBaseWorkingFolders;
42
43 // Only valid after CacheInitializeSources
44 BOOL fInitializedCacheSources;
45 BOOL fRunningFromCache;
46 LPWSTR sczSourceProcessFolder;
47 LPWSTR sczAcquisitionFolder;
48
49 // Only valid after CacheEnsureBaseWorkingFolder
50 BOOL fInitializedBaseWorkingFolder;
51 LPWSTR sczBaseWorkingFolder;
52 } BURN_CACHE;
53
54 typedef struct _BURN_CACHE_MESSAGE
55 {
56 BURN_CACHE_MESSAGE_TYPE type;
57
58 union
59 {
60 struct
61 {
62 BURN_CACHE_STEP cacheStep;
63 } begin;
64 struct
65 {
66 DWORD64 qwFileSize;
67 } success;
68 struct
69 {
70 HRESULT hrStatus;
71 } complete;
72 struct
73 {
74 BURN_CACHE_STEP cacheStep;
75 } failure;
76 };
77 } BURN_CACHE_MESSAGE;
78
79 typedef HRESULT(CALLBACK* PFN_BURNCACHEMESSAGEHANDLER)(
80 __in BURN_CACHE_MESSAGE* pMessage,
81 __in LPVOID pvContext
82 );
83
84 // functions
85
86 HRESULT CacheInitialize(
87 __in BURN_CACHE* pCache,
88 __in BURN_ENGINE_COMMAND* pInternalCommand
89 );
90 HRESULT CacheInitializeSources(
91 __in BURN_CACHE* pCache,
92 __in BURN_REGISTRATION* pRegistration,
93 __in BURN_VARIABLES* pVariables
94 );
95 HRESULT CacheEnsureAcquisitionFolder(
96 __in BURN_CACHE* pCache
97 );
98 HRESULT CacheEnsureBaseWorkingFolder(
99 __in BOOL fElevated,
100 __in BURN_CACHE* pCache,
101 __deref_out_z_opt LPWSTR* psczBaseWorkingFolder
102 );
103 HRESULT CacheCalculateBundleWorkingPath(
104 __in BURN_CACHE* pCache,
105 __in LPCWSTR wzExecutableName,
106 __deref_out_z LPWSTR* psczWorkingPath
107 );
108 HRESULT CacheCalculateBundleLayoutWorkingPath(
109 __in BURN_CACHE* pCache,
110 __in_z LPCWSTR wzBundleId,
111 __deref_out_z LPWSTR* psczWorkingPath
112 );
113 HRESULT CacheCalculatePayloadWorkingPath(
114 __in BURN_CACHE* pCache,
115 __in BURN_PAYLOAD* pPayload,
116 __deref_out_z LPWSTR* psczWorkingPath
117 );
118 HRESULT CacheCalculateContainerWorkingPath(
119 __in BURN_CACHE* pCache,
120 __in BURN_CONTAINER* pContainer,
121 __deref_out_z LPWSTR* psczWorkingPath
122 );
123 HRESULT CacheGetPerMachineRootCompletedPath(
124 __in BURN_CACHE* pCache,
125 __out_z LPWSTR* psczCurrentRootCompletedPath,
126 __out_z LPWSTR* psczDefaultRootCompletedPath
127 );
128 HRESULT CacheGetCompletedPath(
129 __in BURN_CACHE* pCache,
130 __in BOOL fPerMachine,
131 __in_z LPCWSTR wzCacheId,
132 __deref_out_z LPWSTR* psczCompletedPath
133 );
134 HRESULT CacheGetResumePath(
135 __in_z LPCWSTR wzPayloadWorkingPath,
136 __deref_out_z LPWSTR* psczResumePath
137 );
138 HRESULT CacheGetLocalSourcePaths(
139 __in_z LPCWSTR wzRelativePath,
140 __in_z LPCWSTR wzSourcePath,
141 __in_z LPCWSTR wzDestinationPath,
142 __in_z_opt LPCWSTR wzLayoutDirectory,
143 __in BURN_CACHE* pCache,
144 __in BURN_VARIABLES* pVariables,
145 __inout LPWSTR** prgSearchPaths,
146 __out DWORD* pcSearchPaths,
147 __out DWORD* pdwLikelySearchPath,
148 __out DWORD* pdwDestinationSearchPath
149 );
150 HRESULT CacheSetLastUsedSource(
151 __in BURN_VARIABLES* pVariables,
152 __in_z LPCWSTR wzSourcePath,
153 __in_z LPCWSTR wzRelativePath
154 );
155 HRESULT CacheSendProgressCallback(
156 __in DOWNLOAD_CACHE_CALLBACK* pCallback,
157 __in DWORD64 dw64Progress,
158 __in DWORD64 dw64Total,
159 __in HANDLE hDestinationFile
160 );
161 void CacheSendErrorCallback(
162 __in DOWNLOAD_CACHE_CALLBACK* pCallback,
163 __in HRESULT hrError,
164 __in_z_opt LPCWSTR wzError,
165 __out_opt BOOL* pfRetry
166 );
167 BOOL CacheBundleRunningFromCache(
168 __in BURN_CACHE* pCache
169 );
170 HRESULT CachePreparePackage(
171 __in BURN_CACHE* pCache,
172 __in BURN_PACKAGE* pPackage
173 );
174 HRESULT CacheBundleToWorkingDirectory(
175 __in BOOL fElvated,
176 __in BURN_CACHE* pCache,
177 __in_z LPCWSTR wzExecutableName,
178 __in BURN_SECTION* pSection,
179 __deref_out_z_opt LPWSTR* psczEngineWorkingPath
180 );
181 HRESULT CacheLayoutBundle(
182 __in_z LPCWSTR wzExecutableName,
183 __in_z LPCWSTR wzLayoutDirectory,
184 __in_z LPCWSTR wzSourceBundlePath,
185 __in DWORD64 qwBundleSize,
186 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
187 __in LPPROGRESS_ROUTINE pfnProgress,
188 __in LPVOID pContext
189 );
190 HRESULT CacheCompleteBundle(
191 __in BURN_CACHE* pCache,
192 __in BOOL fPerMachine,
193 __in_z LPCWSTR wzExecutableName,
194 __in_z LPCWSTR wzBundleId,
195 __in_z LPCWSTR wzSourceBundlePath
196 #ifdef DEBUG
197 , __in_z LPCWSTR wzExecutablePath
198 #endif
199 );
200 HRESULT CacheLayoutContainer(
201 __in BURN_CONTAINER* pContainer,
202 __in_z_opt LPCWSTR wzLayoutDirectory,
203 __in_z LPCWSTR wzUnverifiedContainerPath,
204 __in BOOL fMove,
205 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
206 __in LPPROGRESS_ROUTINE pfnProgress,
207 __in LPVOID pContext
208 );
209 HRESULT CacheLayoutPayload(
210 __in BURN_PAYLOAD* pPayload,
211 __in_z_opt LPCWSTR wzLayoutDirectory,
212 __in_z LPCWSTR wzUnverifiedPayloadPath,
213 __in BOOL fMove,
214 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
215 __in LPPROGRESS_ROUTINE pfnProgress,
216 __in LPVOID pContext
217 );
218 HRESULT CacheCompletePayload(
219 __in BURN_CACHE* pCache,
220 __in BOOL fPerMachine,
221 __in BURN_PAYLOAD* pPayload,
222 __in_z LPCWSTR wzCacheId,
223 __in_z LPCWSTR wzUnverifiedPayloadPath,
224 __in BOOL fMove,
225 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
226 __in LPPROGRESS_ROUTINE pfnProgress,
227 __in LPVOID pContext
228 );
229 HRESULT CacheVerifyContainer(
230 __in BURN_CONTAINER* pContainer,
231 __in_z LPCWSTR wzCachedDirectory,
232 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
233 __in LPPROGRESS_ROUTINE pfnProgress,
234 __in LPVOID pContext
235 );
236 HRESULT CacheVerifyPayload(
237 __in BURN_PAYLOAD* pPayload,
238 __in_z LPCWSTR wzCachedDirectory,
239 __in PFN_BURNCACHEMESSAGEHANDLER pfnCacheMessageHandler,
240 __in LPPROGRESS_ROUTINE pfnProgress,
241 __in LPVOID pContext
242 );
243 HRESULT CacheRemoveBaseWorkingFolder(
244 __in BURN_CACHE* pCache
245 );
246 HRESULT CacheRemoveBundle(
247 __in BURN_CACHE* pCache,
248 __in BOOL fPerMachine,
249 __in_z LPCWSTR wzPackageId
250 );
251 HRESULT CacheRemovePackage(
252 __in BURN_CACHE* pCache,
253 __in BOOL fPerMachine,
254 __in_z LPCWSTR wzPackageId,
255 __in_z LPCWSTR wzCacheId
256 );
257 void CacheCleanup(
258 __in BOOL fPerMachine,
259 __in BURN_CACHE* pCache
260 );
261 void CacheUninitialize(
262 __in BURN_CACHE* pCache
263 );
264
265 #ifdef __cplusplus
266 }
267 #endif