aboutsummaryrefslogtreecommitdiff
path: root/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/balutil/inc/BalBaseBootstrapperApplicationProc.h698
1 files changed, 698 insertions, 0 deletions
diff --git a/src/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
new file mode 100644
index 00000000..4b8f4ca7
--- /dev/null
+++ b/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -0,0 +1,698 @@
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
5#include <windows.h>
6
7#include "BootstrapperEngine.h"
8#include "BootstrapperApplication.h"
9#include "IBootstrapperEngine.h"
10#include "IBootstrapperApplication.h"
11
12static HRESULT BalBaseBAProcOnDetectBegin(
13 __in IBootstrapperApplication* pBA,
14 __in BA_ONDETECTBEGIN_ARGS* pArgs,
15 __inout BA_ONDETECTBEGIN_RESULTS* pResults
16 )
17{
18 return pBA->OnDetectBegin(pArgs->fInstalled, pArgs->cPackages, &pResults->fCancel);
19}
20
21static HRESULT BalBaseBAProcOnDetectComplete(
22 __in IBootstrapperApplication* pBA,
23 __in BA_ONDETECTCOMPLETE_ARGS* pArgs,
24 __inout BA_ONDETECTCOMPLETE_RESULTS* /*pResults*/
25 )
26{
27 return pBA->OnDetectComplete(pArgs->hrStatus);
28}
29
30static HRESULT BalBaseBAProcOnPlanBegin(
31 __in IBootstrapperApplication* pBA,
32 __in BA_ONPLANBEGIN_ARGS* pArgs,
33 __inout BA_ONPLANBEGIN_RESULTS* pResults
34 )
35{
36 return pBA->OnPlanBegin(pArgs->cPackages, &pResults->fCancel);
37}
38
39static HRESULT BalBaseBAProcOnPlanComplete(
40 __in IBootstrapperApplication* pBA,
41 __in BA_ONPLANCOMPLETE_ARGS* pArgs,
42 __inout BA_ONPLANCOMPLETE_RESULTS* /*pResults*/
43 )
44{
45 return pBA->OnPlanComplete(pArgs->hrStatus);
46}
47
48static HRESULT BalBaseBAProcOnStartup(
49 __in IBootstrapperApplication* pBA,
50 __in BA_ONSTARTUP_ARGS* /*pArgs*/,
51 __inout BA_ONSTARTUP_RESULTS* /*pResults*/
52 )
53{
54 return pBA->OnStartup();
55}
56
57static HRESULT BalBaseBAProcOnShutdown(
58 __in IBootstrapperApplication* pBA,
59 __in BA_ONSHUTDOWN_ARGS* /*pArgs*/,
60 __inout BA_ONSHUTDOWN_RESULTS* pResults
61 )
62{
63 return pBA->OnShutdown(&pResults->action);
64}
65
66static HRESULT BalBaseBAProcOnSystemShutdown(
67 __in IBootstrapperApplication* pBA,
68 __in BA_ONSYSTEMSHUTDOWN_ARGS* pArgs,
69 __inout BA_ONSYSTEMSHUTDOWN_RESULTS* pResults
70 )
71{
72 return pBA->OnSystemShutdown(pArgs->dwEndSession, &pResults->fCancel);
73}
74
75static HRESULT BalBaseBAProcOnDetectForwardCompatibleBundle(
76 __in IBootstrapperApplication* pBA,
77 __in BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_ARGS* pArgs,
78 __inout BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_RESULTS* pResults
79 )
80{
81 return pBA->OnDetectForwardCompatibleBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->dw64Version, &pResults->fCancel, &pResults->fIgnoreBundle);
82}
83
84static HRESULT BalBaseBAProcOnDetectUpdateBegin(
85 __in IBootstrapperApplication* pBA,
86 __in BA_ONDETECTUPDATEBEGIN_ARGS* pArgs,
87 __inout BA_ONDETECTUPDATEBEGIN_RESULTS* pResults
88 )
89{
90 return pBA->OnDetectUpdateBegin(pArgs->wzUpdateLocation, &pResults->fCancel, &pResults->fSkip);
91}
92
93static HRESULT BalBaseBAProcOnDetectUpdate(
94 __in IBootstrapperApplication* pBA,
95 __in BA_ONDETECTUPDATE_ARGS* pArgs,
96 __inout BA_ONDETECTUPDATE_RESULTS* pResults
97 )
98{
99 return pBA->OnDetectUpdate(pArgs->wzUpdateLocation, pArgs->dw64Size, pArgs->dw64Version, pArgs->wzTitle, pArgs->wzSummary, pArgs->wzContentType, pArgs->wzContent, &pResults->fCancel, &pResults->fStopProcessingUpdates);
100}
101
102static HRESULT BalBaseBAProcOnDetectUpdateComplete(
103 __in IBootstrapperApplication* pBA,
104 __in BA_ONDETECTUPDATECOMPLETE_ARGS* pArgs,
105 __inout BA_ONDETECTUPDATECOMPLETE_RESULTS* pResults
106 )
107{
108 return pBA->OnDetectUpdateComplete(pArgs->hrStatus, &pResults->fIgnoreError);
109}
110
111static HRESULT BalBaseBAProcOnDetectRelatedBundle(
112 __in IBootstrapperApplication* pBA,
113 __in BA_ONDETECTRELATEDBUNDLE_ARGS* pArgs,
114 __inout BA_ONDETECTRELATEDBUNDLE_RESULTS* pResults
115 )
116{
117 return pBA->OnDetectRelatedBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->dw64Version, pArgs->operation, &pResults->fCancel);
118}
119
120static HRESULT BalBaseBAProcOnDetectPackageBegin(
121 __in IBootstrapperApplication* pBA,
122 __in BA_ONDETECTPACKAGEBEGIN_ARGS* pArgs,
123 __inout BA_ONDETECTPACKAGEBEGIN_RESULTS* pResults
124 )
125{
126 return pBA->OnDetectPackageBegin(pArgs->wzPackageId, &pResults->fCancel);
127}
128
129static HRESULT BalBaseBAProcOnDetectCompatiblePackage(
130 __in IBootstrapperApplication* pBA,
131 __in BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS* pArgs,
132 __inout BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS* pResults
133 )
134{
135 return pBA->OnDetectCompatibleMsiPackage(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->dw64CompatiblePackageVersion, &pResults->fCancel);
136}
137
138static HRESULT BalBaseBAProcOnDetectRelatedMsiPackage(
139 __in IBootstrapperApplication* pBA,
140 __in BA_ONDETECTRELATEDMSIPACKAGE_ARGS* pArgs,
141 __inout BA_ONDETECTRELATEDMSIPACKAGE_RESULTS* pResults
142 )
143{
144 return pBA->OnDetectRelatedMsiPackage(pArgs->wzPackageId, pArgs->wzUpgradeCode, pArgs->wzProductCode, pArgs->fPerMachine, pArgs->dw64Version, pArgs->operation, &pResults->fCancel);
145}
146
147static HRESULT BalBaseBAProcOnDetectTargetMsiPackage(
148 __in IBootstrapperApplication* pBA,
149 __in BA_ONDETECTTARGETMSIPACKAGE_ARGS* pArgs,
150 __inout BA_ONDETECTTARGETMSIPACKAGE_RESULTS* pResults
151 )
152{
153 return pBA->OnDetectTargetMsiPackage(pArgs->wzPackageId, pArgs->wzProductCode, pArgs->patchState, &pResults->fCancel);
154}
155
156static HRESULT BalBaseBAProcOnDetectMsiFeature(
157 __in IBootstrapperApplication* pBA,
158 __in BA_ONDETECTMSIFEATURE_ARGS* pArgs,
159 __inout BA_ONDETECTMSIFEATURE_RESULTS* pResults
160 )
161{
162 return pBA->OnDetectMsiFeature(pArgs->wzPackageId, pArgs->wzFeatureId, pArgs->state, &pResults->fCancel);
163}
164
165static HRESULT BalBaseBAProcOnDetectPackageComplete(
166 __in IBootstrapperApplication* pBA,
167 __in BA_ONDETECTPACKAGECOMPLETE_ARGS* pArgs,
168 __inout BA_ONDETECTPACKAGECOMPLETE_RESULTS* /*pResults*/
169 )
170{
171 return pBA->OnDetectPackageComplete(pArgs->wzPackageId, pArgs->hrStatus, pArgs->state);
172}
173
174static HRESULT BalBaseBAProcOnPlanRelatedBundle(
175 __in IBootstrapperApplication* pBA,
176 __in BA_ONPLANRELATEDBUNDLE_ARGS* pArgs,
177 __inout BA_ONPLANRELATEDBUNDLE_RESULTS* pResults
178 )
179{
180 return pBA->OnPlanRelatedBundle(pArgs->wzBundleId, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
181}
182
183static HRESULT BalBaseBAProcOnPlanPackageBegin(
184 __in IBootstrapperApplication* pBA,
185 __in BA_ONPLANPACKAGEBEGIN_ARGS* pArgs,
186 __inout BA_ONPLANPACKAGEBEGIN_RESULTS* pResults
187 )
188{
189 return pBA->OnPlanPackageBegin(pArgs->wzPackageId, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
190}
191
192static HRESULT BalBaseBAProcOnPlanCompatibleMsiPackageBegin(
193 __in IBootstrapperApplication* pBA,
194 __in BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS* pArgs,
195 __inout BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS* pResults
196 )
197{
198 return pBA->OnPlanCompatibleMsiPackageBegin(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->dw64CompatiblePackageVersion, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
199}
200
201static HRESULT BalBaseBAProcOnPlanCompatibleMsiPackageComplete(
202 __in IBootstrapperApplication* pBA,
203 __in BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS* pArgs,
204 __inout BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS* /*pResults*/
205 )
206{
207 return pBA->OnPlanCompatibleMsiPackageComplete(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->hrStatus, pArgs->state, pArgs->requested, pArgs->execute, pArgs->rollback);
208}
209
210static HRESULT BalBaseBAProcOnPlanTargetMsiPackage(
211 __in IBootstrapperApplication* pBA,
212 __in BA_ONPLANTARGETMSIPACKAGE_ARGS* pArgs,
213 __inout BA_ONPLANTARGETMSIPACKAGE_RESULTS* pResults
214 )
215{
216 return pBA->OnPlanTargetMsiPackage(pArgs->wzPackageId, pArgs->wzProductCode, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
217}
218
219static HRESULT BalBaseBAProcOnPlanMsiFeature(
220 __in IBootstrapperApplication* pBA,
221 __in BA_ONPLANMSIFEATURE_ARGS* pArgs,
222 __inout BA_ONPLANMSIFEATURE_RESULTS* pResults
223 )
224{
225 return pBA->OnPlanMsiFeature(pArgs->wzPackageId, pArgs->wzFeatureId, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
226}
227
228static HRESULT BalBaseBAProcOnPlanPackageComplete(
229 __in IBootstrapperApplication* pBA,
230 __in BA_ONPLANPACKAGECOMPLETE_ARGS* pArgs,
231 __inout BA_ONPLANPACKAGECOMPLETE_RESULTS* /*pResults*/
232 )
233{
234 return pBA->OnPlanPackageComplete(pArgs->wzPackageId, pArgs->hrStatus, pArgs->state, pArgs->requested, pArgs->execute, pArgs->rollback);
235}
236
237static HRESULT BalBaseBAProcOnApplyBegin(
238 __in IBootstrapperApplication* pBA,
239 __in BA_ONAPPLYBEGIN_ARGS* pArgs,
240 __inout BA_ONAPPLYBEGIN_RESULTS* pResults
241 )
242{
243 return pBA->OnApplyBegin(pArgs->dwPhaseCount, &pResults->fCancel);
244}
245
246static HRESULT BalBaseBAProcOnElevateBegin(
247 __in IBootstrapperApplication* pBA,
248 __in BA_ONELEVATEBEGIN_ARGS* /*pArgs*/,
249 __inout BA_ONELEVATEBEGIN_RESULTS* pResults
250 )
251{
252 return pBA->OnElevateBegin(&pResults->fCancel);
253}
254
255static HRESULT BalBaseBAProcOnElevateComplete(
256 __in IBootstrapperApplication* pBA,
257 __in BA_ONELEVATECOMPLETE_ARGS* pArgs,
258 __inout BA_ONELEVATECOMPLETE_RESULTS* /*pResults*/
259 )
260{
261 return pBA->OnElevateComplete(pArgs->hrStatus);
262}
263
264static HRESULT BalBaseBAProcOnProgress(
265 __in IBootstrapperApplication* pBA,
266 __in BA_ONPROGRESS_ARGS* pArgs,
267 __inout BA_ONPROGRESS_RESULTS* pResults
268 )
269{
270 return pBA->OnProgress(pArgs->dwProgressPercentage, pArgs->dwOverallPercentage, &pResults->fCancel);
271}
272
273static HRESULT BalBaseBAProcOnError(
274 __in IBootstrapperApplication* pBA,
275 __in BA_ONERROR_ARGS* pArgs,
276 __inout BA_ONERROR_RESULTS* pResults
277 )
278{
279 return pBA->OnError(pArgs->errorType, pArgs->wzPackageId, pArgs->dwCode, pArgs->wzError, pArgs->dwUIHint, pArgs->cData, pArgs->rgwzData, pArgs->nRecommendation, &pResults->nResult);
280}
281
282static HRESULT BalBaseBAProcOnRegisterBegin(
283 __in IBootstrapperApplication* pBA,
284 __in BA_ONREGISTERBEGIN_ARGS* /*pArgs*/,
285 __inout BA_ONREGISTERBEGIN_RESULTS* pResults
286 )
287{
288 return pBA->OnRegisterBegin(&pResults->fCancel);
289}
290
291static HRESULT BalBaseBAProcOnRegisterComplete(
292 __in IBootstrapperApplication* pBA,
293 __in BA_ONREGISTERCOMPLETE_ARGS* pArgs,
294 __inout BA_ONREGISTERCOMPLETE_RESULTS* /*pResults*/
295 )
296{
297 return pBA->OnRegisterComplete(pArgs->hrStatus);
298}
299
300static HRESULT BalBaseBAProcOnCacheBegin(
301 __in IBootstrapperApplication* pBA,
302 __in BA_ONCACHEBEGIN_ARGS* /*pArgs*/,
303 __inout BA_ONCACHEBEGIN_RESULTS* pResults
304 )
305{
306 return pBA->OnCacheBegin(&pResults->fCancel);
307}
308
309static HRESULT BalBaseBAProcOnCachePackageBegin(
310 __in IBootstrapperApplication* pBA,
311 __in BA_ONCACHEPACKAGEBEGIN_ARGS* pArgs,
312 __inout BA_ONCACHEPACKAGEBEGIN_RESULTS* pResults
313 )
314{
315 return pBA->OnCachePackageBegin(pArgs->wzPackageId, pArgs->cCachePayloads, pArgs->dw64PackageCacheSize, &pResults->fCancel);
316}
317
318static HRESULT BalBaseBAProcOnCacheAcquireBegin(
319 __in IBootstrapperApplication* pBA,
320 __in BA_ONCACHEACQUIREBEGIN_ARGS* pArgs,
321 __inout BA_ONCACHEACQUIREBEGIN_RESULTS* pResults
322 )
323{
324 return pBA->OnCacheAcquireBegin(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->operation, pArgs->wzSource, &pResults->fCancel);
325}
326
327static HRESULT BalBaseBAProcOnCacheAcquireProgress(
328 __in IBootstrapperApplication* pBA,
329 __in BA_ONCACHEACQUIREPROGRESS_ARGS* pArgs,
330 __inout BA_ONCACHEACQUIREPROGRESS_RESULTS* pResults
331 )
332{
333 return pBA->OnCacheAcquireProgress(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->dw64Progress, pArgs->dw64Total, pArgs->dwOverallPercentage, &pResults->fCancel);
334}
335
336static HRESULT BalBaseBAProcOnResolveSource(
337 __in IBootstrapperApplication* pBA,
338 __in BA_ONRESOLVESOURCE_ARGS* pArgs,
339 __inout BA_ONRESOLVESOURCE_RESULTS* pResults
340 )
341{
342 return pBA->OnResolveSource(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->wzLocalSource, pArgs->wzDownloadSource, pArgs->recommendation, &pResults->action, &pResults->fCancel);
343}
344
345static HRESULT BalBaseBAProcOnCacheAcquireComplete(
346 __in IBootstrapperApplication* pBA,
347 __in BA_ONCACHEACQUIRECOMPLETE_ARGS* pArgs,
348 __inout BA_ONCACHEACQUIRECOMPLETE_RESULTS* pResults
349 )
350{
351 return pBA->OnCacheAcquireComplete(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->hrStatus, pArgs->recommendation, &pResults->action);
352}
353
354static HRESULT BalBaseBAProcOnCacheVerifyBegin(
355 __in IBootstrapperApplication* pBA,
356 __in BA_ONCACHEVERIFYBEGIN_ARGS* pArgs,
357 __inout BA_ONCACHEVERIFYBEGIN_RESULTS* pResults
358 )
359{
360 return pBA->OnCacheVerifyBegin(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, &pResults->fCancel);
361}
362
363static HRESULT BalBaseBAProcOnCacheVerifyComplete(
364 __in IBootstrapperApplication* pBA,
365 __in BA_ONCACHEVERIFYCOMPLETE_ARGS* pArgs,
366 __inout BA_ONCACHEVERIFYCOMPLETE_RESULTS* pResults
367 )
368{
369 return pBA->OnCacheVerifyComplete(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->hrStatus, pArgs->recommendation, &pResults->action);
370}
371
372static HRESULT BalBaseBAProcOnCachePackageComplete(
373 __in IBootstrapperApplication* pBA,
374 __in BA_ONCACHEPACKAGECOMPLETE_ARGS* pArgs,
375 __inout BA_ONCACHEPACKAGECOMPLETE_RESULTS* pResults
376 )
377{
378 return pBA->OnCachePackageComplete(pArgs->wzPackageId, pArgs->hrStatus, pArgs->recommendation, &pResults->action);
379}
380
381static HRESULT BalBaseBAProcOnCacheComplete(
382 __in IBootstrapperApplication* pBA,
383 __in BA_ONCACHECOMPLETE_ARGS* pArgs,
384 __inout BA_ONCACHECOMPLETE_RESULTS* /*pResults*/
385 )
386{
387 return pBA->OnCacheComplete(pArgs->hrStatus);
388}
389
390static HRESULT BalBaseBAProcOnExecuteBegin(
391 __in IBootstrapperApplication* pBA,
392 __in BA_ONEXECUTEBEGIN_ARGS* pArgs,
393 __inout BA_ONEXECUTEBEGIN_RESULTS* pResults
394 )
395{
396 return pBA->OnExecuteBegin(pArgs->cExecutingPackages, &pResults->fCancel);
397}
398
399static HRESULT BalBaseBAProcOnExecutePackageBegin(
400 __in IBootstrapperApplication* pBA,
401 __in BA_ONEXECUTEPACKAGEBEGIN_ARGS* pArgs,
402 __inout BA_ONEXECUTEPACKAGEBEGIN_RESULTS* pResults
403 )
404{
405 return pBA->OnExecutePackageBegin(pArgs->wzPackageId, pArgs->fExecute, &pResults->fCancel);
406}
407
408static HRESULT BalBaseBAProcOnExecutePatchTarget(
409 __in IBootstrapperApplication* pBA,
410 __in BA_ONEXECUTEPATCHTARGET_ARGS* pArgs,
411 __inout BA_ONEXECUTEPATCHTARGET_RESULTS* pResults
412 )
413{
414 return pBA->OnExecutePatchTarget(pArgs->wzPackageId, pArgs->wzTargetProductCode, &pResults->fCancel);
415}
416
417static HRESULT BalBaseBAProcOnExecuteProgress(
418 __in IBootstrapperApplication* pBA,
419 __in BA_ONEXECUTEPROGRESS_ARGS* pArgs,
420 __inout BA_ONEXECUTEPROGRESS_RESULTS* pResults
421 )
422{
423 return pBA->OnExecuteProgress(pArgs->wzPackageId, pArgs->dwProgressPercentage, pArgs->dwOverallPercentage, &pResults->fCancel);
424}
425
426static HRESULT BalBaseBAProcOnExecuteMsiMessage(
427 __in IBootstrapperApplication* pBA,
428 __in BA_ONEXECUTEMSIMESSAGE_ARGS* pArgs,
429 __inout BA_ONEXECUTEMSIMESSAGE_RESULTS* pResults
430 )
431{
432 return pBA->OnExecuteMsiMessage(pArgs->wzPackageId, pArgs->messageType, pArgs->dwUIHint, pArgs->wzMessage, pArgs->cData, pArgs->rgwzData, pArgs->nRecommendation, &pResults->nResult);
433}
434
435static HRESULT BalBaseBAProcOnExecuteFilesInUse(
436 __in IBootstrapperApplication* pBA,
437 __in BA_ONEXECUTEFILESINUSE_ARGS* pArgs,
438 __inout BA_ONEXECUTEFILESINUSE_RESULTS* pResults
439 )
440{
441 return pBA->OnExecuteFilesInUse(pArgs->wzPackageId, pArgs->cFiles, pArgs->rgwzFiles, pArgs->nRecommendation, &pResults->nResult);
442}
443
444static HRESULT BalBaseBAProcOnExecutePackageComplete(
445 __in IBootstrapperApplication* pBA,
446 __in BA_ONEXECUTEPACKAGECOMPLETE_ARGS* pArgs,
447 __inout BA_ONEXECUTEPACKAGECOMPLETE_RESULTS* pResults
448 )
449{
450 return pBA->OnExecutePackageComplete(pArgs->wzPackageId, pArgs->hrStatus, pArgs->restart, pArgs->recommendation, &pResults->action);
451}
452
453static HRESULT BalBaseBAProcOnExecuteComplete(
454 __in IBootstrapperApplication* pBA,
455 __in BA_ONEXECUTECOMPLETE_ARGS* pArgs,
456 __inout BA_ONEXECUTECOMPLETE_RESULTS* /*pResults*/
457 )
458{
459 return pBA->OnExecuteComplete(pArgs->hrStatus);
460}
461
462static HRESULT BalBaseBAProcOnUnregisterBegin(
463 __in IBootstrapperApplication* pBA,
464 __in BA_ONUNREGISTERBEGIN_ARGS* /*pArgs*/,
465 __inout BA_ONUNREGISTERBEGIN_RESULTS* pResults
466 )
467{
468 return pBA->OnUnregisterBegin(&pResults->fCancel);
469}
470
471static HRESULT BalBaseBAProcOnUnregisterComplete(
472 __in IBootstrapperApplication* pBA,
473 __in BA_ONUNREGISTERCOMPLETE_ARGS* pArgs,
474 __inout BA_ONUNREGISTERCOMPLETE_RESULTS* /*pResults*/
475 )
476{
477 return pBA->OnUnregisterComplete(pArgs->hrStatus);
478}
479
480static HRESULT BalBaseBAProcOnApplyComplete(
481 __in IBootstrapperApplication* pBA,
482 __in BA_ONAPPLYCOMPLETE_ARGS* pArgs,
483 __inout BA_ONAPPLYCOMPLETE_RESULTS* pResults
484 )
485{
486 return pBA->OnApplyComplete(pArgs->hrStatus, pArgs->restart, pArgs->recommendation, &pResults->action);
487}
488
489static HRESULT BalBaseBAProcOnLaunchApprovedExeBegin(
490 __in IBootstrapperApplication* pBA,
491 __in BA_ONLAUNCHAPPROVEDEXEBEGIN_ARGS* /*pArgs*/,
492 __inout BA_ONLAUNCHAPPROVEDEXEBEGIN_RESULTS* pResults
493 )
494{
495 return pBA->OnLaunchApprovedExeBegin(&pResults->fCancel);
496}
497
498static HRESULT BalBaseBAProcOnLaunchApprovedExeComplete(
499 __in IBootstrapperApplication* pBA,
500 __in BA_ONLAUNCHAPPROVEDEXECOMPLETE_ARGS* pArgs,
501 __inout BA_ONLAUNCHAPPROVEDEXECOMPLETE_RESULTS* /*pResults*/
502 )
503{
504 return pBA->OnLaunchApprovedExeComplete(pArgs->hrStatus, pArgs->dwProcessId);
505}
506
507/*******************************************************************
508BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication.
509 Provides a default mapping between the new message based BA interface and
510 the old COM-based BA interface.
511
512*******************************************************************/
513static HRESULT WINAPI BalBaseBootstrapperApplicationProc(
514 __in BOOTSTRAPPER_APPLICATION_MESSAGE message,
515 __in const LPVOID pvArgs,
516 __inout LPVOID pvResults,
517 __in_opt LPVOID pvContext
518 )
519{
520 IBootstrapperApplication* pBA = reinterpret_cast<IBootstrapperApplication*>(pvContext);
521 HRESULT hr = pBA->BAProc(message, pvArgs, pvResults, pvContext);
522
523 if (E_NOTIMPL == hr)
524 {
525 switch (message)
526 {
527 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTBEGIN:
528 hr = BalBaseBAProcOnDetectBegin(pBA, reinterpret_cast<BA_ONDETECTBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTBEGIN_RESULTS*>(pvResults));
529 break;
530 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPLETE:
531 hr = BalBaseBAProcOnDetectComplete(pBA, reinterpret_cast<BA_ONDETECTCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTCOMPLETE_RESULTS*>(pvResults));
532 break;
533 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANBEGIN:
534 hr = BalBaseBAProcOnPlanBegin(pBA, reinterpret_cast<BA_ONPLANBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANBEGIN_RESULTS*>(pvResults));
535 break;
536 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPLETE:
537 hr = BalBaseBAProcOnPlanComplete(pBA, reinterpret_cast<BA_ONPLANCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANCOMPLETE_RESULTS*>(pvResults));
538 break;
539 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSTARTUP:
540 hr = BalBaseBAProcOnStartup(pBA, reinterpret_cast<BA_ONSTARTUP_ARGS*>(pvArgs), reinterpret_cast<BA_ONSTARTUP_RESULTS*>(pvResults));
541 break;
542 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSHUTDOWN:
543 hr = BalBaseBAProcOnShutdown(pBA, reinterpret_cast<BA_ONSHUTDOWN_ARGS*>(pvArgs), reinterpret_cast<BA_ONSHUTDOWN_RESULTS*>(pvResults));
544 break;
545 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSYSTEMSHUTDOWN:
546 hr = BalBaseBAProcOnSystemShutdown(pBA, reinterpret_cast<BA_ONSYSTEMSHUTDOWN_ARGS*>(pvArgs), reinterpret_cast<BA_ONSYSTEMSHUTDOWN_RESULTS*>(pvResults));
547 break;
548 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTFORWARDCOMPATIBLEBUNDLE:
549 hr = BalBaseBAProcOnDetectForwardCompatibleBundle(pBA, reinterpret_cast<BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_RESULTS*>(pvResults));
550 break;
551 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTUPDATEBEGIN:
552 hr = BalBaseBAProcOnDetectUpdateBegin(pBA, reinterpret_cast<BA_ONDETECTUPDATEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTUPDATEBEGIN_RESULTS*>(pvResults));
553 break;
554 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTUPDATE:
555 hr = BalBaseBAProcOnDetectUpdate(pBA, reinterpret_cast<BA_ONDETECTUPDATE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTUPDATE_RESULTS*>(pvResults));
556 break;
557 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTUPDATECOMPLETE:
558 hr = BalBaseBAProcOnDetectUpdateComplete(pBA, reinterpret_cast<BA_ONDETECTUPDATECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTUPDATECOMPLETE_RESULTS*>(pvResults));
559 break;
560 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLE:
561 hr = BalBaseBAProcOnDetectRelatedBundle(pBA, reinterpret_cast<BA_ONDETECTRELATEDBUNDLE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTRELATEDBUNDLE_RESULTS*>(pvResults));
562 break;
563 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGEBEGIN:
564 hr = BalBaseBAProcOnDetectPackageBegin(pBA, reinterpret_cast<BA_ONDETECTPACKAGEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTPACKAGEBEGIN_RESULTS*>(pvResults));
565 break;
566 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE:
567 hr = BalBaseBAProcOnDetectCompatiblePackage(pBA, reinterpret_cast<BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS*>(pvResults));
568 break;
569 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDMSIPACKAGE:
570 hr = BalBaseBAProcOnDetectRelatedMsiPackage(pBA, reinterpret_cast<BA_ONDETECTRELATEDMSIPACKAGE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTRELATEDMSIPACKAGE_RESULTS*>(pvResults));
571 break;
572 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTTARGETMSIPACKAGE:
573 hr = BalBaseBAProcOnDetectTargetMsiPackage(pBA, reinterpret_cast<BA_ONDETECTTARGETMSIPACKAGE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTTARGETMSIPACKAGE_RESULTS*>(pvResults));
574 break;
575 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTMSIFEATURE:
576 hr = BalBaseBAProcOnDetectMsiFeature(pBA, reinterpret_cast<BA_ONDETECTMSIFEATURE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTMSIFEATURE_RESULTS*>(pvResults));
577 break;
578 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGECOMPLETE:
579 hr = BalBaseBAProcOnDetectPackageComplete(pBA, reinterpret_cast<BA_ONDETECTPACKAGECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONDETECTPACKAGECOMPLETE_RESULTS*>(pvResults));
580 break;
581 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLE:
582 hr = BalBaseBAProcOnPlanRelatedBundle(pBA, reinterpret_cast<BA_ONPLANRELATEDBUNDLE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANRELATEDBUNDLE_RESULTS*>(pvResults));
583 break;
584 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGEBEGIN:
585 hr = BalBaseBAProcOnPlanPackageBegin(pBA, reinterpret_cast<BA_ONPLANPACKAGEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANPACKAGEBEGIN_RESULTS*>(pvResults));
586 break;
587 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN:
588 hr = BalBaseBAProcOnPlanCompatibleMsiPackageBegin(pBA, reinterpret_cast<BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS*>(pvResults));
589 break;
590 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE:
591 hr = BalBaseBAProcOnPlanCompatibleMsiPackageComplete(pBA, reinterpret_cast<BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS*>(pvResults));
592 break;
593 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANTARGETMSIPACKAGE:
594 hr = BalBaseBAProcOnPlanTargetMsiPackage(pBA, reinterpret_cast<BA_ONPLANTARGETMSIPACKAGE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANTARGETMSIPACKAGE_RESULTS*>(pvResults));
595 break;
596 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANMSIFEATURE:
597 hr = BalBaseBAProcOnPlanMsiFeature(pBA, reinterpret_cast<BA_ONPLANMSIFEATURE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANMSIFEATURE_RESULTS*>(pvResults));
598 break;
599 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGECOMPLETE:
600 hr = BalBaseBAProcOnPlanPackageComplete(pBA, reinterpret_cast<BA_ONPLANPACKAGECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANPACKAGECOMPLETE_RESULTS*>(pvResults));
601 break;
602 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYBEGIN:
603 hr = BalBaseBAProcOnApplyBegin(pBA, reinterpret_cast<BA_ONAPPLYBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONAPPLYBEGIN_RESULTS*>(pvResults));
604 break;
605 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONELEVATEBEGIN:
606 hr = BalBaseBAProcOnElevateBegin(pBA, reinterpret_cast<BA_ONELEVATEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONELEVATEBEGIN_RESULTS*>(pvResults));
607 break;
608 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONELEVATECOMPLETE:
609 hr = BalBaseBAProcOnElevateComplete(pBA, reinterpret_cast<BA_ONELEVATECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONELEVATECOMPLETE_RESULTS*>(pvResults));
610 break;
611 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPROGRESS:
612 hr = BalBaseBAProcOnProgress(pBA, reinterpret_cast<BA_ONPROGRESS_ARGS*>(pvArgs), reinterpret_cast<BA_ONPROGRESS_RESULTS*>(pvResults));
613 break;
614 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONERROR:
615 hr = BalBaseBAProcOnError(pBA, reinterpret_cast<BA_ONERROR_ARGS*>(pvArgs), reinterpret_cast<BA_ONERROR_RESULTS*>(pvResults));
616 break;
617 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONREGISTERBEGIN:
618 hr = BalBaseBAProcOnRegisterBegin(pBA, reinterpret_cast<BA_ONREGISTERBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONREGISTERBEGIN_RESULTS*>(pvResults));
619 break;
620 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONREGISTERCOMPLETE:
621 hr = BalBaseBAProcOnRegisterComplete(pBA, reinterpret_cast<BA_ONREGISTERCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONREGISTERCOMPLETE_RESULTS*>(pvResults));
622 break;
623 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEBEGIN:
624 hr = BalBaseBAProcOnCacheBegin(pBA, reinterpret_cast<BA_ONCACHEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEBEGIN_RESULTS*>(pvResults));
625 break;
626 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPACKAGEBEGIN:
627 hr = BalBaseBAProcOnCachePackageBegin(pBA, reinterpret_cast<BA_ONCACHEPACKAGEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEPACKAGEBEGIN_RESULTS*>(pvResults));
628 break;
629 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN:
630 hr = BalBaseBAProcOnCacheAcquireBegin(pBA, reinterpret_cast<BA_ONCACHEACQUIREBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIREBEGIN_RESULTS*>(pvResults));
631 break;
632 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREPROGRESS:
633 hr = BalBaseBAProcOnCacheAcquireProgress(pBA, reinterpret_cast<BA_ONCACHEACQUIREPROGRESS_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIREPROGRESS_RESULTS*>(pvResults));
634 break;
635 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONRESOLVESOURCE:
636 hr = BalBaseBAProcOnResolveSource(pBA, reinterpret_cast<BA_ONRESOLVESOURCE_ARGS*>(pvArgs), reinterpret_cast<BA_ONRESOLVESOURCE_RESULTS*>(pvResults));
637 break;
638 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE:
639 hr = BalBaseBAProcOnCacheAcquireComplete(pBA, reinterpret_cast<BA_ONCACHEACQUIRECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIRECOMPLETE_RESULTS*>(pvResults));
640 break;
641 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEVERIFYBEGIN:
642 hr = BalBaseBAProcOnCacheVerifyBegin(pBA, reinterpret_cast<BA_ONCACHEVERIFYBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEVERIFYBEGIN_RESULTS*>(pvResults));
643 break;
644 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEVERIFYCOMPLETE:
645 hr = BalBaseBAProcOnCacheVerifyComplete(pBA, reinterpret_cast<BA_ONCACHEVERIFYCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEVERIFYCOMPLETE_RESULTS*>(pvResults));
646 break;
647 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPACKAGECOMPLETE:
648 hr = BalBaseBAProcOnCachePackageComplete(pBA, reinterpret_cast<BA_ONCACHEPACKAGECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEPACKAGECOMPLETE_RESULTS*>(pvResults));
649 break;
650 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECOMPLETE:
651 hr = BalBaseBAProcOnCacheComplete(pBA, reinterpret_cast<BA_ONCACHECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHECOMPLETE_RESULTS*>(pvResults));
652 break;
653 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEBEGIN:
654 hr = BalBaseBAProcOnExecuteBegin(pBA, reinterpret_cast<BA_ONEXECUTEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEBEGIN_RESULTS*>(pvResults));
655 break;
656 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPACKAGEBEGIN:
657 hr = BalBaseBAProcOnExecutePackageBegin(pBA, reinterpret_cast<BA_ONEXECUTEPACKAGEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEPACKAGEBEGIN_RESULTS*>(pvResults));
658 break;
659 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPATCHTARGET:
660 hr = BalBaseBAProcOnExecutePatchTarget(pBA, reinterpret_cast<BA_ONEXECUTEPATCHTARGET_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEPATCHTARGET_RESULTS*>(pvResults));
661 break;
662 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPROGRESS:
663 hr = BalBaseBAProcOnExecuteProgress(pBA, reinterpret_cast<BA_ONEXECUTEPROGRESS_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEPROGRESS_RESULTS*>(pvResults));
664 break;
665 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEMSIMESSAGE:
666 hr = BalBaseBAProcOnExecuteMsiMessage(pBA, reinterpret_cast<BA_ONEXECUTEMSIMESSAGE_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEMSIMESSAGE_RESULTS*>(pvResults));
667 break;
668 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEFILESINUSE:
669 hr = BalBaseBAProcOnExecuteFilesInUse(pBA, reinterpret_cast<BA_ONEXECUTEFILESINUSE_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEFILESINUSE_RESULTS*>(pvResults));
670 break;
671 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPACKAGECOMPLETE:
672 hr = BalBaseBAProcOnExecutePackageComplete(pBA, reinterpret_cast<BA_ONEXECUTEPACKAGECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTEPACKAGECOMPLETE_RESULTS*>(pvResults));
673 break;
674 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTECOMPLETE:
675 hr = BalBaseBAProcOnExecuteComplete(pBA, reinterpret_cast<BA_ONEXECUTECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONEXECUTECOMPLETE_RESULTS*>(pvResults));
676 break;
677 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONUNREGISTERBEGIN:
678 hr = BalBaseBAProcOnUnregisterBegin(pBA, reinterpret_cast<BA_ONUNREGISTERBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONUNREGISTERBEGIN_RESULTS*>(pvResults));
679 break;
680 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONUNREGISTERCOMPLETE:
681 hr = BalBaseBAProcOnUnregisterComplete(pBA, reinterpret_cast<BA_ONUNREGISTERCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONUNREGISTERCOMPLETE_RESULTS*>(pvResults));
682 break;
683 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYCOMPLETE:
684 hr = BalBaseBAProcOnApplyComplete(pBA, reinterpret_cast<BA_ONAPPLYCOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONAPPLYCOMPLETE_RESULTS*>(pvResults));
685 break;
686 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONLAUNCHAPPROVEDEXEBEGIN:
687 hr = BalBaseBAProcOnLaunchApprovedExeBegin(pBA, reinterpret_cast<BA_ONLAUNCHAPPROVEDEXEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONLAUNCHAPPROVEDEXEBEGIN_RESULTS*>(pvResults));
688 break;
689 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONLAUNCHAPPROVEDEXECOMPLETE:
690 hr = BalBaseBAProcOnLaunchApprovedExeComplete(pBA, reinterpret_cast<BA_ONLAUNCHAPPROVEDEXECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONLAUNCHAPPROVEDEXECOMPLETE_RESULTS*>(pvResults));
691 break;
692 }
693 }
694
695 pBA->BAProcFallback(message, pvArgs, pvResults, &hr, pvContext);
696
697 return hr;
698}