summaryrefslogtreecommitdiff
path: root/src/burn/engine/EngineForApplication.cpp
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:06:54 -0700
committerRob Mensching <rob@firegiant.com>2021-04-29 16:36:06 -0700
commitaf10c45d7b3a44af0b461a557847fe03263dcc10 (patch)
tree6a5c1532304782c36ffe4200b38f3afb76789a43 /src/burn/engine/EngineForApplication.cpp
parent9c2aed97299fb96aeee3f1471ce40225437aaecf (diff)
downloadwix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.gz
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.bz2
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.zip
Move burn into burn
Diffstat (limited to 'src/burn/engine/EngineForApplication.cpp')
-rw-r--r--src/burn/engine/EngineForApplication.cpp529
1 files changed, 529 insertions, 0 deletions
diff --git a/src/burn/engine/EngineForApplication.cpp b/src/burn/engine/EngineForApplication.cpp
new file mode 100644
index 00000000..83d88ba1
--- /dev/null
+++ b/src/burn/engine/EngineForApplication.cpp
@@ -0,0 +1,529 @@
1// 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.
2
3#include "precomp.h"
4
5
6static HRESULT BAEngineGetPackageCount(
7 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
8 __in const LPVOID pvArgs,
9 __inout LPVOID pvResults
10 )
11{
12 HRESULT hr = S_OK;
13 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETPACKAGECOUNT_ARGS, pArgs);
14 ValidateMessageResults(hr, pvResults, BAENGINE_GETPACKAGECOUNT_RESULTS, pResults);
15
16 ExternalEngineGetPackageCount(pContext->pEngineState, &pResults->cPackages);
17
18LExit:
19 return hr;
20}
21
22static HRESULT BAEngineGetVariableNumeric(
23 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
24 __in const LPVOID pvArgs,
25 __inout LPVOID pvResults
26 )
27{
28 HRESULT hr = S_OK;
29 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLENUMERIC_ARGS, pArgs);
30 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLENUMERIC_RESULTS, pResults);
31
32 hr = ExternalEngineGetVariableNumeric(pContext->pEngineState, pArgs->wzVariable, &pResults->llValue);
33
34LExit:
35 return hr;
36}
37
38static HRESULT BAEngineGetVariableString(
39 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
40 __in const LPVOID pvArgs,
41 __inout LPVOID pvResults
42 )
43{
44 HRESULT hr = S_OK;
45 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLESTRING_ARGS, pArgs);
46 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLESTRING_RESULTS, pResults);
47
48 hr = ExternalEngineGetVariableString(pContext->pEngineState, pArgs->wzVariable, pResults->wzValue, &pResults->cchValue);
49
50LExit:
51 return hr;
52}
53
54static HRESULT BAEngineGetVariableVersion(
55 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
56 __in const LPVOID pvArgs,
57 __inout LPVOID pvResults
58 )
59{
60 HRESULT hr = S_OK;
61 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLEVERSION_ARGS, pArgs);
62 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLEVERSION_RESULTS, pResults);
63
64 hr = ExternalEngineGetVariableVersion(pContext->pEngineState, pArgs->wzVariable, pResults->wzValue, &pResults->cchValue);
65
66LExit:
67 return hr;
68}
69
70static HRESULT BAEngineFormatString(
71 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
72 __in const LPVOID pvArgs,
73 __inout LPVOID pvResults
74 )
75{
76 HRESULT hr = S_OK;
77 ValidateMessageArgs(hr, pvArgs, BAENGINE_FORMATSTRING_ARGS, pArgs);
78 ValidateMessageResults(hr, pvResults, BAENGINE_FORMATSTRING_RESULTS, pResults);
79
80 hr = ExternalEngineFormatString(pContext->pEngineState, pArgs->wzIn, pResults->wzOut, &pResults->cchOut);
81
82LExit:
83 return hr;
84}
85
86static HRESULT BAEngineEscapeString(
87 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
88 __in const LPVOID pvArgs,
89 __inout LPVOID pvResults
90 )
91{
92 HRESULT hr = S_OK;
93 ValidateMessageArgs(hr, pvArgs, BAENGINE_ESCAPESTRING_ARGS, pArgs);
94 ValidateMessageResults(hr, pvResults, BAENGINE_ESCAPESTRING_RESULTS, pResults);
95
96 hr = ExternalEngineEscapeString(pArgs->wzIn, pResults->wzOut, &pResults->cchOut);
97
98LExit:
99 return hr;
100}
101
102static HRESULT BAEngineEvaluateCondition(
103 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
104 __in const LPVOID pvArgs,
105 __inout LPVOID pvResults
106 )
107{
108 HRESULT hr = S_OK;
109 ValidateMessageArgs(hr, pvArgs, BAENGINE_EVALUATECONDITION_ARGS, pArgs);
110 ValidateMessageResults(hr, pvResults, BAENGINE_EVALUATECONDITION_RESULTS, pResults);
111
112 hr = ExternalEngineEvaluateCondition(pContext->pEngineState, pArgs->wzCondition, &pResults->f);
113
114LExit:
115 return hr;
116}
117
118static HRESULT BAEngineLog(
119 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
120 __in const LPVOID pvArgs,
121 __inout LPVOID pvResults
122 )
123{
124 HRESULT hr = S_OK;
125 REPORT_LEVEL rl = REPORT_NONE;
126 ValidateMessageArgs(hr, pvArgs, BAENGINE_LOG_ARGS, pArgs);
127 ValidateMessageResults(hr, pvResults, BAENGINE_LOG_RESULTS, pResults);
128
129 switch (pArgs->level)
130 {
131 case BOOTSTRAPPER_LOG_LEVEL_STANDARD:
132 rl = REPORT_STANDARD;
133 break;
134
135 case BOOTSTRAPPER_LOG_LEVEL_VERBOSE:
136 rl = REPORT_VERBOSE;
137 break;
138
139 case BOOTSTRAPPER_LOG_LEVEL_DEBUG:
140 rl = REPORT_DEBUG;
141 break;
142
143 case BOOTSTRAPPER_LOG_LEVEL_ERROR:
144 rl = REPORT_ERROR;
145 break;
146
147 default:
148 ExitFunction1(hr = E_INVALIDARG);
149 }
150
151 hr = ExternalEngineLog(rl, pArgs->wzMessage);
152 ExitOnFailure(hr, "Failed to log BA message.");
153
154LExit:
155 return hr;
156}
157
158static HRESULT BAEngineSendEmbeddedError(
159 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
160 __in const LPVOID pvArgs,
161 __inout LPVOID pvResults
162 )
163{
164 HRESULT hr = S_OK;
165 ValidateMessageArgs(hr, pvArgs, BAENGINE_SENDEMBEDDEDERROR_ARGS, pArgs);
166 ValidateMessageResults(hr, pvResults, BAENGINE_SENDEMBEDDEDERROR_RESULTS, pResults);
167
168 hr = ExternalEngineSendEmbeddedError(pContext->pEngineState, pArgs->dwErrorCode, pArgs->wzMessage, pArgs->dwUIHint, &pResults->nResult);
169
170LExit:
171 return hr;
172}
173
174static HRESULT BAEngineSendEmbeddedProgress(
175 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
176 __in const LPVOID pvArgs,
177 __inout LPVOID pvResults
178 )
179{
180 HRESULT hr = S_OK;
181 ValidateMessageArgs(hr, pvArgs, BAENGINE_SENDEMBEDDEDPROGRESS_ARGS, pArgs);
182 ValidateMessageResults(hr, pvResults, BAENGINE_SENDEMBEDDEDPROGRESS_RESULTS, pResults);
183
184 hr = ExternalEngineSendEmbeddedProgress(pContext->pEngineState, pArgs->dwProgressPercentage, pArgs->dwOverallProgressPercentage, &pResults->nResult);
185
186LExit:
187 return hr;
188}
189
190static HRESULT BAEngineSetUpdate(
191 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
192 __in const LPVOID pvArgs,
193 __inout LPVOID pvResults
194 )
195{
196 HRESULT hr = S_OK;
197 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETUPDATE_ARGS, pArgs);
198 ValidateMessageResults(hr, pvResults, BAENGINE_SETUPDATE_RESULTS, pResults);
199
200 hr = ExternalEngineSetUpdate(pContext->pEngineState, pArgs->wzLocalSource, pArgs->wzDownloadSource, pArgs->qwSize, pArgs->hashType, pArgs->rgbHash, pArgs->cbHash);
201
202LExit:
203 return hr;
204}
205
206static HRESULT BAEngineSetLocalSource(
207 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
208 __in const LPVOID pvArgs,
209 __inout LPVOID pvResults
210 )
211{
212 HRESULT hr = S_OK;
213 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETLOCALSOURCE_ARGS, pArgs);
214 ValidateMessageResults(hr, pvResults, BAENGINE_SETLOCALSOURCE_RESULTS, pResults);
215
216 hr = ExternalEngineSetLocalSource(pContext->pEngineState, pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->wzPath);
217
218LExit:
219 return hr;
220}
221
222static HRESULT BAEngineSetDownloadSource(
223 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
224 __in const LPVOID pvArgs,
225 __inout LPVOID pvResults
226 )
227{
228 HRESULT hr = S_OK;
229 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETDOWNLOADSOURCE_ARGS, pArgs);
230 ValidateMessageResults(hr, pvResults, BAENGINE_SETDOWNLOADSOURCE_RESULTS, pResults);
231
232 hr = ExternalEngineSetDownloadSource(pContext->pEngineState, pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->wzUrl, pArgs->wzUser, pArgs->wzPassword);
233
234LExit:
235 return hr;
236}
237
238static HRESULT BAEngineSetVariableNumeric(
239 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
240 __in const LPVOID pvArgs,
241 __inout LPVOID pvResults
242 )
243{
244 HRESULT hr = S_OK;
245 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLENUMERIC_ARGS, pArgs);
246 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLENUMERIC_RESULTS, pResults);
247
248 hr = ExternalEngineSetVariableNumeric(pContext->pEngineState, pArgs->wzVariable, pArgs->llValue);
249
250LExit:
251 return hr;
252}
253
254static HRESULT BAEngineSetVariableString(
255 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
256 __in const LPVOID pvArgs,
257 __inout LPVOID pvResults
258 )
259{
260 HRESULT hr = S_OK;
261 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLESTRING_ARGS, pArgs);
262 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLESTRING_RESULTS, pResults);
263
264 hr = ExternalEngineSetVariableString(pContext->pEngineState, pArgs->wzVariable, pArgs->wzValue, pArgs->fFormatted);
265
266LExit:
267 return hr;
268}
269
270static HRESULT BAEngineSetVariableVersion(
271 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
272 __in const LPVOID pvArgs,
273 __inout LPVOID pvResults
274 )
275{
276 HRESULT hr = S_OK;
277 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLEVERSION_ARGS, pArgs);
278 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLEVERSION_RESULTS, pResults);
279
280 hr = ExternalEngineSetVariableVersion(pContext->pEngineState, pArgs->wzVariable, pArgs->wzValue);
281
282LExit:
283 return hr;
284}
285
286static HRESULT BAEngineCloseSplashScreen(
287 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
288 __in const LPVOID pvArgs,
289 __inout LPVOID pvResults
290 )
291{
292 HRESULT hr = S_OK;
293 ValidateMessageArgs(hr, pvArgs, BAENGINE_CLOSESPLASHSCREEN_ARGS, pArgs);
294 ValidateMessageResults(hr, pvResults, BAENGINE_CLOSESPLASHSCREEN_RESULTS, pResults);
295
296 ExternalEngineCloseSplashScreen(pContext->pEngineState);
297
298LExit:
299 return hr;
300}
301
302static HRESULT BAEngineCompareVersions(
303 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
304 __in const LPVOID pvArgs,
305 __inout LPVOID pvResults
306 )
307{
308 HRESULT hr = S_OK;
309 ValidateMessageArgs(hr, pvArgs, BAENGINE_COMPAREVERSIONS_ARGS, pArgs);
310 ValidateMessageResults(hr, pvResults, BAENGINE_COMPAREVERSIONS_RESULTS, pResults);
311
312 hr = ExternalEngineCompareVersions(pArgs->wzVersion1, pArgs->wzVersion2, &pResults->nResult);
313
314LExit:
315 return hr;
316}
317
318static HRESULT BAEngineDetect(
319 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
320 __in const LPVOID pvArgs,
321 __inout LPVOID pvResults
322 )
323{
324 HRESULT hr = S_OK;
325 ValidateMessageArgs(hr, pvArgs, BAENGINE_DETECT_ARGS, pArgs);
326 ValidateMessageResults(hr, pvResults, BAENGINE_DETECT_RESULTS, pResults);
327
328 hr = ExternalEngineDetect(pContext->dwThreadId, pArgs->hwndParent);
329
330LExit:
331 return hr;
332}
333
334static HRESULT BAEnginePlan(
335 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
336 __in const LPVOID pvArgs,
337 __inout LPVOID pvResults
338 )
339{
340 HRESULT hr = S_OK;
341 ValidateMessageArgs(hr, pvArgs, BAENGINE_PLAN_ARGS, pArgs);
342 ValidateMessageResults(hr, pvResults, BAENGINE_PLAN_RESULTS, pResults);
343
344 hr = ExternalEnginePlan(pContext->dwThreadId, pArgs->action);
345
346LExit:
347 return hr;
348}
349
350static HRESULT BAEngineElevate(
351 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
352 __in const LPVOID pvArgs,
353 __inout LPVOID pvResults
354 )
355{
356 HRESULT hr = S_OK;
357 ValidateMessageArgs(hr, pvArgs, BAENGINE_ELEVATE_ARGS, pArgs);
358 ValidateMessageResults(hr, pvResults, BAENGINE_ELEVATE_RESULTS, pResults);
359
360 hr = ExternalEngineElevate(pContext->pEngineState, pContext->dwThreadId, pArgs->hwndParent);
361
362LExit:
363 return hr;
364}
365
366static HRESULT BAEngineApply(
367 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
368 __in const LPVOID pvArgs,
369 __inout LPVOID pvResults
370 )
371{
372 HRESULT hr = S_OK;
373 ValidateMessageArgs(hr, pvArgs, BAENGINE_APPLY_ARGS, pArgs);
374 ValidateMessageResults(hr, pvResults, BAENGINE_APPLY_RESULTS, pResults);
375
376 hr = ExternalEngineApply(pContext->dwThreadId, pArgs->hwndParent);
377
378LExit:
379 return hr;
380}
381
382static HRESULT BAEngineQuit(
383 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
384 __in const LPVOID pvArgs,
385 __inout LPVOID pvResults
386 )
387{
388 HRESULT hr = S_OK;
389 ValidateMessageArgs(hr, pvArgs, BAENGINE_QUIT_ARGS, pArgs);
390 ValidateMessageResults(hr, pvResults, BAENGINE_QUIT_RESULTS, pResults);
391
392 hr = ExternalEngineQuit(pContext->dwThreadId, pArgs->dwExitCode);
393
394LExit:
395 return hr;
396}
397
398static HRESULT BAEngineLaunchApprovedExe(
399 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
400 __in const LPVOID pvArgs,
401 __inout LPVOID pvResults
402 )
403{
404 HRESULT hr = S_OK;
405 ValidateMessageArgs(hr, pvArgs, BAENGINE_LAUNCHAPPROVEDEXE_ARGS, pArgs);
406 ValidateMessageResults(hr, pvResults, BAENGINE_LAUNCHAPPROVEDEXE_RESULTS, pResults);
407
408 hr = ExternalEngineLaunchApprovedExe(pContext->pEngineState, pContext->dwThreadId, pArgs->hwndParent, pArgs->wzApprovedExeForElevationId, pArgs->wzArguments, pArgs->dwWaitForInputIdleTimeout);
409
410LExit:
411 return hr;
412}
413
414static HRESULT BAEngineSetUpdateSource(
415 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
416 __in const LPVOID pvArgs,
417 __inout LPVOID pvResults
418 )
419{
420 HRESULT hr = S_OK;
421 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETUPDATESOURCE_ARGS, pArgs);
422 ValidateMessageResults(hr, pvResults, BAENGINE_SETUPDATESOURCE_RESULTS, pResults);
423
424 hr = ExternalEngineSetUpdateSource(pContext->pEngineState, pArgs->wzUrl);
425
426LExit:
427 return hr;
428}
429
430HRESULT WINAPI EngineForApplicationProc(
431 __in BOOTSTRAPPER_ENGINE_MESSAGE message,
432 __in const LPVOID pvArgs,
433 __inout LPVOID pvResults,
434 __in_opt LPVOID pvContext
435 )
436{
437 HRESULT hr = S_OK;
438 BOOTSTRAPPER_ENGINE_CONTEXT* pContext = reinterpret_cast<BOOTSTRAPPER_ENGINE_CONTEXT*>(pvContext);
439
440 if (!pContext || !pvArgs || !pvResults)
441 {
442 ExitFunction1(hr = E_INVALIDARG);
443 }
444
445 switch (message)
446 {
447 case BOOTSTRAPPER_ENGINE_MESSAGE_GETPACKAGECOUNT:
448 hr = BAEngineGetPackageCount(pContext, pvArgs, pvResults);
449 break;
450 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLENUMERIC:
451 hr = BAEngineGetVariableNumeric(pContext, pvArgs, pvResults);
452 break;
453 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLESTRING:
454 hr = BAEngineGetVariableString(pContext, pvArgs, pvResults);
455 break;
456 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLEVERSION:
457 hr = BAEngineGetVariableVersion(pContext, pvArgs, pvResults);
458 break;
459 case BOOTSTRAPPER_ENGINE_MESSAGE_FORMATSTRING:
460 hr = BAEngineFormatString(pContext, pvArgs, pvResults);
461 break;
462 case BOOTSTRAPPER_ENGINE_MESSAGE_ESCAPESTRING:
463 hr = BAEngineEscapeString(pContext, pvArgs, pvResults);
464 break;
465 case BOOTSTRAPPER_ENGINE_MESSAGE_EVALUATECONDITION:
466 hr = BAEngineEvaluateCondition(pContext, pvArgs, pvResults);
467 break;
468 case BOOTSTRAPPER_ENGINE_MESSAGE_LOG:
469 hr = BAEngineLog(pContext, pvArgs, pvResults);
470 break;
471 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDERROR:
472 hr = BAEngineSendEmbeddedError(pContext, pvArgs, pvResults);
473 break;
474 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDPROGRESS:
475 hr = BAEngineSendEmbeddedProgress(pContext, pvArgs, pvResults);
476 break;
477 case BOOTSTRAPPER_ENGINE_MESSAGE_SETUPDATE:
478 hr = BAEngineSetUpdate(pContext, pvArgs, pvResults);
479 break;
480 case BOOTSTRAPPER_ENGINE_MESSAGE_SETLOCALSOURCE:
481 hr = BAEngineSetLocalSource(pContext, pvArgs, pvResults);
482 break;
483 case BOOTSTRAPPER_ENGINE_MESSAGE_SETDOWNLOADSOURCE:
484 hr = BAEngineSetDownloadSource(pContext, pvArgs, pvResults);
485 break;
486 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLENUMERIC:
487 hr = BAEngineSetVariableNumeric(pContext, pvArgs, pvResults);
488 break;
489 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLESTRING:
490 hr = BAEngineSetVariableString(pContext, pvArgs, pvResults);
491 break;
492 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLEVERSION:
493 hr = BAEngineSetVariableVersion(pContext, pvArgs, pvResults);
494 break;
495 case BOOTSTRAPPER_ENGINE_MESSAGE_CLOSESPLASHSCREEN:
496 hr = BAEngineCloseSplashScreen(pContext, pvArgs, pvResults);
497 break;
498 case BOOTSTRAPPER_ENGINE_MESSAGE_DETECT:
499 hr = BAEngineDetect(pContext, pvArgs, pvResults);
500 break;
501 case BOOTSTRAPPER_ENGINE_MESSAGE_PLAN:
502 hr = BAEnginePlan(pContext, pvArgs, pvResults);
503 break;
504 case BOOTSTRAPPER_ENGINE_MESSAGE_ELEVATE:
505 hr = BAEngineElevate(pContext, pvArgs, pvResults);
506 break;
507 case BOOTSTRAPPER_ENGINE_MESSAGE_APPLY:
508 hr = BAEngineApply(pContext, pvArgs, pvResults);
509 break;
510 case BOOTSTRAPPER_ENGINE_MESSAGE_QUIT:
511 hr = BAEngineQuit(pContext, pvArgs, pvResults);
512 break;
513 case BOOTSTRAPPER_ENGINE_MESSAGE_LAUNCHAPPROVEDEXE:
514 hr = BAEngineLaunchApprovedExe(pContext, pvArgs, pvResults);
515 break;
516 case BOOTSTRAPPER_ENGINE_MESSAGE_SETUPDATESOURCE:
517 hr = BAEngineSetUpdateSource(pContext, pvArgs, pvResults);
518 break;
519 case BOOTSTRAPPER_ENGINE_MESSAGE_COMPAREVERSIONS:
520 hr = BAEngineCompareVersions(pContext, pvArgs, pvResults);
521 break;
522 default:
523 hr = E_NOTIMPL;
524 break;
525 }
526
527LExit:
528 return hr;
529}