From 52753352299b4a9e9c2608fa9b662029e5796899 Mon Sep 17 00:00:00 2001 From: Kyaw Thant Date: Mon, 22 Jan 2024 12:15:27 -0800 Subject: [PATCH] Revert "DynamicDependencies: Use Win11 APIs if available (#3704)" This reverts commit f0d6f3b24741a27ee6f0441753806b71ec3fde6c. --- WindowsAppRuntime.sln | 18 + build/CopyFilesToStagingDir.ps1 | 4 + dev/Common/WindowsAppRuntime.VersionInfo.cpp | 21 +- dev/Common/WindowsAppRuntime.VersionInfo.h | 14 +- .../API/DynamicDependency.vcxitems | 1 + .../API/DynamicDependency.vcxitems.filters | 3 + .../API/M.AM.DD.PackageDependency.cpp | 34 +- .../API/MddDetourPackageGraph.cpp | 18 +- dev/DynamicDependency/API/MddWin11.cpp | 256 ++++++++++ dev/DynamicDependency/API/MddWin11.h | 459 +++--------------- .../API/MsixDynamicDependency.cpp | 92 +--- .../API/MsixDynamicDependency.h | 15 +- dev/DynamicDependency/API/PackageGraph.cpp | 45 +- dev/DynamicDependency/API/PackageGraph.h | 18 - .../API/PackageGraphManager.cpp | 18 - .../API/PackageGraphManager.h | 8 - .../MddBootstrap.cpp | 236 +++------ .../MddBootstrapActivity.h | 19 +- .../MddBootstrapTracelogging.cpp | 2 +- .../MddBootstrapTracelogging.h | 6 +- .../dllmain.cpp | 13 +- .../WindowsAppRuntime.def | 1 - dev/WindowsAppRuntime_DLL/dllmain.cpp | 7 +- ...dowsAppRuntime_MSIXInstallFromPath.filters | 36 ++ ...dowsAppRuntime_MSIXInstallFromPath.vcxproj | 252 ++++++++++ .../framework.h | 27 ++ .../main.cpp | 325 +++++++++++++ .../packages.config | 7 + .../pch.cpp | 6 + .../pch.h | 16 + .../Test_Win32/TestMddBootstrap.cpp | 16 +- .../Test_Win32/Test_Win32.cpp | 71 +-- .../Test_Win32/Test_Win32_Add_Rank_A0_B10.cpp | 4 +- .../Test_Win32_Add_Rank_B-10_A0.cpp | 4 +- .../Test_Win32_Add_Rank_B0prepend_A0.cpp | 4 +- ...Win32_Create_Add_Architectures_Current.cpp | 4 +- ...in32_Create_Add_Architectures_Explicit.cpp | 4 +- ...Create_DoNotVerifyDependencyResolution.cpp | 2 +- ...ifecycle_FilePathLifetime_Frameworks_2.cpp | 4 +- ...Lifecycle_ProcessLifetime_Frameworks_2.cpp | 4 +- ...ifecycle_RegistryLifetime_Frameworks_2.cpp | 4 +- .../Test_Win32/Test_Win32_WinRTReentrancy.cpp | 4 +- .../DynamicDependency_Test_WinRT.vcxproj | 12 +- .../Test_WinRT/Test_WinRT.cpp | 88 +--- .../Test_WinRT/Test_WinRT_Add_Rank_A0_B10.cpp | 6 +- .../Test_WinRT_Add_Rank_B-10_A0.cpp | 6 +- .../Test_WinRT_Add_Rank_B0prepend_A0.cpp | 6 +- ...WinRT_Create_Add_Architectures_Current.cpp | 4 +- ...inRT_Create_Add_Architectures_Explicit.cpp | 6 +- ...Create_DoNotVerifyDependencyResolution.cpp | 2 +- ...ifecycle_FilePathLifetime_Frameworks_2.cpp | 6 +- ...Lifecycle_ProcessLifetime_Frameworks_2.cpp | 6 +- ...ifecycle_RegistryLifetime_Frameworks_2.cpp | 6 +- test/DynamicDependency/Test_WinRT/pch.h | 2 - 54 files changed, 1202 insertions(+), 1050 deletions(-) create mode 100644 dev/DynamicDependency/API/MddWin11.cpp create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.filters create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.vcxproj create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/framework.h create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/main.cpp create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/packages.config create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp create mode 100644 dev/WindowsAppRuntime_MSIXInstallFromPath/pch.h diff --git a/WindowsAppRuntime.sln b/WindowsAppRuntime.sln index c5187df602..a635f01772 100644 --- a/WindowsAppRuntime.sln +++ b/WindowsAppRuntime.sln @@ -261,6 +261,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Process.Environme EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChangeTracker", "dev\EnvironmentManager\ChangeTracker\ChangeTracker.vcxitems", "{E15C3465-9D45-495D-92CE-B91EF45E8623}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowsAppRuntime_MSIXInstallFromPath", "dev\WindowsAppRuntime_MSIXInstallFromPath\WindowsAppRuntime_MSIXInstallFromPath.vcxproj", "{D45D4170-E055-4926-8B03-04DAA5F02C6C}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Framework.Widgets", "test\DynamicDependency\data\Framework.Widgets\Framework.Widgets.vcxproj", "{09DDAE21-397F-4263-8561-7F2FF28127CF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DynamicDependencyLifetimeManagerShadow", "dev\DynamicDependency\DynamicDependencyLifetimeManagerShadow\DynamicDependencyLifetimeManagerShadow.vcxproj", "{6539E9E1-BF36-40E5-86BC-070E99DB7B7B}" @@ -1317,6 +1319,20 @@ Global {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x64.Build.0 = Release|x64 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x86.ActiveCfg = Release|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x86.Build.0 = Release|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|ARM64.Build.0 = Debug|ARM64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x64.ActiveCfg = Debug|x64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x64.Build.0 = Debug|x64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x86.ActiveCfg = Debug|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x86.Build.0 = Debug|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|Any CPU.ActiveCfg = Release|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|ARM64.ActiveCfg = Release|ARM64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|ARM64.Build.0 = Release|ARM64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x64.ActiveCfg = Release|x64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x64.Build.0 = Release|x64 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x86.ActiveCfg = Release|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x86.Build.0 = Release|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|Any CPU.ActiveCfg = Debug|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|ARM64.ActiveCfg = Debug|ARM64 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|ARM64.Build.0 = Debug|ARM64 @@ -2458,6 +2474,7 @@ Global {6967798A-AC07-4994-8FE9-DC9442F88E97} = {B4196B13-AB24-492E-9147-03CC7F2CAE59} {2F3FAD1B-D3DF-4866-A3A3-C2C777D55638} = {8ABB3637-75DB-4DC3-BFB1-0933FFA4269B} {E15C3465-9D45-495D-92CE-B91EF45E8623} = {6967798A-AC07-4994-8FE9-DC9442F88E97} + {D45D4170-E055-4926-8B03-04DAA5F02C6C} = {448ED2E5-0B37-4D97-9E6B-8C10A507976A} {09DDAE21-397F-4263-8561-7F2FF28127CF} = {0C534F12-B076-47E5-A05B-2A711233AC6F} {6539E9E1-BF36-40E5-86BC-070E99DB7B7B} = {6CD01EF6-D4A4-4801-ADCF-344CF87FF942} {4B30C685-8490-440F-9879-A75D45DAA361} = {AC5FFC80-92FE-4933-BED2-EC5519AC4440} @@ -2625,6 +2642,7 @@ Global dev\DynamicDependency\API\DynamicDependency.vcxitems*{bf055a59-0919-4e34-9b76-dd055495cc5a}*SharedItemsImports = 9 test\inc\inc.vcxitems*{c62688a1-16a0-4729-b6ed-842f4faa29f3}*SharedItemsImports = 4 dev\AccessControl\AccessControl.vcxitems*{c91bcb93-9ed1-4acd-85f3-26f9f6ac52e3}*SharedItemsImports = 9 + dev\Common\Common.vcxitems*{d45d4170-e055-4926-8b03-04daa5f02c6c}*SharedItemsImports = 4 test\inc\inc.vcxitems*{d5667df6-a151-4081-abc7-b93e8e5604ce}*SharedItemsImports = 4 dev\Deployment\Deployment.vcxitems*{db38fb4d-d04f-4c1d-93e0-f8ae259c5fd6}*SharedItemsImports = 9 dev\EnvironmentManager\ChangeTracker\ChangeTracker.vcxitems*{e15c3465-9d45-495d-92ce-b91ef45e8623}*SharedItemsImports = 9 diff --git a/build/CopyFilesToStagingDir.ps1 b/build/CopyFilesToStagingDir.ps1 index f7da5ddf1f..c531059364 100644 --- a/build/CopyFilesToStagingDir.ps1 +++ b/build/CopyFilesToStagingDir.ps1 @@ -171,6 +171,10 @@ PublishFile $FullBuildOutput\WindowsAppRuntime_BootstrapDLL\Microsoft.WindowsApp PublishFile $FullBuildOutput\WindowsAppRuntime_BootstrapDLL\Microsoft.WindowsAppRuntime.Bootstrap.dll $NugetDir\runtimes\win-$Platform\native PublishFile $FullBuildOutput\WindowsAppRuntime_BootstrapDLL\Microsoft.WindowsAppRuntime.Bootstrap.pdb $NugetDir\runtimes\win10-$Platform\native # +# Tools +PublishFile $FullBuildOutput\WindowsAppRuntime_MSIXInstallFromPath\WindowsAppRuntime_MSIXInstallFromPath.exe $NugetDir\tools\$Platform +PublishFile $FullBuildOutput\WindowsAppRuntime_MSIXInstallFromPath\WindowsAppRuntime_MSIXInstallFromPath.pdb $NugetDir\tools\$Platform +# # WinMD for UWP apps PublishFile $FullBuildOutput\WindowsAppRuntime_DLL\StrippedWinMD\Microsoft.Windows.ApplicationModel.DynamicDependency.winmd $NugetDir\lib\uap10.0 PublishFile $FullBuildOutput\WindowsAppRuntime_DLL\StrippedWinMD\Microsoft.Windows.ApplicationModel.WindowsAppRuntime.winmd $NugetDir\lib\uap10.0 diff --git a/dev/Common/WindowsAppRuntime.VersionInfo.cpp b/dev/Common/WindowsAppRuntime.VersionInfo.cpp index 2dda2aae1d..51d08caf58 100644 --- a/dev/Common/WindowsAppRuntime.VersionInfo.cpp +++ b/dev/Common/WindowsAppRuntime.VersionInfo.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -7,8 +7,6 @@ #include "WindowsAppRuntime.VersionInfo.h" -#include "MddWin11.h" - // Function prototype of the function exported by the resource DLL // (defined later in the build pipeline so we can't #include a header from there) STDAPI_(const void*) WindowsAppRuntime_GetVersionInfo(); @@ -117,20 +115,11 @@ STDAPI WindowsAppRuntime_VersionInfo_TestInitialize( PCWSTR frameworkPackageFamilyName, PCWSTR mainPackageFamilyName) noexcept try { - // Verify parameters + // Both or neither must be valued const bool frameworkPackageFamilyNameIsEmpty{ !frameworkPackageFamilyName || (*frameworkPackageFamilyName == L'0') }; const bool mainPackageFamilyNameIsEmpty{ !mainPackageFamilyName || (*mainPackageFamilyName == L'0') }; - if (MddCore::Win11::IsSupported()) - { - // Framework is optional but Main is never specified - FAIL_FAST_HR_IF(E_UNEXPECTED, !mainPackageFamilyNameIsEmpty); - } - else - { - // Both or neither must be valued - FAIL_FAST_HR_IF(E_UNEXPECTED, frameworkPackageFamilyNameIsEmpty && !mainPackageFamilyNameIsEmpty); - FAIL_FAST_HR_IF(E_UNEXPECTED, !frameworkPackageFamilyNameIsEmpty && mainPackageFamilyNameIsEmpty); - } + FAIL_FAST_HR_IF(E_UNEXPECTED, frameworkPackageFamilyNameIsEmpty && !mainPackageFamilyNameIsEmpty); + FAIL_FAST_HR_IF(E_UNEXPECTED, !frameworkPackageFamilyNameIsEmpty && mainPackageFamilyNameIsEmpty); // Update our state if (frameworkPackageFamilyNameIsEmpty) @@ -143,7 +132,7 @@ STDAPI WindowsAppRuntime_VersionInfo_TestInitialize( { // Initialize test support g_test_frameworkPackageFamilyName = frameworkPackageFamilyName; - g_test_mainPackageFamilyName = (!mainPackageFamilyName ? L"" : mainPackageFamilyName); + g_test_mainPackageFamilyName = mainPackageFamilyName; } return S_OK; } diff --git a/dev/Common/WindowsAppRuntime.VersionInfo.h b/dev/Common/WindowsAppRuntime.VersionInfo.h index e4194a1d8b..986f946493 100644 --- a/dev/Common/WindowsAppRuntime.VersionInfo.h +++ b/dev/Common/WindowsAppRuntime.VersionInfo.h @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #ifndef __MICROSFT_WINDOWSAPPRUNTIME_VERSIONINFO_H @@ -68,18 +68,6 @@ inline void TestInitialize( THROW_IF_FAILED(WindowsAppRuntime_VersionInfo_TestInitialize(frameworkPackageFamilyName, mainPackageFamilyName)); } -/// Initialize VersionInfo's test support. This will constrain package enumeration -/// and matching for test purposes. -/// -/// @param frameworkPackageFamilyName only match framework packages with this family name -/// -/// @note Not for product use. This is for test purposes only to verify the implementation. -inline void TestInitialize( - _In_ PCWSTR frameworkPackageFamilyName) -{ - THROW_IF_FAILED(WindowsAppRuntime_VersionInfo_TestInitialize(frameworkPackageFamilyName, nullptr)); -} - /// Shutdown VersionInfo's test support. /// /// @note Not for product use. This is for test purposes only to verify the implementation. diff --git a/dev/DynamicDependency/API/DynamicDependency.vcxitems b/dev/DynamicDependency/API/DynamicDependency.vcxitems index 9f8cfc64cc..e5f3fa55ae 100644 --- a/dev/DynamicDependency/API/DynamicDependency.vcxitems +++ b/dev/DynamicDependency/API/DynamicDependency.vcxitems @@ -23,6 +23,7 @@ + diff --git a/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters b/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters index d9841d40fd..293f21384c 100644 --- a/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters +++ b/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters @@ -50,6 +50,9 @@ Source Files + + Source Files + Source Files diff --git a/dev/DynamicDependency/API/M.AM.DD.PackageDependency.cpp b/dev/DynamicDependency/API/M.AM.DD.PackageDependency.cpp index 08a157b823..e78c85f086 100644 --- a/dev/DynamicDependency/API/M.AM.DD.PackageDependency.cpp +++ b/dev/DynamicDependency/API/M.AM.DD.PackageDependency.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -16,8 +16,6 @@ #include -#include "MddWin11.h" - namespace winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::implementation { PackageDependency::PackageDependency(hstring const& id) : @@ -27,37 +25,21 @@ namespace winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::implem winrt::PackageDependency PackageDependency::GetFromId(hstring const& id) { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - //TODO:47775758 GetResolved2 GetPackageDependencyInfo2(userSid, id.c_str(), &packageDependencyInfo) - } - else + auto tokenUser{ wil::get_token_information(GetCurrentThreadEffectiveToken()) }; + auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(tokenUser->User.Sid, id.c_str()) }; + if (!exists) { - auto tokenUser{ wil::get_token_information(GetCurrentThreadEffectiveToken()) }; - auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(tokenUser->User.Sid, id.c_str()) }; - if (!exists) - { - return nullptr; - } + return nullptr; } return winrt::make(id); } winrt::PackageDependency PackageDependency::GetFromIdForSystem(hstring const& id) { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - //TODO:47775758 GetResolved2 GetPackageDependencyInfo2(userSid, id.c_str(), &packageDependencyInfo) - } - else + auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(nullptr, id.c_str()) }; + if (!exists) { - auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(nullptr, id.c_str()) }; - if (!exists) - { - return nullptr; - } + return nullptr; } return winrt::make(id); } diff --git a/dev/DynamicDependency/API/MddDetourPackageGraph.cpp b/dev/DynamicDependency/API/MddDetourPackageGraph.cpp index 31c63cc58f..4ef959e4e6 100644 --- a/dev/DynamicDependency/API/MddDetourPackageGraph.cpp +++ b/dev/DynamicDependency/API/MddDetourPackageGraph.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -9,8 +9,6 @@ #include "PackageGraphManager.h" -#include "MddWin11.h" - #include <../Detours/detours.h> // Windows provides HRESULT_FROM_WIN32() but not the reverse. We need that for compat reasons. @@ -112,13 +110,6 @@ typedef UINT32 (WINAPI* GetPackageGraphRevisionIdFunction)(); HRESULT WINAPI MddDetourPackageGraphInitialize() noexcept { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddWin11Initialize()); - return S_OK; - } - // Detour package graph APIs to our implementation FAIL_FAST_IF_WIN32_ERROR(DetourUpdateThread(GetCurrentThread())); FAIL_FAST_IF_WIN32_ERROR(DetourAttach(&(PVOID&)TrueGetCurrentPackageInfo, DynamicGetCurrentPackageInfo)); @@ -169,13 +160,6 @@ HRESULT WINAPI MddDetourPackageGraphInitialize() noexcept HRESULT _MddDetourPackageGraphShutdown() noexcept { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - MddWin11Shutdown(); - return S_OK; - } - // Stop Detour'ing package graph APIs to our implementation (undo in reverse order we started Detour'ing APIs) if (TrueGetPackageGraphRevisionId) { diff --git a/dev/DynamicDependency/API/MddWin11.cpp b/dev/DynamicDependency/API/MddWin11.cpp new file mode 100644 index 0000000000..cca5dad052 --- /dev/null +++ b/dev/DynamicDependency/API/MddWin11.cpp @@ -0,0 +1,256 @@ +// Copyright (c) Microsoft Corporation and Contributors. +// Licensed under the MIT License. + +#include "pch.h" + +#include + +#include "MddWin11.h" + +namespace MddCore::Win11 +{ +static HMODULE g_dllApisetAppmodelRuntime_1_6{}; +static decltype(&::TryCreatePackageDependency) g_win11TryCreatePackageDependency{}; +static decltype(&::DeletePackageDependency) g_win11DeletePackageDependency{}; +static decltype(&::AddPackageDependency) g_win11AddPackageDependency{}; +static decltype(&::RemovePackageDependency) g_win11RemovePackageDependency{}; +static decltype(&::GetResolvedPackageFullNameForPackageDependency) g_win11GetResolvedPackageFullNameForPackageDependency{}; +static decltype(&::GetIdForPackageDependencyContext) g_win11GetIdForPackageDependencyContext{}; +static decltype(&::GetPackageGraphRevisionId) g_win11GetPackageGraphRevisionId{}; + +constexpr PackageDependencyLifetimeKind ToLifetimeKind(MddPackageDependencyLifetimeKind lifetimeKind) +{ + switch (lifetimeKind) + { + case MddPackageDependencyLifetimeKind::Process: return PackageDependencyLifetimeKind_Process; + case MddPackageDependencyLifetimeKind::FilePath: return PackageDependencyLifetimeKind_FilePath; + case MddPackageDependencyLifetimeKind::RegistryKey: return PackageDependencyLifetimeKind_RegistryKey; + default: THROW_HR_MSG(E_UNEXPECTED, "Unknown MddPackageDependencyLifetimeKind (%d)", lifetimeKind); + }; +} + +constexpr PackageDependencyLifetimeKind ToLifetimeKind(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind lifetimeKind) +{ + switch (lifetimeKind) + { + case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::Process: return PackageDependencyLifetimeKind_Process; + case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::FilePath: return PackageDependencyLifetimeKind_FilePath; + case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::RegistryKey: return PackageDependencyLifetimeKind_RegistryKey; + default: THROW_HR_MSG(E_UNEXPECTED, "Unknown winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeKind (%d)", lifetimeKind); + }; +} +} + +HRESULT WINAPI MddWin11Initialize() noexcept +{ + if (!MddCore::Win11::IsSupported()) + { + return S_OK; + } + + HMODULE dllApisetAppmodelRuntime_1_6{ LoadLibraryExW(L"api-ms-win-appmodel-runtime-l1-1-6.dll", nullptr, 0) }; + FAIL_FAST_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), dllApisetAppmodelRuntime_1_6); + + auto win11TryCreatePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, TryCreatePackageDependency) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11TryCreatePackageDependency); + auto win11DeletePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, DeletePackageDependency) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11DeletePackageDependency); + auto win11AddPackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, AddPackageDependency) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11AddPackageDependency); + auto win11RemovePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, RemovePackageDependency) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11RemovePackageDependency); + auto win11GetResolvedPackageFullNameForPackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, GetResolvedPackageFullNameForPackageDependency) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetResolvedPackageFullNameForPackageDependency); + auto win11GetIdForPackageDependencyContext{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, GetIdForPackageDependencyContext) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetIdForPackageDependencyContext); + auto win11GetPackageGraphRevisionId{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, GetPackageGraphRevisionId) }; + RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetPackageGraphRevisionId); + + MddCore::Win11::g_dllApisetAppmodelRuntime_1_6 = dllApisetAppmodelRuntime_1_6; + MddCore::Win11::g_win11TryCreatePackageDependency = win11TryCreatePackageDependency; + MddCore::Win11::g_win11DeletePackageDependency = win11DeletePackageDependency; + MddCore::Win11::g_win11AddPackageDependency = win11AddPackageDependency; + MddCore::Win11::g_win11RemovePackageDependency = win11RemovePackageDependency; + MddCore::Win11::g_win11GetResolvedPackageFullNameForPackageDependency = win11GetResolvedPackageFullNameForPackageDependency; + MddCore::Win11::g_win11GetIdForPackageDependencyContext = win11GetIdForPackageDependencyContext; + MddCore::Win11::g_win11GetPackageGraphRevisionId = win11GetPackageGraphRevisionId; + return S_OK; +} + +HRESULT WINAPI MddWin11Shutdown() noexcept +{ + if (MddCore::Win11::g_dllApisetAppmodelRuntime_1_6) + { + MddCore::Win11::g_win11TryCreatePackageDependency = nullptr; + MddCore::Win11::g_win11DeletePackageDependency = nullptr; + MddCore::Win11::g_win11AddPackageDependency = nullptr; + MddCore::Win11::g_win11RemovePackageDependency = nullptr; + MddCore::Win11::g_win11GetResolvedPackageFullNameForPackageDependency = nullptr; + MddCore::Win11::g_win11GetIdForPackageDependencyContext = nullptr; + MddCore::Win11::g_win11GetPackageGraphRevisionId = nullptr; + FreeLibrary(MddCore::Win11::g_dllApisetAppmodelRuntime_1_6); + MddCore::Win11::g_dllApisetAppmodelRuntime_1_6 = nullptr; + } + return S_OK; +} + +bool MddCore::Win11::IsSupported() +{ + static bool s_isSupported{ WindowsVersion::IsWindows11_22H2OrGreater() }; + return s_isSupported; +} + +HRESULT MddCore::Win11::TryCreatePackageDependency( + PSID user, + const winrt::hstring& packageFamilyName, + const winrt::Windows::ApplicationModel::PackageVersion& minVersion, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::CreatePackageDependencyOptions const& options, + _Outptr_result_maybenull_ PWSTR* packageDependencyId) +{ + PCWSTR win11PackageFamilyName{ packageFamilyName.c_str() }; + + const ::AppModel::Identity::PackageVersion minPackageVersion{ minVersion }; + const PACKAGE_VERSION win11MinVersion{ minPackageVersion }; + + auto win11PackageDependencyProcessorArchitectures{ PackageDependencyProcessorArchitectures_None }; + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Neutral, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::Neutral)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::X86)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X64, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::X64)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::Arm)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm64, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::Arm64)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86A64, WI_IsFlagSet(packageDependencyProcessorArchitectures, winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures::X86OnArm64)); + + const auto win11LifetimeKind{ ToLifetimeKind(options.LifetimeArtifactKind()) }; + + PCWSTR win11LifetimeArtifact{ options.LifetimeArtifact().c_str() }; + + auto win11Options{ CreatePackageDependencyOptions_None }; + WI_SetFlagIf(win11Options, CreatePackageDependencyOptions_DoNotVerifyDependencyResolution, !options.VerifyDependencyResolution()); + //TODO CreatePackageDependencyOptions_ScopeIsSystem + + RETURN_IF_FAILED(g_win11TryCreatePackageDependency(user, win11PackageFamilyName, win11MinVersion, + win11PackageDependencyProcessorArchitectures, win11LifetimeKind, win11LifetimeArtifact, + win11Options, packageDependencyId)); + return S_OK; +} + +HRESULT MddCore::Win11::TryCreatePackageDependency( + PSID user, + _In_ PCWSTR packageFamilyName, + PACKAGE_VERSION minVersion, + MddPackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, + MddPackageDependencyLifetimeKind lifetimeKind, + PCWSTR lifetimeArtifact, + MddCreatePackageDependencyOptions options, + _Outptr_result_maybenull_ PWSTR* packageDependencyId) +{ + const ::AppModel::Identity::PackageVersion win11MinVersion{ minVersion }; + + auto win11PackageDependencyProcessorArchitectures{ PackageDependencyProcessorArchitectures_None }; + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Neutral, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Neutral)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X86)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X64)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Arm)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Arm64)); + WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86A64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X86OnArm64)); + + const auto win11LifetimeKind{ ToLifetimeKind(lifetimeKind) }; + + auto win11Options{ CreatePackageDependencyOptions_None }; + WI_SetFlagIf(win11Options, CreatePackageDependencyOptions_DoNotVerifyDependencyResolution, WI_IsFlagSet(options, MddCreatePackageDependencyOptions::DoNotVerifyDependencyResolution)); + WI_SetFlagIf(win11Options, CreatePackageDependencyOptions_ScopeIsSystem, WI_IsFlagSet(options, MddCreatePackageDependencyOptions::ScopeIsSystem)); + + RETURN_IF_FAILED(g_win11TryCreatePackageDependency(user, packageFamilyName, win11MinVersion, + win11PackageDependencyProcessorArchitectures, win11LifetimeKind, lifetimeArtifact, + win11Options, packageDependencyId)); + return S_OK; +} + +void MddCore::Win11::DeletePackageDependency( + const winrt::hstring& packageDependencyId) +{ + DeletePackageDependency(packageDependencyId.c_str()); +} + +void MddCore::Win11::DeletePackageDependency( + _In_ PCWSTR packageDependencyId) +{ + (void)LOG_IF_FAILED(g_win11DeletePackageDependency(packageDependencyId)); +} + +HRESULT MddCore::Win11::AddPackageDependency( + const winrt::hstring& packageDependencyId, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::AddPackageDependencyOptions const& options, + _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, + _Outptr_opt_result_maybenull_ PWSTR* packageFullName) +{ + PCWSTR win11PackageDependencyId{ packageDependencyId.c_str() }; + + const auto win11Rank{ options.Rank() }; + + auto win11Options{ AddPackageDependencyOptions_None }; + WI_SetFlagIf(win11Options, AddPackageDependencyOptions_PrependIfRankCollision, options.PrependIfRankCollision()); + + static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); + auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; + + RETURN_IF_FAILED(g_win11AddPackageDependency(win11PackageDependencyId, win11Rank, win11Options, win11PackageDependencyContext, packageFullName)); + return S_OK; +} + +HRESULT MddCore::Win11::AddPackageDependency( + _In_ PCWSTR packageDependencyId, + INT32 rank, + MddAddPackageDependencyOptions options, + _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, + _Outptr_opt_result_maybenull_ PWSTR* packageFullName) +{ + auto win11Options{ AddPackageDependencyOptions_None }; + WI_SetFlagIf(win11Options, AddPackageDependencyOptions_PrependIfRankCollision, WI_IsFlagSet(options, MddAddPackageDependencyOptions::PrependIfRankCollision)); + + static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); + auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; + + RETURN_IF_FAILED(g_win11AddPackageDependency(packageDependencyId, rank, win11Options, win11PackageDependencyContext, packageFullName)); + return S_OK; +} + +void MddCore::Win11::RemovePackageDependency( + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId packageDependencyContextId) +{ + return RemovePackageDependency(ToContext(packageDependencyContextId)); +} + +void MddCore::Win11::RemovePackageDependency( + _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) +{ + static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); + auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; + + g_win11RemovePackageDependency(win11PackageDependencyContext); +} + +HRESULT MddCore::Win11::GetResolvedPackageFullNameForPackageDependency( + _In_ PCWSTR packageDependencyId, + _Outptr_result_maybenull_ PWSTR* packageFullName) +{ + RETURN_IF_FAILED(g_win11GetResolvedPackageFullNameForPackageDependency(packageDependencyId, packageFullName)); + return S_OK; +} + +HRESULT MddCore::Win11::GetIdForPackageDependencyContext( + _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext, + _Outptr_result_maybenull_ PWSTR* packageDependencyId) +{ + static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); + auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; + + RETURN_IF_FAILED(g_win11GetIdForPackageDependencyContext(win11PackageDependencyContext, packageDependencyId)); + return S_OK; +} + +UINT32 MddCore::Win11::GetPackageGraphRevisionId() +{ + return g_win11GetPackageGraphRevisionId(); +} diff --git a/dev/DynamicDependency/API/MddWin11.h b/dev/DynamicDependency/API/MddWin11.h index 79e7d63064..8b0f6bef92 100644 --- a/dev/DynamicDependency/API/MddWin11.h +++ b/dev/DynamicDependency/API/MddWin11.h @@ -5,409 +5,78 @@ #define MDDWIN11DYNAMICDEPENDENCY_H #include +#include -#include +HRESULT WINAPI MddWin11Initialize() noexcept; + +HRESULT WINAPI MddWin11Shutdown() noexcept; namespace MddCore::Win11 { - namespace details - { - // GetCurrentPackageInfo3 is documented but not in appmodel.h - // See https://learn.microsoft.com/windows/win32/appxpkg/appmodel/nf-appmodel-getcurrentpackageinfo3 - enum PackageInfo3Type - { - PackageInfo3Type_PackageInfoGeneration = 16, - }; - // - WINBASEAPI HRESULT WINAPI GetCurrentPackageInfo3( - _In_ UINT32 flags, - _In_ MddCore::Win11::details::PackageInfo3Type packageInfoType, - _Inout_ UINT32* bufferLength, - _Out_writes_bytes_opt_(*bufferLength) void* buffer, - _Out_opt_ UINT32* count); - - __declspec(selectany) HMODULE g_dllApisetAppmodelRuntime_1_5{}; - __declspec(selectany) decltype(&::TryCreatePackageDependency) g_win11TryCreatePackageDependency{}; - __declspec(selectany) decltype(&::DeletePackageDependency) g_win11DeletePackageDependency{}; - __declspec(selectany) decltype(&::AddPackageDependency) g_win11AddPackageDependency{}; - __declspec(selectany) decltype(&::RemovePackageDependency) g_win11RemovePackageDependency{}; - __declspec(selectany) decltype(&::GetResolvedPackageFullNameForPackageDependency) g_win11GetResolvedPackageFullNameForPackageDependency{}; - __declspec(selectany) decltype(&::GetIdForPackageDependencyContext) g_win11GetIdForPackageDependencyContext{}; - __declspec(selectany) decltype(&MddCore::Win11::details::GetCurrentPackageInfo3) g_win11GetCurrentPackageInfo3{}; - - __declspec(selectany) HMODULE g_dllApisetAppmodelRuntime_1_6{}; - __declspec(selectany) decltype(&::GetPackageGraphRevisionId) g_win11GetPackageGraphRevisionId{}; - - __declspec(selectany) HMODULE g_dllApisetAppmodelRuntime_1_7{}; - //TODO:47775758 GetResolved2 __declspec(selectany) decltype(&::GetResolvedPackageFullNameForPackageDependency2) g_win11GetResolvedPackageFullNameForPackageDependency2{}; - - __declspec(selectany) bool g_isSupported{ WindowsVersion::IsWindows11_22H2OrGreater() }; - - constexpr PackageDependencyLifetimeKind ToLifetimeKind(MddPackageDependencyLifetimeKind lifetimeKind) - { - switch (lifetimeKind) - { - case MddPackageDependencyLifetimeKind::Process: return PackageDependencyLifetimeKind_Process; - case MddPackageDependencyLifetimeKind::FilePath: return PackageDependencyLifetimeKind_FilePath; - case MddPackageDependencyLifetimeKind::RegistryKey: return PackageDependencyLifetimeKind_RegistryKey; - default: THROW_HR_MSG(E_UNEXPECTED, "Unknown MddPackageDependencyLifetimeKind (%d)", lifetimeKind); - }; - } - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - constexpr PackageDependencyLifetimeKind ToLifetimeKind(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind lifetimeKind) - { - switch (lifetimeKind) - { - case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::Process: return PackageDependencyLifetimeKind_Process; - case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::FilePath: return PackageDependencyLifetimeKind_FilePath; - case winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::RegistryKey: return PackageDependencyLifetimeKind_RegistryKey; - default: THROW_HR_MSG(E_UNEXPECTED, "Unknown winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeKind (%d)", lifetimeKind); - }; - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - - inline HRESULT Load(PCWSTR moduleName, HMODULE& hmodule) - { - hmodule = LoadLibraryExW(moduleName, nullptr, 0); - if (hmodule == nullptr) - { - const auto rc{ GetLastError() }; - RETURN_HR_IF_MSG(HRESULT_FROM_WIN32(rc), rc != ERROR_MOD_NOT_FOUND, "%ls", moduleName); - } - return S_OK; - } - } - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - inline winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId ToContextId(MDD_PACKAGEDEPENDENCY_CONTEXT context) - { - return winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId{ static_cast(reinterpret_cast(context)) }; - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - inline MDD_PACKAGEDEPENDENCY_CONTEXT ToContext(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId contextId) - { - return reinterpret_cast(static_cast(contextId.Id)); - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - - inline bool IsSupported() - { - return MddCore::Win11::details::g_isSupported; - } - - inline bool IsGetResolvedPackageFullNameForPackageDependency2Supported() - { - return IsSupported() && MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_7; - } - - inline HRESULT TryCreatePackageDependency( - PSID user, - _In_ PCWSTR packageFamilyName, - PACKAGE_VERSION minVersion, - MddPackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, - MddPackageDependencyLifetimeKind lifetimeKind, - PCWSTR lifetimeArtifact, - MddCreatePackageDependencyOptions options, - _Outptr_result_maybenull_ PWSTR* packageDependencyId) - { - const ::AppModel::Identity::PackageVersion win11MinVersion{ minVersion }; - - auto win11PackageDependencyProcessorArchitectures{ PackageDependencyProcessorArchitectures_None }; - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Neutral, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Neutral)); - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X86)); - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X64)); - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Arm)); - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_Arm64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::Arm64)); - WI_SetFlagIf(win11PackageDependencyProcessorArchitectures, PackageDependencyProcessorArchitectures_X86A64, WI_IsFlagSet(packageDependencyProcessorArchitectures, MddPackageDependencyProcessorArchitectures::X86OnArm64)); - - const auto win11LifetimeKind{ MddCore::Win11::details::ToLifetimeKind(lifetimeKind) }; - - auto win11Options{ CreatePackageDependencyOptions_None }; - WI_SetFlagIf(win11Options, CreatePackageDependencyOptions_DoNotVerifyDependencyResolution, WI_IsFlagSet(options, MddCreatePackageDependencyOptions::DoNotVerifyDependencyResolution)); - WI_SetFlagIf(win11Options, CreatePackageDependencyOptions_ScopeIsSystem, WI_IsFlagSet(options, MddCreatePackageDependencyOptions::ScopeIsSystem)); - - RETURN_IF_FAILED(MddCore::Win11::details::g_win11TryCreatePackageDependency(user, packageFamilyName, win11MinVersion, - win11PackageDependencyProcessorArchitectures, win11LifetimeKind, lifetimeArtifact, - win11Options, packageDependencyId)); - return S_OK; - } - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - inline HRESULT _TryCreatePackageDependency( - PSID user, - const winrt::hstring& packageFamilyName, - const winrt::Windows::ApplicationModel::PackageVersion& minVersion, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::CreatePackageDependencyOptions const& options, - const MddCreatePackageDependencyOptions initialOptions, - _Outptr_result_maybenull_ PWSTR* packageDependencyId) - { - PCWSTR mddPackageFamilyName{ packageFamilyName.c_str() }; - - const ::AppModel::Identity::PackageVersion minPackageVersion{ minVersion }; - const PACKAGE_VERSION mddMinVersion{ minPackageVersion }; - - static_assert(static_cast(PackageDependencyProcessorArchitectures_Neutral) == static_cast(MddPackageDependencyProcessorArchitectures::Neutral)); - static_assert(static_cast(PackageDependencyProcessorArchitectures_X86) == static_cast(MddPackageDependencyProcessorArchitectures::X86)); - static_assert(static_cast(PackageDependencyProcessorArchitectures_X64) == static_cast(MddPackageDependencyProcessorArchitectures::X64)); - static_assert(static_cast(PackageDependencyProcessorArchitectures_Arm) == static_cast(MddPackageDependencyProcessorArchitectures::Arm)); - static_assert(static_cast(PackageDependencyProcessorArchitectures_Arm64) == static_cast(MddPackageDependencyProcessorArchitectures::Arm64)); - static_assert(static_cast(PackageDependencyProcessorArchitectures_X86A64) == static_cast(MddPackageDependencyProcessorArchitectures::X86OnArm64)); - const auto mddPackageDependencyProcessorArchitectures{ static_cast(packageDependencyProcessorArchitectures) }; - - static_assert(static_cast(MddPackageDependencyLifetimeKind::Process) == static_cast(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::Process)); - static_assert(static_cast(MddPackageDependencyLifetimeKind::FilePath) == static_cast(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::FilePath)); - static_assert(static_cast(MddPackageDependencyLifetimeKind::RegistryKey) == static_cast(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyLifetimeArtifactKind::RegistryKey)); - const auto mddLifetimeKind{ static_cast(options.LifetimeArtifactKind()) }; - - PCWSTR mddLifetimeArtifact{ options.LifetimeArtifact().c_str() }; - - auto mddOptions{ initialOptions }; - WI_SetFlagIf(mddOptions, MddCreatePackageDependencyOptions::DoNotVerifyDependencyResolution, !options.VerifyDependencyResolution()); - // NOTE: ScopeIsSystem is handled by the caller via initialOptions - - RETURN_IF_FAILED(TryCreatePackageDependency(user, mddPackageFamilyName, mddMinVersion, - mddPackageDependencyProcessorArchitectures, mddLifetimeKind, mddLifetimeArtifact, mddOptions, packageDependencyId)); - return S_OK; - } - - inline HRESULT TryCreatePackageDependency( - PSID user, - const winrt::hstring& packageFamilyName, - const winrt::Windows::ApplicationModel::PackageVersion& minVersion, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::CreatePackageDependencyOptions const& options, - _Outptr_result_maybenull_ PWSTR* packageDependencyId) - { - RETURN_IF_FAILED(_TryCreatePackageDependency(user, packageFamilyName, minVersion, - packageDependencyProcessorArchitectures, options, - MddCreatePackageDependencyOptions::None, packageDependencyId)); - return S_OK; - } - - inline HRESULT TryCreatePackageDependencyForSystem( - PSID user, - const winrt::hstring& packageFamilyName, - const winrt::Windows::ApplicationModel::PackageVersion& minVersion, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::CreatePackageDependencyOptions const& options, - _Outptr_result_maybenull_ PWSTR* packageDependencyId) - { - RETURN_IF_FAILED(_TryCreatePackageDependency(user, packageFamilyName, minVersion, - packageDependencyProcessorArchitectures, options, - MddCreatePackageDependencyOptions::ScopeIsSystem, packageDependencyId)); - return S_OK; - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - - inline void DeletePackageDependency( - _In_ PCWSTR packageDependencyId) - { - (void)LOG_IF_FAILED(MddCore::Win11::details::g_win11DeletePackageDependency(packageDependencyId)); - } - - inline void DeletePackageDependency( - const winrt::hstring& packageDependencyId) - { - DeletePackageDependency(packageDependencyId.c_str()); - } - - inline HRESULT AddPackageDependency( - _In_ PCWSTR packageDependencyId, - std::int32_t rank, - MddAddPackageDependencyOptions options, - _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, - _Outptr_opt_result_maybenull_ PWSTR* packageFullName) - { - auto win11Options{ AddPackageDependencyOptions_None }; - WI_SetFlagIf(win11Options, AddPackageDependencyOptions_PrependIfRankCollision, WI_IsFlagSet(options, MddAddPackageDependencyOptions::PrependIfRankCollision)); - - static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); - auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; - - RETURN_IF_FAILED(MddCore::Win11::details::g_win11AddPackageDependency(packageDependencyId, rank, win11Options, win11PackageDependencyContext, packageFullName)); - return S_OK; - } - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - inline HRESULT AddPackageDependency( - const winrt::hstring& packageDependencyId, - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::AddPackageDependencyOptions const& options, - _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, - _Outptr_opt_result_maybenull_ PWSTR* packageFullName) - { - PCWSTR mddPackageDependencyId{ packageDependencyId.c_str() }; - - const auto mddRank{ options.Rank() }; - - auto mddOptions{ MddAddPackageDependencyOptions::None }; - WI_SetFlagIf(mddOptions, MddAddPackageDependencyOptions::PrependIfRankCollision, options.PrependIfRankCollision()); - - RETURN_IF_FAILED(AddPackageDependency(mddPackageDependencyId, mddRank, mddOptions, packageDependencyContext, packageFullName)); - return S_OK; - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - - inline void RemovePackageDependency( - _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) - { - static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); - auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; - - MddCore::Win11::details::g_win11RemovePackageDependency(win11PackageDependencyContext); - } - -#if defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - inline void RemovePackageDependency( - winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId packageDependencyContextId) - { - return RemovePackageDependency(MddCore::Win11::ToContext(packageDependencyContextId)); - } -#endif // defined(WINRT_Microsoft_Windows_ApplicationModel_DynamicDependency_H) - - inline HRESULT GetResolvedPackageFullNameForPackageDependency( - _In_ PCWSTR packageDependencyId, - _Outptr_result_maybenull_ PWSTR* packageFullName) - { - RETURN_IF_FAILED(MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency(packageDependencyId, packageFullName)); - return S_OK; - } - - inline HRESULT GetResolvedPackageFullNameForPackageDependency2( - _In_ PCWSTR /*packageDependencyId*/, - _Outptr_result_maybenull_ PWSTR* /*packageFullName*/) - { - //TODO:47775758 GetResolved2 RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), g_win11GetResolvedPackageFullNameForPackageDependency2); - //TODO:47775758 GetResolved2 RETURN_IF_FAILED(MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency2(packageDependencyId, packageFullName)); - //TODO:47775758 GetResolved2 return S_OK; - RETURN_WIN32(ERROR_NOT_SUPPORTED); - } - - inline HRESULT GetIdForPackageDependencyContext( - _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext, - _Outptr_result_maybenull_ PWSTR* packageDependencyId) - { - static_assert(sizeof(MDD_PACKAGEDEPENDENCY_CONTEXT) == sizeof(PACKAGEDEPENDENCY_CONTEXT)); - auto win11PackageDependencyContext{ reinterpret_cast(packageDependencyContext) }; - - RETURN_IF_FAILED(MddCore::Win11::details::g_win11GetIdForPackageDependencyContext(win11PackageDependencyContext, packageDependencyId)); - return S_OK; - } - - inline UINT32 GetPackageGraphRevisionId() - { - if (MddCore::Win11::details::g_win11GetPackageGraphRevisionId()) - { - return MddCore::Win11::details::g_win11GetPackageGraphRevisionId(); - } - else - { - UINT32 revisionId{}; - UINT32 bufferLength{ sizeof(revisionId) }; - const HRESULT hr{ MddCore::Win11::details::g_win11GetCurrentPackageInfo3(0, MddCore::Win11::details::PackageInfo3Type_PackageInfoGeneration, &bufferLength, &revisionId, nullptr) }; - if (hr == HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE)) - { - // No package graph - return 0; - } - LOG_IF_FAILED_MSG(hr, "GetCurrentPackageInfo3 failed!"); - return revisionId; - } - } -} - -inline HRESULT WINAPI MddWin11Initialize() noexcept +bool IsSupported(); + +HRESULT TryCreatePackageDependency( + PSID user, + const winrt::hstring& packageFamilyName, + const winrt::Windows::ApplicationModel::PackageVersion& minVersion, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::CreatePackageDependencyOptions const& options, + _Outptr_result_maybenull_ PWSTR* packageDependencyId); + +HRESULT TryCreatePackageDependency( + PSID user, + _In_ PCWSTR packageFamilyName, + PACKAGE_VERSION minVersion, + MddPackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, + MddPackageDependencyLifetimeKind lifetimeKind, + PCWSTR lifetimeArtifact, + MddCreatePackageDependencyOptions options, + _Outptr_result_maybenull_ PWSTR* packageDependencyId); + +void DeletePackageDependency( + const winrt::hstring& packageDependencyId); + +void DeletePackageDependency( + _In_ PCWSTR packageDependencyId); + +HRESULT AddPackageDependency( + const winrt::hstring& packageDependencyId, + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::AddPackageDependencyOptions const& options, + _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, + _Outptr_opt_result_maybenull_ PWSTR* packageFullName); + +HRESULT AddPackageDependency( + _In_ PCWSTR packageDependencyId, + std::int32_t rank, + MddAddPackageDependencyOptions options, + _Out_ MDD_PACKAGEDEPENDENCY_CONTEXT* packageDependencyContext, + _Outptr_opt_result_maybenull_ PWSTR* packageFullName); + +void RemovePackageDependency( + winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId packageDependencyContextId); + +void RemovePackageDependency( + _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext); + +HRESULT GetResolvedPackageFullNameForPackageDependency( + _In_ PCWSTR packageDependencyId, + _Outptr_result_maybenull_ PWSTR* packageFullName); + +HRESULT GetIdForPackageDependencyContext( + _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext, + _Outptr_result_maybenull_ PWSTR* packageDependencyId); + +UINT32 GetPackageGraphRevisionId(); + +inline winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId ToContextId(MDD_PACKAGEDEPENDENCY_CONTEXT context) { - if (!MddCore::Win11::IsSupported()) - { - return S_OK; - } - - //TODO:47775758 GetResolved2 auto win11GetResolvedPackageFullNameForPackageDependency2{ static_cast(nullptr) }; - HMODULE dllApisetAppmodelRuntime_1_7{}; - RETURN_IF_FAILED(MddCore::Win11::details::Load(L"api-ms-win-appmodel-runtime-l1-1-7.dll", dllApisetAppmodelRuntime_1_7)); - if (dllApisetAppmodelRuntime_1_7) - { - //TODO:47775758 GetResolved2 win11GetResolvedPackageFullNameForPackageDependency2 = GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_7, GetResolvedPackageFullNameForPackageDependency); - //TODO:47775758 GetResolved2 RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetResolvedPackageFullNameForPackageDependency2); - } - - auto win11GetPackageGraphRevisionId{ static_cast(nullptr) }; - HMODULE dllApisetAppmodelRuntime_1_6{}; - RETURN_IF_FAILED(MddCore::Win11::details::Load(L"api-ms-win-appmodel-runtime-l1-1-6.dll", dllApisetAppmodelRuntime_1_6)); - if (dllApisetAppmodelRuntime_1_6) - { - win11GetPackageGraphRevisionId = GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_6, GetPackageGraphRevisionId); - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetPackageGraphRevisionId); - } - - HMODULE dllApisetAppmodelRuntime_1_5{ LoadLibraryExW(L"api-ms-win-appmodel-runtime-l1-1-5.dll", nullptr, 0) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), dllApisetAppmodelRuntime_1_5); - auto win11TryCreatePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, TryCreatePackageDependency) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11TryCreatePackageDependency); - auto win11DeletePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, DeletePackageDependency) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11DeletePackageDependency); - auto win11AddPackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, AddPackageDependency) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11AddPackageDependency); - auto win11RemovePackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, RemovePackageDependency) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11RemovePackageDependency); - auto win11GetResolvedPackageFullNameForPackageDependency{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, GetResolvedPackageFullNameForPackageDependency) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetResolvedPackageFullNameForPackageDependency); - auto win11GetIdForPackageDependencyContext{ GetProcAddressByFunctionDeclaration(dllApisetAppmodelRuntime_1_5, GetIdForPackageDependencyContext) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetIdForPackageDependencyContext); - auto win11GetCurrentPackageInfo3{ reinterpret_cast(GetProcAddress(dllApisetAppmodelRuntime_1_5, "GetCurrentPackageInfo3")) }; - RETURN_HR_IF_NULL(HRESULT_FROM_WIN32(GetLastError()), win11GetCurrentPackageInfo3); - - // Success - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_7 = dllApisetAppmodelRuntime_1_7; - //TODO:47775758 GetResolved2 MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency2 = win11GetResolvedPackageFullNameForPackageDependency2; - // - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_6 = dllApisetAppmodelRuntime_1_6; - MddCore::Win11::details::g_win11GetPackageGraphRevisionId = win11GetPackageGraphRevisionId; - // - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_5 = dllApisetAppmodelRuntime_1_5; - MddCore::Win11::details::g_win11TryCreatePackageDependency = win11TryCreatePackageDependency; - MddCore::Win11::details::g_win11DeletePackageDependency = win11DeletePackageDependency; - MddCore::Win11::details::g_win11AddPackageDependency = win11AddPackageDependency; - MddCore::Win11::details::g_win11RemovePackageDependency = win11RemovePackageDependency; - MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency = win11GetResolvedPackageFullNameForPackageDependency; - MddCore::Win11::details::g_win11GetIdForPackageDependencyContext = win11GetIdForPackageDependencyContext; - MddCore::Win11::details::g_win11GetCurrentPackageInfo3 = win11GetCurrentPackageInfo3; - return S_OK; + return winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId{ static_cast(reinterpret_cast(context)) }; } -inline HRESULT WINAPI MddWin11Shutdown() noexcept +inline MDD_PACKAGEDEPENDENCY_CONTEXT ToContext(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId contextId) { - if (MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_7) - { - //TODO:47775758 GetResolved2 MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency2 = nullptr; - FreeLibrary(MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_7); - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_7 = nullptr; - } - - if (MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_6) - { - MddCore::Win11::details::g_win11GetPackageGraphRevisionId = nullptr; - FreeLibrary(MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_6); - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_6 = nullptr; - } - - if (MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_5) - { - MddCore::Win11::details::g_win11TryCreatePackageDependency = nullptr; - MddCore::Win11::details::g_win11DeletePackageDependency = nullptr; - MddCore::Win11::details::g_win11AddPackageDependency = nullptr; - MddCore::Win11::details::g_win11RemovePackageDependency = nullptr; - MddCore::Win11::details::g_win11GetResolvedPackageFullNameForPackageDependency = nullptr; - MddCore::Win11::details::g_win11GetIdForPackageDependencyContext = nullptr; - MddCore::Win11::details::g_win11GetCurrentPackageInfo3 = nullptr; - FreeLibrary(MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_5); - MddCore::Win11::details::g_dllApisetAppmodelRuntime_1_5 = nullptr; - } - return S_OK; + return reinterpret_cast(static_cast(contextId.Id)); +} } #endif // MDDWIN11DYNAMICDEPENDENCY_H diff --git a/dev/DynamicDependency/API/MsixDynamicDependency.cpp b/dev/DynamicDependency/API/MsixDynamicDependency.cpp index 79cff8e7d9..609ba2b03a 100644 --- a/dev/DynamicDependency/API/MsixDynamicDependency.cpp +++ b/dev/DynamicDependency/API/MsixDynamicDependency.cpp @@ -9,8 +9,6 @@ #include "PackageDependencyManager.h" #include "PackageGraphManager.h" -#include "MddWin11.h" - STDAPI MddTryCreatePackageDependency( PSID user, _In_ PCWSTR packageFamilyName, @@ -23,16 +21,7 @@ STDAPI MddTryCreatePackageDependency( { *packageDependencyId = nullptr; - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddCore::Win11::TryCreatePackageDependency(user, packageFamilyName, - minVersion, packageDependencyProcessorArchitectures, lifetimeKind, lifetimeArtifact, - options, packageDependencyId)); - return S_OK; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); MddCore::PackageDependencyManager::CreatePackageDependency(user, packageFamilyName, minVersion, packageDependencyProcessorArchitectures, lifetimeKind, lifetimeArtifact, options, packageDependencyId); @@ -43,14 +32,7 @@ CATCH_RETURN(); STDAPI_(void) MddDeletePackageDependency( _In_ PCWSTR packageDependencyId) noexcept try { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - MddCore::Win11::DeletePackageDependency(packageDependencyId); - return; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process THROW_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); MddCore::PackageDependencyManager::DeletePackageDependency(packageDependencyId); @@ -70,14 +52,7 @@ STDAPI MddAddPackageDependency( *packageFullName = nullptr; } - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddCore::Win11::AddPackageDependency(packageDependencyId, rank, options, packageDependencyContext, packageFullName)); - return S_OK; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); RETURN_IF_FAILED(MddCore::PackageGraphManager::AddToPackageGraph(packageDependencyId, rank, options, packageDependencyContext, packageFullName)); @@ -88,14 +63,7 @@ CATCH_RETURN(); STDAPI_(void) MddRemovePackageDependency( _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) noexcept try { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - MddCore::Win11::RemovePackageDependency(packageDependencyContext); - return; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process LOG_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); MddCore::PackageGraphManager::RemoveFromPackageGraph(packageDependencyContext); @@ -108,46 +76,13 @@ STDAPI MddGetResolvedPackageFullNameForPackageDependency( { *packageFullName = nullptr; - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddCore::Win11::GetResolvedPackageFullNameForPackageDependency(packageDependencyId, packageFullName)); - return S_OK; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); RETURN_HR_IF(E_INVALIDARG, !packageDependencyId || (packageDependencyId[0] == L'\0')); wil::unique_process_heap_string fullName; - RETURN_IF_FAILED(MddCore::PackageGraphManager::GetResolvedPackageDependency(packageDependencyId, fullName)); - - *packageFullName = fullName.release(); - return S_OK; -} -CATCH_RETURN(); - -STDAPI MddGetResolvedPackageFullNameForPackageDependency2( - _In_ PCWSTR packageDependencyId, - _Outptr_result_maybenull_ PWSTR* packageFullName) noexcept try -{ - *packageFullName = nullptr; - - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddCore::Win11::GetResolvedPackageFullNameForPackageDependency2(packageDependencyId, packageFullName)); - return S_OK; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); - - RETURN_HR_IF(E_INVALIDARG, !packageDependencyId || (packageDependencyId[0] == L'\0')); - - wil::unique_process_heap_string fullName; - RETURN_IF_FAILED(MddCore::PackageGraphManager::GetResolvedPackageDependency2(packageDependencyId, fullName)); + RETURN_IF_FAILED(MddCore::PackageGraphManager::ResolvePackageDependency(packageDependencyId, MddAddPackageDependencyOptions::None, fullName)); *packageFullName = fullName.release(); return S_OK; @@ -160,14 +95,7 @@ STDAPI MddGetIdForPackageDependencyContext( { *packageDependencyId = nullptr; - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - RETURN_IF_FAILED(MddCore::Win11::GetIdForPackageDependencyContext(packageDependencyContext, packageDependencyId)); - return S_OK; - } - - // WinAppSDK's Dynamic Dependencies requires a non-packaged process + // Dynamic Dependencies requires a non-packaged process RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess()); RETURN_HR_IF(E_INVALIDARG, !packageDependencyContext); @@ -182,12 +110,6 @@ CATCH_RETURN(); STDAPI_(UINT32) MddGetPackageGraphRevisionId() noexcept { - // Use the Win11 APIs if available (instead of Detour'ing to our own implementation) - if (MddCore::Win11::IsSupported()) - { - return MddCore::Win11::GetPackageGraphRevisionId(); - } - return MddCore::PackageGraphManager::GetPackageGraphRevisionId(); } diff --git a/dev/DynamicDependency/API/MsixDynamicDependency.h b/dev/DynamicDependency/API/MsixDynamicDependency.h index fb3365e37c..e80c389ce4 100644 --- a/dev/DynamicDependency/API/MsixDynamicDependency.h +++ b/dev/DynamicDependency/API/MsixDynamicDependency.h @@ -192,28 +192,17 @@ STDAPI MddAddPackageDependency( STDAPI_(void) MddRemovePackageDependency( _In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) noexcept; -/// Return the package full name to which the -/// PackageDependency has been resolved. Does not add the +/// Return the package full name that would be used if the +/// PackageDependency were to be resolved. Does not add the /// package to the process graph. /// /// @param packageFullName allocated via HeapAlloc; use HeapFree to deallocate. /// If the package dependency cannot be resolved the function /// succeeds but packageFullName is nullptr. -/// @note An unknown packageDependencyId returns S_OK and packageFullName=null. STDAPI MddGetResolvedPackageFullNameForPackageDependency( _In_ PCWSTR packageDependencyId, _Outptr_result_maybenull_ PWSTR* packageFullName) noexcept; -/// Return the package full name to which the -/// PackageDependency has been resolved. Does not add the -/// package to the process graph. -/// -/// @param packageFullName allocated via HeapAlloc; use HeapFree to deallocate. -/// @note An unknown packageDependencyId returns HRESULT_FROM_WIN32(ERROR_NOT_FOUND). -STDAPI MddGetResolvedPackageFullNameForPackageDependency2( - _In_ PCWSTR packageDependencyId, - _Outptr_result_maybenull_ PWSTR* packageFullName) noexcept; - /// Return the package dependency for the context. /// /// @param packageDependencyId allocated via HeapAlloc; use HeapFree to deallocate. diff --git a/dev/DynamicDependency/API/PackageGraph.cpp b/dev/DynamicDependency/API/PackageGraph.cpp index 3c8af19531..5bf3219756 100644 --- a/dev/DynamicDependency/API/PackageGraph.cpp +++ b/dev/DynamicDependency/API/PackageGraph.cpp @@ -109,49 +109,6 @@ HRESULT MddCore::PackageGraph::Add( return S_OK; } -HRESULT MddCore::PackageGraph::GetResolvedPackageDependency( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) noexcept try -{ - packageFullName.reset(); - - // Get the package dependency - auto foundPackageDependency{ MddCore::PackageDependencyManager::GetPackageDependency(packageDependencyId) }; - if (foundPackageDependency) - { - // Is the package dependency already resolved? - const auto& packageDependency{ *foundPackageDependency }; - if (!packageDependency.PackageFullName().empty()) - { - // Gotcha! - packageFullName = wil::make_process_heap_string(packageDependency.PackageFullName().c_str()); - } - } - return S_OK; -} -CATCH_RETURN(); - -HRESULT MddCore::PackageGraph::GetResolvedPackageDependency2( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) noexcept try -{ - packageFullName.reset(); - - // Get the package dependency - auto foundPackageDependency{ MddCore::PackageDependencyManager::GetPackageDependency(packageDependencyId) }; - THROW_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_FOUND), !foundPackageDependency); - - // Is the package dependency already resolved? - const auto& packageDependency{ *foundPackageDependency }; - if (!packageDependency.PackageFullName().empty()) - { - // Gotcha! - packageFullName = wil::make_process_heap_string(packageDependency.PackageFullName().c_str()); - } - return S_OK; -} -CATCH_RETURN(); - HRESULT MddCore::PackageGraph::ResolvePackageDependency( PCWSTR packageDependencyId, MddAddPackageDependencyOptions options, @@ -171,7 +128,7 @@ HRESULT MddCore::PackageGraph::ResolvePackageDependency( return S_OK; } - // Resolve it + // Rewsolve it return ResolvePackageDependency(packageDependency, options, packageFullName); } CATCH_RETURN(); diff --git a/dev/DynamicDependency/API/PackageGraph.h b/dev/DynamicDependency/API/PackageGraph.h index d92bfa22ee..89ae0d3956 100644 --- a/dev/DynamicDependency/API/PackageGraph.h +++ b/dev/DynamicDependency/API/PackageGraph.h @@ -34,24 +34,6 @@ class PackageGraph _In_ PCWSTR packageDependencyId, MDD_PACKAGEDEPENDENCY_CONTEXT& context); -public: - HRESULT GetResolvedPackageDependency( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) noexcept; - - static HRESULT GetResolvedPackageDependency( - const MddCore::PackageDependency& packageDependency, - wil::unique_process_heap_string& packageFullName); - -public: - HRESULT GetResolvedPackageDependency2( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) noexcept; - - static HRESULT GetResolvedPackageDependency2( - const MddCore::PackageDependency& packageDependency, - wil::unique_process_heap_string& packageFullName); - public: HRESULT ResolvePackageDependency( PCWSTR packageDependencyId, diff --git a/dev/DynamicDependency/API/PackageGraphManager.cpp b/dev/DynamicDependency/API/PackageGraphManager.cpp index e1bee31d9b..16195fe20a 100644 --- a/dev/DynamicDependency/API/PackageGraphManager.cpp +++ b/dev/DynamicDependency/API/PackageGraphManager.cpp @@ -26,24 +26,6 @@ UINT32 MddCore::PackageGraphManager::SetPackageGraphRevisionId(const UINT32 valu return static_cast(InterlockedExchange(&s_packageGraphRevisionId, value)); } -HRESULT MddCore::PackageGraphManager::GetResolvedPackageDependency( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) -{ - std::unique_lock lock(s_lock); - - return s_packageGraph.GetResolvedPackageDependency(packageDependencyId, packageFullName); -} - -HRESULT MddCore::PackageGraphManager::GetResolvedPackageDependency2( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName) -{ - std::unique_lock lock(s_lock); - - return s_packageGraph.GetResolvedPackageDependency2(packageDependencyId, packageFullName); -} - HRESULT MddCore::PackageGraphManager::ResolvePackageDependency( PCWSTR packageDependencyId, MddAddPackageDependencyOptions options, diff --git a/dev/DynamicDependency/API/PackageGraphManager.h b/dev/DynamicDependency/API/PackageGraphManager.h index 74805fa425..f0eb427552 100644 --- a/dev/DynamicDependency/API/PackageGraphManager.h +++ b/dev/DynamicDependency/API/PackageGraphManager.h @@ -20,14 +20,6 @@ class PackageGraphManager static UINT32 SetPackageGraphRevisionId(const UINT32 value); public: - static HRESULT GetResolvedPackageDependency( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName); - - static HRESULT GetResolvedPackageDependency2( - PCWSTR packageDependencyId, - wil::unique_process_heap_string& packageFullName); - static HRESULT ResolvePackageDependency( PCWSTR packageDependencyId, MddAddPackageDependencyOptions options, diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrap.cpp b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrap.cpp index 4d947c0db3..f6baf144e4 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrap.cpp +++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrap.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -10,8 +10,6 @@ #include "IDynamicDependencyLifetimeManager.h" -#include "MddWin11.h" - #include HRESULT _MddBootstrapInitialize( @@ -26,9 +24,6 @@ void FirstTimeInitialization( UINT32 majorMinorVersion, PCWSTR versionTag, PACKAGE_VERSION minVersion); -std::wstring GetFrameworkPackageFamilyName( - UINT32 majorMinorVersion, - PCWSTR versionTag); wil::unique_cotaskmem_ptr GetFrameworkPackageInfoForPackage(PCWSTR packageFullName, const PACKAGE_INFO*& frameworkPackageInfo); DLL_DIRECTORY_COOKIE AddFrameworkToPath(PCWSTR path); void RemoveFrameworkFromPath(PCWSTR frameworkPath); @@ -109,9 +104,10 @@ STDAPI MddBootstrapInitialize2( auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() }; - auto initializationCount{ activityContext.GetInitializeCount() }; + PWSTR initializationFrameworkPackageFullName{}; + auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) }; activityContext.SetMddBootstrapAPI(WindowsAppRuntime::MddBootstrap::Activity::MddBootstrapAPI::Initialize); - auto threadCallback{ wil::ThreadFailureCallback(wilResultLoggingThreadCallback) }; + auto threadCallback = wil::ThreadFailureCallback(wilResultLoggingThreadCallback); auto initializeActivity{ activityContext.GetInitializeActivity().Start( majorMinorVersion, @@ -149,7 +145,7 @@ STDAPI MddBootstrapInitialize2( DebugBreak(); } - if (hr == STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED) + if (hr == HRESULT_FROM_WIN32(ERROR_NO_MATCH)) { if (WI_IsFlagSet(options, MddBootstrapInitializeOptions_OnNoMatch_ShowUI) || IsOptionEnabled(L"MICROSOFT_WINDOWSAPPRUNTIME_BOOTSTRAP_INITIALIZE_SHOWUI")) @@ -175,7 +171,6 @@ STDAPI MddBootstrapInitialize2( if (activityContext.GetInitializeActivity().IsRunning()) { - PCWSTR initializationFrameworkPackageFullName{}; initializationCount = activityContext.GetInitializeData(initializationFrameworkPackageFullName); initializeActivity.StopWithResult( hr, @@ -199,7 +194,8 @@ HRESULT _MddBootstrapInitialize( PCWSTR versionTag, PACKAGE_VERSION minVersion) noexcept try { - const auto initializationCount{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get().GetInitializeCount() }; + PWSTR initializationFrameworkPackageFullName{}; + auto initializationCount{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get().GetInitializeData(initializationFrameworkPackageFullName) }; // Are we already initialized? if (initializationCount > 0) @@ -222,10 +218,10 @@ STDAPI_(void) MddBootstrapShutdown() noexcept auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() }; - PCWSTR initializationFrameworkPackageFullName{}; - const auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) }; + PWSTR initializationFrameworkPackageFullName{}; + auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) }; activityContext.SetMddBootstrapAPI(WindowsAppRuntime::MddBootstrap::Activity::MddBootstrapAPI::Shutdown); - auto threadCallback{ wil::ThreadFailureCallback(wilResultLoggingThreadCallback) }; + auto threadCallback = wil::ThreadFailureCallback(wilResultLoggingThreadCallback); auto shutdownActivity{ activityContext.GetShutdownActivity().Start( static_cast(initializationCount), @@ -235,7 +231,7 @@ STDAPI_(void) MddBootstrapShutdown() noexcept if (initializationCount == 1) { // Last one out turn out the lights... - if (g_packageDependencyContext && (MddCore::Win11::IsSupported() || g_windowsAppRuntimeDll)) + if (g_packageDependencyContext && g_windowsAppRuntimeDll) { MddRemovePackageDependency(g_packageDependencyContext); g_packageDependencyContext = nullptr; @@ -311,16 +307,10 @@ void VerifyInitializationIsCompatible( // Sanity check we're already initialized // g_lifetimeManager is optional. Don't check it // g_endTheLifetimeManagerEvent is optional. Don't check it - // g_windowsAppRuntimeDll is only relevant if not delegating to OS APIs - FAIL_FAST_HR_IF(E_UNEXPECTED, !MddCore::Win11::IsSupported() && (g_windowsAppRuntimeDll == nullptr)); + FAIL_FAST_HR_IF(E_UNEXPECTED, g_windowsAppRuntimeDll == nullptr); FAIL_FAST_HR_IF(E_UNEXPECTED, g_packageDependencyId == nullptr); FAIL_FAST_HR_IF(E_UNEXPECTED, g_packageDependencyContext == nullptr); - // Verify the parameter(s) - // NOTE: GetFrameworkPackageFamilyName() verifies the resulting package family name is valid. - // We don't care about the return value, just the verification along the way. - GetFrameworkPackageFamilyName(majorMinorVersion, versionTag); - // Is the initialization request compatible with the current initialization state? THROW_HR_IF_MSG(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, majorMinorVersion != g_initializationMajorMinorVersion, @@ -361,144 +351,74 @@ void FirstTimeInitialization( FAIL_FAST_HR_IF(E_UNEXPECTED, g_packageDependencyContext != nullptr); // Make a copy of the versionTag in preparation of succcess - const std::wstring packageVersionTag{ !versionTag ? L"" : versionTag }; + auto packageVersionTag{ std::wstring(!versionTag ? L"" : versionTag) }; - // Use the Win11 APIs if available (instead of WinAppSDK's implementation) - if (MddCore::Win11::IsSupported()) - { - // Add the framework package to the package graph - const std::wstring frameworkPackageFamilyName{ GetFrameworkPackageFamilyName(majorMinorVersion, packageVersionTag.c_str()) }; - const MddPackageDependencyProcessorArchitectures architectureFilter{}; - const auto lifetimeKind{ MddPackageDependencyLifetimeKind::Process }; - const MddCreatePackageDependencyOptions createOptions{}; - wil::unique_process_heap_string packageDependencyId; - THROW_IF_FAILED(MddCore::Win11::TryCreatePackageDependency(nullptr, frameworkPackageFamilyName.c_str(), minVersion, architectureFilter, lifetimeKind, nullptr, createOptions, &packageDependencyId)); - // - const MddAddPackageDependencyOptions addOptions{}; - MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext{}; - wil::unique_process_heap_string packageFullName; - THROW_IF_FAILED(MddCore::Win11::AddPackageDependency(packageDependencyId.get(), MDD_PACKAGE_DEPENDENCY_RANK_DEFAULT, addOptions, &packageDependencyContext, &packageFullName)); - - // Update the activity context - auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() }; - activityContext.SetInitializationPackageFullName(packageFullName.get()); + // Create the lifetime manager + wil::com_ptr_nothrow lifetimeManager; + wil::unique_event endTheLifetimeManagerEvent; + auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() }; + CreateLifetimeManager(majorMinorVersion, versionTag, minVersion, lifetimeManager, endTheLifetimeManagerEvent, activityContext.GetInitializationPackageFullName()); - // Pass along test information (if necessary) - if (!g_test_frameworkPackageNamePrefix.empty()) - { - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_ddlmPackageNamePrefix.empty()); - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_ddlmPackagePublisherId.empty()); - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_mainPackageNamePrefix.empty()); + const PACKAGE_INFO* frameworkPackageInfo{}; + auto packageInfoBuffer{ GetFrameworkPackageInfoForPackage(activityContext.GetInitializationPackageFullName().get(), frameworkPackageInfo) }; - ::WindowsAppRuntime::VersionInfo::TestInitialize(frameworkPackageFamilyName.c_str()); - } + // Temporarily add the framework's package directory to PATH so LoadLibrary can find it and any colocated imports + wil::unique_dll_directory_cookie dllDirectoryCookie{ AddFrameworkToPath(frameworkPackageInfo->path) }; - // Track our initialized state - g_packageDependencyId = std::move(packageDependencyId); - g_packageDependencyContext = packageDependencyContext; - // - g_initializationMajorMinorVersion = majorMinorVersion; - g_initializationVersionTag = std::move(packageVersionTag); - const auto frameworkPackageIdentity{ ::AppModel::Identity::PackageIdentity::FromPackageFullName(packageFullName.get()) }; - g_initializationFrameworkPackageVersion.Version = frameworkPackageIdentity.Version().Version; - } - else + auto windowsAppRuntimeDllFilename{ std::wstring(frameworkPackageInfo->path) + L"\\Microsoft.WindowsAppRuntime.dll" }; + wil::unique_hmodule windowsAppRuntimeDll(LoadLibraryEx(windowsAppRuntimeDllFilename.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH)); + if (!windowsAppRuntimeDll) { - // Create the lifetime manager - wil::com_ptr_nothrow lifetimeManager; - wil::unique_event endTheLifetimeManagerEvent; - auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() }; - CreateLifetimeManager(majorMinorVersion, versionTag, minVersion, lifetimeManager, endTheLifetimeManagerEvent, activityContext.GetInitializationPackageFullName()); - - const PACKAGE_INFO* frameworkPackageInfo{}; - auto packageInfoBuffer{ GetFrameworkPackageInfoForPackage(activityContext.GetInitializationPackageFullName().get(), frameworkPackageInfo) }; - - // Temporarily add the framework's package directory to PATH so LoadLibrary can find it and any colocated imports - wil::unique_dll_directory_cookie dllDirectoryCookie{ AddFrameworkToPath(frameworkPackageInfo->path) }; - - auto windowsAppRuntimeDllFilename{ std::wstring(frameworkPackageInfo->path) + L"\\Microsoft.WindowsAppRuntime.dll" }; - wil::unique_hmodule windowsAppRuntimeDll(LoadLibraryEx(windowsAppRuntimeDllFilename.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH)); - if (!windowsAppRuntimeDll) - { - const auto lastError{ GetLastError() }; - THROW_WIN32_MSG(lastError, "Error in LoadLibrary: %d (0x%X) loading %ls", lastError, lastError, windowsAppRuntimeDllFilename.c_str()); - } - - // Add the framework package to the package graph - const MddPackageDependencyProcessorArchitectures architectureFilter{}; - const auto lifetimeKind{ MddPackageDependencyLifetimeKind::Process }; - const MddCreatePackageDependencyOptions createOptions{}; - wil::unique_process_heap_string packageDependencyId; - THROW_IF_FAILED(MddTryCreatePackageDependency(nullptr, frameworkPackageInfo->packageFamilyName, minVersion, architectureFilter, lifetimeKind, nullptr, createOptions, &packageDependencyId)); - // - const MddAddPackageDependencyOptions addOptions{}; - MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext{}; - THROW_IF_FAILED(MddAddPackageDependency(packageDependencyId.get(), MDD_PACKAGE_DEPENDENCY_RANK_DEFAULT, addOptions, &packageDependencyContext, nullptr)); - - // Remove our temporary path addition - RemoveFrameworkFromPath(frameworkPackageInfo->path); - dllDirectoryCookie.reset(); - - // Pass along test information (if necessary) - if (!g_test_ddlmPackageNamePrefix.empty()) - { - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_ddlmPackagePublisherId.empty()); - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_frameworkPackageNamePrefix.empty()); - FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_mainPackageNamePrefix.empty()); - - uint16_t majorVersion{ static_cast(majorMinorVersion >> 16) }; - uint16_t minorVersion{ static_cast(majorMinorVersion) }; - PCWSTR packagVersionTagDelimiter{ packageVersionTag.empty() ? L"" : L"-" }; - - const std::wstring frameworkPackageFamilyName{ std::format(L"{}-{}.{}{}{}_8wekyb3d8bbwe", - g_test_frameworkPackageNamePrefix, - majorVersion, minorVersion, - packagVersionTagDelimiter, packageVersionTag) }; - FAIL_FAST_HR_IF_MSG(E_UNEXPECTED, frameworkPackageFamilyName.length() > PACKAGE_FAMILY_NAME_MAX_LENGTH, "%ls", frameworkPackageFamilyName.c_str()); - - const std::wstring mainPackageFamilyName{ std::format(L"{}-{}.{}{}{}_8wekyb3d8bbwe", - g_test_mainPackageNamePrefix, - majorVersion, minorVersion, - packagVersionTagDelimiter, packageVersionTag) }; - FAIL_FAST_HR_IF_MSG(E_UNEXPECTED, mainPackageFamilyName.length() > PACKAGE_FAMILY_NAME_MAX_LENGTH, "%ls", mainPackageFamilyName.c_str()); - - ::WindowsAppRuntime::VersionInfo::TestInitialize(frameworkPackageFamilyName.c_str(), mainPackageFamilyName.c_str()); - } - - // Track our initialized state - g_lifetimeManager = lifetimeManager.detach(); - g_endTheLifetimeManagerEvent = std::move(endTheLifetimeManagerEvent); - g_windowsAppRuntimeDll = std::move(windowsAppRuntimeDll); - g_packageDependencyId = std::move(packageDependencyId); - g_packageDependencyContext = packageDependencyContext; - // - g_initializationMajorMinorVersion = majorMinorVersion; - g_initializationVersionTag = std::move(packageVersionTag); - g_initializationFrameworkPackageVersion.Version = frameworkPackageInfo->packageId.version.Version; + const auto lastError{ GetLastError() }; + THROW_WIN32_MSG(lastError, "Error in LoadLibrary: %d (0x%X) loading %ls", lastError, lastError, windowsAppRuntimeDllFilename.c_str()); } -} -/// Determine the package family name for the Windows App Runtime Framework package -std::wstring GetFrameworkPackageFamilyName( - UINT32 majorMinorVersion, - PCWSTR versionTag) -{ - PCWSTR namePrefix{ !g_test_frameworkPackageNamePrefix.empty() ? - g_test_frameworkPackageNamePrefix.c_str() : - L"Microsoft.WindowsAppRuntime" }; - - const uint16_t majorVersion{ static_cast(majorMinorVersion >> 16) }; - const uint16_t minorVersion{ static_cast(majorMinorVersion) }; + // Add the framework package to the package graph + const MddPackageDependencyProcessorArchitectures architectureFilter{}; + const auto lifetimeKind{ MddPackageDependencyLifetimeKind::Process }; + const MddCreatePackageDependencyOptions createOptions{}; + wil::unique_process_heap_string packageDependencyId; + THROW_IF_FAILED(MddTryCreatePackageDependency(nullptr, frameworkPackageInfo->packageFamilyName, minVersion, architectureFilter, lifetimeKind, nullptr, createOptions, &packageDependencyId)); + // + const MddAddPackageDependencyOptions addOptions{}; + MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext{}; + THROW_IF_FAILED(MddAddPackageDependency(packageDependencyId.get(), MDD_PACKAGE_DEPENDENCY_RANK_DEFAULT, addOptions, &packageDependencyContext, nullptr)); - PCWSTR packageVersionTag{ !versionTag ? L"" : versionTag }; - PCWSTR packageVersionTagDelimiter{ (packageVersionTag[0] == L'\0') ? L"" : L"-"}; + // Remove our temporary path addition + RemoveFrameworkFromPath(frameworkPackageInfo->path); + dllDirectoryCookie.reset(); - const std::wstring packageFamilyName{ std::format(L"{}-{}.{}{}{}_8wekyb3d8bbwe", - namePrefix, majorVersion, minorVersion, - packageVersionTagDelimiter, packageVersionTag) }; - THROW_HR_IF_MSG(E_INVALIDARG, packageFamilyName.length() > PACKAGE_FAMILY_NAME_MAX_LENGTH, "%ls", packageFamilyName.c_str()); + // Pass along test information (if necessary) + if (!g_test_ddlmPackageNamePrefix.empty()) + { + FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_ddlmPackagePublisherId.empty()); + FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_frameworkPackageNamePrefix.empty()); + FAIL_FAST_HR_IF(E_UNEXPECTED, g_test_mainPackageNamePrefix.empty()); + + uint16_t majorVersion{ static_cast(majorMinorVersion >> 16) }; + uint16_t minorVersion{ static_cast(majorMinorVersion) }; + PCWSTR packagVersionTagDelimiter{ packageVersionTag.empty() ? L"" : L"-" }; + + WCHAR frameworkPackageFamilyName[PACKAGE_FAMILY_NAME_MAX_LENGTH + 1]{}; + wsprintf(frameworkPackageFamilyName, L"%s-%hu.%hu%s%s_8wekyb3d8bbwe", g_test_frameworkPackageNamePrefix.c_str(), + majorVersion, minorVersion, packagVersionTagDelimiter, packageVersionTag.c_str()); + + WCHAR mainPackageFamilyName[PACKAGE_FAMILY_NAME_MAX_LENGTH + 1]{}; + wsprintf(mainPackageFamilyName, L"%s-%hu.%hu%s%s_8wekyb3d8bbwe", g_test_mainPackageNamePrefix.c_str(), + majorVersion, minorVersion, packagVersionTagDelimiter, packageVersionTag.c_str()); + ::WindowsAppRuntime::VersionInfo::TestInitialize(frameworkPackageFamilyName, mainPackageFamilyName); + } - return packageFamilyName; + // Track our initialized state + g_lifetimeManager = lifetimeManager.detach(); + g_endTheLifetimeManagerEvent = std::move(endTheLifetimeManagerEvent); + g_windowsAppRuntimeDll = std::move(windowsAppRuntimeDll); + g_packageDependencyId = std::move(packageDependencyId); + g_packageDependencyContext = packageDependencyContext; + // + g_initializationMajorMinorVersion = majorMinorVersion; + g_initializationVersionTag = std::move(packageVersionTag); + g_initializationFrameworkPackageVersion.Version = frameworkPackageInfo->packageId.version.Version; } /// Determine the path for the Windows App Runtime Framework package @@ -750,21 +670,17 @@ CLSID FindDDLMViaAppExtension( // Look for windows.appExtension with name="microsoft.winappruntime.ddlm-.-[-shorttag]" // NOTE: . MUST have a string length <= 8 characters ("12.34567", "12345.67", etc) to fit within // the maximum allowed length of a windows.appExtension's Name (39 chars) on Windows versions <= RS5 (10.0.17763.0). - std::wstring appExtensionName; + WCHAR appExtensionName[100]{}; const UINT16 majorVersion{ HIWORD(majorMinorVersion) }; const UINT16 minorVersion{ LOWORD(majorMinorVersion) }; const auto versionShortTag{ AppModel::Identity::GetVersionShortTagFromVersionTag(versionTag) }; if (!versionShortTag.empty()) { - appExtensionName = std::format(L"microsoft.winappruntime.ddlm-{}.{}-{}-{}", - majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString(), versionShortTag); - THROW_HR_IF_MSG(E_INVALIDARG, appExtensionName.length() > PACKAGE_NAME_MAX_LENGTH, "%ls", appExtensionName.c_str()); + wsprintf(appExtensionName, L"microsoft.winappruntime.ddlm-%hu.%hu-%s-%s", majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString(), versionShortTag.c_str()); } else { - appExtensionName = std::format(L"microsoft.winappruntime.ddlm-{}.{}-{}", - majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString()); - THROW_HR_IF_MSG(E_INVALIDARG, appExtensionName.length() > PACKAGE_NAME_MAX_LENGTH, "%ls", appExtensionName.c_str()); + wsprintf(appExtensionName, L"microsoft.winappruntime.ddlm-%hu.%hu-%s", majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString()); } auto catalog{ winrt::Windows::ApplicationModel::AppExtensions::AppExtensionCatalog::Open(appExtensionName) }; @@ -826,8 +742,8 @@ CLSID FindDDLMViaAppExtension( continue; } } - THROW_HR_IF_MSG(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, !foundAny, "AppExtension.Name=%ls, Major=%hu, Minor=%hu, Tag=%ls, MinVersion=%hu.%hu.%hu.%hu", - appExtensionName.c_str(), majorVersion, minorVersion, (!versionTag ? L"" : versionTag), + THROW_HR_IF_MSG(HRESULT_FROM_WIN32(ERROR_NO_MATCH), !foundAny, "AppExtension.Name=%ls, Major=%hu, Minor=%hu, Tag=%ls, MinVersion=%hu.%hu.%hu.%hu", + appExtensionName, majorVersion, minorVersion, (!versionTag ? L"" : versionTag), minVersion.Major, minVersion.Minor, minVersion.Build, minVersion.Revision); return bestFitClsid; } @@ -1024,7 +940,7 @@ void FindDDLMViaEnumeration( continue; } } - THROW_HR_IF_MSG(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, !foundAny, "Enumeration: %ls", criteria.get()); + THROW_HR_IF_MSG(HRESULT_FROM_WIN32(ERROR_NO_MATCH), !foundAny, "Enumeration: %ls", criteria.get()); (void)LOG_HR_MSG(MDD_E_BOOTSTRAP_INITIALIZE_DDLM_FOUND, "Bootstrap.Intitialize: %ls best matches the criteria (%ls) of %d packages scanned", bestFitPackageFullName.c_str(), criteria.get(), packagesScanned); diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h index ee37f9ea26..5837e7effb 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h +++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h @@ -56,15 +56,10 @@ namespace WindowsAppRuntime::MddBootstrap::Activity return m_mddBootstrapAPI; } - const uint32_t GetInitializeCount() const - { - return m_initializationCount; - } - - const uint32_t GetInitializeData(PCWSTR& initializationPackageFullName) const + const uint32_t GetInitializeData(PWSTR& initializationPackageFullName) const { initializationPackageFullName = m_initializationPackageFullName.get(); - return GetInitializeCount(); + return m_initializationCount; } wil::unique_cotaskmem_string& GetInitializationPackageFullName() @@ -118,15 +113,7 @@ namespace WindowsAppRuntime::MddBootstrap::Activity void SetInitializationPackageFullName(PWSTR initializationPackageFullName) { - if (initializationPackageFullName) - { - auto packageFullName{ wil::make_cotaskmem_string(initializationPackageFullName) }; - m_initializationPackageFullName = std::move(packageFullName); - } - else - { - m_initializationPackageFullName.reset(); - } + m_initializationPackageFullName.reset(initializationPackageFullName); } void StopActivityForWilReturnHR(const bool stopActivityForWilReturnHR) diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp index ca92888132..71fe1609d6 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp +++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp @@ -12,7 +12,7 @@ void MddBootstrap_StopActivity( { if (isActivityRunning) { - PCWSTR initializationFrameworkPackageFullName{}; + PWSTR initializationFrameworkPackageFullName{}; auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) }; if (activityContext.GetMddBootstrapAPI() == WindowsAppRuntime::MddBootstrap::Activity::MddBootstrapAPI::Initialize) diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.h b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.h index 372923e621..fce11d68dd 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.h +++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.h @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #pragma once @@ -41,7 +41,7 @@ class WindowsAppRuntimeBootstrap_TraceLogger final : public wil::TraceLoggingPro const HRESULT hresult, UINT32 initializationCount, UINT32 IntegrityFlags, - PCWSTR resolvedFrameworkPackageFullName, + PWSTR resolvedFrameworkPackageFullName, UINT32 failureType, PCSTR failureFile, unsigned int failureLineNumber, @@ -78,7 +78,7 @@ class WindowsAppRuntimeBootstrap_TraceLogger final : public wil::TraceLoggingPro BEGIN_COMPLIANT_CRITICAL_DATA_ACTIVITY_CLASS(Shutdown, PDT_ProductAndServicePerformance); void StartActivity( UINT32 initializationCount, - PCWSTR resolvedFrameworkPackageFullName) + PWSTR resolvedFrameworkPackageFullName) { // Set lifetime activity Id that helps in corelating all sub-activities/telemetry from a single Mdd Bootstrap lifetime SetRelatedActivityId(GetLifetimeActivityId()); diff --git a/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp b/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp index fea531256b..2da5b862d4 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp +++ b/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp @@ -3,8 +3,6 @@ #include "pch.h" -#include "MddWin11.h" - // Including this file once per binary will automatically opt WIL error handling macros into calling RoOriginateError when they // begin logging a new error. This greatly improves the debuggability of errors that propagate before a failfast. #include @@ -14,19 +12,10 @@ BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved) switch (reason) { case DLL_PROCESS_ATTACH: - { DisableThreadLibraryCalls(hmodule); - FAIL_FAST_IF_FAILED(MddWin11Initialize()); - break; - } - case DLL_PROCESS_DETACH: - { - MddWin11Shutdown(); - break; - } case DLL_THREAD_ATTACH: - break; case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: break; } diff --git a/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def b/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def index de435f0404..83d91290dc 100644 --- a/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def +++ b/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def @@ -10,7 +10,6 @@ EXPORTS MddDeletePackageDependency MddGetIdForPackageDependencyContext MddGetResolvedPackageFullNameForPackageDependency - MddGetResolvedPackageFullNameForPackageDependency2 MddRemovePackageDependency MddTryCreatePackageDependency MddLifetimeManagementGC diff --git a/dev/WindowsAppRuntime_DLL/dllmain.cpp b/dev/WindowsAppRuntime_DLL/dllmain.cpp index 60c61157c6..cc0604d331 100644 --- a/dev/WindowsAppRuntime_DLL/dllmain.cpp +++ b/dev/WindowsAppRuntime_DLL/dllmain.cpp @@ -30,8 +30,11 @@ static HRESULT DetoursInitialize() // Detour APIs to our implementation DetourRestoreAfterWith(); FAIL_FAST_IF_WIN32_ERROR(DetourTransactionBegin()); + + FAIL_FAST_IF_FAILED(MddWin11Initialize()); FAIL_FAST_IF_FAILED(MddDetourPackageGraphInitialize()); FAIL_FAST_IF_FAILED(UrfwInitialize()); + FAIL_FAST_IF_WIN32_ERROR(DetourTransactionCommit()); return S_OK; } @@ -53,8 +56,10 @@ static HRESULT DetoursShutdown() // Stop Detour'ing APIs to our implementation FAIL_FAST_IF_WIN32_ERROR(DetourTransactionBegin()); FAIL_FAST_IF_WIN32_ERROR(DetourUpdateThread(GetCurrentThread())); + UrfwShutdown(); MddDetourPackageGraphShutdown(); + FAIL_FAST_IF_WIN32_ERROR(DetourTransactionCommit()); return S_OK; } @@ -66,14 +71,12 @@ BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved) case DLL_PROCESS_ATTACH: { DisableThreadLibraryCalls(hmodule); - FAIL_FAST_IF_FAILED(MddWin11Initialize()); FAIL_FAST_IF_FAILED(DetoursInitialize()); break; } case DLL_PROCESS_DETACH: { DetoursShutdown(); - MddWin11Shutdown(); break; } case DLL_THREAD_ATTACH: diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.filters b/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.filters new file mode 100644 index 0000000000..21fff5013a --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + + + + diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.vcxproj b/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.vcxproj new file mode 100644 index 0000000000..312a8c5f4f --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.vcxproj @@ -0,0 +1,252 @@ + + + + + + + + + + Debug + ARM64 + + + Debug + Win32 + + + Release + ARM64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {d45d4170-e055-4926-8b03-04daa5f02c6c} + WindowsAppRuntime_MSIXInstallFromPath + 10.0 + true + true + true + true + false + 9 + + + Application + true + v143 + Unicode + + + Application + false + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + Unicode + + + Application + false + v143 + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + WindowsAppRuntime_MSIXInstallFromPath + + + WindowsAppRuntime_MSIXInstallFromPath + + + WindowsAppRuntime_MSIXInstallFromPath + + + WindowsAppRuntime_MSIXInstallFromPath + + + WindowsAppRuntime_MSIXInstallFromPath + + + WindowsAppRuntime_MSIXInstallFromPath + + + $(MSBuildThisFileDirectory)..\..\ + + + + UNICODE;_UNICODE;%(PreprocessorDefinitions) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + Use + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)$(PlatformTarget)\$(Configuration);$(SolutionDir)common;$(OutDir)\..\PushNotificationsLongRunningTask.ProxyStub;$(RepoRoot)dev\PushNotifications\PushNotificationsLongRunningTask.StartupTask;$(RepoRoot)\Dev\PushNotifications + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + pch.h + + + Console + false + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + + diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/framework.h b/dev/WindowsAppRuntime_MSIXInstallFromPath/framework.h new file mode 100644 index 0000000000..d82b8b8f3b --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/framework.h @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation and Contributors. +// Licensed under the MIT License. + +#pragma once + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/main.cpp b/dev/WindowsAppRuntime_MSIXInstallFromPath/main.cpp new file mode 100644 index 0000000000..12cf253e01 --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/main.cpp @@ -0,0 +1,325 @@ +// Copyright (c) Microsoft Corporation and Contributors. +// Licensed under the MIT License. + +#include "pch.h" + +#include +#include + +#include +void Help(); +HRESULT JustDoIt(PCWSTR path, bool forceDeployment) noexcept; +void AddPackageIfNecessary(PCWSTR path, const std::wstring& filename, const std::wstring& packageFullName, bool forceDeployment); +bool NeedToRegisterPackage(const std::wstring& packageFullName); +bool NeedToRegisterPackage(PCWSTR packageFullName); +HRESULT AddPackage(PCWSTR path, const std::wstring& filename, bool forceDeployment); + +class PackageId +{ +public: + static PackageId FromPackageFullName(const std::wstring& packageFullName) + { + return FromPackageFullName(packageFullName.c_str()); + } + + static PackageId FromPackageFullName(PCWSTR packageFullName) + { + PackageId packageId; + uint32_t bufferLength{ sizeof(packageId.m_buffer) }; + THROW_IF_WIN32_ERROR(PackageIdFromFullName(packageFullName, PACKAGE_INFORMATION_BASIC, &bufferLength, packageId.m_buffer)); + packageId.m_packageId = reinterpret_cast(packageId.m_buffer); + packageId.m_packageFullName = packageFullName; + return packageId; + } + + PackageId() = default; + + PackageId(PackageId&& other) : + m_packageFullName(std::move(other.m_packageFullName)) + { + memcpy(m_buffer, other.m_buffer, sizeof(m_buffer)); + m_packageId = reinterpret_cast(m_buffer); + + other.m_packageId = nullptr; + memset(other.m_buffer, 0, sizeof(other.m_buffer)); + } + + ~PackageId() = default; + + PackageId& operator=(PackageId&& other) + { + if (this != &other) + { + m_packageFullName = std::move(other.m_packageFullName); + memcpy(m_buffer, other.m_buffer, sizeof(m_buffer)); + m_packageId = reinterpret_cast(m_buffer); + + other.m_packageId = nullptr; + memset(other.m_buffer, 0, sizeof(other.m_buffer)); + } + return *this; + } + + const std::wstring& PackageFullName() const + { + return m_packageFullName; + } + + PCWSTR Name() const + { + return m_packageId->name; + } + + PACKAGE_VERSION Version() const + { + return m_packageId->version; + } + + winrt::Windows::System::ProcessorArchitecture Architecture() const + { + return static_cast(m_packageId->processorArchitecture); + } + + PCWSTR ResourceId() const + { + return m_packageId->resourceId; + } + + PCWSTR PublisherId() const + { + return m_packageId->publisherId; + } + + PCWSTR PackageFamilyName() const + { + if (m_packageFamilyName.empty()) + { + wchar_t packageFamilyName[PACKAGE_FAMILY_NAME_MAX_LENGTH + 1]{}; + uint32_t packageFamilyNameLength{ ARRAYSIZE(packageFamilyName) }; + THROW_IF_WIN32_ERROR_MSG(::PackageFamilyNameFromFullName(m_packageFullName.c_str(), &packageFamilyNameLength, packageFamilyName), "PackageFullName:%ls", m_packageFullName.c_str()); + m_packageFamilyName = packageFamilyName; + } + return m_packageFamilyName.c_str(); + } + + explicit operator bool() const + { + return m_packageId != nullptr; + } + +private: + std::wstring m_packageFullName; + mutable std::wstring m_packageFamilyName; + const PACKAGE_ID * m_packageId{}; + BYTE m_buffer[sizeof(PACKAGE_ID) + (PACKAGE_NAME_MAX_LENGTH + 1 + + PACKAGE_RESOURCEID_MAX_LENGTH + 1 + + PACKAGE_PUBLISHERID_MAX_LENGTH + 1) * sizeof(WCHAR)]{}; +}; + +void Help() +{ + wprintf(L"WindowsAppRuntime_MSIXInstallFromPath [options] \n" + L"options:\n" + L" -f, --force = Force shutdown WinAppSDK's processes if necessary to update WinAppSDK's MSIX packages\n" + L" -?, --help = Display help\n" + L" -- = End of options\n" + L"where:\n" + L" path = Path where Windows App SDK's MSIX packages can be found\n" + L" => Microsoft.WindowsAppRuntime.*.msix\n" + L" => Microsoft.WindowsAppRuntime.DDLM.*.msix\n" + L" => Microsoft.WindowsAppRuntime.Main.*.msix\n" + L" => Microsoft.WindowsAppRuntime.Singleton.*.msix\n"); +} +HRESULT JustDoIt(PCWSTR path, bool forceDeployment) noexcept try +{ + wprintf(L"path: %s\n", path); + + // Install packages + auto fpath{ std::filesystem::path(path) }; + auto inventory{ fpath / L"MSIX.inventory" }; + std::string lineUtf8; + std::ifstream f{ inventory }; + + THROW_HR_IF_MSG(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), std::filesystem::exists(inventory), "%ls", inventory.c_str()); + + while (getline(f, lineUtf8)) + { + // Skip blank lines + if (lineUtf8.empty()) + { + continue; + } + + // Skip comments + if (lineUtf8[0] == '#') + { + continue; + } + + // Parse the line + auto line{ Microsoft::Utf8::ToUtf16(lineUtf8.c_str()) }; + auto offset{ line.find(L'=') }; + THROW_HR_IF_MSG(E_UNEXPECTED, offset == std::wstring::npos, "line:%s", lineUtf8.c_str()); + auto filename{ line.substr(0, offset) }; + THROW_HR_IF_MSG(E_UNEXPECTED, filename.empty(), "line:%s", lineUtf8.c_str()); + auto packageFullName{ std::wstring(line.c_str() + offset + 1) }; + THROW_HR_IF_MSG(E_UNEXPECTED, packageFullName.empty(), "line:%s", lineUtf8.c_str()); + + AddPackageIfNecessary(path, filename, packageFullName, forceDeployment); + } + + // Restart Push Notifications Long Running Platform when ForceDeployment option is applied. + if (forceDeployment) + { + // wil callback will be set up to log telemetry events for LRP. + THROW_IF_FAILED_MSG(StartupNotificationsLongRunningPlatform(), "Restarting Push Notifications LRP failed after 3 attempts."); + } + + return 0; +} +CATCH_RETURN(); + +void AddPackageIfNecessary(PCWSTR path, const std::wstring& filename, const std::wstring& packageFullName, bool forceDeployment) +{ + wprintf(L"Path: %s\n", path); + wprintf(L"Filename: %s\n", filename.c_str()); + wprintf(L"PackageFullName: %s\n", packageFullName.c_str()); + wprintf(L"forceDeployment:%s\n", forceDeployment ? L"true" : L"false"); + + if (!NeedToRegisterPackage(packageFullName)) + { + return; + } + + auto hr{ AddPackage(path, filename, forceDeployment) }; + if (FAILED(hr)) + { + wprintf(L"AddPackage(): 0x%X Path:%s Filename:%s PackageFullName:%s forceDeployment:%s", hr, path, filename.c_str(), packageFullName.c_str(), forceDeployment ? L"true" : L"false"); + THROW_HR_MSG(hr, "Path:%ls Filename:%ls PackageFullName:%ls forceDeployment:%ls", path, filename.c_str(), packageFullName.c_str(), forceDeployment ? L"true" : L"false"); + } +} + +bool NeedToRegisterPackage(const std::wstring& packageFullName) +{ + return NeedToRegisterPackage(packageFullName.c_str()); +} + +bool NeedToRegisterPackage(PCWSTR packageFullName) +{ + auto packageId{ PackageId::FromPackageFullName(packageFullName) }; + + // Is there an equal-or-better package already registered? + wprintf(L"Family: %s\n", packageId.PackageFamilyName()); + auto packageFullNames{ AppModel::Package::FindByFamily(packageId.PackageFamilyName()) }; + if (packageFullNames.empty()) + { + wprintf(L"1 None found\n"); + return true; + } + for (auto registeredPackageFullName : packageFullNames) + { + auto registeredPackage{ PackageId::FromPackageFullName(registeredPackageFullName) }; + wprintf(L"C %ls %ls %d %d %I64X %I64X\n", + packageId.PackageFullName().c_str(), registeredPackage.PackageFullName().c_str(), + packageId.Architecture(), registeredPackage.Architecture(), + packageId.Version().Version, registeredPackage.Version().Version); + if (registeredPackage.Architecture() != packageId.Architecture()) + { + continue; + } + if (registeredPackage.Version().Version >= packageId.Version().Version) + { + continue; + } + + // This registered package is equal-or-better than the specified package. + // No need to register the specified package + wprintf(L"2 %ls not-needed because %ls\n", packageFullName, registeredPackage.PackageFullName().c_str()); + return false; + } + + // Nope. The specified package is better than anything current registered + wprintf(L"3 Nothing better\n"); + return true; +} + +HRESULT AddPackage(PCWSTR path, const std::wstring& filename, bool forceDeployment) +{ + const auto packagePath{ std::filesystem::path(path) / filename }; + const auto packagePathUri{ winrt::Windows::Foundation::Uri(packagePath.c_str()) }; + winrt::Windows::Management::Deployment::PackageManager packageManager; + + const auto options{ forceDeployment ? + winrt::Windows::Management::Deployment::DeploymentOptions::ForceTargetApplicationShutdown : + winrt::Windows::Management::Deployment::DeploymentOptions::None }; + auto deploymentResult{ packageManager.AddPackageAsync(packagePathUri, nullptr, options).get() }; + return deploymentResult.ExtendedErrorCode(); +} + +int wmain(int argc, wchar_t *argv[]) +{ + try + { + winrt::init_apartment(); + + bool forceDeployment{}; + + // Parse the command line + int index{ 1 }; + for (; index < argc; ++index) + { + auto arg{ argv[index] }; + if (arg[0] != L'-') + { + // Options are -o (short form) or --option (long form) + break; + } + else if ((CompareStringOrdinal(arg, -1, L"--", -1, TRUE) == CSTR_EQUAL)) + { + // -- = end of options + ++index; + break; + } + else if ((CompareStringOrdinal(arg, -1, L"-f", -1, TRUE) == CSTR_EQUAL) || + (CompareStringOrdinal(arg, -1, L"--force", -1, TRUE) == CSTR_EQUAL)) + { + forceDeployment = true; + } + else if ((CompareStringOrdinal(arg, -1, L"-?", -1, FALSE) == CSTR_EQUAL) || + (CompareStringOrdinal(arg, -1, L"--help", -1, FALSE) == CSTR_EQUAL)) + { + Help(); + return ERROR_BAD_ARGUMENTS; + } + else + { + Help(); + return ERROR_BAD_ARGUMENTS; + } + } + + if (index >= argc) + { + Help(); + return ERROR_BAD_ARGUMENTS; + } + auto path{ argv[index++] }; + + if (index < argc) + { + Help(); + return ERROR_BAD_ARGUMENTS; + } + + return JustDoIt(path, forceDeployment); + } + catch (...) + { + const auto e{ winrt::hresult_error(winrt::to_hresult(), winrt::take_ownership_from_abi) }; + const auto hr{ e.code() }; + const auto message{ e.message() }; + (void) LOG_HR_MSG(hr, "%ls", message.c_str()); + wprintf(L"0x%X %s", hr.value, message.c_str()); + return hr; + } +} diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/packages.config b/dev/WindowsAppRuntime_MSIXInstallFromPath/packages.config new file mode 100644 index 0000000000..e9fecf8c0b --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/packages.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp b/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp new file mode 100644 index 0000000000..6c107a3575 --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation and Contributors. +// Licensed under the MIT License. + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.h b/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.h new file mode 100644 index 0000000000..5db719debd --- /dev/null +++ b/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.h @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation and Contributors. +// Licensed under the MIT License. + +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/test/DynamicDependency/Test_Win32/TestMddBootstrap.cpp b/test/DynamicDependency/Test_Win32/TestMddBootstrap.cpp index 89c2f99792..d57351b499 100644 --- a/test/DynamicDependency/Test_Win32/TestMddBootstrap.cpp +++ b/test/DynamicDependency/Test_Win32/TestMddBootstrap.cpp @@ -190,7 +190,7 @@ namespace Test::DynamicDependency // Major.Minor = 0.0 == No such framework package const UINT32 doesNotExist{}; const PACKAGE_VERSION minVersionMatchAny{}; - VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(doesNotExist, nullptr, minVersionMatchAny)); + VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(doesNotExist, nullptr, minVersionMatchAny)); } TEST_METHOD(Initialize_DDLMMinVersionNoMatch) @@ -203,7 +203,7 @@ namespace Test::DynamicDependency // Version .65535.65535.65535 to find framework packages for the major.minor version but none meeting this minVersion criteria const UINT32 c_Version_MajorMinor{ Test::Packages::DynamicDependencyLifetimeManager::c_Version_MajorMinor }; PACKAGE_VERSION minVersionNoMatch{ static_cast(Test::Packages::DynamicDependencyLifetimeManager::c_Version.Major) << 48 | 0x0000FFFFFFFFFFFFuI64 }; - VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(c_Version_MajorMinor, nullptr, minVersionNoMatch)); + VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor, nullptr, minVersionNoMatch)); } TEST_METHOD(Initialize) @@ -253,8 +253,7 @@ namespace Test::DynamicDependency const UINT32 c_Version_MajorMinor_Incompatible{ c_Version_MajorMinor + 1 }; VERIFY_ARE_EQUAL(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor_Incompatible, nullptr, c_minVersion)); - VERIFY_ARE_EQUAL(E_INVALIDARG, MddBootstrapInitialize(c_Version_MajorMinor, L"MakesPackageFamilyNameTooLong", c_minVersion)); - VERIFY_ARE_EQUAL(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor, L"Zathras", c_minVersion)); + VERIFY_ARE_EQUAL(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor, L"NotTheVersionTag", c_minVersion)); const PACKAGE_VERSION c_minVersion_Incompatible{ UINT64_MAX }; VERIFY_ARE_EQUAL(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor, nullptr, c_minVersion_Incompatible)); @@ -289,8 +288,7 @@ namespace Test::DynamicDependency const PACKAGE_VERSION c_minVersion3{}; VERIFY_ARE_EQUAL(c_minVersion3.Version, c_minVersion1.Version); VERIFY_ARE_NOT_EQUAL(c_minVersion3.Version, c_minVersion2.Version); - VERIFY_ARE_EQUAL(E_INVALIDARG, MddBootstrapInitialize(c_Version_MajorMinor3, L"MakesPackageFamilyNameTooLong", c_minVersion3)); - VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(c_Version_MajorMinor3, L"Zathras", c_minVersion3)); + VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor3, L"NotTheVersionTag", c_minVersion3)); // Incompatible criteria. Verify Initialize+Shutdown brought us // back to initial state so we can fail to initialize as expected @@ -299,7 +297,7 @@ namespace Test::DynamicDependency VERIFY_ARE_NOT_EQUAL(c_minVersion4.Version, c_minVersion1.Version); VERIFY_ARE_NOT_EQUAL(c_minVersion4.Version, c_minVersion2.Version); VERIFY_ARE_NOT_EQUAL(c_minVersion4.Version, c_minVersion3.Version); - VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(c_Version_MajorMinor4, nullptr, c_minVersion4)); + VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor4, nullptr, c_minVersion4)); // Same criteria but MinVersion - namespace TF = ::Test::FileSystem; namespace TP = ::Test::Packages; @@ -136,7 +134,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); VerifyPackageGraphRevisionId(1); // -- Add @@ -185,7 +183,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); VerifyPackageGraphRevisionId(3); // -- Delete @@ -210,8 +208,7 @@ void Test::DynamicDependency::Test_Win32::GetResolvedPackageFullName_NotFound() { PCWSTR packageDependencyId{ L"This.Does.Not.Exist" }; wil::unique_process_heap_string packageFullName; - VERIFY_SUCCEEDED(MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName)); - VERIFY_IS_NULL(packageFullName); + VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NOT_FOUND), MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName)); } void Test::DynamicDependency::Test_Win32::GetIdForPackageDependencyContext_Null() @@ -238,43 +235,15 @@ void Test::DynamicDependency::Test_Win32::VerifyPackageDependency( const HRESULT expectedHR, PCWSTR expectedPackageFullName) { - // Given an unknown/undefined packageDependencyId our caller specifies expectedHR=HRESULT_FROM_WIN32(ERROR_NOT_FOUND). - // Handle the condition appropriately: - // - // API | HRESULT | packageFullName - // -------------------------------------------------------------------|-----------------------------------------|---------------- - // MddGetResolvedPackageFullNameForPackageDependency | S_OK | NULL - // MddGetResolvedPackageFullNameForPackageDependency2 (Supported) | HRESULT_FROM_WIN32(ERROR_NOT_FOUND) | NULL - // MddGetResolvedPackageFullNameForPackageDependency2 (not Supported) | HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) | NULL - - const HRESULT expectedHR1{ (expectedHR == HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) ? S_OK : expectedHR }; - const HRESULT expectedHR2{ - MddCore::Win11::IsSupported() && !MddCore::Win11::IsGetResolvedPackageFullNameForPackageDependency2Supported() ? - HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) : - expectedHR }; - - wil::unique_process_heap_string packageFullName1; - VERIFY_ARE_EQUAL(expectedHR1, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName1)); - if (FAILED(expectedHR1) || !expectedPackageFullName) - { - VERIFY_IS_NULL(packageFullName1); - } - else - { - VERIFY_IS_NOT_NULL(packageFullName1, WEX::Common::String().Format(L"PackageFullName=null Expected=%s", expectedPackageFullName)); - VERIFY_ARE_EQUAL(std::wstring(packageFullName1.get()), std::wstring(expectedPackageFullName)); - } - - wil::unique_process_heap_string packageFullName2; - VERIFY_ARE_EQUAL(expectedHR2, MddGetResolvedPackageFullNameForPackageDependency2(packageDependencyId, &packageFullName2)); - if (FAILED(expectedHR2) || !expectedPackageFullName) + wil::unique_process_heap_string packageFullName; + VERIFY_ARE_EQUAL(expectedHR, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName)); + if (!expectedPackageFullName) { - VERIFY_IS_NULL(packageFullName2); + VERIFY_IS_TRUE(!packageFullName); } else { - VERIFY_IS_NOT_NULL(packageFullName2, WEX::Common::String().Format(L"PackageFullName=null Expected=%s", expectedPackageFullName)); - VERIFY_ARE_EQUAL(std::wstring(packageFullName2.get()), std::wstring(expectedPackageFullName)); + VERIFY_ARE_EQUAL(std::wstring(packageFullName.get()), std::wstring(expectedPackageFullName)); } } @@ -288,12 +257,6 @@ void Test::DynamicDependency::Test_Win32::VerifyPackageDependency( void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring expectedPath{ path }; std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -301,12 +264,6 @@ void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -314,12 +271,6 @@ void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path2, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path2 + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -327,12 +278,6 @@ void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_Win32::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path2, PCWSTR path3, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path2 + L";" + path3 + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_A0_B10.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_A0_B10.cpp index 28c460c74d..0c6c2747c5 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_A0_B10.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_A0_B10.cpp @@ -33,7 +33,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_A0_B10() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -77,7 +77,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_A0_B10() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B-10_A0.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B-10_A0.cpp index caf732366a..081c385c6d 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B-10_A0.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B-10_A0.cpp @@ -33,7 +33,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_Bneg10_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -77,7 +77,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_Bneg10_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B0prepend_A0.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B0prepend_A0.cpp index fcb1bc721e..888061f25d 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B0prepend_A0.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Add_Rank_B0prepend_A0.cpp @@ -33,7 +33,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_B0prepend_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -77,7 +77,7 @@ void Test::DynamicDependency::Test_Win32::Add_Rank_B0prepend_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Current.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Current.cpp index a172915020..c79a286501 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Current.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Current.cpp @@ -37,7 +37,7 @@ void Test::DynamicDependency::Test_Win32::Create_Add_Architectures_Current() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -80,7 +80,7 @@ void Test::DynamicDependency::Test_Win32::Create_Add_Architectures_Current() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Explicit.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Explicit.cpp index 107272b7de..03be29e249 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Explicit.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Create_Add_Architectures_Explicit.cpp @@ -43,7 +43,7 @@ void Test::DynamicDependency::Test_Win32::Create_Add_Architectures_Explicit() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -86,7 +86,7 @@ void Test::DynamicDependency::Test_Win32::Create_Add_Architectures_Explicit() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp index 97652acc76..fad858ee69 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp @@ -83,7 +83,7 @@ void Test::DynamicDependency::Test_Win32::Create_DoNotVerifyDependencyResolution VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_FilePathLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_FilePathLifetime_Frameworks_2.cpp index f780b20978..ac4853e0aa 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_FilePathLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_FilePathLifetime_Frameworks_2.cpp @@ -38,7 +38,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_FilePathLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -103,7 +103,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_FilePathLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_ProcessLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_ProcessLifetime_Frameworks_2.cpp index 7e4e6f6693..4aff89ff12 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_ProcessLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_ProcessLifetime_Frameworks_2.cpp @@ -33,7 +33,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -76,7 +76,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_RegistryLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_RegistryLifetime_Frameworks_2.cpp index d7bbfb003b..605c7dda7d 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_RegistryLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_FullLifecycle_RegistryLifetime_Frameworks_2.cpp @@ -38,7 +38,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_RegistryLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -101,7 +101,7 @@ void Test::DynamicDependency::Test_Win32::FullLifecycle_RegistryLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp index ae7396cc59..95f5046b80 100644 --- a/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp +++ b/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp @@ -36,7 +36,7 @@ void Test::DynamicDependency::Test_Win32::WinRTReentrancy() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkWidgets, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, expectedPackageFullName_FrameworkWidgets); // -- Add @@ -110,7 +110,7 @@ void Test::DynamicDependency::Test_Win32::WinRTReentrancy() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkWidgets, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, nullptr); + VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, expectedPackageFullName_FrameworkWidgets); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj b/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj index 897389e5f1..c3a8916b28 100644 --- a/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj +++ b/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj @@ -110,7 +110,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply WIN32;NDEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h @@ -125,7 +125,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply WIN32;_DEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h @@ -140,7 +140,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply _DEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h @@ -155,7 +155,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply _DEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h @@ -170,7 +170,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply NDEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h @@ -185,7 +185,7 @@ Use - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply NDEBUG;%(PreprocessorDefinitions);PRTEST_MODE_UWP=0 true pch.h diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp index bb96ae9591..142ebb465a 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp @@ -10,8 +10,6 @@ #include "Test_WinRT.h" -#include - #include namespace TF = ::Test::FileSystem; @@ -98,30 +96,14 @@ void Test::DynamicDependency::Test_WinRT::GetFromId_Empty() { winrt::hstring packageDependencyId; auto packageDependency{ winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependency::GetFromId(packageDependencyId) }; - if (MddCore::Win11::IsSupported()) - { - //TODO Remove once GetFromId() fails for no-such-id - VERIFY_IS_TRUE(!!packageDependency); - } - else - { - VERIFY_IS_TRUE(!packageDependency); - } + VERIFY_IS_TRUE(!packageDependency); } void Test::DynamicDependency::Test_WinRT::GetFromId_NotFound() { winrt::hstring packageDependencyId{ L"This.Does.Not.Exist" }; auto packageDependency{ winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependency::GetFromId(packageDependencyId) }; - if (MddCore::Win11::IsSupported()) - { - //TODO Remove once GetFromId() fails for no-such-id - VERIFY_IS_TRUE(!!packageDependency); - } - else - { - VERIFY_IS_TRUE(!packageDependency); - } + VERIFY_IS_TRUE(!packageDependency); } void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framework_WindowsAppRuntime() @@ -151,7 +133,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependency_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependency_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); VerifyGenerationId(1); // -- Add @@ -198,7 +180,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); VerifyGenerationId(3); // -- Delete @@ -259,43 +241,15 @@ void Test::DynamicDependency::Test_WinRT::VerifyPackageDependency( const HRESULT expectedHR, PCWSTR expectedPackageFullName) { - // Given an unknown/undefined packageDependencyId our caller specifies expectedHR=HRESULT_FROM_WIN32(ERROR_NOT_FOUND). - // Handle the condition appropriately: - // - // API | HRESULT | packageFullName - // -------------------------------------------------------------------|-----------------------------------------|---------------- - // MddGetResolvedPackageFullNameForPackageDependency | S_OK | NULL - // MddGetResolvedPackageFullNameForPackageDependency2 (Supported) | HRESULT_FROM_WIN32(ERROR_NOT_FOUND) | NULL - // MddGetResolvedPackageFullNameForPackageDependency2 (not Supported) | HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) | NULL - - const HRESULT expectedHR1{ (expectedHR == HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) ? S_OK : expectedHR }; - const HRESULT expectedHR2{ - MddCore::Win11::IsSupported() && !MddCore::Win11::IsGetResolvedPackageFullNameForPackageDependency2Supported() ? - HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) : - expectedHR }; - - wil::unique_process_heap_string packageFullName1; - VERIFY_ARE_EQUAL(expectedHR1, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName1)); - if (FAILED(expectedHR1) || !expectedPackageFullName || (expectedPackageFullName[0] == L'\0')) - { - VERIFY_IS_NULL(packageFullName1); - } - else + wil::unique_process_heap_string packageFullName; + VERIFY_ARE_EQUAL(expectedHR, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName)); + if (!expectedPackageFullName) { - VERIFY_IS_NOT_NULL(packageFullName1, WEX::Common::String().Format(L"PackageFullName=null Expected=%s", expectedPackageFullName)); - VERIFY_ARE_EQUAL(std::wstring(packageFullName1.get()), std::wstring(expectedPackageFullName)); - } - - wil::unique_process_heap_string packageFullName2; - VERIFY_ARE_EQUAL(expectedHR2, MddGetResolvedPackageFullNameForPackageDependency2(packageDependencyId, &packageFullName2)); - if (FAILED(expectedHR2) || !expectedPackageFullName || (expectedPackageFullName[0] == L'\0')) - { - VERIFY_IS_NULL(packageFullName2); + VERIFY_IS_TRUE(!packageFullName); } else { - VERIFY_IS_NOT_NULL(packageFullName2, WEX::Common::String().Format(L"PackageFullName=null Expected=%s", expectedPackageFullName)); - VERIFY_ARE_EQUAL(std::wstring(packageFullName2.get()), std::wstring(expectedPackageFullName)); + VERIFY_ARE_EQUAL(std::wstring(packageFullName.get()), std::wstring(expectedPackageFullName)); } } @@ -339,12 +293,6 @@ void Test::DynamicDependency::Test_WinRT::VerifyPackageDependency( void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring expectedPath{ path }; std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -352,12 +300,6 @@ void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -365,12 +307,6 @@ void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path2, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path2 + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); @@ -378,12 +314,6 @@ void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR p void Test::DynamicDependency::Test_WinRT::VerifyPathEnvironmentVariable(PCWSTR path1, PCWSTR path2, PCWSTR path3, PCWSTR path) { - // N/A when DynamicDependency delegates to the Win11 OS API - if (MddCore::Win11::IsSupported()) - { - return; - } - std::wstring pathEnvironmentVariable{ wil::TryGetEnvironmentVariableW(L"PATH").get() }; std::wstring expectedPath{ std::wstring(path1) + L";" + path2 + L";" + path3 + L";" + path }; VERIFY_ARE_EQUAL(expectedPath, pathEnvironmentVariable); diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_A0_B10.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_A0_B10.cpp index 9e15cdc4e6..a25682aac0 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_A0_B10.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_A0_B10.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -36,7 +36,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_A0_B10() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -79,7 +79,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_A0_B10() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B-10_A0.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B-10_A0.cpp index e1b27205ed..b27550055a 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B-10_A0.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B-10_A0.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -36,7 +36,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_Bneg10_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -79,7 +79,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_Bneg10_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B0prepend_A0.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B0prepend_A0.cpp index ea9b4ec2fa..29858786ce 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B0prepend_A0.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Add_Rank_B0prepend_A0.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -36,7 +36,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_B0prepend_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -79,7 +79,7 @@ void Test::DynamicDependency::Test_WinRT::Add_Rank_B0prepend_A0() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Current.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Current.cpp index b228eaa1d2..a19c49df9e 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Current.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Current.cpp @@ -40,7 +40,7 @@ void Test::DynamicDependency::Test_WinRT::Create_Add_Architectures_Current() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -81,7 +81,7 @@ void Test::DynamicDependency::Test_WinRT::Create_Add_Architectures_Current() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Explicit.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Explicit.cpp index e73a830afa..4659d3a041 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Explicit.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_Add_Architectures_Explicit.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -46,7 +46,7 @@ void Test::DynamicDependency::Test_WinRT::Create_Add_Architectures_Explicit() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -87,7 +87,7 @@ void Test::DynamicDependency::Test_WinRT::Create_Add_Architectures_Explicit() VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp index d7996a06dd..1e1c06c901 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp @@ -85,7 +85,7 @@ void Test::DynamicDependency::Test_WinRT::Create_DoNotVerifyDependencyResolution VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_FilePathLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_FilePathLifetime_Frameworks_2.cpp index 11fa7f6f4a..ddb2312240 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_FilePathLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_FilePathLifetime_Frameworks_2.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -43,7 +43,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_FilePathLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -108,7 +108,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_FilePathLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_ProcessLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_ProcessLifetime_Frameworks_2.cpp index 328e016979..185077f2e8 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_ProcessLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_ProcessLifetime_Frameworks_2.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. #include "pch.h" @@ -36,7 +36,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -77,7 +77,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framewor VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_RegistryLifetime_Frameworks_2.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_RegistryLifetime_Frameworks_2.cpp index f48066607b..e3d7235424 100644 --- a/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_RegistryLifetime_Frameworks_2.cpp +++ b/test/DynamicDependency/Test_WinRT/Test_WinRT_FullLifecycle_RegistryLifetime_Frameworks_2.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. All rights reserved. +// Copyright (c) Microsoft Corporation and Contributors. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. #include "pch.h" @@ -43,7 +43,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_RegistryLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Add @@ -104,7 +104,7 @@ void Test::DynamicDependency::Test_WinRT::FullLifecycle_RegistryLifetime_Framewo VerifyPackageInPackageGraph(expectedPackageFullName_WindowsAppRuntimeFramework, S_OK); VerifyPackageNotInPackageGraph(expectedPackageFullName_FrameworkMathAdd, S_OK); VerifyPathEnvironmentVariable(packagePath_WindowsAppRuntimeFramework, pathEnvironmentVariable.c_str()); - VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring()); + VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, expectedPackageFullName_FrameworkMathAdd); // -- Delete diff --git a/test/DynamicDependency/Test_WinRT/pch.h b/test/DynamicDependency/Test_WinRT/pch.h index c831e6e1cc..ede2c26370 100644 --- a/test/DynamicDependency/Test_WinRT/pch.h +++ b/test/DynamicDependency/Test_WinRT/pch.h @@ -37,8 +37,6 @@ #include -#include - #include "TestFilesystem.h" #include "TestPackages.h"