aboutsummaryrefslogtreecommitdiff
path: root/src/engine/EngineForApplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/EngineForApplication.cpp')
-rw-r--r--src/engine/EngineForApplication.cpp216
1 files changed, 139 insertions, 77 deletions
diff --git a/src/engine/EngineForApplication.cpp b/src/engine/EngineForApplication.cpp
index 87a0782c..e3ce7670 100644
--- a/src/engine/EngineForApplication.cpp
+++ b/src/engine/EngineForApplication.cpp
@@ -5,31 +5,36 @@
5 5
6static HRESULT CopyStringToBA( 6static HRESULT CopyStringToBA(
7 __in LPWSTR wzValue, 7 __in LPWSTR wzValue,
8 __in LPWSTR wzBuffer, 8 __in_opt LPWSTR wzBuffer,
9 __inout DWORD* pcchBuffer 9 __inout DWORD* pcchBuffer
10 ); 10 );
11 11
12static HRESULT BAEngineGetPackageCount( 12static HRESULT BAEngineGetPackageCount(
13 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 13 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
14 __in BAENGINE_GETPACKAGECOUNT_ARGS* /*pArgs*/, 14 __in const LPVOID pvArgs,
15 __in BAENGINE_GETPACKAGECOUNT_RESULTS* pResults 15 __inout LPVOID pvResults
16 ) 16 )
17{ 17{
18 HRESULT hr = S_OK; 18 HRESULT hr = S_OK;
19 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETPACKAGECOUNT_ARGS, pArgs);
20 ValidateMessageResults(hr, pvResults, BAENGINE_GETPACKAGECOUNT_RESULTS, pResults);
19 DWORD* pcPackages = &pResults->cPackages; 21 DWORD* pcPackages = &pResults->cPackages;
20 22
21 *pcPackages = pContext->pEngineState->packages.cPackages; 23 *pcPackages = pContext->pEngineState->packages.cPackages;
22 24
25LExit:
23 return hr; 26 return hr;
24} 27}
25 28
26static HRESULT BAEngineGetVariableNumeric( 29static HRESULT BAEngineGetVariableNumeric(
27 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 30 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
28 __in BAENGINE_GETVARIABLENUMERIC_ARGS* pArgs, 31 __in const LPVOID pvArgs,
29 __in BAENGINE_GETVARIABLENUMERIC_RESULTS* pResults 32 __inout LPVOID pvResults
30 ) 33 )
31{ 34{
32 HRESULT hr = S_OK; 35 HRESULT hr = S_OK;
36 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLENUMERIC_ARGS, pArgs);
37 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLENUMERIC_RESULTS, pResults);
33 LPCWSTR wzVariable = pArgs->wzVariable; 38 LPCWSTR wzVariable = pArgs->wzVariable;
34 LONGLONG* pllValue = &pResults->llValue; 39 LONGLONG* pllValue = &pResults->llValue;
35 40
@@ -42,17 +47,20 @@ static HRESULT BAEngineGetVariableNumeric(
42 hr = E_INVALIDARG; 47 hr = E_INVALIDARG;
43 } 48 }
44 49
50LExit:
45 return hr; 51 return hr;
46} 52}
47 53
48static HRESULT BAEngineGetVariableString( 54static HRESULT BAEngineGetVariableString(
49 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 55 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
50 __in BAENGINE_GETVARIABLESTRING_ARGS* pArgs, 56 __in const LPVOID pvArgs,
51 __in BAENGINE_GETVARIABLESTRING_RESULTS* pResults 57 __inout LPVOID pvResults
52 ) 58 )
53{ 59{
54 HRESULT hr = S_OK; 60 HRESULT hr = S_OK;
55 LPWSTR sczValue = NULL; 61 LPWSTR sczValue = NULL;
62 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLESTRING_ARGS, pArgs);
63 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLESTRING_RESULTS, pResults);
56 LPCWSTR wzVariable = pArgs->wzVariable; 64 LPCWSTR wzVariable = pArgs->wzVariable;
57 LPWSTR wzValue = pResults->wzValue; 65 LPWSTR wzValue = pResults->wzValue;
58 DWORD* pcchValue = &pResults->cchValue; 66 DWORD* pcchValue = &pResults->cchValue;
@@ -70,18 +78,21 @@ static HRESULT BAEngineGetVariableString(
70 hr = E_INVALIDARG; 78 hr = E_INVALIDARG;
71 } 79 }
72 80
81LExit:
73 StrSecureZeroFreeString(sczValue); 82 StrSecureZeroFreeString(sczValue);
74 return hr; 83 return hr;
75} 84}
76 85
77static HRESULT BAEngineGetVariableVersion( 86static HRESULT BAEngineGetVariableVersion(
78 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 87 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
79 __in BAENGINE_GETVARIABLEVERSION_ARGS* pArgs, 88 __in const LPVOID pvArgs,
80 __in BAENGINE_GETVARIABLEVERSION_RESULTS* pResults 89 __inout LPVOID pvResults
81 ) 90 )
82{ 91{
83 HRESULT hr = S_OK; 92 HRESULT hr = S_OK;
84 VERUTIL_VERSION* pVersion = NULL; 93 VERUTIL_VERSION* pVersion = NULL;
94 ValidateMessageArgs(hr, pvArgs, BAENGINE_GETVARIABLEVERSION_ARGS, pArgs);
95 ValidateMessageResults(hr, pvResults, BAENGINE_GETVARIABLEVERSION_RESULTS, pResults);
85 LPCWSTR wzVariable = pArgs->wzVariable; 96 LPCWSTR wzVariable = pArgs->wzVariable;
86 LPWSTR wzValue = pResults->wzValue; 97 LPWSTR wzValue = pResults->wzValue;
87 DWORD* pcchValue = &pResults->cchValue; 98 DWORD* pcchValue = &pResults->cchValue;
@@ -99,6 +110,7 @@ static HRESULT BAEngineGetVariableVersion(
99 hr = E_INVALIDARG; 110 hr = E_INVALIDARG;
100 } 111 }
101 112
113LExit:
102 ReleaseVerutilVersion(pVersion); 114 ReleaseVerutilVersion(pVersion);
103 115
104 return hr; 116 return hr;
@@ -106,12 +118,14 @@ static HRESULT BAEngineGetVariableVersion(
106 118
107static HRESULT BAEngineFormatString( 119static HRESULT BAEngineFormatString(
108 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 120 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
109 __in BAENGINE_FORMATSTRING_ARGS* pArgs, 121 __in const LPVOID pvArgs,
110 __in BAENGINE_FORMATSTRING_RESULTS* pResults 122 __inout LPVOID pvResults
111 ) 123 )
112{ 124{
113 HRESULT hr = S_OK; 125 HRESULT hr = S_OK;
114 LPWSTR sczValue = NULL; 126 LPWSTR sczValue = NULL;
127 ValidateMessageArgs(hr, pvArgs, BAENGINE_FORMATSTRING_ARGS, pArgs);
128 ValidateMessageResults(hr, pvResults, BAENGINE_FORMATSTRING_RESULTS, pResults);
115 LPCWSTR wzIn = pArgs->wzIn; 129 LPCWSTR wzIn = pArgs->wzIn;
116 LPWSTR wzOut = pResults->wzOut; 130 LPWSTR wzOut = pResults->wzOut;
117 DWORD* pcchOut = &pResults->cchOut; 131 DWORD* pcchOut = &pResults->cchOut;
@@ -129,18 +143,21 @@ static HRESULT BAEngineFormatString(
129 hr = E_INVALIDARG; 143 hr = E_INVALIDARG;
130 } 144 }
131 145
146LExit:
132 StrSecureZeroFreeString(sczValue); 147 StrSecureZeroFreeString(sczValue);
133 return hr; 148 return hr;
134} 149}
135 150
136static HRESULT BAEngineEscapeString( 151static HRESULT BAEngineEscapeString(
137 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/, 152 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
138 __in BAENGINE_ESCAPESTRING_ARGS* pArgs, 153 __in const LPVOID pvArgs,
139 __in BAENGINE_ESCAPESTRING_RESULTS* pResults 154 __inout LPVOID pvResults
140 ) 155 )
141{ 156{
142 HRESULT hr = S_OK; 157 HRESULT hr = S_OK;
143 LPWSTR sczValue = NULL; 158 LPWSTR sczValue = NULL;
159 ValidateMessageArgs(hr, pvArgs, BAENGINE_ESCAPESTRING_ARGS, pArgs);
160 ValidateMessageResults(hr, pvResults, BAENGINE_ESCAPESTRING_RESULTS, pResults);
144 LPCWSTR wzIn = pArgs->wzIn; 161 LPCWSTR wzIn = pArgs->wzIn;
145 LPWSTR wzOut = pResults->wzOut; 162 LPWSTR wzOut = pResults->wzOut;
146 DWORD* pcchOut = &pResults->cchOut; 163 DWORD* pcchOut = &pResults->cchOut;
@@ -158,17 +175,20 @@ static HRESULT BAEngineEscapeString(
158 hr = E_INVALIDARG; 175 hr = E_INVALIDARG;
159 } 176 }
160 177
178LExit:
161 StrSecureZeroFreeString(sczValue); 179 StrSecureZeroFreeString(sczValue);
162 return hr; 180 return hr;
163} 181}
164 182
165static HRESULT BAEngineEvaluateCondition( 183static HRESULT BAEngineEvaluateCondition(
166 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 184 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
167 __in BAENGINE_EVALUATECONDITION_ARGS* pArgs, 185 __in const LPVOID pvArgs,
168 __in BAENGINE_EVALUATECONDITION_RESULTS* pResults 186 __inout LPVOID pvResults
169 ) 187 )
170{ 188{
171 HRESULT hr = S_OK; 189 HRESULT hr = S_OK;
190 ValidateMessageArgs(hr, pvArgs, BAENGINE_EVALUATECONDITION_ARGS, pArgs);
191 ValidateMessageResults(hr, pvResults, BAENGINE_EVALUATECONDITION_RESULTS, pResults);
172 LPCWSTR wzCondition = pArgs->wzCondition; 192 LPCWSTR wzCondition = pArgs->wzCondition;
173 BOOL* pf = &pResults->f; 193 BOOL* pf = &pResults->f;
174 194
@@ -181,16 +201,19 @@ static HRESULT BAEngineEvaluateCondition(
181 hr = E_INVALIDARG; 201 hr = E_INVALIDARG;
182 } 202 }
183 203
204LExit:
184 return hr; 205 return hr;
185} 206}
186 207
187static HRESULT BAEngineLog( 208static HRESULT BAEngineLog(
188 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/, 209 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
189 __in BAENGINE_LOG_ARGS* pArgs, 210 __in const LPVOID pvArgs,
190 __in BAENGINE_LOG_RESULTS* /*pResults*/ 211 __inout LPVOID pvResults
191 ) 212 )
192{ 213{
193 HRESULT hr = S_OK; 214 HRESULT hr = S_OK;
215 ValidateMessageArgs(hr, pvArgs, BAENGINE_LOG_ARGS, pArgs);
216 ValidateMessageResults(hr, pvResults, BAENGINE_LOG_RESULTS, pResults);
194 REPORT_LEVEL rl = REPORT_NONE; 217 REPORT_LEVEL rl = REPORT_NONE;
195 BOOTSTRAPPER_LOG_LEVEL level = pArgs->level; 218 BOOTSTRAPPER_LOG_LEVEL level = pArgs->level;
196 LPCWSTR wzMessage = pArgs->wzMessage; 219 LPCWSTR wzMessage = pArgs->wzMessage;
@@ -226,14 +249,16 @@ LExit:
226 249
227static HRESULT BAEngineSendEmbeddedError( 250static HRESULT BAEngineSendEmbeddedError(
228 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 251 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
229 __in BAENGINE_SENDEMBEDDEDERROR_ARGS* pArgs, 252 __in const LPVOID pvArgs,
230 __in BAENGINE_SENDEMBEDDEDERROR_RESULTS* pResults 253 __inout LPVOID pvResults
231 ) 254 )
232{ 255{
233 HRESULT hr = S_OK; 256 HRESULT hr = S_OK;
234 BYTE* pbData = NULL; 257 BYTE* pbData = NULL;
235 DWORD cbData = 0; 258 DWORD cbData = 0;
236 DWORD dwResult = 0; 259 DWORD dwResult = 0;
260 ValidateMessageArgs(hr, pvArgs, BAENGINE_SENDEMBEDDEDERROR_ARGS, pArgs);
261 ValidateMessageResults(hr, pvResults, BAENGINE_SENDEMBEDDEDERROR_RESULTS, pResults);
237 DWORD dwErrorCode = pArgs->dwErrorCode; 262 DWORD dwErrorCode = pArgs->dwErrorCode;
238 LPCWSTR wzMessage = pArgs->wzMessage; 263 LPCWSTR wzMessage = pArgs->wzMessage;
239 DWORD dwUIHint = pArgs->dwUIHint; 264 DWORD dwUIHint = pArgs->dwUIHint;
@@ -266,14 +291,16 @@ LExit:
266 291
267static HRESULT BAEngineSendEmbeddedProgress( 292static HRESULT BAEngineSendEmbeddedProgress(
268 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 293 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
269 __in BAENGINE_SENDEMBEDDEDPROGRESS_ARGS* pArgs, 294 __in const LPVOID pvArgs,
270 __in BAENGINE_SENDEMBEDDEDPROGRESS_RESULTS* pResults 295 __inout LPVOID pvResults
271 ) 296 )
272{ 297{
273 HRESULT hr = S_OK; 298 HRESULT hr = S_OK;
274 BYTE* pbData = NULL; 299 BYTE* pbData = NULL;
275 DWORD cbData = 0; 300 DWORD cbData = 0;
276 DWORD dwResult = 0; 301 DWORD dwResult = 0;
302 ValidateMessageArgs(hr, pvArgs, BAENGINE_SENDEMBEDDEDPROGRESS_ARGS, pArgs);
303 ValidateMessageResults(hr, pvResults, BAENGINE_SENDEMBEDDEDPROGRESS_RESULTS, pResults);
277 DWORD dwProgressPercentage = pArgs->dwProgressPercentage; 304 DWORD dwProgressPercentage = pArgs->dwProgressPercentage;
278 DWORD dwOverallProgressPercentage = pArgs->dwOverallProgressPercentage; 305 DWORD dwOverallProgressPercentage = pArgs->dwOverallProgressPercentage;
279 int* pnResult = &pResults->nResult; 306 int* pnResult = &pResults->nResult;
@@ -302,8 +329,8 @@ LExit:
302 329
303static HRESULT BAEngineSetUpdate( 330static HRESULT BAEngineSetUpdate(
304 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 331 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
305 __in const BAENGINE_SETUPDATE_ARGS* pArgs, 332 __in const LPVOID pvArgs,
306 __in BAENGINE_SETUPDATE_RESULTS* /*pResults*/ 333 __inout LPVOID pvResults
307 ) 334 )
308{ 335{
309 HRESULT hr = S_OK; 336 HRESULT hr = S_OK;
@@ -313,6 +340,8 @@ static HRESULT BAEngineSetUpdate(
313 UUID guid = { }; 340 UUID guid = { };
314 WCHAR wzGuid[39]; 341 WCHAR wzGuid[39];
315 RPC_STATUS rs = RPC_S_OK; 342 RPC_STATUS rs = RPC_S_OK;
343 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETUPDATE_ARGS, pArgs);
344 ValidateMessageResults(hr, pvResults, BAENGINE_SETUPDATE_RESULTS, pResults);
316 LPCWSTR wzLocalSource = pArgs->wzLocalSource; 345 LPCWSTR wzLocalSource = pArgs->wzLocalSource;
317 LPCWSTR wzDownloadSource = pArgs->wzDownloadSource; 346 LPCWSTR wzDownloadSource = pArgs->wzDownloadSource;
318 DWORD64 qwSize = pArgs->qwSize; 347 DWORD64 qwSize = pArgs->qwSize;
@@ -385,13 +414,15 @@ LExit:
385 414
386static HRESULT BAEngineSetLocalSource( 415static HRESULT BAEngineSetLocalSource(
387 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 416 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
388 __in BAENGINE_SETLOCALSOURCE_ARGS* pArgs, 417 __in const LPVOID pvArgs,
389 __in BAENGINE_SETLOCALSOURCE_RESULTS* /*pResults*/ 418 __inout LPVOID pvResults
390 ) 419 )
391{ 420{
392 HRESULT hr = S_OK; 421 HRESULT hr = S_OK;
393 BURN_CONTAINER* pContainer = NULL; 422 BURN_CONTAINER* pContainer = NULL;
394 BURN_PAYLOAD* pPayload = NULL; 423 BURN_PAYLOAD* pPayload = NULL;
424 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETLOCALSOURCE_ARGS, pArgs);
425 ValidateMessageResults(hr, pvResults, BAENGINE_SETLOCALSOURCE_RESULTS, pResults);
395 LPCWSTR wzPackageOrContainerId = pArgs->wzPackageOrContainerId; 426 LPCWSTR wzPackageOrContainerId = pArgs->wzPackageOrContainerId;
396 LPCWSTR wzPayloadId = pArgs->wzPayloadId; 427 LPCWSTR wzPayloadId = pArgs->wzPayloadId;
397 LPCWSTR wzPath = pArgs->wzPath; 428 LPCWSTR wzPath = pArgs->wzPath;
@@ -438,14 +469,16 @@ LExit:
438 469
439static HRESULT BAEngineSetDownloadSource( 470static HRESULT BAEngineSetDownloadSource(
440 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 471 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
441 __in BAENGINE_SETDOWNLOADSOURCE_ARGS* pArgs, 472 __in const LPVOID pvArgs,
442 __in BAENGINE_SETDOWNLOADSOURCE_RESULTS* /*pResults*/ 473 __inout LPVOID pvResults
443 ) 474 )
444{ 475{
445 HRESULT hr = S_OK; 476 HRESULT hr = S_OK;
446 BURN_CONTAINER* pContainer = NULL; 477 BURN_CONTAINER* pContainer = NULL;
447 BURN_PAYLOAD* pPayload = NULL; 478 BURN_PAYLOAD* pPayload = NULL;
448 DOWNLOAD_SOURCE* pDownloadSource = NULL; 479 DOWNLOAD_SOURCE* pDownloadSource = NULL;
480 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETDOWNLOADSOURCE_ARGS, pArgs);
481 ValidateMessageResults(hr, pvResults, BAENGINE_SETDOWNLOADSOURCE_RESULTS, pResults);
449 LPCWSTR wzPackageOrContainerId = pArgs->wzPackageOrContainerId; 482 LPCWSTR wzPackageOrContainerId = pArgs->wzPackageOrContainerId;
450 LPCWSTR wzPayloadId = pArgs->wzPayloadId; 483 LPCWSTR wzPayloadId = pArgs->wzPayloadId;
451 LPCWSTR wzUrl = pArgs->wzUrl; 484 LPCWSTR wzUrl = pArgs->wzUrl;
@@ -522,11 +555,13 @@ LExit:
522 555
523static HRESULT BAEngineSetVariableNumeric( 556static HRESULT BAEngineSetVariableNumeric(
524 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 557 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
525 __in const BAENGINE_SETVARIABLENUMERIC_ARGS* pArgs, 558 __in const LPVOID pvArgs,
526 __in BAENGINE_SETVARIABLENUMERIC_RESULTS* /*pResults*/ 559 __inout LPVOID pvResults
527 ) 560 )
528{ 561{
529 HRESULT hr = S_OK; 562 HRESULT hr = S_OK;
563 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLENUMERIC_ARGS, pArgs);
564 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLENUMERIC_RESULTS, pResults);
530 LPCWSTR wzVariable = pArgs->wzVariable; 565 LPCWSTR wzVariable = pArgs->wzVariable;
531 LONGLONG llValue = pArgs->llValue; 566 LONGLONG llValue = pArgs->llValue;
532 567
@@ -547,11 +582,13 @@ LExit:
547 582
548static HRESULT BAEngineSetVariableString( 583static HRESULT BAEngineSetVariableString(
549 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 584 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
550 __in const BAENGINE_SETVARIABLESTRING_ARGS* pArgs, 585 __in const LPVOID pvArgs,
551 __in BAENGINE_SETVARIABLESTRING_RESULTS* /*pResults*/ 586 __inout LPVOID pvResults
552 ) 587 )
553{ 588{
554 HRESULT hr = S_OK; 589 HRESULT hr = S_OK;
590 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLESTRING_ARGS, pArgs);
591 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLESTRING_RESULTS, pResults);
555 LPCWSTR wzVariable = pArgs->wzVariable; 592 LPCWSTR wzVariable = pArgs->wzVariable;
556 LPCWSTR wzValue = pArgs->wzValue; 593 LPCWSTR wzValue = pArgs->wzValue;
557 594
@@ -572,14 +609,16 @@ LExit:
572 609
573static HRESULT BAEngineSetVariableVersion( 610static HRESULT BAEngineSetVariableVersion(
574 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 611 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
575 __in const BAENGINE_SETVARIABLEVERSION_ARGS* pArgs, 612 __in const LPVOID pvArgs,
576 __in BAENGINE_SETVARIABLEVERSION_RESULTS* /*pResults*/ 613 __inout LPVOID pvResults
577 ) 614 )
578{ 615{
579 HRESULT hr = S_OK; 616 HRESULT hr = S_OK;
617 VERUTIL_VERSION* pVersion = NULL;
618 ValidateMessageArgs(hr, pvArgs, BAENGINE_SETVARIABLEVERSION_ARGS, pArgs);
619 ValidateMessageResults(hr, pvResults, BAENGINE_SETVARIABLEVERSION_RESULTS, pResults);
580 LPCWSTR wzVariable = pArgs->wzVariable; 620 LPCWSTR wzVariable = pArgs->wzVariable;
581 LPCWSTR wzValue = pArgs->wzValue; 621 LPCWSTR wzValue = pArgs->wzValue;
582 VERUTIL_VERSION* pVersion = NULL;
583 622
584 if (wzVariable && *wzVariable) 623 if (wzVariable && *wzVariable)
585 { 624 {
@@ -606,42 +645,52 @@ LExit:
606 645
607static HRESULT BAEngineCloseSplashScreen( 646static HRESULT BAEngineCloseSplashScreen(
608 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 647 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
609 __in const BAENGINE_CLOSESPLASHSCREEN_ARGS* /*pArgs*/, 648 __in const LPVOID pvArgs,
610 __in BAENGINE_CLOSESPLASHSCREEN_RESULTS* /*pResults*/ 649 __inout LPVOID pvResults
611 ) 650 )
612{ 651{
652 HRESULT hr = S_OK;
653 ValidateMessageArgs(hr, pvArgs, BAENGINE_CLOSESPLASHSCREEN_ARGS, pArgs);
654 ValidateMessageResults(hr, pvResults, BAENGINE_CLOSESPLASHSCREEN_RESULTS, pResults);
655
613 // If the splash screen is still around, close it. 656 // If the splash screen is still around, close it.
614 if (::IsWindow(pContext->pEngineState->command.hwndSplashScreen)) 657 if (::IsWindow(pContext->pEngineState->command.hwndSplashScreen))
615 { 658 {
616 ::PostMessageW(pContext->pEngineState->command.hwndSplashScreen, WM_CLOSE, 0, 0); 659 ::PostMessageW(pContext->pEngineState->command.hwndSplashScreen, WM_CLOSE, 0, 0);
617 } 660 }
618 661
619 return S_OK; 662LExit:
663 return hr;
620} 664}
621 665
622static HRESULT BAEngineCompareVersions( 666static HRESULT BAEngineCompareVersions(
623 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/, 667 __in BOOTSTRAPPER_ENGINE_CONTEXT* /*pContext*/,
624 __in const BAENGINE_COMPAREVERSIONS_ARGS* pArgs, 668 __in const LPVOID pvArgs,
625 __in BAENGINE_COMPAREVERSIONS_RESULTS* pResults 669 __inout LPVOID pvResults
626 ) 670 )
627{ 671{
628 HRESULT hr = S_OK; 672 HRESULT hr = S_OK;
673 ValidateMessageArgs(hr, pvArgs, BAENGINE_COMPAREVERSIONS_ARGS, pArgs);
674 ValidateMessageResults(hr, pvResults, BAENGINE_COMPAREVERSIONS_RESULTS, pResults);
629 LPCWSTR wzVersion1 = pArgs->wzVersion1; 675 LPCWSTR wzVersion1 = pArgs->wzVersion1;
630 LPCWSTR wzVersion2 = pArgs->wzVersion2; 676 LPCWSTR wzVersion2 = pArgs->wzVersion2;
631 int* pnResult = &pResults->nResult; 677 int* pnResult = &pResults->nResult;
632 678
633 hr = VerCompareStringVersions(wzVersion1, wzVersion2, FALSE, pnResult); 679 hr = VerCompareStringVersions(wzVersion1, wzVersion2, FALSE, pnResult);
634 680
681LExit:
635 return hr; 682 return hr;
636} 683}
637 684
638static HRESULT BAEngineDetect( 685static HRESULT BAEngineDetect(
639 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 686 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
640 __in BAENGINE_DETECT_ARGS* pArgs, 687 __in const LPVOID pvArgs,
641 __in BAENGINE_DETECT_RESULTS* /*pResults*/ 688 __inout LPVOID pvResults
642 ) 689 )
643{ 690{
644 HRESULT hr = S_OK; 691 HRESULT hr = S_OK;
692 ValidateMessageArgs(hr, pvArgs, BAENGINE_DETECT_ARGS, pArgs);
693 ValidateMessageResults(hr, pvResults, BAENGINE_DETECT_RESULTS, pResults);
645 694
646 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_DETECT, 0, reinterpret_cast<LPARAM>(pArgs->hwndParent))) 695 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_DETECT, 0, reinterpret_cast<LPARAM>(pArgs->hwndParent)))
647 { 696 {
@@ -654,11 +703,13 @@ LExit:
654 703
655static HRESULT BAEnginePlan( 704static HRESULT BAEnginePlan(
656 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 705 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
657 __in const BAENGINE_PLAN_ARGS* pArgs, 706 __in const LPVOID pvArgs,
658 __in BAENGINE_PLAN_RESULTS* /*pResults*/ 707 __inout LPVOID pvResults
659 ) 708 )
660{ 709{
661 HRESULT hr = S_OK; 710 HRESULT hr = S_OK;
711 ValidateMessageArgs(hr, pvArgs, BAENGINE_PLAN_ARGS, pArgs);
712 ValidateMessageResults(hr, pvResults, BAENGINE_PLAN_RESULTS, pResults);
662 BOOTSTRAPPER_ACTION action = pArgs->action; 713 BOOTSTRAPPER_ACTION action = pArgs->action;
663 714
664 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_PLAN, 0, action)) 715 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_PLAN, 0, action))
@@ -672,11 +723,13 @@ LExit:
672 723
673static HRESULT BAEngineElevate( 724static HRESULT BAEngineElevate(
674 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 725 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
675 __in const BAENGINE_ELEVATE_ARGS* pArgs, 726 __in const LPVOID pvArgs,
676 __in BAENGINE_ELEVATE_RESULTS* /*pResults*/ 727 __inout LPVOID pvResults
677 ) 728 )
678{ 729{
679 HRESULT hr = S_OK; 730 HRESULT hr = S_OK;
731 ValidateMessageArgs(hr, pvArgs, BAENGINE_ELEVATE_ARGS, pArgs);
732 ValidateMessageResults(hr, pvResults, BAENGINE_ELEVATE_RESULTS, pResults);
680 733
681 if (INVALID_HANDLE_VALUE != pContext->pEngineState->companionConnection.hPipe) 734 if (INVALID_HANDLE_VALUE != pContext->pEngineState->companionConnection.hPipe)
682 { 735 {
@@ -693,11 +746,13 @@ LExit:
693 746
694static HRESULT BAEngineApply( 747static HRESULT BAEngineApply(
695 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 748 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
696 __in const BAENGINE_APPLY_ARGS* pArgs, 749 __in const LPVOID pvArgs,
697 __in BAENGINE_APPLY_RESULTS* /*pResults*/ 750 __inout LPVOID pvResults
698 ) 751 )
699{ 752{
700 HRESULT hr = S_OK; 753 HRESULT hr = S_OK;
754 ValidateMessageArgs(hr, pvArgs, BAENGINE_APPLY_ARGS, pArgs);
755 ValidateMessageResults(hr, pvResults, BAENGINE_APPLY_RESULTS, pResults);
701 756
702 ExitOnNull(pArgs->hwndParent, hr, E_INVALIDARG, "BA passed NULL hwndParent to Apply."); 757 ExitOnNull(pArgs->hwndParent, hr, E_INVALIDARG, "BA passed NULL hwndParent to Apply.");
703 if (!::IsWindow(pArgs->hwndParent)) 758 if (!::IsWindow(pArgs->hwndParent))
@@ -716,11 +771,13 @@ LExit:
716 771
717static HRESULT BAEngineQuit( 772static HRESULT BAEngineQuit(
718 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 773 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
719 __in const BAENGINE_QUIT_ARGS* pArgs, 774 __in const LPVOID pvArgs,
720 __in BAENGINE_QUIT_RESULTS* /*pResults*/ 775 __inout LPVOID pvResults
721 ) 776 )
722{ 777{
723 HRESULT hr = S_OK; 778 HRESULT hr = S_OK;
779 ValidateMessageArgs(hr, pvArgs, BAENGINE_QUIT_ARGS, pArgs);
780 ValidateMessageResults(hr, pvResults, BAENGINE_QUIT_RESULTS, pResults);
724 781
725 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_QUIT, static_cast<WPARAM>(pArgs->dwExitCode), 0)) 782 if (!::PostThreadMessageW(pContext->dwThreadId, WM_BURN_QUIT, static_cast<WPARAM>(pArgs->dwExitCode), 0))
726 { 783 {
@@ -733,19 +790,24 @@ LExit:
733 790
734static HRESULT BAEngineLaunchApprovedExe( 791static HRESULT BAEngineLaunchApprovedExe(
735 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext, 792 __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
736 __in const BAENGINE_LAUNCHAPPROVEDEXE_ARGS* pArgs, 793 __in const LPVOID pvArgs,
737 __in BAENGINE_LAUNCHAPPROVEDEXE_RESULTS* /*pResults*/ 794 __inout LPVOID pvResults
738 ) 795 )
739{ 796{
740 HRESULT hr = S_OK; 797 HRESULT hr = S_OK;
741 BURN_APPROVED_EXE* pApprovedExe = NULL; 798 BURN_APPROVED_EXE* pApprovedExe = NULL;
742 BOOL fLeaveCriticalSection = FALSE; 799 BOOL fLeaveCriticalSection = FALSE;
743 BURN_LAUNCH_APPROVED_EXE* pLaunchApprovedExe = (BURN_LAUNCH_APPROVED_EXE*)MemAlloc(sizeof(BURN_LAUNCH_APPROVED_EXE), TRUE); 800 BURN_LAUNCH_APPROVED_EXE* pLaunchApprovedExe = NULL;
801 ValidateMessageArgs(hr, pvArgs, BAENGINE_LAUNCHAPPROVEDEXE_ARGS, pArgs);
802 ValidateMessageResults(hr, pvResults, BAENGINE_LAUNCHAPPROVEDEXE_RESULTS, pResults);
744 HWND hwndParent = pArgs->hwndParent; 803 HWND hwndParent = pArgs->hwndParent;
745 LPCWSTR wzApprovedExeForElevationId = pArgs->wzApprovedExeForElevationId; 804 LPCWSTR wzApprovedExeForElevationId = pArgs->wzApprovedExeForElevationId;
746 LPCWSTR wzArguments = pArgs->wzArguments; 805 LPCWSTR wzArguments = pArgs->wzArguments;
747 DWORD dwWaitForInputIdleTimeout = pArgs->dwWaitForInputIdleTimeout; 806 DWORD dwWaitForInputIdleTimeout = pArgs->dwWaitForInputIdleTimeout;
748 807
808 pLaunchApprovedExe = (BURN_LAUNCH_APPROVED_EXE*)MemAlloc(sizeof(BURN_LAUNCH_APPROVED_EXE), TRUE);
809 ExitOnNull(pLaunchApprovedExe, hr, E_OUTOFMEMORY, "Failed to alloc BURN_LAUNCH_APPROVED_EXE");
810
749 ::EnterCriticalSection(&pContext->pEngineState->csActive); 811 ::EnterCriticalSection(&pContext->pEngineState->csActive);
750 fLeaveCriticalSection = TRUE; 812 fLeaveCriticalSection = TRUE;
751 hr = UserExperienceEnsureEngineInactive(&pContext->pEngineState->userExperience); 813 hr = UserExperienceEnsureEngineInactive(&pContext->pEngineState->userExperience);
@@ -812,76 +874,76 @@ HRESULT WINAPI EngineForApplicationProc(
812 switch (message) 874 switch (message)
813 { 875 {
814 case BOOTSTRAPPER_ENGINE_MESSAGE_GETPACKAGECOUNT: 876 case BOOTSTRAPPER_ENGINE_MESSAGE_GETPACKAGECOUNT:
815 hr = BAEngineGetPackageCount(pContext, reinterpret_cast<BAENGINE_GETPACKAGECOUNT_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_GETPACKAGECOUNT_RESULTS*>(pvResults)); 877 hr = BAEngineGetPackageCount(pContext, pvArgs, pvResults);
816 break; 878 break;
817 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLENUMERIC: 879 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLENUMERIC:
818 hr = BAEngineGetVariableNumeric(pContext, reinterpret_cast<BAENGINE_GETVARIABLENUMERIC_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_GETVARIABLENUMERIC_RESULTS*>(pvResults)); 880 hr = BAEngineGetVariableNumeric(pContext, pvArgs, pvResults);
819 break; 881 break;
820 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLESTRING: 882 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLESTRING:
821 hr = BAEngineGetVariableString(pContext, reinterpret_cast<BAENGINE_GETVARIABLESTRING_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_GETVARIABLESTRING_RESULTS*>(pvResults)); 883 hr = BAEngineGetVariableString(pContext, pvArgs, pvResults);
822 break; 884 break;
823 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLEVERSION: 885 case BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLEVERSION:
824 hr = BAEngineGetVariableVersion(pContext, reinterpret_cast<BAENGINE_GETVARIABLEVERSION_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_GETVARIABLEVERSION_RESULTS*>(pvResults)); 886 hr = BAEngineGetVariableVersion(pContext, pvArgs, pvResults);
825 break; 887 break;
826 case BOOTSTRAPPER_ENGINE_MESSAGE_FORMATSTRING: 888 case BOOTSTRAPPER_ENGINE_MESSAGE_FORMATSTRING:
827 hr = BAEngineFormatString(pContext, reinterpret_cast<BAENGINE_FORMATSTRING_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_FORMATSTRING_RESULTS*>(pvResults)); 889 hr = BAEngineFormatString(pContext, pvArgs, pvResults);
828 break; 890 break;
829 case BOOTSTRAPPER_ENGINE_MESSAGE_ESCAPESTRING: 891 case BOOTSTRAPPER_ENGINE_MESSAGE_ESCAPESTRING:
830 hr = BAEngineEscapeString(pContext, reinterpret_cast<BAENGINE_ESCAPESTRING_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_ESCAPESTRING_RESULTS*>(pvResults)); 892 hr = BAEngineEscapeString(pContext, pvArgs, pvResults);
831 break; 893 break;
832 case BOOTSTRAPPER_ENGINE_MESSAGE_EVALUATECONDITION: 894 case BOOTSTRAPPER_ENGINE_MESSAGE_EVALUATECONDITION:
833 hr = BAEngineEvaluateCondition(pContext, reinterpret_cast<BAENGINE_EVALUATECONDITION_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_EVALUATECONDITION_RESULTS*>(pvResults)); 895 hr = BAEngineEvaluateCondition(pContext, pvArgs, pvResults);
834 break; 896 break;
835 case BOOTSTRAPPER_ENGINE_MESSAGE_LOG: 897 case BOOTSTRAPPER_ENGINE_MESSAGE_LOG:
836 hr = BAEngineLog(pContext, reinterpret_cast<BAENGINE_LOG_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_LOG_RESULTS*>(pvResults)); 898 hr = BAEngineLog(pContext, pvArgs, pvResults);
837 break; 899 break;
838 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDERROR: 900 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDERROR:
839 hr = BAEngineSendEmbeddedError(pContext, reinterpret_cast<BAENGINE_SENDEMBEDDEDERROR_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SENDEMBEDDEDERROR_RESULTS*>(pvResults)); 901 hr = BAEngineSendEmbeddedError(pContext, pvArgs, pvResults);
840 break; 902 break;
841 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDPROGRESS: 903 case BOOTSTRAPPER_ENGINE_MESSAGE_SENDEMBEDDEDPROGRESS:
842 hr = BAEngineSendEmbeddedProgress(pContext, reinterpret_cast<BAENGINE_SENDEMBEDDEDPROGRESS_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SENDEMBEDDEDPROGRESS_RESULTS*>(pvResults)); 904 hr = BAEngineSendEmbeddedProgress(pContext, pvArgs, pvResults);
843 break; 905 break;
844 case BOOTSTRAPPER_ENGINE_MESSAGE_SETUPDATE: 906 case BOOTSTRAPPER_ENGINE_MESSAGE_SETUPDATE:
845 hr = BAEngineSetUpdate(pContext, reinterpret_cast<BAENGINE_SETUPDATE_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETUPDATE_RESULTS*>(pvResults)); 907 hr = BAEngineSetUpdate(pContext, pvArgs, pvResults);
846 break; 908 break;
847 case BOOTSTRAPPER_ENGINE_MESSAGE_SETLOCALSOURCE: 909 case BOOTSTRAPPER_ENGINE_MESSAGE_SETLOCALSOURCE:
848 hr = BAEngineSetLocalSource(pContext, reinterpret_cast<BAENGINE_SETLOCALSOURCE_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETLOCALSOURCE_RESULTS*>(pvResults)); 910 hr = BAEngineSetLocalSource(pContext, pvArgs, pvResults);
849 break; 911 break;
850 case BOOTSTRAPPER_ENGINE_MESSAGE_SETDOWNLOADSOURCE: 912 case BOOTSTRAPPER_ENGINE_MESSAGE_SETDOWNLOADSOURCE:
851 hr = BAEngineSetDownloadSource(pContext, reinterpret_cast<BAENGINE_SETDOWNLOADSOURCE_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETDOWNLOADSOURCE_RESULTS*>(pvResults)); 913 hr = BAEngineSetDownloadSource(pContext, pvArgs, pvResults);
852 break; 914 break;
853 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLENUMERIC: 915 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLENUMERIC:
854 hr = BAEngineSetVariableNumeric(pContext, reinterpret_cast<BAENGINE_SETVARIABLENUMERIC_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETVARIABLENUMERIC_RESULTS*>(pvResults)); 916 hr = BAEngineSetVariableNumeric(pContext, pvArgs, pvResults);
855 break; 917 break;
856 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLESTRING: 918 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLESTRING:
857 hr = BAEngineSetVariableString(pContext, reinterpret_cast<BAENGINE_SETVARIABLESTRING_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETVARIABLESTRING_RESULTS*>(pvResults)); 919 hr = BAEngineSetVariableString(pContext, pvArgs, pvResults);
858 break; 920 break;
859 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLEVERSION: 921 case BOOTSTRAPPER_ENGINE_MESSAGE_SETVARIABLEVERSION:
860 hr = BAEngineSetVariableVersion(pContext, reinterpret_cast<BAENGINE_SETVARIABLEVERSION_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_SETVARIABLEVERSION_RESULTS*>(pvResults)); 922 hr = BAEngineSetVariableVersion(pContext, pvArgs, pvResults);
861 break; 923 break;
862 case BOOTSTRAPPER_ENGINE_MESSAGE_CLOSESPLASHSCREEN: 924 case BOOTSTRAPPER_ENGINE_MESSAGE_CLOSESPLASHSCREEN:
863 hr = BAEngineCloseSplashScreen(pContext, reinterpret_cast<BAENGINE_CLOSESPLASHSCREEN_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_CLOSESPLASHSCREEN_RESULTS*>(pvResults)); 925 hr = BAEngineCloseSplashScreen(pContext, pvArgs, pvResults);
864 break; 926 break;
865 case BOOTSTRAPPER_ENGINE_MESSAGE_DETECT: 927 case BOOTSTRAPPER_ENGINE_MESSAGE_DETECT:
866 hr = BAEngineDetect(pContext, reinterpret_cast<BAENGINE_DETECT_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_DETECT_RESULTS*>(pvResults)); 928 hr = BAEngineDetect(pContext, pvArgs, pvResults);
867 break; 929 break;
868 case BOOTSTRAPPER_ENGINE_MESSAGE_PLAN: 930 case BOOTSTRAPPER_ENGINE_MESSAGE_PLAN:
869 hr = BAEnginePlan(pContext, reinterpret_cast<BAENGINE_PLAN_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_PLAN_RESULTS*>(pvResults)); 931 hr = BAEnginePlan(pContext, pvArgs, pvResults);
870 break; 932 break;
871 case BOOTSTRAPPER_ENGINE_MESSAGE_ELEVATE: 933 case BOOTSTRAPPER_ENGINE_MESSAGE_ELEVATE:
872 hr = BAEngineElevate(pContext, reinterpret_cast<BAENGINE_ELEVATE_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_ELEVATE_RESULTS*>(pvResults)); 934 hr = BAEngineElevate(pContext, pvArgs, pvResults);
873 break; 935 break;
874 case BOOTSTRAPPER_ENGINE_MESSAGE_APPLY: 936 case BOOTSTRAPPER_ENGINE_MESSAGE_APPLY:
875 hr = BAEngineApply(pContext, reinterpret_cast<BAENGINE_APPLY_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_APPLY_RESULTS*>(pvResults)); 937 hr = BAEngineApply(pContext, pvArgs, pvResults);
876 break; 938 break;
877 case BOOTSTRAPPER_ENGINE_MESSAGE_QUIT: 939 case BOOTSTRAPPER_ENGINE_MESSAGE_QUIT:
878 hr = BAEngineQuit(pContext, reinterpret_cast<BAENGINE_QUIT_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_QUIT_RESULTS*>(pvResults)); 940 hr = BAEngineQuit(pContext, pvArgs, pvResults);
879 break; 941 break;
880 case BOOTSTRAPPER_ENGINE_MESSAGE_LAUNCHAPPROVEDEXE: 942 case BOOTSTRAPPER_ENGINE_MESSAGE_LAUNCHAPPROVEDEXE:
881 hr = BAEngineLaunchApprovedExe(pContext, reinterpret_cast<BAENGINE_LAUNCHAPPROVEDEXE_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_LAUNCHAPPROVEDEXE_RESULTS*>(pvResults)); 943 hr = BAEngineLaunchApprovedExe(pContext, pvArgs, pvResults);
882 break; 944 break;
883 case BOOTSTRAPPER_ENGINE_MESSAGE_COMPAREVERSIONS: 945 case BOOTSTRAPPER_ENGINE_MESSAGE_COMPAREVERSIONS:
884 hr = BAEngineCompareVersions(pContext, reinterpret_cast<BAENGINE_COMPAREVERSIONS_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_COMPAREVERSIONS_RESULTS*>(pvResults)); 946 hr = BAEngineCompareVersions(pContext, pvArgs, pvResults);
885 break; 947 break;
886 default: 948 default:
887 hr = E_NOTIMPL; 949 hr = E_NOTIMPL;
@@ -894,7 +956,7 @@ LExit:
894 956
895static HRESULT CopyStringToBA( 957static HRESULT CopyStringToBA(
896 __in LPWSTR wzValue, 958 __in LPWSTR wzValue,
897 __in LPWSTR wzBuffer, 959 __in_opt LPWSTR wzBuffer,
898 __inout DWORD* pcchBuffer 960 __inout DWORD* pcchBuffer
899 ) 961 )
900{ 962{