diff options
Diffstat (limited to '')
-rw-r--r-- | src/engine/userexperience.cpp | 126 |
1 files changed, 81 insertions, 45 deletions
diff --git a/src/engine/userexperience.cpp b/src/engine/userexperience.cpp index b6bd65dc..f6ae1491 100644 --- a/src/engine/userexperience.cpp +++ b/src/engine/userexperience.cpp | |||
@@ -395,29 +395,46 @@ EXTERN_C BAAPI UserExperienceOnCacheAcquireBegin( | |||
395 | __in BURN_USER_EXPERIENCE* pUserExperience, | 395 | __in BURN_USER_EXPERIENCE* pUserExperience, |
396 | __in_z_opt LPCWSTR wzPackageOrContainerId, | 396 | __in_z_opt LPCWSTR wzPackageOrContainerId, |
397 | __in_z_opt LPCWSTR wzPayloadId, | 397 | __in_z_opt LPCWSTR wzPayloadId, |
398 | __in BOOTSTRAPPER_CACHE_OPERATION operation, | 398 | __in_z LPWSTR* pwzSource, |
399 | __in_z LPCWSTR wzSource | 399 | __in_z LPWSTR* pwzDownloadUrl, |
400 | __in_z_opt LPCWSTR wzPayloadContainerId, | ||
401 | __out BOOTSTRAPPER_CACHE_OPERATION* pCacheOperation | ||
400 | ) | 402 | ) |
401 | { | 403 | { |
402 | HRESULT hr = S_OK; | 404 | HRESULT hr = S_OK; |
403 | BA_ONCACHEACQUIREBEGIN_ARGS args = { }; | 405 | BA_ONCACHEACQUIREBEGIN_ARGS args = { }; |
404 | BA_ONCACHEACQUIREBEGIN_RESULTS results = { }; | 406 | BA_ONCACHEACQUIREBEGIN_RESULTS results = { }; |
407 | *pCacheOperation = BOOTSTRAPPER_CACHE_OPERATION_NONE; | ||
405 | 408 | ||
406 | args.cbSize = sizeof(args); | 409 | args.cbSize = sizeof(args); |
407 | args.wzPackageOrContainerId = wzPackageOrContainerId; | 410 | args.wzPackageOrContainerId = wzPackageOrContainerId; |
408 | args.wzPayloadId = wzPayloadId; | 411 | args.wzPayloadId = wzPayloadId; |
409 | args.operation = operation; | 412 | args.wzSource = *pwzSource; |
410 | args.wzSource = wzSource; | 413 | args.wzDownloadUrl = *pwzDownloadUrl; |
414 | args.wzPayloadContainerId = wzPayloadContainerId; | ||
415 | args.recommendation = *pCacheOperation; | ||
411 | 416 | ||
412 | results.cbSize = sizeof(results); | 417 | results.cbSize = sizeof(results); |
418 | results.action = *pCacheOperation; | ||
413 | 419 | ||
414 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN, &args, &results); | 420 | hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN, &args, &results); |
415 | ExitOnFailure(hr, "BA OnCacheAcquireBegin failed."); | 421 | ExitOnFailure(hr, "BA OnCacheAcquireBegin failed."); |
416 | 422 | ||
417 | if (results.fCancel) | 423 | if (results.fCancel) |
418 | { | 424 | { |
419 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | 425 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); |
420 | } | 426 | } |
427 | else | ||
428 | { | ||
429 | // Verify the BA requested an action that is possible. | ||
430 | if (BOOTSTRAPPER_CACHE_OPERATION_DOWNLOAD == results.action && *pwzDownloadUrl && **pwzDownloadUrl || | ||
431 | BOOTSTRAPPER_CACHE_OPERATION_EXTRACT == results.action && wzPayloadContainerId || | ||
432 | BOOTSTRAPPER_CACHE_OPERATION_COPY == results.action || | ||
433 | BOOTSTRAPPER_CACHE_OPERATION_NONE == results.action) | ||
434 | { | ||
435 | *pCacheOperation = results.action; | ||
436 | } | ||
437 | } | ||
421 | 438 | ||
422 | LExit: | 439 | LExit: |
423 | return hr; | 440 | return hr; |
@@ -444,7 +461,7 @@ EXTERN_C BAAPI UserExperienceOnCacheAcquireComplete( | |||
444 | results.cbSize = sizeof(results); | 461 | results.cbSize = sizeof(results); |
445 | results.action = args.recommendation; | 462 | results.action = args.recommendation; |
446 | 463 | ||
447 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE, &args, &results); | 464 | hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE, &args, &results); |
448 | ExitOnFailure(hr, "BA OnCacheAcquireComplete failed."); | 465 | ExitOnFailure(hr, "BA OnCacheAcquireComplete failed."); |
449 | 466 | ||
450 | if (FAILED(hrStatus)) | 467 | if (FAILED(hrStatus)) |
@@ -490,6 +507,64 @@ LExit: | |||
490 | return hr; | 507 | return hr; |
491 | } | 508 | } |
492 | 509 | ||
510 | EXTERN_C BAAPI UserExperienceOnCacheAcquireResolving( | ||
511 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
512 | __in_z_opt LPCWSTR wzPackageOrContainerId, | ||
513 | __in_z_opt LPCWSTR wzPayloadId, | ||
514 | __in_z LPWSTR* rgSearchPaths, | ||
515 | __in DWORD cSearchPaths, | ||
516 | __in BOOL fFoundLocal, | ||
517 | __in DWORD* pdwChosenSearchPath, | ||
518 | __in_z_opt LPCWSTR wzDownloadUrl, | ||
519 | __in_z_opt LPCWSTR wzPayloadContainerId, | ||
520 | __inout BOOTSTRAPPER_CACHE_OPERATION* pCacheOperation | ||
521 | ) | ||
522 | { | ||
523 | HRESULT hr = S_OK; | ||
524 | BA_ONCACHEACQUIRERESOLVING_ARGS args = { }; | ||
525 | BA_ONCACHEACQUIRERESOLVING_RESULTS results = { }; | ||
526 | |||
527 | args.cbSize = sizeof(args); | ||
528 | args.wzPackageOrContainerId = wzPackageOrContainerId; | ||
529 | args.wzPayloadId = wzPayloadId; | ||
530 | args.rgSearchPaths = const_cast<LPCWSTR*>(rgSearchPaths); | ||
531 | args.cSearchPaths = cSearchPaths; | ||
532 | args.fFoundLocal = fFoundLocal; | ||
533 | args.dwRecommendedSearchPath = *pdwChosenSearchPath; | ||
534 | args.wzDownloadUrl = wzDownloadUrl; | ||
535 | args.recommendation = *pCacheOperation; | ||
536 | |||
537 | results.cbSize = sizeof(results); | ||
538 | results.dwChosenSearchPath = *pdwChosenSearchPath; | ||
539 | results.action = *pCacheOperation; | ||
540 | |||
541 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRERESOLVING, &args, &results); | ||
542 | ExitOnFailure(hr, "BA OnCacheAcquireResolving failed."); | ||
543 | |||
544 | if (results.fCancel) | ||
545 | { | ||
546 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
547 | } | ||
548 | else | ||
549 | { | ||
550 | // Verify the BA requested an action that is possible. | ||
551 | if (BOOTSTRAPPER_CACHE_OPERATION_DOWNLOAD == results.action && wzDownloadUrl && *wzDownloadUrl || | ||
552 | BOOTSTRAPPER_CACHE_OPERATION_EXTRACT == results.action && wzPayloadContainerId || | ||
553 | BOOTSTRAPPER_CACHE_OPERATION_NONE == results.action) | ||
554 | { | ||
555 | *pCacheOperation = results.action; | ||
556 | } | ||
557 | else if (BOOTSTRAPPER_CACHE_OPERATION_COPY == results.action && results.dwChosenSearchPath < cSearchPaths) | ||
558 | { | ||
559 | *pdwChosenSearchPath = results.dwChosenSearchPath; | ||
560 | *pCacheOperation = results.action; | ||
561 | } | ||
562 | } | ||
563 | |||
564 | LExit: | ||
565 | return hr; | ||
566 | } | ||
567 | |||
493 | EXTERN_C BAAPI UserExperienceOnCacheBegin( | 568 | EXTERN_C BAAPI UserExperienceOnCacheBegin( |
494 | __in BURN_USER_EXPERIENCE* pUserExperience | 569 | __in BURN_USER_EXPERIENCE* pUserExperience |
495 | ) | 570 | ) |
@@ -1861,45 +1936,6 @@ LExit: | |||
1861 | return hr; | 1936 | return hr; |
1862 | } | 1937 | } |
1863 | 1938 | ||
1864 | EXTERN_C BAAPI UserExperienceOnResolveSource( | ||
1865 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
1866 | __in_z LPCWSTR wzPackageOrContainerId, | ||
1867 | __in_z_opt LPCWSTR wzPayloadId, | ||
1868 | __in_z LPCWSTR wzLocalSource, | ||
1869 | __in_z_opt LPCWSTR wzDownloadSource, | ||
1870 | __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* pAction | ||
1871 | ) | ||
1872 | { | ||
1873 | HRESULT hr = S_OK; | ||
1874 | BA_ONRESOLVESOURCE_ARGS args = { }; | ||
1875 | BA_ONRESOLVESOURCE_RESULTS results = { }; | ||
1876 | |||
1877 | args.cbSize = sizeof(args); | ||
1878 | args.wzPackageOrContainerId = wzPackageOrContainerId; | ||
1879 | args.wzPayloadId = wzPayloadId; | ||
1880 | args.wzLocalSource = wzLocalSource; | ||
1881 | args.wzDownloadSource = wzDownloadSource; | ||
1882 | args.recommendation = *pAction; | ||
1883 | |||
1884 | results.cbSize = sizeof(results); | ||
1885 | results.action = *pAction; | ||
1886 | |||
1887 | hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONRESOLVESOURCE, &args, &results); | ||
1888 | ExitOnFailure(hr, "BA OnResolveSource failed."); | ||
1889 | |||
1890 | if (results.fCancel) | ||
1891 | { | ||
1892 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
1893 | } | ||
1894 | else | ||
1895 | { | ||
1896 | *pAction = results.action; | ||
1897 | } | ||
1898 | |||
1899 | LExit: | ||
1900 | return hr; | ||
1901 | } | ||
1902 | |||
1903 | EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionBegin( | 1939 | EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionBegin( |
1904 | __in BURN_USER_EXPERIENCE* pUserExperience, | 1940 | __in BURN_USER_EXPERIENCE* pUserExperience, |
1905 | __in LPCWSTR wzTransactionId | 1941 | __in LPCWSTR wzTransactionId |