diff --git a/WindowsAppRuntime.sln b/WindowsAppRuntime.sln
index e9bd3244f5..ab84193876 100644
--- a/WindowsAppRuntime.sln
+++ b/WindowsAppRuntime.sln
@@ -261,8 +261,6 @@ 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}"
@@ -1315,20 +1313,6 @@ 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
@@ -2470,7 +2454,6 @@ 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}
@@ -2634,7 +2617,6 @@ 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 fe364ab8bd..a9e8e1242c 100644
--- a/build/CopyFilesToStagingDir.ps1
+++ b/build/CopyFilesToStagingDir.ps1
@@ -170,10 +170,6 @@ 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 51d08caf58..2dda2aae1d 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,6 +7,8 @@
#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();
@@ -115,11 +117,20 @@ STDAPI WindowsAppRuntime_VersionInfo_TestInitialize(
PCWSTR frameworkPackageFamilyName,
PCWSTR mainPackageFamilyName) noexcept try
{
- // Both or neither must be valued
+ // Verify parameters
const bool frameworkPackageFamilyNameIsEmpty{ !frameworkPackageFamilyName || (*frameworkPackageFamilyName == L'0') };
const bool mainPackageFamilyNameIsEmpty{ !mainPackageFamilyName || (*mainPackageFamilyName == L'0') };
- FAIL_FAST_HR_IF(E_UNEXPECTED, frameworkPackageFamilyNameIsEmpty && !mainPackageFamilyNameIsEmpty);
- FAIL_FAST_HR_IF(E_UNEXPECTED, !frameworkPackageFamilyNameIsEmpty && mainPackageFamilyNameIsEmpty);
+ 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);
+ }
// Update our state
if (frameworkPackageFamilyNameIsEmpty)
@@ -132,7 +143,7 @@ STDAPI WindowsAppRuntime_VersionInfo_TestInitialize(
{
// Initialize test support
g_test_frameworkPackageFamilyName = frameworkPackageFamilyName;
- g_test_mainPackageFamilyName = mainPackageFamilyName;
+ g_test_mainPackageFamilyName = (!mainPackageFamilyName ? L"" : mainPackageFamilyName);
}
return S_OK;
}
diff --git a/dev/Common/WindowsAppRuntime.VersionInfo.h b/dev/Common/WindowsAppRuntime.VersionInfo.h
index 986f946493..e4194a1d8b 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,6 +68,18 @@ 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 e5f3fa55ae..9f8cfc64cc 100644
--- a/dev/DynamicDependency/API/DynamicDependency.vcxitems
+++ b/dev/DynamicDependency/API/DynamicDependency.vcxitems
@@ -23,7 +23,6 @@
-
diff --git a/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters b/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters
index 293f21384c..d9841d40fd 100644
--- a/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters
+++ b/dev/DynamicDependency/API/DynamicDependency.vcxitems.filters
@@ -50,9 +50,6 @@
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 e78c85f086..08a157b823 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,6 +16,8 @@
#include
+#include "MddWin11.h"
+
namespace winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::implementation
{
PackageDependency::PackageDependency(hstring const& id) :
@@ -25,21 +27,37 @@ namespace winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::implem
winrt::PackageDependency PackageDependency::GetFromId(hstring const& id)
{
- auto tokenUser{ wil::get_token_information(GetCurrentThreadEffectiveToken()) };
- auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(tokenUser->User.Sid, id.c_str()) };
- if (!exists)
+ // 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
{
- return nullptr;
+ auto tokenUser{ wil::get_token_information(GetCurrentThreadEffectiveToken()) };
+ auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(tokenUser->User.Sid, id.c_str()) };
+ if (!exists)
+ {
+ return nullptr;
+ }
}
return winrt::make(id);
}
winrt::PackageDependency PackageDependency::GetFromIdForSystem(hstring const& id)
{
- auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(nullptr, id.c_str()) };
- if (!exists)
+ // 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
{
- return nullptr;
+ auto exists{ MddCore::PackageDependencyManager::ExistsPackageDependency(nullptr, id.c_str()) };
+ if (!exists)
+ {
+ return nullptr;
+ }
}
return winrt::make(id);
}
diff --git a/dev/DynamicDependency/API/MddDetourPackageGraph.cpp b/dev/DynamicDependency/API/MddDetourPackageGraph.cpp
index 4ef959e4e6..31c63cc58f 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,6 +9,8 @@
#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.
@@ -110,6 +112,13 @@ 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));
@@ -160,6 +169,13 @@ 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
deleted file mode 100644
index cca5dad052..0000000000
--- a/dev/DynamicDependency/API/MddWin11.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-// 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 8b0f6bef92..79e7d63064 100644
--- a/dev/DynamicDependency/API/MddWin11.h
+++ b/dev/DynamicDependency/API/MddWin11.h
@@ -5,78 +5,409 @@
#define MDDWIN11DYNAMICDEPENDENCY_H
#include
-#include
-HRESULT WINAPI MddWin11Initialize() noexcept;
-
-HRESULT WINAPI MddWin11Shutdown() noexcept;
+#include
namespace MddCore::Win11
{
-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)
-{
- return winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId{ static_cast(reinterpret_cast(context)) };
+ 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 MDD_PACKAGEDEPENDENCY_CONTEXT ToContext(winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependencyContextId contextId)
+inline HRESULT WINAPI MddWin11Initialize() noexcept
{
- return reinterpret_cast(static_cast(contextId.Id));
+ 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;
}
+
+inline HRESULT WINAPI MddWin11Shutdown() noexcept
+{
+ 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;
}
#endif // MDDWIN11DYNAMICDEPENDENCY_H
diff --git a/dev/DynamicDependency/API/MsixDynamicDependency.cpp b/dev/DynamicDependency/API/MsixDynamicDependency.cpp
index 609ba2b03a..79cff8e7d9 100644
--- a/dev/DynamicDependency/API/MsixDynamicDependency.cpp
+++ b/dev/DynamicDependency/API/MsixDynamicDependency.cpp
@@ -9,6 +9,8 @@
#include "PackageDependencyManager.h"
#include "PackageGraphManager.h"
+#include "MddWin11.h"
+
STDAPI MddTryCreatePackageDependency(
PSID user,
_In_ PCWSTR packageFamilyName,
@@ -21,7 +23,16 @@ STDAPI MddTryCreatePackageDependency(
{
*packageDependencyId = nullptr;
- // Dynamic Dependencies requires a non-packaged process
+ // 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
RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess());
MddCore::PackageDependencyManager::CreatePackageDependency(user, packageFamilyName, minVersion, packageDependencyProcessorArchitectures, lifetimeKind, lifetimeArtifact, options, packageDependencyId);
@@ -32,7 +43,14 @@ CATCH_RETURN();
STDAPI_(void) MddDeletePackageDependency(
_In_ PCWSTR packageDependencyId) noexcept try
{
- // Dynamic Dependencies requires a non-packaged process
+ // 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
THROW_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess());
MddCore::PackageDependencyManager::DeletePackageDependency(packageDependencyId);
@@ -52,7 +70,14 @@ STDAPI MddAddPackageDependency(
*packageFullName = nullptr;
}
- // Dynamic Dependencies requires a non-packaged process
+ // 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
RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess());
RETURN_IF_FAILED(MddCore::PackageGraphManager::AddToPackageGraph(packageDependencyId, rank, options, packageDependencyContext, packageFullName));
@@ -63,7 +88,14 @@ CATCH_RETURN();
STDAPI_(void) MddRemovePackageDependency(
_In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) noexcept try
{
- // Dynamic Dependencies requires a non-packaged process
+ // 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
LOG_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess());
MddCore::PackageGraphManager::RemoveFromPackageGraph(packageDependencyContext);
@@ -76,13 +108,46 @@ STDAPI MddGetResolvedPackageFullNameForPackageDependency(
{
*packageFullName = nullptr;
- // Dynamic Dependencies requires a non-packaged process
+ // 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
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::ResolvePackageDependency(packageDependencyId, MddAddPackageDependencyOptions::None, 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));
*packageFullName = fullName.release();
return S_OK;
@@ -95,7 +160,14 @@ STDAPI MddGetIdForPackageDependencyContext(
{
*packageDependencyId = nullptr;
- // Dynamic Dependencies requires a non-packaged process
+ // 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
RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), AppModel::Identity::IsPackagedProcess());
RETURN_HR_IF(E_INVALIDARG, !packageDependencyContext);
@@ -110,6 +182,12 @@ 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 e80c389ce4..fb3365e37c 100644
--- a/dev/DynamicDependency/API/MsixDynamicDependency.h
+++ b/dev/DynamicDependency/API/MsixDynamicDependency.h
@@ -192,17 +192,28 @@ STDAPI MddAddPackageDependency(
STDAPI_(void) MddRemovePackageDependency(
_In_ MDD_PACKAGEDEPENDENCY_CONTEXT packageDependencyContext) noexcept;
-/// Return the package full name that would be used if the
-/// PackageDependency were to be resolved. Does not add the
+/// 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.
/// 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 5bf3219756..3c8af19531 100644
--- a/dev/DynamicDependency/API/PackageGraph.cpp
+++ b/dev/DynamicDependency/API/PackageGraph.cpp
@@ -109,6 +109,49 @@ 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,
@@ -128,7 +171,7 @@ HRESULT MddCore::PackageGraph::ResolvePackageDependency(
return S_OK;
}
- // Rewsolve it
+ // Resolve it
return ResolvePackageDependency(packageDependency, options, packageFullName);
}
CATCH_RETURN();
diff --git a/dev/DynamicDependency/API/PackageGraph.h b/dev/DynamicDependency/API/PackageGraph.h
index 89ae0d3956..d92bfa22ee 100644
--- a/dev/DynamicDependency/API/PackageGraph.h
+++ b/dev/DynamicDependency/API/PackageGraph.h
@@ -34,6 +34,24 @@ 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 16195fe20a..e1bee31d9b 100644
--- a/dev/DynamicDependency/API/PackageGraphManager.cpp
+++ b/dev/DynamicDependency/API/PackageGraphManager.cpp
@@ -26,6 +26,24 @@ 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 f0eb427552..74805fa425 100644
--- a/dev/DynamicDependency/API/PackageGraphManager.h
+++ b/dev/DynamicDependency/API/PackageGraphManager.h
@@ -20,6 +20,14 @@ 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 f6baf144e4..4d947c0db3 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,6 +10,8 @@
#include "IDynamicDependencyLifetimeManager.h"
+#include "MddWin11.h"
+
#include
HRESULT _MddBootstrapInitialize(
@@ -24,6 +26,9 @@ 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);
@@ -104,10 +109,9 @@ STDAPI MddBootstrapInitialize2(
auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() };
- PWSTR initializationFrameworkPackageFullName{};
- auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) };
+ auto initializationCount{ activityContext.GetInitializeCount() };
activityContext.SetMddBootstrapAPI(WindowsAppRuntime::MddBootstrap::Activity::MddBootstrapAPI::Initialize);
- auto threadCallback = wil::ThreadFailureCallback(wilResultLoggingThreadCallback);
+ auto threadCallback{ wil::ThreadFailureCallback(wilResultLoggingThreadCallback) };
auto initializeActivity{
activityContext.GetInitializeActivity().Start(
majorMinorVersion,
@@ -145,7 +149,7 @@ STDAPI MddBootstrapInitialize2(
DebugBreak();
}
- if (hr == HRESULT_FROM_WIN32(ERROR_NO_MATCH))
+ if (hr == STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED)
{
if (WI_IsFlagSet(options, MddBootstrapInitializeOptions_OnNoMatch_ShowUI) ||
IsOptionEnabled(L"MICROSOFT_WINDOWSAPPRUNTIME_BOOTSTRAP_INITIALIZE_SHOWUI"))
@@ -171,6 +175,7 @@ STDAPI MddBootstrapInitialize2(
if (activityContext.GetInitializeActivity().IsRunning())
{
+ PCWSTR initializationFrameworkPackageFullName{};
initializationCount = activityContext.GetInitializeData(initializationFrameworkPackageFullName);
initializeActivity.StopWithResult(
hr,
@@ -194,8 +199,7 @@ HRESULT _MddBootstrapInitialize(
PCWSTR versionTag,
PACKAGE_VERSION minVersion) noexcept try
{
- PWSTR initializationFrameworkPackageFullName{};
- auto initializationCount{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get().GetInitializeData(initializationFrameworkPackageFullName) };
+ const auto initializationCount{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get().GetInitializeCount() };
// Are we already initialized?
if (initializationCount > 0)
@@ -218,10 +222,10 @@ STDAPI_(void) MddBootstrapShutdown() noexcept
auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() };
- PWSTR initializationFrameworkPackageFullName{};
- auto initializationCount{ activityContext.GetInitializeData(initializationFrameworkPackageFullName) };
+ PCWSTR initializationFrameworkPackageFullName{};
+ const 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),
@@ -231,7 +235,7 @@ STDAPI_(void) MddBootstrapShutdown() noexcept
if (initializationCount == 1)
{
// Last one out turn out the lights...
- if (g_packageDependencyContext && g_windowsAppRuntimeDll)
+ if (g_packageDependencyContext && (MddCore::Win11::IsSupported() || g_windowsAppRuntimeDll))
{
MddRemovePackageDependency(g_packageDependencyContext);
g_packageDependencyContext = nullptr;
@@ -307,10 +311,16 @@ void VerifyInitializationIsCompatible(
// Sanity check we're already initialized
// g_lifetimeManager is optional. Don't check it
// g_endTheLifetimeManagerEvent is optional. Don't check it
- FAIL_FAST_HR_IF(E_UNEXPECTED, g_windowsAppRuntimeDll == nullptr);
+ // 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_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,
@@ -351,74 +361,144 @@ void FirstTimeInitialization(
FAIL_FAST_HR_IF(E_UNEXPECTED, g_packageDependencyContext != nullptr);
// Make a copy of the versionTag in preparation of succcess
- auto packageVersionTag{ std::wstring(!versionTag ? L"" : versionTag) };
+ const std::wstring packageVersionTag{ !versionTag ? L"" : versionTag };
- // 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());
+ // 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));
- const PACKAGE_INFO* frameworkPackageInfo{};
- auto packageInfoBuffer{ GetFrameworkPackageInfoForPackage(activityContext.GetInitializationPackageFullName().get(), frameworkPackageInfo) };
+ // Update the activity context
+ auto& activityContext{ WindowsAppRuntime::MddBootstrap::Activity::Context::Get() };
+ activityContext.SetInitializationPackageFullName(packageFullName.get());
- // 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) };
+ // 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());
- 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());
+ ::WindowsAppRuntime::VersionInfo::TestInitialize(frameworkPackageFamilyName.c_str());
+ }
+
+ // 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
+ {
+ // 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());
- // 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));
+ const PACKAGE_INFO* frameworkPackageInfo{};
+ auto packageInfoBuffer{ GetFrameworkPackageInfoForPackage(activityContext.GetInitializationPackageFullName().get(), frameworkPackageInfo) };
- // Remove our temporary path addition
- RemoveFrameworkFromPath(frameworkPackageInfo->path);
- dllDirectoryCookie.reset();
+ // 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) };
- // 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);
+ 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;
}
+}
- // 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 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) };
+
+ PCWSTR packageVersionTag{ !versionTag ? L"" : versionTag };
+ PCWSTR packageVersionTagDelimiter{ (packageVersionTag[0] == L'\0') ? L"" : L"-"};
+
+ 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());
+
+ return packageFamilyName;
}
/// Determine the path for the Windows App Runtime Framework package
@@ -670,17 +750,21 @@ 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).
- WCHAR appExtensionName[100]{};
+ std::wstring appExtensionName;
const UINT16 majorVersion{ HIWORD(majorMinorVersion) };
const UINT16 minorVersion{ LOWORD(majorMinorVersion) };
const auto versionShortTag{ AppModel::Identity::GetVersionShortTagFromVersionTag(versionTag) };
if (!versionShortTag.empty())
{
- wsprintf(appExtensionName, L"microsoft.winappruntime.ddlm-%hu.%hu-%s-%s", majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString(), versionShortTag.c_str());
+ 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());
}
else
{
- wsprintf(appExtensionName, L"microsoft.winappruntime.ddlm-%hu.%hu-%s", majorVersion, minorVersion, AppModel::Identity::GetCurrentArchitectureAsShortString());
+ 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());
}
auto catalog{ winrt::Windows::ApplicationModel::AppExtensions::AppExtensionCatalog::Open(appExtensionName) };
@@ -742,8 +826,8 @@ CLSID FindDDLMViaAppExtension(
continue;
}
}
- 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),
+ 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),
minVersion.Major, minVersion.Minor, minVersion.Build, minVersion.Revision);
return bestFitClsid;
}
@@ -940,7 +1024,7 @@ void FindDDLMViaEnumeration(
continue;
}
}
- THROW_HR_IF_MSG(HRESULT_FROM_WIN32(ERROR_NO_MATCH), !foundAny, "Enumeration: %ls", criteria.get());
+ THROW_HR_IF_MSG(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, !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 5837e7effb..ee37f9ea26 100644
--- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h
+++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapActivity.h
@@ -56,12 +56,17 @@ namespace WindowsAppRuntime::MddBootstrap::Activity
return m_mddBootstrapAPI;
}
- const uint32_t GetInitializeData(PWSTR& initializationPackageFullName) const
+ const uint32_t GetInitializeCount() const
{
- initializationPackageFullName = m_initializationPackageFullName.get();
return m_initializationCount;
}
+ const uint32_t GetInitializeData(PCWSTR& initializationPackageFullName) const
+ {
+ initializationPackageFullName = m_initializationPackageFullName.get();
+ return GetInitializeCount();
+ }
+
wil::unique_cotaskmem_string& GetInitializationPackageFullName()
{
return m_initializationPackageFullName;
@@ -113,7 +118,15 @@ namespace WindowsAppRuntime::MddBootstrap::Activity
void SetInitializationPackageFullName(PWSTR initializationPackageFullName)
{
- m_initializationPackageFullName.reset(initializationPackageFullName);
+ if (initializationPackageFullName)
+ {
+ auto packageFullName{ wil::make_cotaskmem_string(initializationPackageFullName) };
+ m_initializationPackageFullName = std::move(packageFullName);
+ }
+ else
+ {
+ m_initializationPackageFullName.reset();
+ }
}
void StopActivityForWilReturnHR(const bool stopActivityForWilReturnHR)
diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp
index 71fe1609d6..ca92888132 100644
--- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp
+++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapTracelogging.cpp
@@ -12,7 +12,7 @@ void MddBootstrap_StopActivity(
{
if (isActivityRunning)
{
- PWSTR initializationFrameworkPackageFullName{};
+ PCWSTR 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 fce11d68dd..372923e621 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,
- PWSTR resolvedFrameworkPackageFullName,
+ PCWSTR 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,
- PWSTR resolvedFrameworkPackageFullName)
+ PCWSTR 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 2da5b862d4..fea531256b 100644
--- a/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp
+++ b/dev/WindowsAppRuntime_BootstrapDLL/dllmain.cpp
@@ -3,6 +3,8 @@
#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
@@ -12,10 +14,19 @@ 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 83d91290dc..de435f0404 100644
--- a/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def
+++ b/dev/WindowsAppRuntime_DLL/WindowsAppRuntime.def
@@ -10,6 +10,7 @@ EXPORTS
MddDeletePackageDependency
MddGetIdForPackageDependencyContext
MddGetResolvedPackageFullNameForPackageDependency
+ MddGetResolvedPackageFullNameForPackageDependency2
MddRemovePackageDependency
MddTryCreatePackageDependency
MddLifetimeManagementGC
diff --git a/dev/WindowsAppRuntime_DLL/dllmain.cpp b/dev/WindowsAppRuntime_DLL/dllmain.cpp
index cc0604d331..60c61157c6 100644
--- a/dev/WindowsAppRuntime_DLL/dllmain.cpp
+++ b/dev/WindowsAppRuntime_DLL/dllmain.cpp
@@ -30,11 +30,8 @@ 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;
}
@@ -56,10 +53,8 @@ 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;
}
@@ -71,12 +66,14 @@ 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
deleted file mode 100644
index 21fff5013a..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.filters
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
- {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
deleted file mode 100644
index 312a8c5f4f..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/WindowsAppRuntime_MSIXInstallFromPath.vcxproj
+++ /dev/null
@@ -1,252 +0,0 @@
-
-
-
-
-
-
-
-
-
- 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
deleted file mode 100644
index d82b8b8f3b..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/framework.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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
deleted file mode 100644
index 12cf253e01..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/main.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-// 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
deleted file mode 100644
index e9fecf8c0b..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/packages.config
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp b/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp
deleted file mode 100644
index 6c107a3575..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-// 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
deleted file mode 100644
index 5db719debd..0000000000
--- a/dev/WindowsAppRuntime_MSIXInstallFromPath/pch.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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 d57351b499..89c2f99792 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(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(doesNotExist, nullptr, minVersionMatchAny));
+ VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, 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(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor, nullptr, minVersionNoMatch));
+ VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(c_Version_MajorMinor, nullptr, minVersionNoMatch));
}
TEST_METHOD(Initialize)
@@ -253,7 +253,8 @@ 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(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor, L"NotTheVersionTag", 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));
const PACKAGE_VERSION c_minVersion_Incompatible{ UINT64_MAX };
VERIFY_ARE_EQUAL(MDD_E_BOOTSTRAP_INITIALIZE_INCOMPATIBLE, MddBootstrapInitialize(c_Version_MajorMinor, nullptr, c_minVersion_Incompatible));
@@ -288,7 +289,8 @@ 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(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor3, L"NotTheVersionTag", c_minVersion3));
+ 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));
// Incompatible criteria. Verify Initialize+Shutdown brought us
// back to initial state so we can fail to initialize as expected
@@ -297,7 +299,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(HRESULT_FROM_WIN32(ERROR_NO_MATCH), MddBootstrapInitialize(c_Version_MajorMinor4, nullptr, c_minVersion4));
+ VERIFY_ARE_EQUAL(STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED, MddBootstrapInitialize(c_Version_MajorMinor4, nullptr, c_minVersion4));
// Same criteria but MinVersion
+
namespace TF = ::Test::FileSystem;
namespace TP = ::Test::Packages;
@@ -134,7 +136,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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
VerifyPackageGraphRevisionId(1);
// -- Add
@@ -183,7 +185,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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
VerifyPackageGraphRevisionId(3);
// -- Delete
@@ -208,7 +210,8 @@ void Test::DynamicDependency::Test_Win32::GetResolvedPackageFullName_NotFound()
{
PCWSTR packageDependencyId{ L"This.Does.Not.Exist" };
wil::unique_process_heap_string packageFullName;
- VERIFY_ARE_EQUAL(HRESULT_FROM_WIN32(ERROR_NOT_FOUND), MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName));
+ VERIFY_SUCCEEDED(MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName));
+ VERIFY_IS_NULL(packageFullName);
}
void Test::DynamicDependency::Test_Win32::GetIdForPackageDependencyContext_Null()
@@ -235,15 +238,43 @@ void Test::DynamicDependency::Test_Win32::VerifyPackageDependency(
const HRESULT expectedHR,
PCWSTR expectedPackageFullName)
{
- wil::unique_process_heap_string packageFullName;
- VERIFY_ARE_EQUAL(expectedHR, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName));
- if (!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_TRUE(!packageFullName);
+ VERIFY_IS_NULL(packageFullName1);
}
else
{
- VERIFY_ARE_EQUAL(std::wstring(packageFullName.get()), std::wstring(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)
+ {
+ VERIFY_IS_NULL(packageFullName2);
+ }
+ 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));
}
}
@@ -257,6 +288,12 @@ 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);
@@ -264,6 +301,12 @@ 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);
@@ -271,6 +314,12 @@ 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);
@@ -278,6 +327,12 @@ 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 0c6c2747c5..28c460c74d 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 081c385c6d..caf732366a 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 888061f25d..fcb1bc721e 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 c79a286501..a172915020 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 03be29e249..107272b7de 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- Delete
diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_Create_DoNotVerifyDependencyResolution.cpp
index fad858ee69..97652acc76 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 ac4853e0aa..f780b20978 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 4aff89ff12..7e4e6f6693 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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 605c7dda7d..d7bbfb003b 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd.get(), S_OK, nullptr);
// -- Delete
diff --git a/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp b/test/DynamicDependency/Test_Win32/Test_Win32_WinRTReentrancy.cpp
index 95f5046b80..ae7396cc59 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, expectedPackageFullName_FrameworkWidgets);
+ VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, nullptr);
// -- 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, expectedPackageFullName_FrameworkWidgets);
+ VerifyPackageDependency(packageDependencyId_FrameworkWidgets.get(), S_OK, nullptr);
// -- Delete
diff --git a/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj b/test/DynamicDependency/Test_WinRT/DynamicDependency_Test_WinRT.vcxproj
index c3a8916b28..897389e5f1 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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
_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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
_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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
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
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)\..\Framework.Math.Add;$(OutDir)\..\Framework.Math.Multiply;$(RepoRoot)\dev\common
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 142ebb465a..bb96ae9591 100644
--- a/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp
+++ b/test/DynamicDependency/Test_WinRT/Test_WinRT.cpp
@@ -10,6 +10,8 @@
#include "Test_WinRT.h"
+#include
+
#include
namespace TF = ::Test::FileSystem;
@@ -96,14 +98,30 @@ void Test::DynamicDependency::Test_WinRT::GetFromId_Empty()
{
winrt::hstring packageDependencyId;
auto packageDependency{ winrt::Microsoft::Windows::ApplicationModel::DynamicDependency::PackageDependency::GetFromId(packageDependencyId) };
- VERIFY_IS_TRUE(!packageDependency);
+ if (MddCore::Win11::IsSupported())
+ {
+ //TODO Remove once GetFromId() fails for no-such-id
+ VERIFY_IS_TRUE(!!packageDependency);
+ }
+ else
+ {
+ 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) };
- VERIFY_IS_TRUE(!packageDependency);
+ if (MddCore::Win11::IsSupported())
+ {
+ //TODO Remove once GetFromId() fails for no-such-id
+ VERIFY_IS_TRUE(!!packageDependency);
+ }
+ else
+ {
+ VERIFY_IS_TRUE(!packageDependency);
+ }
}
void Test::DynamicDependency::Test_WinRT::FullLifecycle_ProcessLifetime_Framework_WindowsAppRuntime()
@@ -133,7 +151,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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependency_FrameworkMathAdd, S_OK, winrt::hstring());
VerifyGenerationId(1);
// -- Add
@@ -180,7 +198,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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
VerifyGenerationId(3);
// -- Delete
@@ -241,15 +259,43 @@ void Test::DynamicDependency::Test_WinRT::VerifyPackageDependency(
const HRESULT expectedHR,
PCWSTR expectedPackageFullName)
{
- wil::unique_process_heap_string packageFullName;
- VERIFY_ARE_EQUAL(expectedHR, MddGetResolvedPackageFullNameForPackageDependency(packageDependencyId, &packageFullName));
- if (!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
{
- VERIFY_IS_TRUE(!packageFullName);
+ 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);
}
else
{
- VERIFY_ARE_EQUAL(std::wstring(packageFullName.get()), std::wstring(expectedPackageFullName));
+ 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));
}
}
@@ -293,6 +339,12 @@ 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);
@@ -300,6 +352,12 @@ 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);
@@ -307,6 +365,12 @@ 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);
@@ -314,6 +378,12 @@ 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 a25682aac0..9e15cdc4e6 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 b27550055a..e1b27205ed 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 29858786ce..ea9b4ec2fa 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 a19c49df9e..b228eaa1d2 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 4659d3a041..e73a830afa 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- Delete
diff --git a/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp b/test/DynamicDependency/Test_WinRT/Test_WinRT_Create_DoNotVerifyDependencyResolution.cpp
index 1e1c06c901..d7996a06dd 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 ddb2312240..11fa7f6f4a 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 185077f2e8..328e016979 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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 e3d7235424..f48066607b 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- 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, expectedPackageFullName_FrameworkMathAdd);
+ VerifyPackageDependency(packageDependencyId_FrameworkMathAdd, S_OK, winrt::hstring());
// -- Delete
diff --git a/test/DynamicDependency/Test_WinRT/pch.h b/test/DynamicDependency/Test_WinRT/pch.h
index ede2c26370..c831e6e1cc 100644
--- a/test/DynamicDependency/Test_WinRT/pch.h
+++ b/test/DynamicDependency/Test_WinRT/pch.h
@@ -37,6 +37,8 @@
#include
+#include
+
#include "TestFilesystem.h"
#include "TestPackages.h"