commit dc3c7c69d883fd2b9b581eb906ef9db9a35c322d parent 1520f75301b8092ca52828d1fad1381ffcc64cb1 Author: Ryan Fu <69221034+ryfu-msft@users.noreply.github.com> Date: Tue, 22 Nov 2022 12:05:10 -0800 Merge pull request #2713 from ryfu-msft/resetUndocked Diffstat:
111 files changed, 3457 insertions(+), 1878 deletions(-)
diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln @@ -131,9 +131,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.WinGet.Client", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Management.Deployment.Projection", "Microsoft.Management.Deployment.Projection\Microsoft.Management.Deployment.Projection.csproj", "{0B104762-5CD8-47EE-A904-71C1C3F84DCD}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UndockedRegFreeWinRT", "UndockedRegFreeWinRT\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj", "{31ED69A8-5310-45A9-953F-56C351D2C3E1}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UndockedRegFreeWinRT", "Xlang\UndockedRegFreeWinRT\src\UndockedRegFreeWinRT\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj", "{31ED69A8-5310-45A9-953F-56C351D2C3E1}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Detours", "UndockedRegFreeWinRT\detours\detours.vcxproj", "{787EC629-C0FB-4BA9-9746-4A82CD06B73E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Detours", "Xlang\UndockedRegFreeWinRT\src\UndockedRegFreeWinRT\detours\detours.vcxproj", "{787EC629-C0FB-4BA9-9746-4A82CD06B73E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "templates", "templates", "{8E43F982-40D5-4DF1-9044-C08047B5F43B}" ProjectSection(SolutionItems) = preProject diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.cpp b/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.cpp @@ -1,114 +0,0 @@ -#include <iostream> -#include "..\UndockedRegFreeWinRT\catalog.h" -#include "..\UndockedRegFreeWinRT\catalog.cpp" -#include "..\UndockedRegFreeWinRT\typeresolution.h" -#include "..\UndockedRegFreeWinRT\typeresolution.cpp" -#include "pch.h" - -TEST_CASE("Manifest Parser") -{ - g_types.clear(); - PCWSTR exeFilePath = nullptr; - UndockedRegFreeWinRT::GetProcessExeDir(&exeFilePath); - SECTION("Multiple activatableClass") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\winrtActivation.dll1.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == S_OK); - std::wstring moduleName = L"RegFreeWinrtInprocComponents.1.dll"; - REQUIRE(g_types.size() == 4); - auto component_iter = g_types.find(L"RegFreeWinrt.1.threading_both"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH); - - component_iter = g_types.find(L"RegFreeWinrt.1.threading_mta"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_MTA); - - component_iter = g_types.find(L"RegFreeWinrt.1.threading_sta"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_STA); - - component_iter = g_types.find(L"RegFreeWinrt.SharedName.threading_both"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH); - } - - SECTION("Multiple file") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.Positive.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == S_OK); - std::wstring moduleName = L"FakeDllName.dll"; - REQUIRE(g_types.size() == 6); - auto component_iter = g_types.find(L"FakeActivatableClass"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - - component_iter = g_types.find(L"FakeActivatableClass2"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - - component_iter = g_types.find(L"FakeActivatableClass3"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - - component_iter = g_types.find(L"FakeActivatableClass4"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - - moduleName = L"OtherFakeDllName.dll"; - component_iter = g_types.find(L"OtherFakeActivatableClass"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - - component_iter = g_types.find(L"OtherFakeActivatableClass2"); - REQUIRE(component_iter != g_types.end()); - REQUIRE(component_iter->second->module_name == moduleName); - } - - //Failures - SECTION("Negative Missing ThreadingModel") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingThreadingModel.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } - - SECTION("Negative Missing Name") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingName.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } - - SECTION("Negative Invalid ThreadingModel") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.invalidThreadingModel.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } - - SECTION("Negative Duplicate Acid") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.duplicateAcid.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS)); - } - - SECTION("Negative Blank Name") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.blankName.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } - - SECTION("Negative Blank FileName") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.blankFileName.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } - - SECTION("Negative Missing FileName") - { - std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingFileName.manifest"; - REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); - } -} diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj b/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj @@ -1,220 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>16.0</VCProjectVersion> - <ProjectGuid>{7DC750DE-F43C-4A3B-9FBF-8D964458829A}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>ManifestParserTest</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="main.cpp" /> - <ClCompile Include="ManifestParserTest.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj"> - <Project>{31ed69a8-5310-45a9-953f-56c351d2c3e1}</Project> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <ContentWithTargetPath Include="basicParse.negative.blankName.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.blankName.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.duplicateAcid.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.duplicateAcid.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.invalidThreadingModel.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.invalidThreadingModel.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.missingName.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.missingName.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.missingThreadingModel.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.missingThreadingModel.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.positive.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.positive.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="winrtActivation.dll1.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>winrtActivation.dll1.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.missingFileName.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.missingFileName.manifest</TargetPath> - </ContentWithTargetPath> - <ContentWithTargetPath Include="basicParse.negative.blankFileName.manifest"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <TargetPath>basicParse.negative.blankFileName.manifest</TargetPath> - </ContentWithTargetPath> - </ItemGroup> - <ItemGroup> - <None Include="packages.config" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="pch.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> - </ImportGroup> - <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> - <PropertyGroup> - <ErrorText>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}.</ErrorText> - </PropertyGroup> - <Error Condition="!Exists('..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> - </Target> -</Project>- \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj b/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj @@ -1,211 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>16.0</VCProjectVersion> - <ProjectGuid>{31ED69A8-5310-45A9-953F-56C351D2C3E1}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>UndockedRegFreeWinRT</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>winrtact</TargetName> - <LinkIncremental>true</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>winrtact</TargetName> - <LinkIncremental>true</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>winrtact</TargetName> - <LinkIncremental>false</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>winrtact</TargetName> - <LinkIncremental>false</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_DEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableUAC>false</EnableUAC> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;</AdditionalDependencies> - <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_DEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableUAC>false</EnableUAC> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;</AdditionalDependencies> - <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;NDEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableUAC>false</EnableUAC> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;</AdditionalDependencies> - <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>NDEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableUAC>false</EnableUAC> - <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;</AdditionalDependencies> - <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <None Include="cpp.hint" /> - <None Include="packages.config" /> - <None Include="winrtact.def" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="catalog.cpp" /> - <ClCompile Include="dllmain.cpp" /> - <ClCompile Include="typeresolution.cpp" /> - <ClCompile Include="typeresolution.h" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="catalog.h" /> - <ClInclude Include="extwinrt.h" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\detours\detours.vcxproj"> - <Project>{787ec629-c0fb-4ba9-9746-4a82cd06b73e}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> - </ImportGroup> - <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> - <PropertyGroup> - <ErrorText>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}.</ErrorText> - </PropertyGroup> - <Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> - </Target> -</Project>- \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.cpp b/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.cpp @@ -1,395 +0,0 @@ -#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING - -#include <Windows.h> -#include <roapi.h> -#include <winstring.h> -#include <rometadataresolution.h> -#include <combaseapi.h> -#include <wrl.h> -#include <xmllite.h> -#include <Shlwapi.h> -#include <comutil.h> -#include <fstream> -#include <unordered_map> -#include <codecvt> -#include <locale> -#include <RoMetadataApi.h> -#include <algorithm> -#include "catalog.h" -#include "TypeResolution.h" - -using namespace std; -using namespace Microsoft::WRL; -using namespace Microsoft::WRL::Wrappers; - -// TODO: Components won't respect COM lifetime. workaround to get them in the COM list? - -extern "C" -{ - typedef HRESULT(__stdcall* activation_factory_type)(HSTRING, IActivationFactory**); -} - -// Intentionally no class factory cache here. That would be excessive since -// other layers already cache. -struct component -{ - wstring module_name; - wstring xmlns; - HMODULE handle = nullptr; - activation_factory_type get_activation_factory; - ABI::Windows::Foundation::ThreadingType threading_model; - - ~component() - { - if (handle) - { - FreeLibrary(handle); - } - } - - HRESULT LoadModule() - { - if (handle == nullptr) - { - handle = LoadLibraryExW(module_name.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); - if (handle == nullptr) - { - return HRESULT_FROM_WIN32(GetLastError()); - } - this->get_activation_factory = (activation_factory_type)GetProcAddress(handle, "DllGetActivationFactory"); - if (this->get_activation_factory == nullptr) - { - return HRESULT_FROM_WIN32(GetLastError()); - } - } - return (handle != nullptr && this->get_activation_factory != nullptr) ? S_OK : E_FAIL; - } - - HRESULT GetActivationFactory(HSTRING className, REFIID iid, void** factory) - { - RETURN_IF_FAILED(LoadModule()); - - IActivationFactory* ifactory = nullptr; - HRESULT hr = this->get_activation_factory(className, &ifactory); - // optimize for IActivationFactory? - if (SUCCEEDED(hr)) - { - hr = ifactory->QueryInterface(iid, factory); - ifactory->Release(); - } - return hr; - } -}; - -static unordered_map<wstring, shared_ptr<component>> g_types; - -void wstr_tolower(std::wstring& s) { - std::transform(s.begin(), s.end(), s.begin(), - [](unsigned char c) { return std::tolower(c); } // correct - ); -} - -HRESULT LoadManifestFromPath(std::wstring path) -{ - if (path.size() < 4) - { - return COR_E_ARGUMENT; - } - std::wstring ext(path.substr(path.size() - 4, path.size())); - wstr_tolower(ext); - if (ext.compare(L".exe") == 0 || ext.compare(L".dll") == 0) - { - return LoadFromEmbeddedManifest(path.c_str()); - } - else - { - return LoadFromSxSManifest(path.c_str()); - } -} - -HRESULT LoadFromSxSManifest(PCWSTR path) -{ - return WinRTLoadComponentFromFilePath(path); -} - -HRESULT LoadFromEmbeddedManifest(PCWSTR path) -{ - wil::unique_hmodule handle(LoadLibraryExW(path, nullptr, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !handle); - - // Try both just to be on the safe side - HRSRC hrsc = FindResourceW(handle.get(), MAKEINTRESOURCEW(1), RT_MANIFEST); - if (!hrsc) - { - hrsc = FindResourceW(handle.get(), MAKEINTRESOURCEW(2), RT_MANIFEST); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !hrsc); - } - HGLOBAL embeddedManifest = LoadResource(handle.get(), hrsc); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !embeddedManifest); - - DWORD length = SizeofResource(handle.get(), hrsc); - void* data = LockResource(embeddedManifest); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !data); - - return WinRTLoadComponentFromString(std::string_view((char*)data, length)); -} - -HRESULT WinRTLoadComponentFromFilePath(PCWSTR manifestPath) -{ - ComPtr<IStream> fileStream; - RETURN_IF_FAILED(SHCreateStreamOnFileEx(manifestPath, STGM_READ, FILE_ATTRIBUTE_NORMAL, false, nullptr, &fileStream)); - try - { - return ParseRootManifestFromXmlReaderInput(fileStream.Get()); - } - catch(...) - { - LOG_CAUGHT_EXCEPTION(); - return ERROR_SXS_MANIFEST_PARSE_ERROR; - } -} - -HRESULT WinRTLoadComponentFromString(std::string_view xmlStringValue) -{ - ComPtr<IStream> xmlStream = nullptr; - xmlStream.Attach(SHCreateMemStream(reinterpret_cast<const BYTE*>(xmlStringValue.data()), static_cast<UINT>(strlen(xmlStringValue.data()) * sizeof(CHAR)))); - RETURN_HR_IF_NULL(E_OUTOFMEMORY, xmlStream); - ComPtr<IXmlReaderInput> xmlReaderInput; - RETURN_IF_FAILED(CreateXmlReaderInputWithEncodingName(xmlStream.Get(), nullptr, L"utf-8", FALSE, nullptr, &xmlReaderInput)); - try - { - return ParseRootManifestFromXmlReaderInput(xmlReaderInput.Get()); - } - catch (...) - { - LOG_CAUGHT_EXCEPTION(); - return ERROR_SXS_MANIFEST_PARSE_ERROR; - } -} - -HRESULT ParseRootManifestFromXmlReaderInput(IUnknown* input) -{ - XmlNodeType nodeType; - PCWSTR localName = nullptr; - auto locale = _create_locale(LC_ALL, "C"); - ComPtr<IXmlReader> xmlReader; - RETURN_IF_FAILED(CreateXmlReader(__uuidof(IXmlReader), (void**)&xmlReader, nullptr)); - RETURN_IF_FAILED(xmlReader->SetInput(input)); - while (S_OK == xmlReader->Read(&nodeType)) - { - if (nodeType == XmlNodeType_Element) - { - RETURN_IF_FAILED((xmlReader->GetLocalName(&localName, nullptr))); - - if (_wcsicmp_l(localName, L"file", locale) == 0) - { - RETURN_IF_FAILED(ParseFileTag(xmlReader)); - } - } - } - - return S_OK; -} - -HRESULT ParseFileTag(ComPtr<IXmlReader> xmlReader) -{ - HRESULT hr = S_OK; - XmlNodeType nodeType; - PCWSTR localName = nullptr; - PCWSTR fileName = nullptr; - hr = xmlReader->MoveToAttributeByName(L"name", nullptr); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR), hr != S_OK); - RETURN_IF_FAILED(xmlReader->GetValue(&fileName, nullptr)); - RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR), fileName == nullptr || !fileName[0]); - auto locale = _create_locale(LC_ALL, "C"); - while (S_OK == xmlReader->Read(&nodeType)) - { - if (nodeType == XmlNodeType_Element) - { - RETURN_IF_FAILED(xmlReader->GetLocalName(&localName, nullptr)); - if (localName != nullptr && _wcsicmp_l(localName, L"activatableClass", locale) == 0) - { - RETURN_IF_FAILED(ParseActivatableClassTag(xmlReader, fileName)); - } - } - else if (nodeType == XmlNodeType_EndElement) - { - RETURN_IF_FAILED(xmlReader->GetLocalName(&localName, nullptr)); - RETURN_HR_IF(S_OK, localName != nullptr && _wcsicmp_l(localName, L"file", locale) == 0); - } - } - return S_OK; -} - -HRESULT ParseActivatableClassTag(ComPtr<IXmlReader> xmlReader, PCWSTR fileName) -{ - PCWSTR localName = nullptr; - auto locale = _create_locale(LC_ALL, "C"); - auto this_component = make_shared<component>(); - this_component->module_name = fileName; - HRESULT hr = xmlReader->MoveToFirstAttribute(); - // Using this pattern intead of calling multiple MoveToAttributeByName improves performance - const WCHAR* activatableClass = nullptr; - const WCHAR* threadingModel = nullptr; - const WCHAR* xmlns = nullptr; - if (S_FALSE == hr) - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - else - { - while (TRUE) - { - const WCHAR* pwszLocalName; - const WCHAR* pwszValue; - if (FAILED_LOG(xmlReader->GetLocalName(&pwszLocalName, NULL))) - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - if (FAILED_LOG(xmlReader->GetValue(&pwszValue, NULL))) - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - if (pwszLocalName != nullptr) - { - if (_wcsicmp_l(L"threadingModel", pwszLocalName, locale) == 0) - { - threadingModel = pwszValue; - } - else if (_wcsicmp_l(L"name", pwszLocalName, locale) == 0) - { - activatableClass = pwszValue; - } - else if (_wcsicmp_l(L"xmlns", pwszLocalName, locale) == 0) - { - xmlns = pwszValue; - } - } - if (xmlReader->MoveToNextAttribute() != S_OK) - { - break; - } - } - } - if (threadingModel == nullptr) - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - if (_wcsicmp_l(L"sta", threadingModel, locale) == 0) - { - this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_STA; - } - else if (_wcsicmp_l(L"mta", threadingModel, locale) == 0) - { - this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_MTA; - } - else if (_wcsicmp_l(L"both", threadingModel, locale) == 0) - { - this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH; - } - else - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - - if (activatableClass == nullptr || !activatableClass[0]) - { - return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); - } - this_component->xmlns = xmlns; // Should we care if this value is blank or missing? - // Check for duplicate activatable classes - auto component_iter = g_types.find(activatableClass); - if (component_iter != g_types.end()) - { - return HRESULT_FROM_WIN32(ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS); - } - g_types[activatableClass] = this_component; - return S_OK; -} - -HRESULT WinRTGetThreadingModel(HSTRING activatableClassId, ABI::Windows::Foundation::ThreadingType* threading_model) -{ - auto raw_class_name = WindowsGetStringRawBuffer(activatableClassId, nullptr); - auto component_iter = g_types.find(raw_class_name); - if (component_iter != g_types.end()) - { - *threading_model = component_iter->second->threading_model; - return S_OK; - } - return REGDB_E_CLASSNOTREG; -} - -HRESULT WinRTGetActivationFactory( - HSTRING activatableClassId, - REFIID iid, - void** factory) -{ - auto raw_class_name = WindowsGetStringRawBuffer(activatableClassId, nullptr); - auto component_iter = g_types.find(raw_class_name); - if (component_iter != g_types.end()) - { - return component_iter->second->GetActivationFactory(activatableClassId, iid, factory); - } - return REGDB_E_CLASSNOTREG; -} - -HRESULT WinRTGetMetadataFile( - const HSTRING name, - IMetaDataDispenserEx* metaDataDispenser, - HSTRING* metaDataFilePath, - IMetaDataImport2** metaDataImport, - mdTypeDef* typeDefToken) -{ - wchar_t folderPrefix[9]; - PCWSTR pszFullName = WindowsGetStringRawBuffer(name, nullptr); - HRESULT hr = StringCchCopyW(folderPrefix, _countof(folderPrefix), pszFullName); - if (hr != S_OK && hr != STRSAFE_E_INSUFFICIENT_BUFFER) - { - return hr; - } - if (CompareStringOrdinal(folderPrefix, -1, L"Windows.", -1, false) == CSTR_EQUAL) - { - return RO_E_METADATA_NAME_NOT_FOUND; - } - - if (metaDataFilePath != nullptr) - { - *metaDataFilePath = nullptr; - } - if (metaDataImport != nullptr) - { - *metaDataImport = nullptr; - } - if (typeDefToken != nullptr) - { - *typeDefToken = mdTypeDefNil; - } - - if (((metaDataImport == nullptr) && (typeDefToken != nullptr)) || - ((metaDataImport != nullptr) && (typeDefToken == nullptr))) - { - return E_INVALIDARG; - } - - ComPtr<IMetaDataDispenserEx> spMetaDataDispenser; - // The API uses the caller's passed-in metadata dispenser. If null, it - // will create an instance of the metadata reader to dispense metadata files. - if (metaDataDispenser == nullptr) - { - RETURN_IF_FAILED(CoCreateInstance(CLSID_CorMetaDataDispenser, - nullptr, - CLSCTX_INPROC, - IID_IMetaDataDispenser, - &spMetaDataDispenser)); - { - variant_t version{ L"WindowsRuntime 1.4" }; - RETURN_IF_FAILED(spMetaDataDispenser->SetOption(MetaDataRuntimeVersion, &version.GetVARIANT())); - } - } - return UndockedRegFreeWinRT::ResolveThirdPartyType( - spMetaDataDispenser.Get(), - pszFullName, - metaDataFilePath, - metaDataImport, - typeDefToken); -}- \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.cpp b/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.cpp @@ -1,735 +0,0 @@ -#pragma once - -#include "TypeResolution.h" -#include "catalog.h" - -#define METADATA_FILE_EXTENSION L"winmd" -#define METADATA_FILE_PATH_FORMAT L"%s%s." METADATA_FILE_EXTENSION -#define METADATA_FILE_SEARCH_FORMAT L"%s%s*." METADATA_FILE_EXTENSION - -namespace UndockedRegFreeWinRT -{ - static const UINT32 g_uiMaxTypeName = 512; - static wil::unique_process_heap_string g_cachedProcessExeDir; - static wil::unique_process_heap_string g_cachedProcessDllDir; - - BOOL CALLBACK GetProcessExeDirInitOnceCallback( - _Inout_ PINIT_ONCE, - _Inout_opt_ PVOID, - _Out_opt_ PVOID*) - { - wil::unique_process_heap_string localExePath; - HRESULT hr = wil::GetModuleFileNameW(nullptr, localExePath); - if (FAILED_LOG(hr)) - { - SetLastError(hr); - return FALSE; - } - - // Modify the retrieved string to truncate the actual exe name and leave the containing directory path. This API - // expects a buffer size including the terminating null, so add 1 to the string length. - hr = PathCchRemoveFileSpec(localExePath.get(), wcslen(localExePath.get()) + 1); - if (FAILED_LOG(hr)) - { - SetLastError(hr); - return FALSE; - } - - g_cachedProcessExeDir = std::move(localExePath); - return TRUE; - } - - // Returned string is cached globally, and should not be freed by the caller. - HRESULT GetProcessExeDir(PCWSTR* path) - { - *path = nullptr; - static INIT_ONCE ProcessExeDirInitOnce = INIT_ONCE_STATIC_INIT; - - RETURN_IF_WIN32_BOOL_FALSE(InitOnceExecuteOnce(&ProcessExeDirInitOnce, GetProcessExeDirInitOnceCallback, nullptr, nullptr)); - - // The cache has been successfully populated by the InitOnce, so we can just use it directly. - *path = g_cachedProcessExeDir.get(); - return S_OK; - } - - BOOL CALLBACK GetProcessDllDirInitOnceCallback( - _Inout_ PINIT_ONCE, - _Inout_opt_ PVOID, - _Out_opt_ PVOID*) - { - wil::unique_process_heap_string localDllPath; - HMODULE hm = NULL; - - // Get handle to the module that contains this function (this one). - if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | - GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (LPCWSTR)&GetProcessDllDirInitOnceCallback, &hm) == 0) - { - // Error has already been set (GetLastError). - return FALSE; - } - - // Get the path for this module. - HRESULT hr = wil::GetModuleFileNameW(hm, localDllPath); - if (FAILED_LOG(hr)) - { - SetLastError(hr); - return FALSE; - } - - // Modify the retrieved string to truncate the actual dll name and leave the containing directory path. This API - // expects a buffer size including the terminating null, so add 1 to the string length. - hr = PathCchRemoveFileSpec(localDllPath.get(), wcslen(localDllPath.get()) + 1); - if (FAILED_LOG(hr)) - { - SetLastError(hr); - return FALSE; - } - - g_cachedProcessDllDir = std::move(localDllPath); - return TRUE; - } - - // Returned string is cached globally, and should not be freed by the caller. - HRESULT GetProcessDllDir(PCWSTR* path) - { - *path = nullptr; - static INIT_ONCE ProcessDllDirInitOnce = INIT_ONCE_STATIC_INIT; - - RETURN_IF_WIN32_BOOL_FALSE(InitOnceExecuteOnce(&ProcessDllDirInitOnce, GetProcessDllDirInitOnceCallback, nullptr, nullptr)); - - // The cache has been successfully populated by the InitOnce, so we can just use it directly. - *path = g_cachedProcessDllDir.get(); - return S_OK; - } - - HRESULT FindTypeInMetaDataFile( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszFullName, - _In_ PCWSTR pszCandidateFilePath, - _In_ TYPE_RESOLUTION_OPTIONS resolutionOptions, - _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, - _Out_opt_ mdTypeDef* pmdTypeDef) - { - HRESULT hr = S_OK; - Microsoft::WRL::ComPtr<IMetaDataImport2> spMetaDataImport; - MetaDataImportersLRUCache* pMetaDataImporterCache = MetaDataImportersLRUCache::GetMetaDataImportersLRUCacheInstance(); - if (pMetaDataImporterCache != nullptr) - { - hr = pMetaDataImporterCache->GetMetaDataImporter( - pMetaDataDispenser, - pszCandidateFilePath, - &spMetaDataImport); - } - else - { - hr = E_OUTOFMEMORY; - } - - if (SUCCEEDED(hr)) - { - const size_t cFullName = wcslen(pszFullName); - wchar_t pszRetrievedName[g_uiMaxTypeName]; - HCORENUM hEnum = nullptr; - mdTypeDef rgTypeDefs[32]; - ULONG cTypeDefs; - DWORD dwTypeDefProps; - hr = RO_E_METADATA_NAME_NOT_FOUND; - - if (TRO_RESOLVE_TYPE & resolutionOptions) - { - hr = spMetaDataImport->FindTypeDefByName(pszFullName, mdTokenNil, &rgTypeDefs[0]); - if (SUCCEEDED(hr)) - { - // Check to confirm that the type we just found is a - // winrt type. If it is, we're good, otherwise we - // want to fail with RO_E_INVALID_METADATA_FILE. - hr = spMetaDataImport->GetTypeDefProps(rgTypeDefs[0], nullptr, 0, nullptr, &dwTypeDefProps, nullptr); - if (SUCCEEDED(hr)) - { - // If we found the type but it's not a winrt type, - // it's an error. - // - // If the type is public, than the metadata file - // is corrupt (all public types in a winrt file - // must be tdWindowsRuntime). If the type is - // private, then we just want to report that the - // type wasn't found. - if (!IsTdWindowsRuntime(dwTypeDefProps)) - { - if (IsTdPublic(dwTypeDefProps)) - { - hr = RO_E_INVALID_METADATA_FILE; - } - else - { - hr = RO_E_METADATA_NAME_NOT_FOUND; - } - } - } - else - { - hr = RO_E_INVALID_METADATA_FILE; - } - if (SUCCEEDED(hr)) - { - if (pmdTypeDef != nullptr) - { - *pmdTypeDef = rgTypeDefs[0]; - } - if (ppMetaDataImport != nullptr) - { - *ppMetaDataImport = spMetaDataImport.Detach(); - } - } - } - else if (hr == CLDB_E_RECORD_NOTFOUND) - { - hr = RO_E_METADATA_NAME_NOT_FOUND; - } - } - - if ((hr == RO_E_METADATA_NAME_NOT_FOUND) && - (TRO_RESOLVE_NAMESPACE & resolutionOptions)) - { - // Check whether the name is a namespace rather than a type. - do - { - hr = spMetaDataImport->EnumTypeDefs( - &hEnum, - rgTypeDefs, - ARRAYSIZE(rgTypeDefs), - &cTypeDefs); - - if (hr == S_OK) - { - for (UINT32 iTokenIndex = 0; iTokenIndex < cTypeDefs; ++iTokenIndex) - { - hr = spMetaDataImport->GetTypeDefProps( - rgTypeDefs[iTokenIndex], - pszRetrievedName, - ARRAYSIZE(pszRetrievedName), - nullptr, - &dwTypeDefProps, - nullptr); - - if (FAILED(hr)) - { - break; - } - - hr = RO_E_METADATA_NAME_NOT_FOUND; - - // Only consider windows runtime types when - // trying to determine if the name is a - // namespace. - if (IsTdWindowsRuntime(dwTypeDefProps) && (wcslen(pszRetrievedName) > cFullName)) - { - if ((wcsncmp(pszRetrievedName, pszFullName, cFullName) == 0) && - (pszRetrievedName[cFullName] == L'.')) - { - hr = RO_E_METADATA_NAME_IS_NAMESPACE; - break; - } - } - } - } - } while (hr == RO_E_METADATA_NAME_NOT_FOUND); - - // There were no more tokens to enumerate, but the type was still not found. - if (hr == S_FALSE) - { - hr = RO_E_METADATA_NAME_NOT_FOUND; - } - - if (hEnum != nullptr) - { - spMetaDataImport->CloseEnum(hEnum); - hEnum = nullptr; - } - } - } - return hr; - } - - HRESULT FindTypeInDirectory( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszFullName, - _In_ PCWSTR pszDirectoryPath, - _Out_opt_ HSTRING* phstrMetaDataFilePath, - _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, - _Out_opt_ mdTypeDef* pmdTypeDef) - { - HRESULT hr; - - wchar_t szCandidateFilePath[MAX_PATH + 1] = { 0 }; - wchar_t szCandidateFileName[MAX_PATH + 1] = { 0 }; - PWSTR pszLastDot; - - hr = StringCchCopy(szCandidateFileName, ARRAYSIZE(szCandidateFileName), pszFullName); - - if (SUCCEEDED(hr)) - { - // To resolve type SomeNamespace.B.C, first check if SomeNamespace.B.C is a type or - // a namespace in the metadata files in the directory in this order: - // 1. SomeNamespace.B.C.WinMD - // 2. SomeNamespace.B.WinMD - // 3. SomeNamespace.WinMD - do - { - pszLastDot = nullptr; - - hr = StringCchPrintfEx( - szCandidateFilePath, - ARRAYSIZE(szCandidateFilePath), - nullptr, - nullptr, - 0, - METADATA_FILE_PATH_FORMAT, - pszDirectoryPath, - szCandidateFileName); - - if (SUCCEEDED(hr)) - { - hr = FindTypeInMetaDataFile( - pMetaDataDispenser, - pszFullName, - szCandidateFilePath, - TRO_RESOLVE_TYPE_AND_NAMESPACE, - ppMetaDataImport, - pmdTypeDef); - - if (SUCCEEDED(hr)) - { - if (phstrMetaDataFilePath != nullptr) - { - hr = WindowsCreateString( - szCandidateFilePath, - static_cast<UINT32>(wcslen(szCandidateFilePath)), - phstrMetaDataFilePath); - } - break; - } - } - - hr = RO_E_METADATA_NAME_NOT_FOUND; - pszLastDot = wcsrchr(szCandidateFileName, '.'); - - if (pszLastDot != nullptr) - { - *pszLastDot = '\0'; - } - } while (pszLastDot != nullptr); - - // If name was not found when searching in the "upward direction", then - // the name might be a namespace name in a down-level file. - if (hr == RO_E_METADATA_NAME_NOT_FOUND) - { - wchar_t szFilePathSearchTemplate[MAX_PATH + 1] = { 0 }; - - hr = StringCchPrintfEx( - szFilePathSearchTemplate, - ARRAYSIZE(szFilePathSearchTemplate), - nullptr, - nullptr, - 0, - METADATA_FILE_SEARCH_FORMAT, - pszDirectoryPath, - pszFullName); - - if (SUCCEEDED(hr)) - { - WIN32_FIND_DATA fd; - HANDLE hFindFile; - - // Search in all files in the directory whose name begin with the input string. - hFindFile = FindFirstFile(szFilePathSearchTemplate, &fd); - - if (hFindFile != INVALID_HANDLE_VALUE) - { - PWSTR pszFilePathPart; - size_t cchRemaining; - - do - { - if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - continue; - } - - pszFilePathPart = szCandidateFilePath; - cchRemaining = ARRAYSIZE(szCandidateFilePath); - hr = StringCchCopyEx( - pszFilePathPart, - cchRemaining, - pszDirectoryPath, - &pszFilePathPart, - &cchRemaining, - 0); - - if (SUCCEEDED(hr)) - { - hr = StringCchCopyEx( - pszFilePathPart, - cchRemaining, - fd.cFileName, - &pszFilePathPart, - &cchRemaining, - 0); - } - - if (SUCCEEDED(hr)) - { - hr = FindTypeInMetaDataFile( - pMetaDataDispenser, - pszFullName, - szCandidateFilePath, - TRO_RESOLVE_NAMESPACE, - ppMetaDataImport, - pmdTypeDef); - - if (hr == S_OK) - { - hr = E_UNEXPECTED; - break; - } - - if (hr == RO_E_METADATA_NAME_IS_NAMESPACE) - { - break; - } - } - } while (FindNextFile(hFindFile, &fd)); - - FindClose(hFindFile); - } - else - { - hr = RO_E_METADATA_NAME_NOT_FOUND; - } - } - } - } - - if (hr == STRSAFE_E_INSUFFICIENT_BUFFER) - { - hr = RO_E_METADATA_NAME_NOT_FOUND; - } - - return hr; - } - - HRESULT FindTypeInDirectoryWithNormalization( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszFullName, - _In_ PCWSTR pszDirectoryPath, - _Out_opt_ HSTRING* phstrMetaDataFilePath, - _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, - _Out_opt_ mdTypeDef* pmdTypeDef) - { - wchar_t pszPackagePath[MAX_PATH + 1]; - PWSTR pszPackagePathWritePtr = pszPackagePath; - size_t cchPackagePathRemaining = ARRAYSIZE(pszPackagePath); - - HRESULT hr = StringCchCopyEx( - pszPackagePath, - ARRAYSIZE(pszPackagePath), - pszDirectoryPath, - &pszPackagePathWritePtr, - &cchPackagePathRemaining, - 0); - - if (SUCCEEDED(hr)) - { - // If the path is not terminated by a backslash, then append one. - if (pszPackagePath[ARRAYSIZE(pszPackagePath) - cchPackagePathRemaining - 1] != L'\\') - { - hr = StringCchCopyEx( - pszPackagePathWritePtr, - cchPackagePathRemaining, - L"\\", - &pszPackagePathWritePtr, - &cchPackagePathRemaining, - 0); - } - } - - if (SUCCEEDED(hr)) - { - hr = FindTypeInDirectory( - pMetaDataDispenser, - pszFullName, - pszPackagePath, - phstrMetaDataFilePath, - ppMetaDataImport, - pmdTypeDef); - } - - return hr; - } - - HRESULT ResolveThirdPartyType( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszFullName, - _Out_opt_ HSTRING* phstrMetaDataFilePath, - _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, - _Out_opt_ mdTypeDef* pmdTypeDef) - { - HRESULT hr = S_OK; - UINT32 dwPackagesCount = 0; - UINT32 dwBufferLength = 0; - - const UINT32 filter = PACKAGE_FILTER_HEAD | PACKAGE_FILTER_DIRECT | PACKAGE_FILTER_IS_IN_RELATED_SET; - hr = HRESULT_FROM_WIN32(GetCurrentPackageInfo(filter, &dwBufferLength, nullptr, &dwPackagesCount)); - // Only find the type if the it is a unpacakged app. Packaged apps can have their exe on their package graph, - // which will allow type resolution against adjacent WinMDs. - if (hr == HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE)) - { - PCWSTR exeDir = nullptr; // Never freed; owned by process global. - RETURN_IF_FAILED(GetProcessExeDir(&exeDir)); - - hr = FindTypeInDirectoryWithNormalization( - pMetaDataDispenser, - pszFullName, - exeDir, - phstrMetaDataFilePath, - ppMetaDataImport, - pmdTypeDef); - - if (hr == RO_E_METADATA_NAME_NOT_FOUND) - { - PCWSTR dllDir = nullptr; // Never freed; owned by process global. - RETURN_IF_FAILED(GetProcessDllDir(&dllDir)); - - hr = FindTypeInDirectoryWithNormalization( - pMetaDataDispenser, - pszFullName, - dllDir, - phstrMetaDataFilePath, - ppMetaDataImport, - pmdTypeDef); - - if (hr == RO_E_METADATA_NAME_NOT_FOUND) - { - // For compatibility purposes, if we fail to find the type in the unpackaged location, we should return - // HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE) instead of a "not found" error. This preserves the - // behavior that existed before unpackaged type resolution was implemented. - hr = HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE); - } - } - return hr; - } - else - { - return RO_E_METADATA_NAME_NOT_FOUND; - } - } - - // - // MetaDataImportersLRUCache implementation - // - INIT_ONCE MetaDataImportersLRUCache::s_initOnce = INIT_ONCE_STATIC_INIT; - MetaDataImportersLRUCache* MetaDataImportersLRUCache::s_pMetaDataImportersLRUCacheInstance = nullptr; - - MetaDataImportersLRUCache* MetaDataImportersLRUCache::GetMetaDataImportersLRUCacheInstance() - { - BOOL fInitializationSucceeded = InitOnceExecuteOnce( - &s_initOnce, - ConstructLRUCacheIfNecessary, - nullptr, - nullptr); - - UNREFERENCED_PARAMETER(fInitializationSucceeded); - - return s_pMetaDataImportersLRUCacheInstance; - } - - // Called via InitOnceExecuteOnce. - BOOL CALLBACK MetaDataImportersLRUCache::ConstructLRUCacheIfNecessary( - PINIT_ONCE /*initOnce*/, - PVOID /*parameter*/, - PVOID* /*context*/) - { - HRESULT hr = S_OK; - - if (s_pMetaDataImportersLRUCacheInstance == nullptr) - { - s_pMetaDataImportersLRUCacheInstance = new MetaDataImportersLRUCache(); - - if (s_pMetaDataImportersLRUCacheInstance == nullptr) - { - hr = E_OUTOFMEMORY; - } - } - - return SUCCEEDED(hr); - } - - HRESULT MetaDataImportersLRUCache::GetMetaDataImporter( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszCandidateFilePath, - _Outptr_opt_ IMetaDataImport2** ppMetaDataImporter) - { - if (ppMetaDataImporter == nullptr) - { - return ERROR_BAD_ARGUMENTS; - } - - HRESULT hr = S_OK; - *ppMetaDataImporter = nullptr; - - EnterCriticalSection(&_csCacheLock); - - if (IsFilePathCached(pszCandidateFilePath)) - { - // Get metadata importer from cache. - *ppMetaDataImporter = _metadataImportersMap[pszCandidateFilePath]; - IMetaDataImport2* value = *ppMetaDataImporter; - if (value != nullptr) - { - value->AddRef(); - } - } - else - { - // Importer was not found in cache. - hr = GetNewMetaDataImporter( - pMetaDataDispenser, - pszCandidateFilePath, - ppMetaDataImporter); - } - - LeaveCriticalSection(&_csCacheLock); - - return hr; - } - - HRESULT MetaDataImportersLRUCache::GetNewMetaDataImporter( - _In_ IMetaDataDispenserEx* pMetaDataDispenser, - _In_ PCWSTR pszCandidateFilePath, - _Outptr_opt_ IMetaDataImport2** ppMetaDataImporter) - { - if (ppMetaDataImporter == nullptr) - { - return ERROR_BAD_ARGUMENTS; - } - - HRESULT hr; - - hr = pMetaDataDispenser->OpenScope( - pszCandidateFilePath, - ofReadOnly, - IID_IMetaDataImport2, - reinterpret_cast<IUnknown**>(ppMetaDataImporter)); - - if (SUCCEEDED(hr)) - { - _metadataImportersMap.emplace( - pszCandidateFilePath, - *ppMetaDataImporter); - IMetaDataImport2* value = *ppMetaDataImporter; - if (value != nullptr) - { - value->AddRef(); - } - } - - if (SUCCEEDED(hr)) - { - hr = AddNewFilePathToList(pszCandidateFilePath); - } - - return hr; - } - - HRESULT MetaDataImportersLRUCache::AddNewFilePathToList(PCWSTR pszFilePath) - { - HRESULT hr = RemoveLeastRecentlyUsedItemIfListIsFull(); - - if (SUCCEEDED(hr)) - { - // Make room for new element. - for (int i = g_dwMetaDataImportersLRUCacheSize - 2; i >= 0; i--) - { - _arFilePaths[i + 1] = _arFilePaths[i]; - } - - _arFilePaths[0] = AllocateAndCopyString(pszFilePath); - - if (_arFilePaths[0] == nullptr) - { - hr = E_OUTOFMEMORY; - } - } - - return hr; - } - - bool MetaDataImportersLRUCache::IsFilePathCached(PCWSTR pszFilePath) - { - int filePathIndex = GetFilePathIndex(pszFilePath); - - if (filePathIndex != -1) - { - MoveElementToFrontOfList(filePathIndex); - return true; - } - else - { - return false; - } - } - - int MetaDataImportersLRUCache::GetFilePathIndex(PCWSTR pszFilePath) - { - int filePathIndex = -1; - - for (int i = 0; (i < g_dwMetaDataImportersLRUCacheSize) && (_arFilePaths[i] != nullptr); i++) - { - if (wcscmp(pszFilePath, _arFilePaths[i]) == 0) - { - filePathIndex = i; - break; - } - } - - return filePathIndex; - } - - void MetaDataImportersLRUCache::MoveElementToFrontOfList(int elementIndex) - { - PWSTR pszFoundFilePath = _arFilePaths[elementIndex]; - - for (int i = elementIndex - 1; i >= 0; i--) - { - _arFilePaths[i + 1] = _arFilePaths[i]; - } - - _arFilePaths[0] = pszFoundFilePath; - } - - HRESULT MetaDataImportersLRUCache::RemoveLeastRecentlyUsedItemIfListIsFull() - { - HRESULT hr = S_OK; - PWSTR pszLastFilePathInList = _arFilePaths[g_dwMetaDataImportersLRUCacheSize - 1]; - - if (pszLastFilePathInList != nullptr) - { - IMetaDataImport2* value = _metadataImportersMap[pszLastFilePathInList]; - if (value != nullptr) - { - value->Release(); - value = nullptr; - } - if (!_metadataImportersMap.erase(pszLastFilePathInList)) - { - hr = E_UNEXPECTED; - } - - delete[] pszLastFilePathInList; - _arFilePaths[g_dwMetaDataImportersLRUCacheSize - 1] = nullptr; - } - - return hr; - } -} diff --git a/src/UndockedRegFreeWinRT/detours/detours.vcxproj b/src/UndockedRegFreeWinRT/detours/detours.vcxproj @@ -1,181 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ClCompile Include="creatwth.cpp" /> - <ClCompile Include="detours.cpp" /> - <ClCompile Include="disasm.cpp" /> - <ClCompile Include="disolarm.cpp" /> - <ClCompile Include="disolarm64.cpp" /> - <ClCompile Include="disolia64.cpp" /> - <ClCompile Include="disolx64.cpp" /> - <ClCompile Include="disolx86.cpp" /> - <ClCompile Include="image.cpp" /> - <ClCompile Include="modules.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="detours.h" /> - <ClInclude Include="detver.h" /> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>16.0</VCProjectVersion> - <ProjectGuid>{787EC629-C0FB-4BA9-9746-4A82CD06B73E}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>detours</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - <ProjectName>Detours</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <IntDir>$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>- \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.cs b/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.cs @@ -1,15 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Microsoft.Windows -{ - public static class UndockedRegFreeWinrt - { - [DllImport("winrtact.dll", PreserveSig=false)] - static extern void winrtact_Initialize(); - - public static void Initialize() - { - winrtact_Initialize(); - } - } -}- \ No newline at end of file diff --git a/src/Xlang/README.md b/src/Xlang/README.md @@ -0,0 +1,20 @@ +## Microsoft/Xlang/UndockedRegFreeWinRT + +Do not change code under the UndockedRegFreeWinRT directory; it contains Microsoft/Xlang/UndockedRegFreeWinRT source code. + +It is created using git subtree command and points to this specific commit [cfe510d0d2b07484fea2c6d77163de017738c100]: + + git subtree add --prefix=src/Xlang/UndockedRegFreeWinRT https://github.com/microsoft/xlang cfe510d0d2b07484fea2c6d77163de017738c100 --squash + +Any future PR updates to this subtree should not be squashed. + +The default project files are used to make the UndockedRegFreeWinRT project compile as part of the WinGet solution: + + "UndockedRegFreeWinRT\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj" + "UndockedRegFreeWinRT\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj.filters" + +#### Steps used to create the VS project files. + +1. Add UndockedRegFreeWinRT project files to WinGet solution. +2. Remove code and files not needed by WinGet project. Basically removing everything except what is contained in UndockedRegFreeWinRT folder. +3. Modify the vcxproj file to follow settings from other project files in the WinGet solution.+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/Catch/catch.hpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Catch/catch.hpp diff --git a/src/UndockedRegFreeWinRT/Directory.Build.props b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Directory.Build.props diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/EmbeddedManifestManagedTest.csproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/EmbeddedManifestManagedTest.csproj diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/EmbeddedManifestManagedTest.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/EmbeddedManifestManagedTest.manifest diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/Program.cs b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestManagedTest/Program.cs diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.exe.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.exe.manifest diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.vcxproj diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/EmbeddedManifestTest.vcxproj.filters diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/directory.build.props b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/directory.build.props diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/embedded_manifest_test.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/embedded_manifest_test.cpp diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/main.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/main.cpp diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/packages.config diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/pch.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/pch.cpp diff --git a/src/UndockedRegFreeWinRT/EmbeddedManifestTest/pch.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedManifestTest/pch.h diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.cpp diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.h diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.idl b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Class.idl diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.def b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.def diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.manifest diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.vcxproj diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/EmbeddedTestComponent.vcxproj.filters diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/PropertySheet.props b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/PropertySheet.props diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Resource.rc b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/Resource.rc diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/packages.config diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/pch.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/pch.cpp diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/pch.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/pch.h diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/readme.txt b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/readme.txt diff --git a/src/UndockedRegFreeWinRT/EmbeddedTestComponent/resource.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/EmbeddedTestComponent/resource.h diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.cpp @@ -0,0 +1,135 @@ +#include <iostream> +#include "..\UndockedRegFreeWinRT\catalog.h" +#include "..\UndockedRegFreeWinRT\catalog.cpp" +#include "..\UndockedRegFreeWinRT\typeresolution.h" +#include "..\UndockedRegFreeWinRT\typeresolution.cpp" +#include "pch.h" + +TEST_CASE("Manifest Parser") +{ + g_types.clear(); + PCWSTR exeFilePath = nullptr; + UndockedRegFreeWinRT::GetProcessExeDir(&exeFilePath); + SECTION("Multiple activatableClass") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\winrtActivation.dll1.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == S_OK); + std::wstring moduleName = L"RegFreeWinrtInprocComponents.1.dll"; + REQUIRE(g_types.size() == 4); + auto component_iter = g_types.find(L"RegFreeWinrt.1.threading_both"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH); + + component_iter = g_types.find(L"RegFreeWinrt.1.threading_mta"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_MTA); + + component_iter = g_types.find(L"RegFreeWinrt.1.threading_sta"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_STA); + + component_iter = g_types.find(L"RegFreeWinrt.SharedName.threading_both"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + REQUIRE(component_iter->second->threading_model == ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH); + } + + SECTION("Multiple file") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.Positive.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == S_OK); + std::wstring moduleName = L"FakeDllName.dll"; + REQUIRE(g_types.size() == 6); + auto component_iter = g_types.find(L"FakeActivatableClass"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + + component_iter = g_types.find(L"FakeActivatableClass2"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + + component_iter = g_types.find(L"FakeActivatableClass3"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + + component_iter = g_types.find(L"FakeActivatableClass4"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + + moduleName = L"OtherFakeDllName.dll"; + component_iter = g_types.find(L"OtherFakeActivatableClass"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + + component_iter = g_types.find(L"OtherFakeActivatableClass2"); + REQUIRE(component_iter != g_types.end()); + REQUIRE(component_iter->second->module_name == moduleName); + } + + //Failures + SECTION("Negative Missing ThreadingModel") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingThreadingModel.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Negative Missing Name") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingName.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Negative Invalid ThreadingModel") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.invalidThreadingModel.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Negative Duplicate Acid") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.duplicateAcid.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS)); + } + + SECTION("Negative Blank Name") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.blankName.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Negative Blank FileName") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.blankFileName.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Negative Missing FileName") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.negative.missingFileName.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR)); + } + + SECTION("Large file") + { + std::wstring manifest = std::wstring(exeFilePath) + L"\\basicParse.largefile.manifest"; + REQUIRE(LoadManifestFromPath(manifest.c_str()) == S_OK); + + // We had a bug where we were using a variable after an XML buffer had been invalidated by another call + // to Read(), but it didn't manifest until the node count was high enough. The result was that the values + // we got for "module_name" were pointing to the wrong string data, so here we validate that the entries + // do actually look like DLLs -- they end with ".dll", they are short, and they don't contain spaces. + for (auto type : g_types) + { + const std::wstring& name = type.second->module_name; + + REQUIRE(wcscmp(L".dll", name.substr(name.size() - 4).c_str()) == 0); + REQUIRE(name.size() < 50); + REQUIRE(name.find(' ') == wstring::npos); + + } + + } +} diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj @@ -0,0 +1,224 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>16.0</VCProjectVersion> + <ProjectGuid>{7DC750DE-F43C-4A3B-9FBF-8D964458829A}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>ManifestParserTest</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="main.cpp" /> + <ClCompile Include="ManifestParserTest.cpp" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxproj"> + <Project>{31ed69a8-5310-45a9-953f-56c351d2c3e1}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ContentWithTargetPath Include="basicParse.negative.blankName.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.blankName.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.duplicateAcid.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.duplicateAcid.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.invalidThreadingModel.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.invalidThreadingModel.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.missingName.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.missingName.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.missingThreadingModel.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.missingThreadingModel.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.positive.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.positive.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="winrtActivation.dll1.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>winrtActivation.dll1.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.missingFileName.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.missingFileName.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.negative.blankFileName.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.negative.blankFileName.manifest</TargetPath> + </ContentWithTargetPath> + <ContentWithTargetPath Include="basicParse.largefile.manifest"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <TargetPath>basicParse.largefile.manifest</TargetPath> + </ContentWithTargetPath> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="pch.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>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}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.ImplementationLibrary.1.0.200902.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> + </Target> +</Project>+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/ManifestParserTest.vcxproj.filters diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.largeFile.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.largeFile.manifest @@ -0,0 +1,1527 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> +<assemblyIdentity version="1.0.0.0" name="gemini-bridge-test.app"> +</assemblyIdentity> +<asmv3:file name="Microsoft.ApplicationModel.Resources.dll"> +<activatableClass name="Microsoft.ApplicationModel.Resources.KnownResourceQualifierName" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.ApplicationModel.Resources.ResourceCandidate" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.ApplicationModel.Resources.ResourceLoader" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.ApplicationModel.Resources.ResourceManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="CoreMessagingXP.dll"> +<activatableClass name="Microsoft.UI.Dispatching.DispatcherQueue" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Dispatching.DispatcherQueueController" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="dcompi.dll"> +<activatableClass name="Microsoft.UI.Composition.CompositionObject" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.AnimationController" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionEasingFunction" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionApiInformation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionCapabilities" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionEffectSourceParameter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionPath" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.CompositionProjectedShadowCasterCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Compositor" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Core.CompositorController" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Diagnostics.CompositionDebugSettings" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Effects.SceneLightingEffect" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Experimental.ExpCompositionContent" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Experimental.ExpCompositionContentEnvironment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Experimental.ExpCompositionVisualSurface" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.CompositionConditionalValue" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.InteractionTracker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.InteractionTrackerInertiaMotion" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.InteractionTrackerInertiaNaturalMotion" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.InteractionTrackerInertiaRestingValue" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.InteractionTrackerVector2InertiaNaturalMotion" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Interactions.VisualInteractionSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneMesh" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneMeshRendererComponent" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneMetallicRoughnessMaterial" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneNode" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneSurfaceMaterialInput" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Composition.Scenes.SceneVisual" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.ColorHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Colors" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="Microsoft.UI.Input.dll"> +<activatableClass name="Microsoft.UI.Hosting.Experimental.ExpCoreWindowBridge" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Hosting.Experimental.ExpDesktopWindowBridge" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Hosting.Experimental.ExpSystemVisualBridge" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpDirectManipulation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpFocusController" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpFocusNavigationHost" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpFocusNavigationRequest" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpFocusObserver" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpGestureRecognizer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpPointerInputObserver" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpIndependentPointerInputObserver" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpInputActivationListenerPartner" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpInputSite" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpKeyboardInput" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpMouseCapture" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpPointerCursorController" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpPointerPoint" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.Experimental.ExpTouchHitTestingProvider" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Input.KeyboardInput" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="Microsoft.UI.Xaml.dll"> +<activatableClass name="Microsoft.UI.Xaml.Controls.DragItemsStartingEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemClickEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SelectionChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SemanticZoomViewChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.DragCompletedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.DragDeltaEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.DragStartedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Printing.AddPagesEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Printing.GetPreviewPageEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Printing.PaginateEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Interop.NotifyCollectionChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ContainerContentChangingEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DataTemplate" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.Popup" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.VisualTreeHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.TextHighlighter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Typography" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.TextElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Block" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Inline" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.InlineUIContainer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.LineBreak" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Paragraph" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Run" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Span" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Bold" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Italic" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Underline" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.InputValidationError" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.InputValidationContext" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SemanticZoom" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SemanticZoomLocation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ChoosingGroupHeaderContainerEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.SelectorItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ChoosingItemContainerEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListViewBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DataTemplateSelector" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsPanelTemplate" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.StyleSelector" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GroupStyle" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GroupStyleSelector" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Panel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ToolTipService" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ColumnDefinition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RowDefinition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Border" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ContentPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Image" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RichTextBlockOverflow" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RichTextBlock" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TextBlock" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Viewbox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Canvas" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ContentControl" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Grid" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsControl" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PasswordBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RelativePanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.StackPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TextBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ToggleSwitch" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.UserControl" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.VariableSizedWrapGrid" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GroupItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Slider" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ToolTip" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Button" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ComboBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ComboBoxItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FlipView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FlipViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.HyperlinkButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListBoxItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.VirtualizingStackPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CheckBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RadioButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.LayoutInformation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.TickBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.RangeBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.Thumb" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ButtonBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.CarouselPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.Selector" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.RepeatButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ToggleButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ItemsControlAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ButtonBaseAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ComboBoxItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.FlipViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.GroupItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ImageAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListBoxItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.PasswordBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RangeBaseAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RichTextBlockAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RichTextBlockOverflowAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.SelectorAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.SelectorItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.SemanticZoomAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TextBlockAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TextBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ThumbAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ToggleSwitchAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ComboBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ComboBoxItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.FlipViewAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.FlipViewItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.HyperlinkButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListBoxItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RepeatButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ScrollBarAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.SliderAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ToggleButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.CheckBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RadioButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Printing.PrintDocument" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Navigation.FrameNavigationOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CalendarView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.HubSectionHeaderClickEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DispatcherTimer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.IconSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.XamlUICommand" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.StandardUICommand" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Glyphs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Documents.Hyperlink" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CalendarViewDayItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DynamicOverflowItemsChangingEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.HubSection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListViewPersistenceHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ScrollViewerViewChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AutoSuggestBoxQuerySubmittedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AutoSuggestBoxSuggestionChosenEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AutoSuggestBoxTextChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.BitmapIconSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Flyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FontIconSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PathIconSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SymbolIconSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.IconElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AppBarSeparator" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.BitmapIcon" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CalendarDatePicker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CommandingContainer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DatePicker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FontIcon" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Hub" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.IconSourceElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsStackPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsWrapGrid" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PathIcon" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RichEditBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ScrollContentPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SplitView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SymbolIcon" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TimePicker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AppBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AppBarElementContainer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AutoSuggestBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CommandBarOverflowPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ContentDialog" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FlyoutPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Navigation.PageStackEntry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Frame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuFlyoutItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuFlyoutPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuFlyoutSeparator" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuFlyoutSubItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Page" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ScrollViewer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SwapChainBackgroundPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SwapChainPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CommandBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GridViewHeaderItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GridViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListViewHeaderItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ToggleMenuFlyoutItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.WrapGrid" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AppBarButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AppBarToggleButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.GridView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.CalendarPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.GridViewItemPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AppBarAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AutoSuggestBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.CalendarDatePickerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.DatePickerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.FlyoutPresenterAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.GridViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.HubAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.HubSectionAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewBaseHeaderItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MenuFlyoutItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RichEditBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ScrollViewerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TimePickerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ToggleMenuFlyoutItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.GridViewHeaderItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.GridViewAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.GridViewItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewHeaderItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewBaseAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MenuFlyoutPresenterAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AppBarButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AppBarToggleButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ListViewAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.ElementCompositionPreview" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.CornerRadiusHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DurationHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ThicknessHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.MatrixHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.KeyTimeHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.RepeatBehaviorHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.GeneratorPositionHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Media3D.Matrix3DHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DependencyObject" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DependencyProperty" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.RoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.VisualStateChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.DoubleTappedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.HoldingRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationCompletedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationInertiaStartingRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationStartedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationStartingRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.RightTappedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.TappedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.CurrentChangingEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.PropertyChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ElementFactoryGetArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.UIElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ElementFactoryRecycleArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.BringIntoViewOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.BrushTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DataTemplateKey" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.PropertyMetadata" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.BitmapImage" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.FrameworkView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.InteractionBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ScalarTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.SetterBaseCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.PropertyPath" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.TargetPropertyPath" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.TriggerActionCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.UIElementWeakCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Vector3Transition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.VisualState" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Control" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DependencyObjectCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.FrameworkTemplate" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ResourceDictionary" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.StateTriggerBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Style" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RectangleGeometry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Projection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Media3D.Transform3D" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.TransitionCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.CacheMode" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.FlyoutBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.XamlLight" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.KeyboardAccelerator" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ContextRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.AccessKeyDisplayRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.AccessKeyDisplayDismissedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.AccessKeyInvokedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GeneralTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.Storyboard" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.VisualTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.VisualStateGroup" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EasingFunctionBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.AdaptiveTrigger" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ColorPaletteResources" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.EventTrigger" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Brush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.FrameworkElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.BindingBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.FrameworkElementEx" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.PanelEx" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Setter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.StateTrigger" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.BrushCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.CompositionTarget" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.DoubleCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.FontFamily" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PointCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TransformCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Geometry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.BitmapCache" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Matrix3DProjection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PlaneProjection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.SolidColorBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.ThemeShadow" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.CompositeTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.MatrixTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RotateTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.ScaleTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.SkewTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TransformGroup" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TranslateTransform" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DoubleKeyFrameCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ObjectKeyFrameCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.TimelineCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DoubleKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.KeySpline" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.NavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ObjectKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.Timeline" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.Transition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.AddDeleteThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.BackEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.BeginStoryboard" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.BounceEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.CircleEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ColorAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ContentThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.CubicEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DiscreteDoubleKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DiscreteObjectKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DoubleAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DoubleAnimationUsingKeyFrames" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EasingDoubleKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EdgeUIThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ElasticEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EntranceThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ExponentialEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.LinearDoubleKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ObjectAnimationUsingKeyFrames" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PaneThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PopupThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PowerEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.QuadraticEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.QuarticEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.QuinticEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ReorderThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.RepositionThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SineEase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SplineDoubleKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.AccessKeyManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.ManipulationPivot" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.InputScopeName" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.InputScope" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ControlTemplate" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.BitmapSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.RenderTargetBitmap" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.SurfaceImageSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.VirtualSurfaceImageSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.FlyoutShowOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.AnnotationPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.AutomationElementIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.AutomationAnnotation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.AutomationProperties" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.DockPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.DragPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.DropTargetPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.ExpandCollapsePatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.GridItemPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.GridPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.MultipleViewPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.RangeValuePatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.ScrollPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.SelectionItemPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.SelectionPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.SpreadsheetItemPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.StylesPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.TableItemPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.TablePatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.TogglePatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.TransformPattern2Identifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.TransformPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.ValuePatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.WindowPatternIdentifiers" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AutomationPeerAnnotation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.FrameworkElementAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.BindingOperations" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.Binding" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.RelativeSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.GridLengthHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.ElementSoundPlayer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Application" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.FrameworkViewSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.PointHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.RectHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.SizeHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Window" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.VisualStateManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Resources.CustomXamlResourceLoader" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GeometryCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GradientStopCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.LoadedImageSurface" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PathFigureCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PathSegmentCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GradientStop" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PathFigure" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.ArcSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.BezierSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.EllipseGeometry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GeometryGroup" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.GradientBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.LineGeometry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.LineSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PathGeometry" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PolyBezierSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PolyLineSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PolyQuadraticBezierSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.QuadraticBezierSegment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TileBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.XamlCompositionBrushBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.ImageBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.LinearGradientBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ColorKeyFrameCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ConnectedAnimationService" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointKeyFrameCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.BasicConnectedAnimationConfiguration" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ColorKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DirectConnectedAnimationConfiguration" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.GravityConnectedAnimationConfiguration" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ColorAnimationUsingKeyFrames" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DiscreteColorKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DiscretePointKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DragItemThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DragOverThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DrillInThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DrillOutThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DropTargetItemThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EasingColorKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EasingPointKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.FadeInThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.FadeOutThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.LinearColorKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.LinearPointKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointAnimationUsingKeyFrames" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointerDownThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PointerUpThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PopInThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.PopOutThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.RepositionThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SplineColorKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SplinePointKeyFrame" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SplitCloseThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SplitOpenThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SwipeBackThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SwipeHintThemeAnimation" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.FindNextElementOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.FocusManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Shape" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Ellipse" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Line" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Path" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Polygon" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Polyline" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Shapes.Rectangle" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.XamlRenderingBackgroundTask" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.SoftwareBitmapSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Imaging.SvgImageSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.DataErrorsChangedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.ItemIndexRange" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Data.CollectionViewSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Media3D.CompositeTransform3D" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Media3D.PerspectiveTransform3D" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.MarkupExtension" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.ProvideValueTargetProperty" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.XamlBinaryWriter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.XamlBindingHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.XamlMarkupHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Markup.XamlReader" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.XamlSourceFocusNavigationRequest" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.XamlSourceFocusNavigationResult" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.WindowsXamlManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Core.Direct.XamlDirect" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RateChangedRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TimelineMarkerRoutedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Hosting.XamlIsland" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.DxamlCoreTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.PartialMediaFailureDetectedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TimelineMarkerCollection" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.TimelineMarker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ThemeAnimationBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Input.InputManager" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.InputValidationCommand" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MediaTransportControlsHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CaptureElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MediaTransportControls" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MediaElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MediaPlayerPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MediaPlayerElement" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Internal.LayoutTransitionElementUtilities" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Internal.SecondaryContentRelationship" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.CaptureElementAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MediaElementAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MediaPlayerElementAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MediaTransportControlsAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="Microsoft.UI.Xaml.Controls.dll"> +<activatableClass name="Microsoft.UI.Xaml.XamlTypeInfo.XamlControlsXamlMetaDataProvider" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.XamlControlsResources" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.MUXControlsTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.CornerRadiusToThicknessConverter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.CornerRadiusFilterConverter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RatingItemInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RatingItemFontInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RatingItemImageInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RatingControl" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RatingControlAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewItemBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewTemplateSettings" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewItemSeparator" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NavigationViewItemHeader" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.NavigationViewItemPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.NavigationViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.NavigationViewAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ColorPicker" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ColorPickerSlider" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ColorPickerSliderAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ColorSpectrum" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ColorSpectrumAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.SpectrumBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.CommandBarFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TextCommandBarFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.CommandBarFlyoutCommandBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PersonPicture" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.PersonPictureAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RefreshVisualizer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RefreshContainer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.PullToRefreshHelperTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.ScrollViewerIRefreshInfoProviderAdapter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuBarItemFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuBarItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.MenuBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MenuBarAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.MenuBarItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.AcrylicBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.AcrylicTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RevealBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RevealBorderBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RevealBackgroundBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RevealListViewItemPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.RevealBrushTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TreeViewNode" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TreeViewList" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TreeView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TreeViewItemTemplateSettings" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TreeViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TreeViewListAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TreeViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TreeViewItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ParallaxView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ScrollOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ZoomOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollSnapPoint" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.RepeatedScrollSnapPoint" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ZoomSnapPoint" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.RepeatedZoomSnapPoint" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollControllerScrollToRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollControllerScrollByRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollControllerScrollFromRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ScrollControllerInteractionRequestedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.Scroller" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ScrollerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.ScrollerTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.RevealBorderLight" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.RevealHoverLight" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.XamlAmbientLight" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.MaterialHelperTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Media.RevealTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ElementAnimator" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsSourceView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsRepeater" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ElementFactoryGetArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ElementFactoryRecycleArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ElementFactory" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NonVirtualizingLayoutContext" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.VirtualizingLayoutContext" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NonVirtualizingLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.VirtualizingLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsRepeaterScrollHost" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.UniformGridLayoutState" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.UniformGridLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.StackLayoutState" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.StackLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FlowLayoutState" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.FlowLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RecyclePool" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RecyclingElementFactory" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.IndexPath" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SelectionModel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.RepeaterAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.RepeaterTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SwipeItems" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SwipeControl" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SwipeItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.SwipeTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TwoPaneView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.DisplayRegionHelperTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.SplitButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ToggleSplitButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.SplitButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ToggleSplitButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.SplitButtonTestApi" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.LayoutPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DropDownButton" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.DropDownButtonAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RadioButtons" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ColumnMajorUniformToLargestGridLayout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.RadioButtonsTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.ButtonInteraction" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.SliderInteraction" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TeachingTipTemplateSettings" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TeachingTip" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TeachingTipAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Private.Controls.TeachingTipTestHooks" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.RadioMenuFlyoutItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.AnimatedVisualPlayer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.AnimatedVisualPlayerAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TabViewItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TabView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TabViewItemTemplateSettings" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.TabViewListView" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TabViewAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.TabViewItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.AutoSuggestBoxHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.ComboBoxHelper" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.NumberBox" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.NumberBoxAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.RadialGradientBrush" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.WebView2" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.WebView2AutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ProgressRing" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ProgressRingAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ProgressBar" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.ProgressBarAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="Microsoft.UI.Xaml.Phone.dll"> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.CommonNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.ContinuumNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.DrillInNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.EntranceNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.NavigationThemeTransition" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SlideNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Media.Animation.SuppressNavigationTransitionInfo" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PivotItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PivotItemEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DatePickedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DatePickerFlyoutItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ItemsPickedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PickerConfirmedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TimePickedEventArgs" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DatePickerFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.ListPickerFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.PickerFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TimePickerFlyout" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.DatePickerFlyoutPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.TimePickerFlyoutPresenter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Pivot" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.JumpListItemBackgroundConverter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.JumpListItemForegroundConverter" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.PickerFlyoutBase" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.LoopingSelector" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.PivotPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.PivotHeaderItem" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Controls.Primitives.PivotHeaderPanel" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.PivotItemAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.PivotAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Xaml.Automation.Peers.PivotItemDataAutomationPeer" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="WinUIEdit.dll"> +<activatableClass name="Microsoft.UI.Text.FontWeights" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.UI.Text.TextConstants" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<asmv3:file name="Microsoft.Web.WebView2.Core.dll"> +<activatableClass name="Microsoft.Web.WebView2.Core.CoreWebView2ControllerWindowReference" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.Web.WebView2.Core.CoreWebView2Environment" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +<activatableClass name="Microsoft.Web.WebView2.Core.CoreWebView2EnvironmentOptions" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"> +</activatableClass> +</asmv3:file> +<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> +<security> +<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> +<requestedExecutionLevel level="asInvoker" uiAccess="false"> +</requestedExecutionLevel> +</requestedPrivileges> +</security> +</trustInfo> +<ms_asmv3:application xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3" xmlns="urn:schemas-microsoft-com:asm.v3"> +<ms_asmv3:windowsSettings xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"> +<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings" xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM +</ms_windowsSettings:dpiAware> +<ms_windowsSettings2016:dpiAwareness xmlns:ms_windowsSettings2016="http://schemas.microsoft.com/SMI/2016/WindowsSettings" xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor +</ms_windowsSettings2016:dpiAwareness> +</ms_asmv3:windowsSettings> +</ms_asmv3:application> +<ms_compatibility:compatibility xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" xmlns="urn:schemas-microsoft-com:compatibility.v1"> +<ms_compatibility:application xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1"> +<ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"> +</ms_compatibility:supportedOS> +<ms_compatibility:maxversiontested xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="10.0.18362.0"> +</ms_compatibility:maxversiontested> +</ms_compatibility:application> +</ms_compatibility:compatibility> +</assembly> diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.blankFileName.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.blankFileName.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.blankName.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.blankName.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.duplicateAcid.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.duplicateAcid.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.invalidThreadingModel.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.invalidThreadingModel.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingFileName.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingFileName.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingName.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingName.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingThreadingModel.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.negative.missingThreadingModel.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.positive.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/basicParse.positive.manifest diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/main.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/main.cpp diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/packages.config diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/pch.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/pch.h diff --git a/src/UndockedRegFreeWinRT/ManifestParserTest/winrtActivation.dll1.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/ManifestParserTest/winrtActivation.dll1.manifest diff --git a/src/UndockedRegFreeWinRT/Nuget/LICENSE b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Nuget/LICENSE diff --git a/src/UndockedRegFreeWinRT/Nuget/Microsoft.Windows.UndockedRegFreeWinrt.nuspec b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Nuget/Microsoft.Windows.UndockedRegFreeWinrt.nuspec diff --git a/src/UndockedRegFreeWinRT/Nuget/Microsoft.Windows.UndockedRegFreeWinrt.targets b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Nuget/Microsoft.Windows.UndockedRegFreeWinrt.targets diff --git a/src/UndockedRegFreeWinRT/Nuget/SignConfig.xml b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Nuget/SignConfig.xml diff --git a/src/UndockedRegFreeWinRT/Nuget/readme.txt b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/Nuget/readme.txt diff --git a/src/UndockedRegFreeWinRT/README.md b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/README.md diff --git a/src/UndockedRegFreeWinRT/SignConfig.xml b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/SignConfig.xml diff --git a/src/UndockedRegFreeWinRT/TestComponent/Class.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/Class.cpp diff --git a/src/UndockedRegFreeWinRT/TestComponent/Class.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/Class.h diff --git a/src/UndockedRegFreeWinRT/TestComponent/Class.idl b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/Class.idl diff --git a/src/UndockedRegFreeWinRT/TestComponent/PropertySheet.props b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/PropertySheet.props diff --git a/src/UndockedRegFreeWinRT/TestComponent/TestComponent.def b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/TestComponent.def diff --git a/src/UndockedRegFreeWinRT/TestComponent/TestComponent.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/TestComponent.vcxproj diff --git a/src/UndockedRegFreeWinRT/TestComponent/TestComponent.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/TestComponent.vcxproj.filters diff --git a/src/UndockedRegFreeWinRT/TestComponent/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/packages.config diff --git a/src/UndockedRegFreeWinRT/TestComponent/pch.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/pch.cpp diff --git a/src/UndockedRegFreeWinRT/TestComponent/pch.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/pch.h diff --git a/src/UndockedRegFreeWinRT/TestComponent/readme.txt b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/TestComponent/readme.txt diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT.sln b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT.sln diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>16.0</VCProjectVersion> + <ProjectGuid>{31ED69A8-5310-45A9-953F-56C351D2C3E1}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>UndockedRegFreeWinRT</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <TargetName>winrtact</TargetName> + <LinkIncremental>true</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <TargetName>winrtact</TargetName> + <LinkIncremental>true</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <TargetName>winrtact</TargetName> + <LinkIncremental>false</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <TargetName>winrtact</TargetName> + <LinkIncremental>false</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_DEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableUAC>false</EnableUAC> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib</AdditionalDependencies> + <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_DEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableUAC>false</EnableUAC> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib</AdditionalDependencies> + <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;NDEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableUAC>false</EnableUAC> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib</AdditionalDependencies> + <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>NDEBUG;UNDOCKEDREGFREEWINRT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(PorjectDir)\..\detours\include;%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + <LanguageStandard>stdcpp17</LanguageStandard> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableUAC>false</EnableUAC> + <AdditionalDependencies>comsuppw.lib;shlwapi.lib;xmllite.lib;runtimeobject.lib;Pathcch.lib;Rometadata.lib</AdditionalDependencies> + <ModuleDefinitionFile>winrtact.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <None Include="cpp.hint" /> + <None Include="packages.config" /> + <None Include="winrtact.def" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="catalog.cpp" /> + <ClCompile Include="dllmain.cpp" /> + <ClCompile Include="typeresolution.cpp" /> + <ClCompile Include="typeresolution.h" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="catalog.h" /> + <ClInclude Include="extwinrt.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\detours\detours.vcxproj"> + <Project>{787ec629-c0fb-4ba9-9746-4a82cd06b73e}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>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}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> + </Target> +</Project>+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/UndockedRegFreeWinRT.vcxproj.filters diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.cpp @@ -0,0 +1,401 @@ +#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING + +#include <Windows.h> +#include <roapi.h> +#include <winstring.h> +#include <rometadataresolution.h> +#include <combaseapi.h> +#include <wrl.h> +#include <xmllite.h> +#include <Shlwapi.h> +#include <comutil.h> +#include <fstream> +#include <unordered_map> +#include <codecvt> +#include <locale> +#include <RoMetadataApi.h> +#include <RoMetadata.h> +#include <algorithm> +#include "catalog.h" +#include "TypeResolution.h" + +using namespace std; +using namespace Microsoft::WRL; +using namespace Microsoft::WRL::Wrappers; + +// TODO: Components won't respect COM lifetime. workaround to get them in the COM list? + +extern "C" +{ + typedef HRESULT(__stdcall* activation_factory_type)(HSTRING, IActivationFactory**); +} + +// Intentionally no class factory cache here. That would be excessive since +// other layers already cache. +struct component +{ + wstring module_name; + wstring xmlns; + HMODULE handle = nullptr; + activation_factory_type get_activation_factory; + ABI::Windows::Foundation::ThreadingType threading_model; + + ~component() + { + if (handle) + { + FreeLibrary(handle); + } + } + + HRESULT LoadModule() + { + if (handle == nullptr) + { + handle = LoadLibraryExW(module_name.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); + if (handle == nullptr) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + this->get_activation_factory = (activation_factory_type)GetProcAddress(handle, "DllGetActivationFactory"); + if (this->get_activation_factory == nullptr) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + } + return (handle != nullptr && this->get_activation_factory != nullptr) ? S_OK : E_FAIL; + } + + HRESULT GetActivationFactory(HSTRING className, REFIID iid, void** factory) + { + RETURN_IF_FAILED(LoadModule()); + + IActivationFactory* ifactory = nullptr; + HRESULT hr = this->get_activation_factory(className, &ifactory); + // optimize for IActivationFactory? + if (SUCCEEDED(hr)) + { + hr = ifactory->QueryInterface(iid, factory); + ifactory->Release(); + } + return hr; + } +}; + +static unordered_map<wstring, shared_ptr<component>> g_types; + +void wstr_tolower(std::wstring& s) { + std::transform(s.begin(), s.end(), s.begin(), + [](unsigned char c) { return std::tolower(c); } // correct + ); +} + +HRESULT LoadManifestFromPath(std::wstring path) +{ + if (path.size() < 4) + { + return COR_E_ARGUMENT; + } + std::wstring ext(path.substr(path.size() - 4, path.size())); + wstr_tolower(ext); + if (ext.compare(L".exe") == 0 || ext.compare(L".dll") == 0) + { + return LoadFromEmbeddedManifest(path.c_str()); + } + else + { + return LoadFromSxSManifest(path.c_str()); + } +} + +HRESULT LoadFromSxSManifest(PCWSTR path) +{ + return WinRTLoadComponentFromFilePath(path); +} + +HRESULT LoadFromEmbeddedManifest(PCWSTR path) +{ + wil::unique_hmodule handle(LoadLibraryExW(path, nullptr, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !handle); + + // Try both just to be on the safe side + HRSRC hrsc = FindResourceW(handle.get(), MAKEINTRESOURCEW(1), RT_MANIFEST); + if (!hrsc) + { + hrsc = FindResourceW(handle.get(), MAKEINTRESOURCEW(2), RT_MANIFEST); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !hrsc); + } + HGLOBAL embeddedManifest = LoadResource(handle.get(), hrsc); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !embeddedManifest); + + DWORD length = SizeofResource(handle.get(), hrsc); + void* data = LockResource(embeddedManifest); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), !data); + + return WinRTLoadComponentFromString(std::string_view((char*)data, length)); +} + +HRESULT WinRTLoadComponentFromFilePath(PCWSTR manifestPath) +{ + ComPtr<IStream> fileStream; + RETURN_IF_FAILED(SHCreateStreamOnFileEx(manifestPath, STGM_READ, FILE_ATTRIBUTE_NORMAL, false, nullptr, &fileStream)); + try + { + return ParseRootManifestFromXmlReaderInput(fileStream.Get()); + } + catch(...) + { + LOG_CAUGHT_EXCEPTION(); + return ERROR_SXS_MANIFEST_PARSE_ERROR; + } +} + +HRESULT WinRTLoadComponentFromString(std::string_view xmlStringValue) +{ + ComPtr<IStream> xmlStream = nullptr; + xmlStream.Attach(SHCreateMemStream(reinterpret_cast<const BYTE*>(xmlStringValue.data()), static_cast<UINT>(strlen(xmlStringValue.data()) * sizeof(CHAR)))); + RETURN_HR_IF_NULL(E_OUTOFMEMORY, xmlStream); + ComPtr<IXmlReaderInput> xmlReaderInput; + RETURN_IF_FAILED(CreateXmlReaderInputWithEncodingName(xmlStream.Get(), nullptr, L"utf-8", FALSE, nullptr, &xmlReaderInput)); + try + { + return ParseRootManifestFromXmlReaderInput(xmlReaderInput.Get()); + } + catch (...) + { + LOG_CAUGHT_EXCEPTION(); + return ERROR_SXS_MANIFEST_PARSE_ERROR; + } +} + +HRESULT ParseRootManifestFromXmlReaderInput(IUnknown* input) +{ + XmlNodeType nodeType; + PCWSTR localName = nullptr; + auto locale = _create_locale(LC_ALL, "C"); + ComPtr<IXmlReader> xmlReader; + RETURN_IF_FAILED(CreateXmlReader(__uuidof(IXmlReader), (void**)&xmlReader, nullptr)); + RETURN_IF_FAILED(xmlReader->SetInput(input)); + while (S_OK == xmlReader->Read(&nodeType)) + { + if (nodeType == XmlNodeType_Element) + { + RETURN_IF_FAILED((xmlReader->GetLocalName(&localName, nullptr))); + + if (_wcsicmp_l(localName, L"file", locale) == 0) + { + RETURN_IF_FAILED(ParseFileTag(xmlReader)); + } + } + } + + return S_OK; +} + +HRESULT ParseFileTag(ComPtr<IXmlReader> xmlReader) +{ + HRESULT hr = S_OK; + XmlNodeType nodeType; + PCWSTR localName = nullptr; + wstring fileName; + + { + PCWSTR fileNameStr = nullptr; + hr = xmlReader->MoveToAttributeByName(L"name", nullptr); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR), hr != S_OK); + RETURN_IF_FAILED(xmlReader->GetValue(&fileNameStr, nullptr)); + RETURN_HR_IF(HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR), fileNameStr == nullptr || !fileNameStr[0]); + + fileName = fileNameStr; + } + + auto locale = _create_locale(LC_ALL, "C"); + while (S_OK == xmlReader->Read(&nodeType)) + { + if (nodeType == XmlNodeType_Element) + { + RETURN_IF_FAILED(xmlReader->GetLocalName(&localName, nullptr)); + if (localName != nullptr && _wcsicmp_l(localName, L"activatableClass", locale) == 0) + { + RETURN_IF_FAILED(ParseActivatableClassTag(xmlReader, fileName.c_str())); + } + } + else if (nodeType == XmlNodeType_EndElement) + { + RETURN_IF_FAILED(xmlReader->GetLocalName(&localName, nullptr)); + RETURN_HR_IF(S_OK, localName != nullptr && _wcsicmp_l(localName, L"file", locale) == 0); + } + } + return S_OK; +} + +HRESULT ParseActivatableClassTag(ComPtr<IXmlReader> xmlReader, PCWSTR fileName) +{ + PCWSTR localName = nullptr; + auto locale = _create_locale(LC_ALL, "C"); + auto this_component = make_shared<component>(); + this_component->module_name = fileName; + HRESULT hr = xmlReader->MoveToFirstAttribute(); + // Using this pattern intead of calling multiple MoveToAttributeByName improves performance + const WCHAR* activatableClass = nullptr; + const WCHAR* threadingModel = nullptr; + const WCHAR* xmlns = nullptr; + if (S_FALSE == hr) + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + else + { + while (TRUE) + { + const WCHAR* pwszLocalName; + const WCHAR* pwszValue; + if (FAILED_LOG(xmlReader->GetLocalName(&pwszLocalName, NULL))) + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + if (FAILED_LOG(xmlReader->GetValue(&pwszValue, NULL))) + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + if (pwszLocalName != nullptr) + { + if (_wcsicmp_l(L"threadingModel", pwszLocalName, locale) == 0) + { + threadingModel = pwszValue; + } + else if (_wcsicmp_l(L"name", pwszLocalName, locale) == 0) + { + activatableClass = pwszValue; + } + else if (_wcsicmp_l(L"xmlns", pwszLocalName, locale) == 0) + { + xmlns = pwszValue; + } + } + if (xmlReader->MoveToNextAttribute() != S_OK) + { + break; + } + } + } + if (threadingModel == nullptr) + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + if (_wcsicmp_l(L"sta", threadingModel, locale) == 0) + { + this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_STA; + } + else if (_wcsicmp_l(L"mta", threadingModel, locale) == 0) + { + this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_MTA; + } + else if (_wcsicmp_l(L"both", threadingModel, locale) == 0) + { + this_component->threading_model = ABI::Windows::Foundation::ThreadingType::ThreadingType_BOTH; + } + else + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + + if (activatableClass == nullptr || !activatableClass[0]) + { + return HRESULT_FROM_WIN32(ERROR_SXS_MANIFEST_PARSE_ERROR); + } + this_component->xmlns = xmlns; // Should we care if this value is blank or missing? + // Check for duplicate activatable classes + auto component_iter = g_types.find(activatableClass); + if (component_iter != g_types.end()) + { + return HRESULT_FROM_WIN32(ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS); + } + g_types[activatableClass] = this_component; + return S_OK; +} + +HRESULT WinRTGetThreadingModel(HSTRING activatableClassId, ABI::Windows::Foundation::ThreadingType* threading_model) +{ + auto raw_class_name = WindowsGetStringRawBuffer(activatableClassId, nullptr); + auto component_iter = g_types.find(raw_class_name); + if (component_iter != g_types.end()) + { + *threading_model = component_iter->second->threading_model; + return S_OK; + } + return REGDB_E_CLASSNOTREG; +} + +HRESULT WinRTGetActivationFactory( + HSTRING activatableClassId, + REFIID iid, + void** factory) +{ + auto raw_class_name = WindowsGetStringRawBuffer(activatableClassId, nullptr); + auto component_iter = g_types.find(raw_class_name); + if (component_iter != g_types.end()) + { + return component_iter->second->GetActivationFactory(activatableClassId, iid, factory); + } + return REGDB_E_CLASSNOTREG; +} + +HRESULT WinRTGetMetadataFile( + const HSTRING name, + IMetaDataDispenserEx* metaDataDispenser, + HSTRING* metaDataFilePath, + IMetaDataImport2** metaDataImport, + mdTypeDef* typeDefToken) +{ + wchar_t folderPrefix[9]; + PCWSTR pszFullName = WindowsGetStringRawBuffer(name, nullptr); + HRESULT hr = StringCchCopyW(folderPrefix, _countof(folderPrefix), pszFullName); + if (hr != S_OK && hr != STRSAFE_E_INSUFFICIENT_BUFFER) + { + return hr; + } + if (CompareStringOrdinal(folderPrefix, -1, L"Windows.", -1, false) == CSTR_EQUAL) + { + return RO_E_METADATA_NAME_NOT_FOUND; + } + + if (metaDataFilePath != nullptr) + { + *metaDataFilePath = nullptr; + } + if (metaDataImport != nullptr) + { + *metaDataImport = nullptr; + } + if (typeDefToken != nullptr) + { + *typeDefToken = mdTypeDefNil; + } + + if (((metaDataImport == nullptr) && (typeDefToken != nullptr)) || + ((metaDataImport != nullptr) && (typeDefToken == nullptr))) + { + return E_INVALIDARG; + } + + ComPtr<IMetaDataDispenserEx> spMetaDataDispenser; + // The API uses the caller's passed-in metadata dispenser. If null, it + // will create an instance of the metadata reader to dispense metadata files. + if (metaDataDispenser == nullptr) + { + RETURN_IF_FAILED(MetaDataGetDispenser(CLSID_CorMetaDataDispenser, + IID_IMetaDataDispenser, + &spMetaDataDispenser)); + { + variant_t version{ L"WindowsRuntime 1.4" }; + RETURN_IF_FAILED(spMetaDataDispenser->SetOption(MetaDataRuntimeVersion, &version.GetVARIANT())); + } + } + return UndockedRegFreeWinRT::ResolveThirdPartyType( + spMetaDataDispenser.Get(), + pszFullName, + metaDataFilePath, + metaDataImport, + typeDefToken); +}+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/catalog.h diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/cpp.hint b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/cpp.hint diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/dllmain.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/dllmain.cpp diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/extwinrt.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/extwinrt.h diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/packages.config diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.cpp @@ -0,0 +1,735 @@ +#pragma once + +#include "TypeResolution.h" +#include "catalog.h" + +#define METADATA_FILE_EXTENSION L"winmd" +#define METADATA_FILE_PATH_FORMAT L"%s%s." METADATA_FILE_EXTENSION +#define METADATA_FILE_SEARCH_FORMAT L"%s%s*." METADATA_FILE_EXTENSION + +namespace UndockedRegFreeWinRT +{ + static const UINT32 g_uiMaxTypeName = 512; + static wil::unique_process_heap_string g_cachedProcessExeDir; + static wil::unique_process_heap_string g_cachedProcessDllDir; + + BOOL CALLBACK GetProcessExeDirInitOnceCallback( + _Inout_ PINIT_ONCE, + _Inout_opt_ PVOID, + _Out_opt_ PVOID*) + { + wil::unique_process_heap_string localExePath; + HRESULT hr = wil::GetModuleFileNameW(nullptr, localExePath); + if (FAILED_LOG(hr)) + { + SetLastError(hr); + return FALSE; + } + + // Modify the retrieved string to truncate the actual exe name and leave the containing directory path. This API + // expects a buffer size including the terminating null, so add 1 to the string length. + hr = PathCchRemoveFileSpec(localExePath.get(), wcslen(localExePath.get()) + 1); + if (FAILED_LOG(hr)) + { + SetLastError(hr); + return FALSE; + } + + g_cachedProcessExeDir = std::move(localExePath); + return TRUE; + } + + // Returned string is cached globally, and should not be freed by the caller. + HRESULT GetProcessExeDir(PCWSTR* path) + { + *path = nullptr; + static INIT_ONCE ProcessExeDirInitOnce = INIT_ONCE_STATIC_INIT; + + RETURN_IF_WIN32_BOOL_FALSE(InitOnceExecuteOnce(&ProcessExeDirInitOnce, GetProcessExeDirInitOnceCallback, nullptr, nullptr)); + + // The cache has been successfully populated by the InitOnce, so we can just use it directly. + *path = g_cachedProcessExeDir.get(); + return S_OK; + } + + BOOL CALLBACK GetProcessDllDirInitOnceCallback( + _Inout_ PINIT_ONCE, + _Inout_opt_ PVOID, + _Out_opt_ PVOID*) + { + wil::unique_process_heap_string localDllPath; + HMODULE hm = NULL; + + // Get handle to the module that contains this function (this one). + if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (LPCWSTR)&GetProcessDllDirInitOnceCallback, &hm) == 0) + { + // Error has already been set (GetLastError). + return FALSE; + } + + // Get the path for this module. + HRESULT hr = wil::GetModuleFileNameW(hm, localDllPath); + if (FAILED_LOG(hr)) + { + SetLastError(hr); + return FALSE; + } + + // Modify the retrieved string to truncate the actual dll name and leave the containing directory path. This API + // expects a buffer size including the terminating null, so add 1 to the string length. + hr = PathCchRemoveFileSpec(localDllPath.get(), wcslen(localDllPath.get()) + 1); + if (FAILED_LOG(hr)) + { + SetLastError(hr); + return FALSE; + } + + g_cachedProcessDllDir = std::move(localDllPath); + return TRUE; + } + + // Returned string is cached globally, and should not be freed by the caller. + HRESULT GetProcessDllDir(PCWSTR* path) + { + *path = nullptr; + static INIT_ONCE ProcessDllDirInitOnce = INIT_ONCE_STATIC_INIT; + + RETURN_IF_WIN32_BOOL_FALSE(InitOnceExecuteOnce(&ProcessDllDirInitOnce, GetProcessDllDirInitOnceCallback, nullptr, nullptr)); + + // The cache has been successfully populated by the InitOnce, so we can just use it directly. + *path = g_cachedProcessDllDir.get(); + return S_OK; + } + + HRESULT FindTypeInMetaDataFile( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszFullName, + _In_ PCWSTR pszCandidateFilePath, + _In_ TYPE_RESOLUTION_OPTIONS resolutionOptions, + _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, + _Out_opt_ mdTypeDef* pmdTypeDef) + { + HRESULT hr = S_OK; + Microsoft::WRL::ComPtr<IMetaDataImport2> spMetaDataImport; + MetaDataImportersLRUCache* pMetaDataImporterCache = MetaDataImportersLRUCache::GetMetaDataImportersLRUCacheInstance(); + if (pMetaDataImporterCache != nullptr) + { + hr = pMetaDataImporterCache->GetMetaDataImporter( + pMetaDataDispenser, + pszCandidateFilePath, + &spMetaDataImport); + } + else + { + hr = E_OUTOFMEMORY; + } + + if (SUCCEEDED(hr)) + { + const size_t cFullName = wcslen(pszFullName); + wchar_t pszRetrievedName[g_uiMaxTypeName]; + HCORENUM hEnum = nullptr; + mdTypeDef rgTypeDefs[32]; + ULONG cTypeDefs; + DWORD dwTypeDefProps; + hr = RO_E_METADATA_NAME_NOT_FOUND; + + if (TRO_RESOLVE_TYPE & resolutionOptions) + { + hr = spMetaDataImport->FindTypeDefByName(pszFullName, mdTokenNil, &rgTypeDefs[0]); + if (SUCCEEDED(hr)) + { + // Check to confirm that the type we just found is a + // winrt type. If it is, we're good, otherwise we + // want to fail with RO_E_INVALID_METADATA_FILE. + hr = spMetaDataImport->GetTypeDefProps(rgTypeDefs[0], nullptr, 0, nullptr, &dwTypeDefProps, nullptr); + if (SUCCEEDED(hr)) + { + // If we found the type but it's not a winrt type, + // it's an error. + // + // If the type is public, than the metadata file + // is corrupt (all public types in a winrt file + // must be tdWindowsRuntime). If the type is + // private, then we just want to report that the + // type wasn't found. + if (!IsTdWindowsRuntime(dwTypeDefProps)) + { + if (IsTdPublic(dwTypeDefProps)) + { + hr = RO_E_INVALID_METADATA_FILE; + } + else + { + hr = RO_E_METADATA_NAME_NOT_FOUND; + } + } + } + else + { + hr = RO_E_INVALID_METADATA_FILE; + } + if (SUCCEEDED(hr)) + { + if (pmdTypeDef != nullptr) + { + *pmdTypeDef = rgTypeDefs[0]; + } + if (ppMetaDataImport != nullptr) + { + *ppMetaDataImport = spMetaDataImport.Detach(); + } + } + } + else if (hr == CLDB_E_RECORD_NOTFOUND) + { + hr = RO_E_METADATA_NAME_NOT_FOUND; + } + } + + if ((hr == RO_E_METADATA_NAME_NOT_FOUND) && + (TRO_RESOLVE_NAMESPACE & resolutionOptions)) + { + // Check whether the name is a namespace rather than a type. + do + { + hr = spMetaDataImport->EnumTypeDefs( + &hEnum, + rgTypeDefs, + ARRAYSIZE(rgTypeDefs), + &cTypeDefs); + + if (hr == S_OK) + { + for (UINT32 iTokenIndex = 0; iTokenIndex < cTypeDefs; ++iTokenIndex) + { + hr = spMetaDataImport->GetTypeDefProps( + rgTypeDefs[iTokenIndex], + pszRetrievedName, + ARRAYSIZE(pszRetrievedName), + nullptr, + &dwTypeDefProps, + nullptr); + + if (FAILED(hr)) + { + break; + } + + hr = RO_E_METADATA_NAME_NOT_FOUND; + + // Only consider windows runtime types when + // trying to determine if the name is a + // namespace. + if (IsTdWindowsRuntime(dwTypeDefProps) && (wcslen(pszRetrievedName) > cFullName)) + { + if ((wcsncmp(pszRetrievedName, pszFullName, cFullName) == 0) && + (pszRetrievedName[cFullName] == L'.')) + { + hr = RO_E_METADATA_NAME_IS_NAMESPACE; + break; + } + } + } + } + } while (hr == RO_E_METADATA_NAME_NOT_FOUND); + + // There were no more tokens to enumerate, but the type was still not found. + if (hr == S_FALSE) + { + hr = RO_E_METADATA_NAME_NOT_FOUND; + } + + if (hEnum != nullptr) + { + spMetaDataImport->CloseEnum(hEnum); + hEnum = nullptr; + } + } + } + return hr; + } + + HRESULT FindTypeInDirectory( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszFullName, + _In_ PCWSTR pszDirectoryPath, + _Out_opt_ HSTRING* phstrMetaDataFilePath, + _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, + _Out_opt_ mdTypeDef* pmdTypeDef) + { + HRESULT hr; + + wchar_t szCandidateFilePath[MAX_PATH + 1] = { 0 }; + wchar_t szCandidateFileName[MAX_PATH + 1] = { 0 }; + PWSTR pszLastDot; + + hr = StringCchCopy(szCandidateFileName, ARRAYSIZE(szCandidateFileName), pszFullName); + + if (SUCCEEDED(hr)) + { + // To resolve type SomeNamespace.B.C, first check if SomeNamespace.B.C is a type or + // a namespace in the metadata files in the directory in this order: + // 1. SomeNamespace.B.C.WinMD + // 2. SomeNamespace.B.WinMD + // 3. SomeNamespace.WinMD + do + { + pszLastDot = nullptr; + + hr = StringCchPrintfEx( + szCandidateFilePath, + ARRAYSIZE(szCandidateFilePath), + nullptr, + nullptr, + 0, + METADATA_FILE_PATH_FORMAT, + pszDirectoryPath, + szCandidateFileName); + + if (SUCCEEDED(hr)) + { + hr = FindTypeInMetaDataFile( + pMetaDataDispenser, + pszFullName, + szCandidateFilePath, + TRO_RESOLVE_TYPE_AND_NAMESPACE, + ppMetaDataImport, + pmdTypeDef); + + if (SUCCEEDED(hr)) + { + if (phstrMetaDataFilePath != nullptr) + { + hr = WindowsCreateString( + szCandidateFilePath, + static_cast<UINT32>(wcslen(szCandidateFilePath)), + phstrMetaDataFilePath); + } + break; + } + } + + hr = RO_E_METADATA_NAME_NOT_FOUND; + pszLastDot = wcsrchr(szCandidateFileName, '.'); + + if (pszLastDot != nullptr) + { + *pszLastDot = '\0'; + } + } while (pszLastDot != nullptr); + + // If name was not found when searching in the "upward direction", then + // the name might be a namespace name in a down-level file. + if (hr == RO_E_METADATA_NAME_NOT_FOUND) + { + wchar_t szFilePathSearchTemplate[MAX_PATH + 1] = { 0 }; + + hr = StringCchPrintfEx( + szFilePathSearchTemplate, + ARRAYSIZE(szFilePathSearchTemplate), + nullptr, + nullptr, + 0, + METADATA_FILE_SEARCH_FORMAT, + pszDirectoryPath, + pszFullName); + + if (SUCCEEDED(hr)) + { + WIN32_FIND_DATA fd; + HANDLE hFindFile; + + // Search in all files in the directory whose name begin with the input string. + hFindFile = FindFirstFile(szFilePathSearchTemplate, &fd); + + if (hFindFile != INVALID_HANDLE_VALUE) + { + PWSTR pszFilePathPart; + size_t cchRemaining; + + do + { + if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + continue; + } + + pszFilePathPart = szCandidateFilePath; + cchRemaining = ARRAYSIZE(szCandidateFilePath); + hr = StringCchCopyEx( + pszFilePathPart, + cchRemaining, + pszDirectoryPath, + &pszFilePathPart, + &cchRemaining, + 0); + + if (SUCCEEDED(hr)) + { + hr = StringCchCopyEx( + pszFilePathPart, + cchRemaining, + fd.cFileName, + &pszFilePathPart, + &cchRemaining, + 0); + } + + if (SUCCEEDED(hr)) + { + hr = FindTypeInMetaDataFile( + pMetaDataDispenser, + pszFullName, + szCandidateFilePath, + TRO_RESOLVE_NAMESPACE, + ppMetaDataImport, + pmdTypeDef); + + if (hr == S_OK) + { + hr = E_UNEXPECTED; + break; + } + + if (hr == RO_E_METADATA_NAME_IS_NAMESPACE) + { + break; + } + } + } while (FindNextFile(hFindFile, &fd)); + + FindClose(hFindFile); + } + else + { + hr = RO_E_METADATA_NAME_NOT_FOUND; + } + } + } + } + + if (hr == STRSAFE_E_INSUFFICIENT_BUFFER) + { + hr = RO_E_METADATA_NAME_NOT_FOUND; + } + + return hr; + } + + HRESULT FindTypeInDirectoryWithNormalization( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszFullName, + _In_ PCWSTR pszDirectoryPath, + _Out_opt_ HSTRING* phstrMetaDataFilePath, + _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, + _Out_opt_ mdTypeDef* pmdTypeDef) + { + wchar_t pszPackagePath[MAX_PATH + 1]; + PWSTR pszPackagePathWritePtr = pszPackagePath; + size_t cchPackagePathRemaining = ARRAYSIZE(pszPackagePath); + + HRESULT hr = StringCchCopyEx( + pszPackagePath, + ARRAYSIZE(pszPackagePath), + pszDirectoryPath, + &pszPackagePathWritePtr, + &cchPackagePathRemaining, + 0); + + if (SUCCEEDED(hr)) + { + // If the path is not terminated by a backslash, then append one. + if (pszPackagePath[ARRAYSIZE(pszPackagePath) - cchPackagePathRemaining - 1] != L'\\') + { + hr = StringCchCopyEx( + pszPackagePathWritePtr, + cchPackagePathRemaining, + L"\\", + &pszPackagePathWritePtr, + &cchPackagePathRemaining, + 0); + } + } + + if (SUCCEEDED(hr)) + { + hr = FindTypeInDirectory( + pMetaDataDispenser, + pszFullName, + pszPackagePath, + phstrMetaDataFilePath, + ppMetaDataImport, + pmdTypeDef); + } + + return hr; + } + + HRESULT ResolveThirdPartyType( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszFullName, + _Out_opt_ HSTRING* phstrMetaDataFilePath, + _COM_Outptr_opt_result_maybenull_ IMetaDataImport2** ppMetaDataImport, + _Out_opt_ mdTypeDef* pmdTypeDef) + { + HRESULT hr = S_OK; + UINT32 dwPackagesCount = 0; + UINT32 dwBufferLength = 0; + + const UINT32 filter = PACKAGE_FILTER_HEAD | PACKAGE_FILTER_DIRECT | PACKAGE_FILTER_IS_IN_RELATED_SET; + hr = HRESULT_FROM_WIN32(GetCurrentPackageInfo(filter, &dwBufferLength, nullptr, &dwPackagesCount)); + // Only find the type if the it is a unpacakged app. Packaged apps can have their exe on their package graph, + // which will allow type resolution against adjacent WinMDs. + if (hr == HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE)) + { + PCWSTR exeDir = nullptr; // Never freed; owned by process global. + RETURN_IF_FAILED(GetProcessExeDir(&exeDir)); + + hr = FindTypeInDirectoryWithNormalization( + pMetaDataDispenser, + pszFullName, + exeDir, + phstrMetaDataFilePath, + ppMetaDataImport, + pmdTypeDef); + + if (hr == RO_E_METADATA_NAME_NOT_FOUND) + { + PCWSTR dllDir = nullptr; // Never freed; owned by process global. + RETURN_IF_FAILED(GetProcessDllDir(&dllDir)); + + hr = FindTypeInDirectoryWithNormalization( + pMetaDataDispenser, + pszFullName, + dllDir, + phstrMetaDataFilePath, + ppMetaDataImport, + pmdTypeDef); + + if (hr == RO_E_METADATA_NAME_NOT_FOUND) + { + // For compatibility purposes, if we fail to find the type in the unpackaged location, we should return + // HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE) instead of a "not found" error. This preserves the + // behavior that existed before unpackaged type resolution was implemented. + hr = HRESULT_FROM_WIN32(APPMODEL_ERROR_NO_PACKAGE); + } + } + return hr; + } + else + { + return RO_E_METADATA_NAME_NOT_FOUND; + } + } + + // + // MetaDataImportersLRUCache implementation + // + INIT_ONCE MetaDataImportersLRUCache::s_initOnce = INIT_ONCE_STATIC_INIT; + MetaDataImportersLRUCache* MetaDataImportersLRUCache::s_pMetaDataImportersLRUCacheInstance = nullptr; + + MetaDataImportersLRUCache* MetaDataImportersLRUCache::GetMetaDataImportersLRUCacheInstance() + { + BOOL fInitializationSucceeded = InitOnceExecuteOnce( + &s_initOnce, + ConstructLRUCacheIfNecessary, + nullptr, + nullptr); + + UNREFERENCED_PARAMETER(fInitializationSucceeded); + + return s_pMetaDataImportersLRUCacheInstance; + } + + // Called via InitOnceExecuteOnce. + BOOL CALLBACK MetaDataImportersLRUCache::ConstructLRUCacheIfNecessary( + PINIT_ONCE /*initOnce*/, + PVOID /*parameter*/, + PVOID* /*context*/) + { + HRESULT hr = S_OK; + + if (s_pMetaDataImportersLRUCacheInstance == nullptr) + { + s_pMetaDataImportersLRUCacheInstance = new MetaDataImportersLRUCache(); + + if (s_pMetaDataImportersLRUCacheInstance == nullptr) + { + hr = E_OUTOFMEMORY; + } + } + + return SUCCEEDED(hr); + } + + HRESULT MetaDataImportersLRUCache::GetMetaDataImporter( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszCandidateFilePath, + _Outptr_opt_ IMetaDataImport2** ppMetaDataImporter) + { + if (ppMetaDataImporter == nullptr) + { + return ERROR_BAD_ARGUMENTS; + } + + HRESULT hr = S_OK; + *ppMetaDataImporter = nullptr; + + EnterCriticalSection(&_csCacheLock); + + if (IsFilePathCached(pszCandidateFilePath)) + { + // Get metadata importer from cache. + *ppMetaDataImporter = _metadataImportersMap[pszCandidateFilePath]; + IMetaDataImport2* value = *ppMetaDataImporter; + if (value != nullptr) + { + value->AddRef(); + } + } + else + { + // Importer was not found in cache. + hr = GetNewMetaDataImporter( + pMetaDataDispenser, + pszCandidateFilePath, + ppMetaDataImporter); + } + + LeaveCriticalSection(&_csCacheLock); + + return hr; + } + + HRESULT MetaDataImportersLRUCache::GetNewMetaDataImporter( + _In_ IMetaDataDispenserEx* pMetaDataDispenser, + _In_ PCWSTR pszCandidateFilePath, + _Outptr_opt_ IMetaDataImport2** ppMetaDataImporter) + { + if (ppMetaDataImporter == nullptr) + { + return ERROR_BAD_ARGUMENTS; + } + + HRESULT hr; + + hr = pMetaDataDispenser->OpenScope( + pszCandidateFilePath, + ofReadOnly, + IID_IMetaDataImport2, + reinterpret_cast<IUnknown**>(ppMetaDataImporter)); + + if (SUCCEEDED(hr)) + { + _metadataImportersMap.emplace( + pszCandidateFilePath, + *ppMetaDataImporter); + IMetaDataImport2* value = *ppMetaDataImporter; + if (value != nullptr) + { + value->AddRef(); + } + } + + if (SUCCEEDED(hr)) + { + hr = AddNewFilePathToList(pszCandidateFilePath); + } + + return hr; + } + + HRESULT MetaDataImportersLRUCache::AddNewFilePathToList(PCWSTR pszFilePath) + { + HRESULT hr = RemoveLeastRecentlyUsedItemIfListIsFull(); + + if (SUCCEEDED(hr)) + { + // Make room for new element. + for (int i = g_dwMetaDataImportersLRUCacheSize - 2; i >= 0; i--) + { + _arFilePaths[i + 1] = _arFilePaths[i]; + } + + _arFilePaths[0] = AllocateAndCopyString(pszFilePath); + + if (_arFilePaths[0] == nullptr) + { + hr = E_OUTOFMEMORY; + } + } + + return hr; + } + + bool MetaDataImportersLRUCache::IsFilePathCached(PCWSTR pszFilePath) + { + int filePathIndex = GetFilePathIndex(pszFilePath); + + if (filePathIndex != -1) + { + MoveElementToFrontOfList(filePathIndex); + return true; + } + else + { + return false; + } + } + + int MetaDataImportersLRUCache::GetFilePathIndex(PCWSTR pszFilePath) + { + int filePathIndex = -1; + + for (int i = 0; (i < g_dwMetaDataImportersLRUCacheSize) && (_arFilePaths[i] != nullptr); i++) + { + if (wcscmp(pszFilePath, _arFilePaths[i]) == 0) + { + filePathIndex = i; + break; + } + } + + return filePathIndex; + } + + void MetaDataImportersLRUCache::MoveElementToFrontOfList(int elementIndex) + { + PWSTR pszFoundFilePath = _arFilePaths[elementIndex]; + + for (int i = elementIndex - 1; i >= 0; i--) + { + _arFilePaths[i + 1] = _arFilePaths[i]; + } + + _arFilePaths[0] = pszFoundFilePath; + } + + HRESULT MetaDataImportersLRUCache::RemoveLeastRecentlyUsedItemIfListIsFull() + { + HRESULT hr = S_OK; + PWSTR pszLastFilePathInList = _arFilePaths[g_dwMetaDataImportersLRUCacheSize - 1]; + + if (pszLastFilePathInList != nullptr) + { + IMetaDataImport2* value = _metadataImportersMap[pszLastFilePathInList]; + if (value != nullptr) + { + value->Release(); + value = nullptr; + } + if (!_metadataImportersMap.erase(pszLastFilePathInList)) + { + hr = E_UNEXPECTED; + } + + delete[] pszLastFilePathInList; + _arFilePaths[g_dwMetaDataImportersLRUCacheSize - 1] = nullptr; + } + + return hr; + } +} diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/typeresolution.h diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/winrtact.def b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRT/winrtact.def diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTManagedTest/Program.cs b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTManagedTest/Program.cs diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTManagedTest/UndockedRegFreeWinRTManagedTest.csproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTManagedTest/UndockedRegFreeWinRTManagedTest.csproj diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/UndockedRegFreeWinRTTest.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/UndockedRegFreeWinRTTest.vcxproj diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/UndockedRegFreeWinRTTest.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/UndockedRegFreeWinRTTest.vcxproj.filters diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/directory.build.props b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/directory.build.props diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/main.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/main.cpp diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/packages.config b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/packages.config diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/pch.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/pch.cpp diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/pch.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/pch.h diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/test_apartment_activation.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/test_apartment_activation.cpp diff --git a/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/test_files/UndockedRegFreeWinRTTest.exe.manifest b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/UndockedRegFreeWinRTTest/test_files/UndockedRegFreeWinRTTest.exe.manifest diff --git a/src/UndockedRegFreeWinRT/detours/creatwth.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/creatwth.cpp diff --git a/src/UndockedRegFreeWinRT/detours/detours.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detours.cpp diff --git a/src/UndockedRegFreeWinRT/detours/detours.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detours.h diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detours.vcxproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detours.vcxproj @@ -0,0 +1,181 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClCompile Include="creatwth.cpp" /> + <ClCompile Include="detours.cpp" /> + <ClCompile Include="disasm.cpp" /> + <ClCompile Include="disolarm.cpp" /> + <ClCompile Include="disolarm64.cpp" /> + <ClCompile Include="disolia64.cpp" /> + <ClCompile Include="disolx64.cpp" /> + <ClCompile Include="disolx86.cpp" /> + <ClCompile Include="image.cpp" /> + <ClCompile Include="modules.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="detours.h" /> + <ClInclude Include="detver.h" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>16.0</VCProjectVersion> + <ProjectGuid>{787EC629-C0FB-4BA9-9746-4A82CD06B73E}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>detours</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + <ProjectName>Detours</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <IntDir>$(Platform)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <AdditionalUsingDirectories>$(ProjectDir);%(AdditionalUsingDirectories)</AdditionalUsingDirectories> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/detours/detours.vcxproj.filters b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detours.vcxproj.filters diff --git a/src/UndockedRegFreeWinRT/detours/detver.h b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/detver.h diff --git a/src/UndockedRegFreeWinRT/detours/disasm.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disasm.cpp diff --git a/src/UndockedRegFreeWinRT/detours/disolarm.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disolarm.cpp diff --git a/src/UndockedRegFreeWinRT/detours/disolarm64.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disolarm64.cpp diff --git a/src/UndockedRegFreeWinRT/detours/disolia64.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disolia64.cpp diff --git a/src/UndockedRegFreeWinRT/detours/disolx64.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disolx64.cpp diff --git a/src/UndockedRegFreeWinRT/detours/disolx86.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/disolx86.cpp diff --git a/src/UndockedRegFreeWinRT/detours/image.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/image.cpp diff --git a/src/UndockedRegFreeWinRT/detours/modules.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/modules.cpp diff --git a/src/UndockedRegFreeWinRT/detours/uimports.cpp b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/detours/uimports.cpp diff --git a/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.cs b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.cs @@ -0,0 +1,15 @@ +using System.Runtime.InteropServices; + +namespace Microsoft.Windows +{ + public static class UndockedRegFreeWinrt + { + [DllImport("winrtact.dll", PreserveSig=true)] + static extern void winrtact_Initialize(); + + public static void Initialize() + { + winrtact_Initialize(); + } + } +}+ \ No newline at end of file diff --git a/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.csproj b/src/Xlang/UndockedRegFreeWinRT/src/UndockedRegFreeWinRT/mwinrtact/mwinrtact.csproj