diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..09f2419b9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,162 @@ +# editorconfig.org + +# This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = space +indent_size = 4 + +[project.json] +indent_size = 2 + +# C# files +[*.cs] +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current + +# avoid this. unless absolutely necessary +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +# only use var when it's obvious what the variable type is +csharp_style_var_for_built_in_types = false:none +csharp_style_var_when_type_is_apparent = false:none +csharp_style_var_elsewhere = false:suggestion + +# use language keywords instead of BCL types +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# name all constant fields using PascalCase +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.required_modifiers = const + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# static fields should have s_ prefix +dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion +dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields +dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_prefix_style.required_prefix = s_ +dotnet_naming_style.static_prefix_style.capitalization = camel_case + +# internal and private fields should be _camelCase +dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion +dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields +dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style + +dotnet_naming_symbols.private_internal_fields.applicable_kinds = field +dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal + +dotnet_naming_style.camel_case_underscore_style.required_prefix = _ +dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case + +# Code style defaults +dotnet_sort_system_directives_first = true +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Pattern matching +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +# Null checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# C++ Files +[*.{cpp,h,in}] +curly_bracket_next_line = true +indent_brace_style = Allman + +# Xml project files +[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml build files +[*.builds] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf +[*.{cmd, bat}] +end_of_line = crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore index fbe9c3b46..48f24dfd9 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ bld/ # Visual Studio 2015/2017 cache/options directory .vs/ +.vscode/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ diff --git a/Directory.Build.props b/Directory.Build.props index f9fb5bdf6..dee717a01 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,15 +1,25 @@ - - - + + + $(TestWpfArcadeSdkPath) + $(TestWpfArcadeSdkPath)\ + - - $(CopyrightNetFoundation) - MIT + + $(MSBuildThisFileDirectory)eng\WpfArcadeSdk\ + + + + $(WpfArcadeSdkPath)Sdk\Sdk.props + $(WpfArcadeSdkPath)Sdk\Sdk.targets - - true - full - + + + + diff --git a/Directory.Build.targets b/Directory.Build.targets index fcdc2c1ad..1394a2067 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,6 +1,9 @@ - - - - + + + + diff --git a/Documentation/images/configurations.png b/Documentation/images/configurations.png new file mode 100644 index 000000000..36c4b6178 Binary files /dev/null and b/Documentation/images/configurations.png differ diff --git a/Documentation/packaging.md b/Documentation/packaging.md new file mode 100644 index 000000000..e1b938b29 --- /dev/null +++ b/Documentation/packaging.md @@ -0,0 +1,71 @@ +# Packaging + +Packaging is implemented in the following files: + +``` + $(WpfArcadeSdkToolsDir)\Packaging.props + $(WpfArcadeSdkToolsDir)\Packaging.targets + $(RepoRoot)\packaging\**\* + │ + ├───Microsoft.DotNet.Arcade.Wpf.Sdk + │ Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj + │ + ├───Microsoft.DotNet.Wpf.DncEng + │ Microsoft.DotNet.Wpf.DncEng.ArchNeutral.csproj + │ Microsoft.DotNet.Wpf.DncEng.csproj + │ + └───Microsoft.DotNet.Wpf.GitHub + Microsoft.DotNet.Wpf.GitHub.ArchNeutral.csproj + Microsoft.DotNet.Wpf.GitHub.csproj + +``` + + - The `ArchNeutral` packages are built only during the `x86` (i.e., `AnyCPU`) build phase + - Normally, the `ArchNeutral` packages will contain a `runtime.json` file that incorporates the *Bait & Switch* technique for referencing RID-specific packages automatically. + - `runtime.json` functionality is turned off when a packaging project requests so by setting `$(PlatformIndependentPackage)=true`. + - See [Improve documentation - bait and switch pattern, other #1282 ](https://github.com/NuGet/docs.microsoft.com-nuget/issues/1282) + + + - The packages that are not `ArchNeutral` are architecture-specific, and will produce packages containing the RID (`win-x86`, `win-x64`) as a prefix + - The arch-specific packages are produced in each of the build phases. + +#### Package Names + +There are two packages produced out of this repo, a *transport* package and an *MsBuild Sdk* package: + +- `Microsoft.DotNet.Wpf.Github` + - This contains assemblies and corresponding reference binaries that are currently built out of this repo ([https://www.github.com/dotnet/wpf](https://www.github.com/dotnet/wpf)). +- `Microsoft.DotNet.Arcade.Wpf.Sdk` + - This is an *MsBuild Sdk*, and is and extension to [Microsoft.DotNet.Arcade.Sdk](https://www.github.com/dotnet/arcade). + - This Sdk contains all the build props, targets and scripts needed to build WPF. + - Since WPF's build is split across two repos, we build this Sdk out of one repo, and consume it as an *MsBuild Sdk* in the other repo. + +#### Opting into a package + +- An assembly opts-into a package in `$(WpfArcadeSdkToolsDir)\Packaging.props` by simply setting the `PackageName` property, for e.g., like this: + + `$(DncEngTransportPackageName)` + +In practice, this is not needed. *Shipping* assemblies are already enumerated in detail within `$(WpfArcadeSdkToolsDir)ShippingProjects.props`, and each one of them is marked for packaging correctly within `Packaging.props` based on its `$(RepoLocation)` value (possible values are `{Internal, External}`) + +- These package names that various assembly projects can opt to be packaged into are defined in `$(WpfArcadeSdkToolsDir)\Packaging.props`. The project names under `$(RepoRoot)\packaging\` must match these. + +#### How Packaging Works + +##### Preparing Package Assets (*`PreparePackageAssets`* target) + +- *`PreparePackageAssets`* target is defined in `$(WpfArcadeSdkToolsDir)Packaging.targets` +- It runs after *`Build`*, and copies all project outputs, symbols, reference assemblies, satellite assemblies, and content files (defined in *`@(PackageContent)`* `ItemGroup`) to `$(ArtifactsPackagingDir)$(PackageName)\lib\$(TargetFrameworkOrRuntimeIdentifier)\` +- If `@(PackagingAssemblyContent)` is populated, then only those files from `$(OutDir)` would be copied and packaged further - and none others would be included. +- At the end of this target, all files that need to be packed would have been laid out in the right folder hierarchy, and ready to be packed. + +##### Populate the `@(Content)` itemgroup with custom lsit of package-assets (*`CreateContentFolder`* target) + +- *`CreateContentFolder`* is defined in `$(WpfArcadeSdkToolsDir)Packaging.targets` +- It runs just before *`GenerateNuspec`* target, and populates `@(Content)` with files that were copied during *`PreparePackageAssets`* +- This is consume by NuGet `PackTask` to create the package. + +##### Create a Nuget Package + +- The projects under `$(RepoRoot)\packaging` are the only ones with `$(IsPackable)=true` +- The layout of the generated package is identical to the layout under `$(ArtifactsPackagindir)$(PackageName)\` diff --git a/Documentation/solution-and-project-configurations.md b/Documentation/solution-and-project-configurations.md new file mode 100644 index 000000000..bce209044 --- /dev/null +++ b/Documentation/solution-and-project-configurations.md @@ -0,0 +1,53 @@ +# Solution and Project Configuration + +Solutions configurations are mapped to Project configurations in the following manner. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SolutionManaged ProjectsNative Projects
Debug|AnyCPUDebug|AnyCPUDebug|Win32
Debug|x86Debug|AnyCPUDebug|Win32
Debug|x64Debug|x64Debug|x64
Release|AnyCPURelease|AnyCPURelease|Win32
Release|x86Release|AnyCPURelease|Win32
Release|x64Release|x64Release|x64
+
+ + +- `AnyCPU` **solution** configuration is intended for developer-builds only. +- Official build would *always* specify `x86` or `x64` solution configurations explicitly. +- Native projects should map `AnyCPU` solution-configuration to `x86` project configuration +- Managed projects should map `x86` solution-configuration to `AnyCPU` project configuration +- Use Solution->Properties->Configuration view to ensure that the mapping between solution-configuration and project configuration is consistent for every possible configuration. +- Note that packaging projects under `nupkg` folder have only one (`AnyCPU`) configuration + +![](images/configurations.png) diff --git a/Microsoft.Dotnet.Wpf.sln b/Microsoft.Dotnet.Wpf.sln index fe16fae85..a9bf0453b 100644 --- a/Microsoft.Dotnet.Wpf.sln +++ b/Microsoft.Dotnet.Wpf.sln @@ -1,10 +1,22 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2048 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28407.52 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Xaml", "src\Microsoft.DotNet.Wpf\src\System.Xaml\System.Xaml.csproj", "{9AC36357-34B7-40A1-95CA-FE9F46D089A7}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "packaging", "packaging", "{0159B0F1-0626-4BED-8D1B-CBFF4F12C369}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.DotNet.Wpf.GitHub", "Microsoft.DotNet.Wpf.GitHub", "{BF20132A-191F-4D34-9A1B-831772A6DFCF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Wpf.GitHub", "packaging\Microsoft.DotNet.Wpf.GitHub\Microsoft.DotNet.Wpf.GitHub.csproj", "{C847934A-828C-4EBB-A004-B0E97C8313F4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Wpf.GitHub.ArchNeutral", "packaging\Microsoft.DotNet.Wpf.GitHub\Microsoft.DotNet.Wpf.GitHub.ArchNeutral.csproj", "{9A7E395B-E859-40E2-809D-EFB72CF3A2EE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.DotNet.Arcade.Wpf.Sdk", "Microsoft.DotNet.Arcade.Wpf.Sdk", "{8A2ABE39-2D50-48CA-AC32-078BBA32757A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral", "packaging\Microsoft.DotNet.Arcade.Wpf.Sdk\Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj", "{B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,11 +39,54 @@ Global {9AC36357-34B7-40A1-95CA-FE9F46D089A7}.Release|x64.Build.0 = Release|x64 {9AC36357-34B7-40A1-95CA-FE9F46D089A7}.Release|x86.ActiveCfg = Release|Any CPU {9AC36357-34B7-40A1-95CA-FE9F46D089A7}.Release|x86.Build.0 = Release|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|x64.ActiveCfg = Debug|x64 + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|x64.Build.0 = Debug|x64 + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|x86.ActiveCfg = Debug|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Debug|x86.Build.0 = Debug|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|Any CPU.Build.0 = Release|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|x64.ActiveCfg = Release|x64 + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|x64.Build.0 = Release|x64 + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|x86.ActiveCfg = Release|Any CPU + {C847934A-828C-4EBB-A004-B0E97C8313F4}.Release|x86.Build.0 = Release|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|x64.ActiveCfg = Debug|x64 + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|x64.Build.0 = Debug|x64 + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Debug|x86.Build.0 = Debug|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|Any CPU.Build.0 = Release|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|x64.ActiveCfg = Release|x64 + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|x64.Build.0 = Release|x64 + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|x86.ActiveCfg = Release|Any CPU + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE}.Release|x86.Build.0 = Release|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|x64.ActiveCfg = Debug|x64 + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|x64.Build.0 = Debug|x64 + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|x86.ActiveCfg = Debug|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Debug|x86.Build.0 = Debug|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|Any CPU.Build.0 = Release|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|x64.ActiveCfg = Release|x64 + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|x64.Build.0 = Release|x64 + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|x86.ActiveCfg = Release|Any CPU + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {BF20132A-191F-4D34-9A1B-831772A6DFCF} = {0159B0F1-0626-4BED-8D1B-CBFF4F12C369} + {C847934A-828C-4EBB-A004-B0E97C8313F4} = {BF20132A-191F-4D34-9A1B-831772A6DFCF} + {9A7E395B-E859-40E2-809D-EFB72CF3A2EE} = {BF20132A-191F-4D34-9A1B-831772A6DFCF} + {8A2ABE39-2D50-48CA-AC32-078BBA32757A} = {0159B0F1-0626-4BED-8D1B-CBFF4F12C369} + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3} = {8A2ABE39-2D50-48CA-AC32-078BBA32757A} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {671D19D1-5F0E-4453-9D18-3A28AC0E8DEF} + SolutionGuid = {D4D12991-F531-4FC3-849D-29946BCA818A} EndGlobalSection EndGlobal diff --git a/NuGet.config b/NuGet.config index 147ecfda1..cbb9e7951 100644 --- a/NuGet.config +++ b/NuGet.config @@ -1,9 +1,18 @@ + + + + + + diff --git a/Packaging.targets b/Packaging.targets deleted file mode 100644 index c9854c780..000000000 --- a/Packaging.targets +++ /dev/null @@ -1,26 +0,0 @@ - - - \ No newline at end of file diff --git a/Restore.cmd b/Restore.cmd new file mode 100644 index 000000000..f9b8e80f1 --- /dev/null +++ b/Restore.cmd @@ -0,0 +1,2 @@ +@echo off +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\common\Build.ps1""" -restore %*" \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 56c980d7f..578cf26c3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,14 +1,22 @@ -# This is a simple wrapper for eng/ci.yml to get around the limitation of +# This is a simple wrapper for eng/pipeline.yml to get around the limitation of # user-defined variables not being available in yaml template expressions. # Parameters ARE available in template expressions, and parameters can have default values, # so they can be used to control yaml flow. +# +# TODO: +# BuildMsBuildSdkPackages, _BuildMsBuildSdkPackages, _BuildMsBuildSdkPackagesArgs should be removed eventually, when +# Microsoft.DotNet.Arcade.Wpf.Sdk is moved from dnceng/dotnet-wpf-int to github/dotnet/wpf. +# When that move happens, there would be no need to suppress the Sdk build by default. Currently, +# allowing the Sdk to build every time will result in an infinite loop that triggers a dotnet/wpf built, variables: # clean the local repo on the build agents Build.Repository.Clean: true - + # When set to true in a manual built, it produces and publishes + # Microsoft.DotNet.Arcade.Wpf.Sdk + BuildMsBuildSdkPackages: false _PublishUsingPipelines: false _DotNetArtifactsCategory: .NETCore @@ -16,6 +24,7 @@ variables: trigger: - master - release/3.0 +- arcade # To be added in the future when VSTS supports this feature # only trigger pull request builds for the master branch @@ -28,6 +37,6 @@ jobs: parameters: ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: # agent pool can't be read from a user-defined variable (Azure DevOps limitation) - agentPool: dotnet-internal-temp-vs2019 + agentPool: dotnet-internal-vs2019-preview # runAsPublic is used in expressions, which can't read from user-defined variables runAsPublic: false diff --git a/build.sh b/build.sh new file mode 100644 index 000000000..8477d5af8 --- /dev/null +++ b/build.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +source="${BASH_SOURCE[0]}" + +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done + +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" +"$scriptroot/eng/common/build.sh" --build --restore $@ diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b4b28e0f4..459cb3f56 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,57 +1,77 @@ - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - + https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 - - https://github.com/dotnet/corefx - 7f5db5154e0cb653275d8dad5bc7030221446c17 - - + https://github.com/dotnet/core-setup - afd454e4fa78e615f7501c8eddf24af579f7719d + 963e3e430dd51963894b065ee637fb372079f17c + + + https://github.com/dotnet/corefx + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 + 5589 + + + https://github.com/dotnet/winforms + 666ca26fa9c98fbb86b158d30870bd2350ea6f1c + 6173 + + + https://github.com/dotnet/corefx + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 + 5589 + + + https://github.com/dotnet/corefx + 82dc96bfbf1d55716e4e0b516bea115644e32cd1 + 5589 - + + https://github.com/dotnet/arcade + 04b492d62263fe2b1523506f92d0fe4c3fd1c4ad + + https://github.com/dotnet/arcade 69f276904fdd6d8f81404b857f295537894b81d3 diff --git a/eng/Versions.props b/eng/Versions.props index c4e588ca7..40bde031c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -4,35 +4,51 @@ 4.8.0 preview4 4.0.0.0 + 4.6.0-preview4.19178.1 + 4.8.0-preview4.19170.4 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 - 4.6.0-preview4.19177.9 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19176.11 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + 4.6.0-preview4.19178.1 + + 1.0.0-beta.19177.11 0.1.0-preview2-181205-2 4.4.0 - 4.6.0-alpha-27128-8 15.9.20 15.9.20 + 5.28.1.1-1 2.4.0 2.4.0 2.4.0 - - $(RestoreSources);https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json + + $(RestoreSources); + https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json; + https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json + + + + + System.Reflection.MetadataLoadContext + Microsoft.Private.Winforms + System.Drawing.Common + System.DirectoryServices diff --git a/eng/WpfArcadeSdk/Sdk/Sdk.props b/eng/WpfArcadeSdk/Sdk/Sdk.props new file mode 100644 index 000000000..62404b8fc --- /dev/null +++ b/eng/WpfArcadeSdk/Sdk/Sdk.props @@ -0,0 +1,63 @@ + + + + + + $([System.IO.Directory]::GetParent("$(MSBuildThisFileDirectory.TrimEnd('\'))"))\ + $(WpfArcadeSdkRoot)tools\ + + + + + + + $(WpfArcadeSdkToolsDir)AvTrace\GenTraceSources.pl + $(WpfArcadeSdkToolsDir)GenXmlStringTable.pl + + true + + 8.0 + true + true + + Open + + + + + + + + + + + + + + + + full + "$(RepoRoot).tools\native\bin\strawberry-perl\$(StrawberryPerlVersion)\portableshell.bat" + + $(WpfArcadeSdkToolsDir)Wpf.Cpp.props + $(WpfArcadeSdkToolsDir)GenerateModuleDefinitionFile.targets + + + + $(WpfArcadeSdkToolsDir)NoTargets.props + $(WpfArcadeSdkToolsDir)NoTargets.targets + + + + + $(NoWarn);NU3027 + + + + + diff --git a/eng/WpfArcadeSdk/Sdk/Sdk.targets b/eng/WpfArcadeSdk/Sdk/Sdk.targets new file mode 100644 index 000000000..9ca41359e --- /dev/null +++ b/eng/WpfArcadeSdk/Sdk/Sdk.targets @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/AvTrace/GenTraceSources.pl b/eng/WpfArcadeSdk/tools/AvTrace/GenTraceSources.pl new file mode 100644 index 000000000..593c43dd5 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/AvTrace/GenTraceSources.pl @@ -0,0 +1,136 @@ +######################################################## +# Generate the enum used for retrieving wrapper classes for managed debug tracing. +# +# This scripts reads an input file with the trace information, +# and generates a cs file with the enum containing trace area values. +# +######################################################## +use File::Copy; +use Getopt::Std; + +sub usage() +{ + print "Usage: $0 -i [Inputfile1,Inputfile2,...] -o [output.cs] \n\n"; +} + +#hash to store all the arguements. +my %args +; +#error header. +my $error_msg = "GenTraceSources.pl: error:"; + +#get the switches values. +getopts('i:o:', \%args); + +#all these switches are required. + +my $outfile = $args{o}; +my @inputfilelist = split(/,/, $args{i}); + +print "\n"; + + +# +# The header for the file +# + +my $header = <<"END_OF_HEADER"; +//------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// Information Contained Herein is Proprietary and Confidential. +// +// +// This file is generated from AvTraceMessages.txt by gentracesources.pl - do not modify this file directly +//------------------------------------------------------------------------------- + +using MS.Internal; + +namespace System.Diagnostics +{ + /// Access point for TraceSources + public static partial class PresentationTraceSources + { +END_OF_HEADER + + +# +# The footer for the file +# + +my $footer = <<"END_OF_FOOTER"; + } +}//endof namespace +END_OF_FOOTER + + +# +# Initialize the output file +# + +open(OUT, '>'.$outfile) or die "$error_msg Cannot create $outfile. $!\n"; + +print OUT $header or die "$error_msg Cannot write to $outfile. $! \n"; + +{ + # Now we read the trace areas from the files + + for $inputfile (@inputfilelist) + { + + open(IN, $inputfile) or die "$error_msg Cannot open $inputfile. $!\n"; + + + # Loop through the strings + + my $traceArea; + my $traceClass; + my $traceName; + my $traceSourceName; + + while ($stringIn = ) + { + chomp; + + # Find the beginning of a section, with the trace source name + # and the name of the trace area. + # E.g. "[System.Windows.ComponentModel.Events,RoutedEvent]" + + if (($traceName, $traceArea, $traceClass) = ($stringIn =~ /^\[(.*),(.*),(.*)\]/)) + { + # append "Source" for the TraceSource name + $traceSourceName = $traceArea."Source"; + + # Write out the property + + print OUT +" + /// $traceSourceName for $traceArea + public static TraceSource $traceSourceName + { + get + { + if (_$traceSourceName == null) + { + _$traceSourceName = CreateTraceSource(\"$traceName\"); + } + return _$traceSourceName; + } + } + internal static TraceSource _$traceSourceName; +" + or die "$error_msg Cannot write to $outfile. $! \n"; + + } + } + + #close files + close (IN) or die "$error_msg Cannot close $infile. $!\n"; + } +} + +print OUT "\n".$footer or die "$error_msg Cannot write to $outfile. $! \n"; + +#close files +close (OUT) or die "$error_msg Cannot close $outfile. $!\n"; + diff --git a/eng/WpfArcadeSdk/tools/AvTrace/GenTraceStrings.pl b/eng/WpfArcadeSdk/tools/AvTrace/GenTraceStrings.pl new file mode 100644 index 000000000..937e125b5 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/AvTrace/GenTraceStrings.pl @@ -0,0 +1,297 @@ +######################################################## +# Generate the wrapper classes for managed debug tracing. +# +# This scripts reads an input file with the trace information, +# and generates a cs file with the wrapper classes. +# +######################################################## +use File::Copy; +use Getopt::Std; + +sub usage() +{ + print "Usage: $0 -i [Inputfile1] -o [output.cs] \n\n"; +} + +#hash to store all the arguements. +my %args +; +#error header. +my $error_msg = "GenTraceStrings.pl: error:"; + +#get the switches values. +getopts('i:o:', \%args); + +#all these switches are required. + +my $outfile = $args{o}; +my $inputfile = $args{i}; + +print "\n"; + + +# +# The header for the file +# + +my $header = <<"END_OF_HEADER"; + +using System; +using System.Diagnostics; + +namespace MS.Internal +{ +END_OF_HEADER + + +# +# The footer for the file +# + +my $footer = <<"END_OF_FOOTER"; +}//endof namespace +END_OF_FOOTER + + +# +# The footer section for each class +# + +my $classFooter = <<"END_OF_FOOTER"; + + // Send a single trace output + static public void Trace( TraceEventType type, AvTraceDetails traceDetails, params object[] parameters ) + { + _avTrace.Trace( type, traceDetails.Id, traceDetails.Message, traceDetails.Labels, parameters ); + } + + // these help delay allocation of object array + static public void Trace( TraceEventType type, AvTraceDetails traceDetails ) + { + _avTrace.Trace( type, traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[0] ); + } + static public void Trace( TraceEventType type, AvTraceDetails traceDetails, object p1 ) + { + _avTrace.Trace( type, traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1 } ); + } + static public void Trace( TraceEventType type, AvTraceDetails traceDetails, object p1, object p2 ) + { + _avTrace.Trace( type, traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1, p2 } ); + } + static public void Trace( TraceEventType type, AvTraceDetails traceDetails, object p1, object p2, object p3 ) + { + _avTrace.Trace( type, traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1, p2, p3 } ); + } + + // Send a singleton "activity" trace (really, this sends the same trace as both a Start and a Stop) + static public void TraceActivityItem( AvTraceDetails traceDetails, params Object[] parameters ) + { + _avTrace.TraceStartStop( traceDetails.Id, traceDetails.Message, traceDetails.Labels, parameters ); + } + + // these help delay allocation of object array + static public void TraceActivityItem( AvTraceDetails traceDetails ) + { + _avTrace.TraceStartStop( traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[0] ); + } + static public void TraceActivityItem( AvTraceDetails traceDetails, object p1 ) + { + _avTrace.TraceStartStop( traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1 } ); + } + static public void TraceActivityItem( AvTraceDetails traceDetails, object p1, object p2 ) + { + _avTrace.TraceStartStop( traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1, p2 } ); + } + static public void TraceActivityItem( AvTraceDetails traceDetails, object p1, object p2, object p3 ) + { + _avTrace.TraceStartStop( traceDetails.Id, traceDetails.Message, traceDetails.Labels, new object[] { p1, p2, p3 } ); + } + + // Is tracing enabled here? + static public bool IsEnabled + { + get { return _avTrace != null && _avTrace.IsEnabled; } + } + + // Is there a Tracesource? (See comment on AvTrace.IsEnabledOverride.) + static public bool IsEnabledOverride + { + get { return _avTrace.IsEnabledOverride; } + } + + // Re-read the configuration for this trace source + static public void Refresh() + { + _avTrace.Refresh(); + } + + }//endof class $srclass +END_OF_FOOTER + + + +# +# Initialize the output file +# + +open(OUT, '>'.$outfile) or die "$error_msg Cannot create $outfile. $!\n"; + +print OUT $header or die "$error_msg Cannot write to $outfile. $! \n"; + + + +{ + # Now we read the trace information from the file + + open(IN, $inputfile) or die "$error_msg Cannot open $inputfile. $!\n"; + + + # Loop through the strings + + my $prev_id = 0; + my $max_id = 0; + my $inClass = 0; + my $traceArea; + my $traceClass; + my $traceName; + my $traceSourceName; + + while ($stringIn = ) + { + chomp; + next if ($stringIn =~ /^;/); # ignore all comments + next if ($stringIn =~ /^\r/); # ignore newline + + # Handle the beginning of a section, with the trace source name, + # the name of the area, and the name of the class to be generated. + # E.g. "[System.Windows.ComponentModel.Events,RoutedEvent,TraceRoutedEvent]" + + if (($traceName, $traceArea, $traceClass) = ($stringIn =~ /^\[(.*),(.*),(.*)\]/)) + { + # append "Source" for the property name to be used in PresentationTraceSources + + $traceSourceName = $traceArea."Source"; + + # Write out the class header + + print OUT +" + static internal partial class $traceClass + { + static private AvTrace _avTrace = new AvTrace( + delegate() { return PresentationTraceSources.$traceSourceName; }, + delegate() { PresentationTraceSources._$traceSourceName = null; } + ); + +" + or die "$error_msg Cannot write to $outfile. $! \n"; + + # reset id auto-generation counters + $max_id = $prev_id = 0; + $inClass = 1; + next; + } + + # Check for the end of a section, e.g. "[end]" + + if ($stringIn =~ /^\[end]/) + { + print OUT $classFooter or die "$error_msg Cannot write to $outfile. $! \n"; + $inClass = 0; + next; + } + + + # Handle a line within a section, which has the trace strings + # E.g. MyEvent=AUTO,FORMAT,{"Basic message or format string", "Param1", "Param2"} + + if (($name, $id, $shouldFormat, $labels) = ($stringIn =~ /^(\w+)=(\w*)\,(\w*)\,(.*)/)) + { + $inClass or die "Trace string '$stringIn' is not inside a section."; + + # auto-generate id if int is not specified + if ($id =~ /^\d+$/) + { + $max_id = $id if $id > $max_id; + } + elsif ($id == "" || $id == "AUTO") + { + $id = ++$max_id; + } + elsif ($id == "PREVIOUS") + { + $id = $prev_id; + } + else + { + die "invalid id '$id' for trace string."; + } + + if ($shouldFormat) + { + # create a method that passes args for the format string + + # TODO: calculate number of parameters and create precise method signature + + print OUT +" + static AvTraceDetails _$name; + static public AvTraceDetails $name(params object[] args) + { + if ( _$name == null ) + { + _$name = new AvTraceDetails( $id, new string[] $labels ); + } + + return new AvTraceFormat(_$name, args); + } +" + or die "$error_msg Cannot write to $outfile. $! \n"; + + } + elsif ($shouldFormat == "" || $shouldFormat =~ /false/i) + { + # create a property + print OUT +" + static AvTraceDetails _$name; + static public AvTraceDetails $name + { + get + { + if ( _$name == null ) + { + _$name = new AvTraceDetails( $id, new string[] $labels ); + } + + return _$name; + } + } +" + or die "$error_msg Cannot write to $outfile. $! \n"; + + } + else + { + die "invalid value '$id' for trace string ShouldFormat boolean."; + } + + $prev_id = $id; + next; + } + + + next if ($stringIn =~ /^$/); + + die "Invalid trace string '$stringIn'"; + } + + #close files + close (IN) or die "$error_msg Cannot close $infile. $!\n"; +} + +print OUT "\n".$footer or die "$error_msg Cannot write to $outfile. $! \n"; + +#close files +close (OUT) or die "$error_msg Cannot close $outfile. $!\n"; + diff --git a/eng/WpfArcadeSdk/tools/CodeAnalysis.props b/eng/WpfArcadeSdk/tools/CodeAnalysis.props new file mode 100644 index 000000000..438a69b97 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/CodeAnalysis.props @@ -0,0 +1,15 @@ + + + + $(MSBuildThisFileDirectory)CodeAnalysis\WpfCodeAnalysis.ruleset + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/CodeAnalysis/WpfCodeAnalysis.ruleset b/eng/WpfArcadeSdk/tools/CodeAnalysis/WpfCodeAnalysis.ruleset new file mode 100644 index 000000000..4b42f3909 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/CodeAnalysis/WpfCodeAnalysis.ruleset @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/CopyRedistFile.targets b/eng/WpfArcadeSdk/tools/CopyRedistFile.targets new file mode 100644 index 000000000..31f2dc555 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/CopyRedistFile.targets @@ -0,0 +1,23 @@ + + + + $(PreparePackageAssetsDependsOn); + CopyRedistFile + + + + + + + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.props b/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.props new file mode 100644 index 000000000..493e6ecdb --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.props @@ -0,0 +1,50 @@ + + + + + true + true + + + + $(AssemblyComVisible) + true + + + + DllImportSearchPath.AssemblyDirectory | DllImportSearchPath.System32 + true + + + + $(AssemblyName) + + + + $(AssemblyDescription) + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.targets b/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.targets new file mode 100644 index 000000000..813675e1b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ExtendedAssemblyInfo.targets @@ -0,0 +1,330 @@ + + + + + + + + + $(AssemblyName) + + $(AssemblyTitle) + $(Description) + + $(InformationalVersion) + $(Version) + + + + + $(FileVersion) + + + + $(COMPUTERNAME) + + + + $(ScmRepositoryUrl) + + + + $(SourceRevisionId) + + + + + + + + <_GeneratedAssemblyInfoFile Remove="@(_GeneratedAssemblyInfoFile)" /> + <_GeneratedAssemblyInfoFile Include="$(GeneratedAssemblyInfoFile)" /> + + + <_GeneratedExtendedAssemblyInfoFile Remove="@(_GeneratedExtendedAssemblyInfoFile)" /> + <_GeneratedExtendedAssemblyInfoFile Include="%(_GeneratedAssemblyInfoFile.RootDir)%(_GeneratedAssemblyInfoFile.Directory)%(_GeneratedAssemblyInfoFile.Filename).Extended%(_GeneratedAssemblyInfoFile.Extension)" /> + + + + @(_GeneratedExtendedAssemblyInfoFile) + + + + + + + + + + + + + + + + + + + + + + + + + 0) + { + Result = new TaskItem[ExtendedAssemblyInfo.Length]; + for (int i = 0; i < ExtendedAssemblyInfo.Length; i++) + { + ITaskItem item = ExtendedAssemblyInfo[i]; + string attr = item.GetMetadata("Identity"); // This is the Attribute type + + List parameters = new List(); + + var metadataNames = item.MetadataNames.Cast().ToList(); // Obtain all the Metadata names + + // Parameter names are of the form Parameter1, Parameter2, etc. + // Parameter0 is not allowed. + var parameterNames = metadataNames.Where((m) => Regex.IsMatch(m, @"Parameter\d+", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)); + parameterNames = parameterNames.Where((m) => !m.Equals("Parameter0", StringComparison.InvariantCultureIgnoreCase)); + + // Order the parameter names in ascending order, then iterate through them + var parameterNamesAscending = parameterNames.OrderBy((m) => Int32.Parse(m.Replace("Parameter", string.Empty))); + foreach (var parameter in parameterNamesAscending) + { + string paramValue = item.GetMetadata(parameter); + + bool isLiteral = false; + string isLiteralMetadataName = parameter.Replace("Parameter", "IsLiteral"); + if (metadataNames.Contains(isLiteralMetadataName)) + { + Boolean.TryParse(item.GetMetadata(isLiteralMetadataName), out isLiteral); + } + + if (isLiteral) + { + // The parameter is a literal, include it as-is + parameters.Add(paramValue); + } + else + { + // The parameter is NOT a litera, included it surrounded by double-quotes + parameters.Add("\"" + paramValue + "\""); ; + } + } + + // Separate the parameters by commas + string p = string.Join(",", parameters); + + // Construct the resolved attribute declaration + // [assembly: ] + // For e.g., + // [assembly: ComVisible(true)] + // [assembly: MetadataAttribute("Servicing","true")] + // Save the result and continue + string assemblyAttribute = string.Format("[assembly: {0}({1})]", attr, p); + Result[i] = new TaskItem(assemblyAttribute); + } + } +]]> + + + + + + + + + + + + + + <_ExtendedAssemblyMetadata Remove="@(_ExtendedAssemblyMetadata)" /> + <_ExtendedAssemblyMetadata Include="@(AssemblyMetadata)" + Condition="'@(AssemblyMetadata)'!=''" + AttributeName="AssemblyMetadata"> + %(Identity) + %(Value) + + + + + + + + + + + + + + + + + + +// This code was generated by a tool +// Target: GenerateExtendedAssemblyInfo +// Filename: $(MSBuildThisFile) +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +]]> + + + + + + + + + + + +//------------------------------------------------------------------------------ + ]]> + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/FixupProjectReferences.targets b/eng/WpfArcadeSdk/tools/FixupProjectReferences.targets new file mode 100644 index 000000000..5fd73aa0c --- /dev/null +++ b/eng/WpfArcadeSdk/tools/FixupProjectReferences.targets @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectReferenceWithConfiguration Remove="@(_ProjectReferenceWithConfiguration)" /> + <_ProjectReferenceWithConfiguration Include="@(_filtered_ProjectReferenceWithConfiguration)" /> + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/FolderPaths.props b/eng/WpfArcadeSdk/tools/FolderPaths.props new file mode 100644 index 000000000..7498073ee --- /dev/null +++ b/eng/WpfArcadeSdk/tools/FolderPaths.props @@ -0,0 +1,7 @@ + + + $(RepoRoot)src\Microsoft.DotNet.Wpf\cycle-breakers\ + $(RepoRoot)src\Microsoft.DotNet.Wpf\src\ + $(WpfSourceDir)shared\ + + diff --git a/eng/WpfArcadeSdk/tools/GenXmlStringTable.pl b/eng/WpfArcadeSdk/tools/GenXmlStringTable.pl new file mode 100644 index 000000000..9b733ade3 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/GenXmlStringTable.pl @@ -0,0 +1,427 @@ +######################################################## +# Generate the XmlStringTable handling class. +# This tool generates enums for xml strings that are +# used to index into the xml string table +# The entries in the xml string table: +# Index Name String Value Type +# This tool also generates XML Name table +######################################################## +use File::Copy; +use Getopt::Std; + +######################################################## +# usage: Print out usage +######################################################## + +sub usage() +{ + print "Usage: $0 -n [Namespacefile] -x [XmlStringfile] -e [fullenumclassname] -c [fullxmlstringclassname] -o [output.cs]\n\n"; + print "Example: perl $0 -n XmlNamespaceStringTable.txt -x xmlStringTable.txt -e XmlNamespaceId -c MS.Internal.IO.Packaging.XmlStringTable\n"; +} + +######################################################## +# Variables +######################################################## + +#hash to store all the arguements. +my %args +; +#error header. +my $error_msg = "GenXmlStringTable.pl: error:"; + + +########################################################## +# get the switches values do some minimum validataion +########################################################## + +getopts('c:e:n:o:x:', \%args); + +#all these switches are required. +if (!$args{c} || !$args{e} || !$args{n} || !$args{o} | !$args{x}) +{ + usage(); + exit; +} + +my $outfile = $args{o}; +my $fullxmlnsenumclassname = $args{e}; +my $fullxmlstrclassname = $args{c}; +my $xmlnsfile = $args{n}; +my $xmlstrfile = $args{x}; + +######################################################## +# Print out switch value information +######################################################## + +print "\n"; +print "Xml namespaces file: $xmlnsfile\n"; +print "Xml strings file: $xmlstrfile\n"; +print "Output .cs file: $outfile\n"; +print "Enum class name for all strings: $fullxmlnsenumclassname\n"; +print "Xml string table class name: $fullxmlstrclassname\n"; + + +######################################################## +# Parse class names and their namespaces +######################################################## + +#extract the namespace and enum class name +my ($enumnamespace, $enumsrclass) = ($fullxmlnsenumclassname =~ /^(.+)\.(.+)$/); +my $srid = $srclass."ID"; + +#extract the namespace and table class name +my ($tablenamespace, $tablesrclass) = ($fullxmlstrclassname =~ /^(.+)\.(.+)$/); +my $srid = $srclass."ID"; + +######################################################## +# Print out class information +######################################################## + +print "enum namespace: $enumnamespace\n"; +print "enum class name: $enumsrclass\n\n"; + +print "xml string table namespace: $tablenamespace\n"; +print "xml string class name: $tablesrclass\n"; + +######################################################## +# Count all xml namespaces and xml strings +######################################################## + +# Need to start from 1 since the first item is NotDefined +my $tableSize = 1; + +open(IN, $xmlnsfile) or die "$error_msg Cannot open $infile. $!\n"; + +while ($string = ) +{ + if ($string =~ /^(\w+)=/o) + { + $tableSize += 1; + } +} + +#### close files +close (IN) or die "$error_msg Cannot close $infile. $!\n"; + + +open(IN, $xmlstrfile) or die "$error_msg Cannot open $infile. $!\n"; + +while ($string = ) +{ + if ($string =~ /^(\w+)=/o) + { + $tableSize += 1; + } +} + +#### close files +close (IN) or die "$error_msg Cannot close $infile. $!\n"; + + +######################################################## +# Header of the generated cs file +# 1. Copyright information +# 2. Begining of the enum class +######################################################## + +my $header = <<"END_OF_HEADER"; +//------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// Information Contained Herein is Proprietary and Confidential. +// +// +// This file is generated from $xmlnsfile and $xmlstrfile by GenXmlStringTable.pl +// - do not modify this file directly +//------------------------------------------------------------------------------- + + +using System; +using System.Collections; +using System.Diagnostics; +using System.Xml; + +using $enumnamespace; + +namespace $enumnamespace +{ + + //an enums for xml string identifiers. + internal enum $enumsrclass : int + { + NotDefined = 0, +END_OF_HEADER + + +######################################################## +# Middle part of the generated cs file +# 1. Closing brakets for the enum class and the namespace +# 2. Begining of the enum class +# 3. Begining of the string table class +######################################################## + +my $tableclassheader = <<"END_OF_TABLE_CLASS_HEADER"; + } // end of enum $enumsrclass +} // end of namespace + +namespace $tablenamespace +{ + internal static class $tablesrclass + { + static $tablesrclass() + { + Object str; + +END_OF_TABLE_CLASS_HEADER + +######################################################## +# Footer of the generated cs file +# 1. Helper functions for the xml string table +# 2. Definition of the item entry in the xml string table +# 3. Private member variables +# 4. Closing brakets for the xml string class and the namespace +######################################################## + +my $footer = <<"END_OF_FOOTER"; + } + + internal static $enumsrclass GetEnumOf(Object xmlString) + { + Debug.Assert(xmlString is String); + + // Index 0 is reserved for NotDefined and doesn't have a table entry + // so start from 1 + for (int i = 1; i < _xmlstringtable.GetLength(0) ; ++i) + { + if (Object.ReferenceEquals(_xmlstringtable[i].Name, xmlString)) + { + return ((PackageXmlEnum) i); + } + } + + return PackageXmlEnum.NotDefined; + } + + internal static string GetXmlString($enumsrclass id) + { + CheckIdRange(id); + + return (string) _xmlstringtable[(int) id].Name; + } + + internal static Object GetXmlStringAsObject($enumsrclass id) + { + CheckIdRange(id); + + return _xmlstringtable[(int) id].Name; + } + + internal static $enumsrclass GetXmlNamespace($enumsrclass id) + { + CheckIdRange(id); + + return _xmlstringtable[(int) id].Namespace; + } + + internal static string GetValueType($enumsrclass id) + { + CheckIdRange(id); + + return _xmlstringtable[(int) id].ValueType; + } + + internal static NameTable NameTable + { + get + { + return _nameTable; + } + } + +#if false + internal static IEqualityComparer EqualityComparer + { + get + { + return _referenceComparer; + } + } +#endif + + private static void CheckIdRange($enumsrclass id) + { + // Index 0 is reserved for NotDefined and doesn't have a table entry + if ((int) id <= 0 || (int) id >= $tableSize) + { + throw new ArgumentOutOfRangeException("id"); + } + } + + internal static NameTable CloneNameTable() + { + NameTable nameTable = new NameTable(); + + // Index 0 is reserved for NotDefined and doesn't have a table entry + for (int i=1; i<$tableSize; ++i) + { + nameTable.Add((string)_xmlstringtable[i].Name); + } + + return nameTable; + } + + private struct XmlStringTableStruct + { + private Object _nameString; + private $enumsrclass _namespace; + private string _valueType; + + internal XmlStringTableStruct(Object nameString, $enumsrclass ns, string valueType) + { + _nameString = nameString; + _namespace = ns; + _valueType = valueType; + } + + internal Object Name { get { return (String) _nameString; } } + internal $enumsrclass Namespace { get { return _namespace; } } + internal string ValueType { get { return _valueType; } } + } + +#if false + // The Hashtable comparer that takes advantage of the fact + // that we know the object identities of all keys to find. + private class ReferenceComparer : IEqualityComparer + { + // Perform reference comparison. + // Explicit implementation to avoid conflict with object.Equals. + bool IEqualityComparer.Equals(object x, object y) + { + return object.ReferenceEquals(x, y); + } + + // Hash on object identity. + public int GetHashCode(object obj) + { + return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj); + } + } + +#endif + + private static XmlStringTableStruct[] _xmlstringtable = new XmlStringTableStruct[$tableSize]; + private static NameTable _nameTable = new NameTable(); +#if false + private static ReferenceComparer _referenceComparer = new ReferenceComparer(); +#endif + } //endof class $tablesrclass + +} // end of namespace + +END_OF_FOOTER + + +######################################################## +# +# Generate cs file +# +######################################################## + +#### open output c# file. + +open(OUT, '>'.$outfile) or die "$error_msg Cannot create $outfile. $!\n"; + +######################################################## +# Write out the predefined header +######################################################## + +print OUT $header or die "$error_msg Cannot write to $outfile. $! \n"; + +######################################################## +# Read in all xml namespace list and declare them in the enum class +######################################################## + +open(IN, $xmlnsfile) or die "$error_msg Cannot open $infile. $!\n"; + +while ($string = ) +{ + if ($string =~ /^(\w+)=/o) + { + print OUT " $1,\n" or die "$error_msg Cannot write to $outfile. $! \n"; + } +} + +#### close files +close (IN) or die "$error_msg Cannot close $infile. $!\n"; + +######################################################## +# Read in all xml strings and declare them in the enum class +######################################################## + +open(IN, $xmlstrfile) or die "$error_msg Cannot open $infile. $!\n"; + +while ($string = ) +{ + if ($string =~ /^(\w+)=/o) + { + print OUT " $1,\n" or die "$error_msg Cannot write to $outfile. $! \n"; + } +} + +#### close files +close (IN) or die "$error_msg Cannot close $infile. $!\n"; + + +######################################################## +# Write out the end of the enum class and the start of the xml string table +######################################################## + +print OUT $tableclassheader or die "$error_msg Cannot write to $outfile. $! \n"; + + +######################################################## +# Add all the xml namespaces to the xml string table +######################################################## + +open(IN, $xmlnsfile) or die "$error_msg Cannot open $infile. $!\n"; + +#### insert all namespaces and prefixes strings + +while ($string = ) +{ + if ($string =~ /^(\w+)=(\S+)/o) + { + print OUT " str = _nameTable.Add(\"$2\");\n" or die "$error_msg Cannot write to $outfile. $! \n"; + print OUT " _xmlstringtable[(int) $enumsrclass.$1] = new XmlStringTableStruct(str, $enumsrclass.NotDefined, null);\n" or die "$error_msg Cannot write to $outfile. $! \n"; + } +} + +print OUT "\n" or die "$error_msg Cannot write to $outfile. $! \n"; + +######################################################## +# Add all the xml strings to the xml string table +######################################################## + +open(IN, $xmlstrfile) or die "$error_msg Cannot open $infile. $!\n"; + +#### insert all xml strings + +while ($string = ) +{ + if ($string =~ /^(\w+)=(\S+)\s+(\S+)(?:\s+(\S+))?/o) + { + print OUT " str = _nameTable.Add(\"$2\");\n" or die "$error_msg Cannot write to $outfile. $! \n"; + print OUT " _xmlstringtable[(int) $enumsrclass.$1] = new XmlStringTableStruct(str, $enumsrclass.$3, \"$4\");\n" or die "$error_msg Cannot write to $outfile. $! \n"; + } +} + +######################################################## +# Write out the end of the xml string table +######################################################## + +print OUT "\n".$footer or die "$error_msg Cannot write to $outfile. $! \n"; + +#### close files + +close (OUT) or die "$error_msg Cannot close $outfile. $!\n"; + diff --git a/eng/WpfArcadeSdk/tools/GenerateAvTraceMessages.targets b/eng/WpfArcadeSdk/tools/GenerateAvTraceMessages.targets new file mode 100644 index 000000000..a69a220cd --- /dev/null +++ b/eng/WpfArcadeSdk/tools/GenerateAvTraceMessages.targets @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/GenerateModuleDefinitionFile.targets b/eng/WpfArcadeSdk/tools/GenerateModuleDefinitionFile.targets new file mode 100644 index 000000000..b14dba899 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/GenerateModuleDefinitionFile.targets @@ -0,0 +1,85 @@ + + + + + + true + false + + + true + + + + + + + + + + + + + + + + + + + + + + NotUsing + CompileAsCpp + TurnOffAllWarnings + true + true + $(AdditionalOptions) /DDLL_NAME=$(TargetName) + + + + false + false + + + + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.props b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.props new file mode 100644 index 000000000..e9a19b5e3 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.props @@ -0,0 +1,6 @@ + + + false + true + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets new file mode 100644 index 000000000..1ff69760a --- /dev/null +++ b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets @@ -0,0 +1,16 @@ + + + + true + false + + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/InlineTasks.targets b/eng/WpfArcadeSdk/tools/InlineTasks.targets new file mode 100644 index 000000000..3ba2d43f0 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/InlineTasks.targets @@ -0,0 +1,84 @@ + + + RoslynCodeTaskFactory + CodeTaskFactory + + $(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll + $(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll + + + + + + + + + + + + + + + + + (); + var unmatched = new List(); + + foreach (var item1 in Item1) + { + bool matched = false; + foreach (var item2 in Item2) + { + if (item2.MetadataNames.Cast().Contains(Metadata2)) + { + string str1 = item1.ItemSpec; + string str2 = item2.GetMetadata(Metadata2); + + bool cmp = + !TreatItemsAsPaths ? + str1.Equals(str2, StringComparison.OrdinalIgnoreCase) + : Path.Equals(str1, str2); + + if (cmp) + { + var resultItem = new TaskItem(item2.GetMetadata(Metadata2)); + if (PreserveItem1Metadata) + { + var metadata = item1.CloneCustomMetadata(); + foreach (object m in metadata.Keys) + { + resultItem.SetMetadata((string)m, (string)metadata[m]); + } + } + + if (PreserveItem2Metadata) + { + var metadata = item2.CloneCustomMetadata(); + foreach (object m in metadata.Keys) + { + resultItem.SetMetadata((string)m, (string)metadata[m]); + } + } + + result.Add(resultItem); + matched = true; + } + } + } + + if (!matched) + { + unmatched.Add(new TaskItem(item1)); + } + } + + Result = result.ToArray(); + UnmatchedReferences = unmatched.ToArray(); + ]]> + + + + diff --git a/eng/WpfArcadeSdk/tools/NoInternalTypeHelper.targets b/eng/WpfArcadeSdk/tools/NoInternalTypeHelper.targets new file mode 100644 index 000000000..e1c33ebaf --- /dev/null +++ b/eng/WpfArcadeSdk/tools/NoInternalTypeHelper.targets @@ -0,0 +1,17 @@ + + + + + + <_GeneratedCodeFiles Remove="@(_GeneratedCodeFiles)" Condition="'%(FileName)%(Extension)' == 'GeneratedInternalTypeHelper.g.cs'" /> + + + + + <_GeneratedCodeFiles Include="@(EmbeddedResource->'%(StronglyTypedFileName)');" /> + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/NoTargets.props b/eng/WpfArcadeSdk/tools/NoTargets.props new file mode 100644 index 000000000..01dbbe2d7 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/NoTargets.props @@ -0,0 +1,25 @@ + + + + + + + + + + $(MSBuildToolsPath)\Microsoft.Common.targets + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/NoTargets.targets b/eng/WpfArcadeSdk/tools/NoTargets.targets new file mode 100644 index 000000000..3cfab63c9 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/NoTargets.targets @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + BuildOnlySettings; + PrepareForBuild; + PreBuildEvent; + ResolveReferences; + GetTargetPath; + PrepareForRun; + IncrementalClean; + PostBuildEvent + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/Packaging.props b/eng/WpfArcadeSdk/tools/Packaging.props new file mode 100644 index 000000000..844837f52 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Packaging.props @@ -0,0 +1,67 @@ + + + $(ArtifactsDir)packaging\$(Configuration)\$(Platform)\ + $(ArtifactsDir)packaging\$(Configuration)\ + + + runtime.win-$(Platform) + runtime.win-x86 + + + + + false + + + + false + + MIT + $(CopyrightNetFoundation) + + false + + + + Microsoft.DotNet.Wpf.GitHub + Microsoft.DotNet.Wpf.DncEng + + + Microsoft.NET.Sdk.WindowsDesktop + + + + + + $(DncEngTransportPackageName) + + + $(GitHubTransportPackageName) + + + $(WindowsDesktopSdkPackageName) + + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf-int + + + + + + + + + All + + + + + + + false + + diff --git a/eng/WpfArcadeSdk/tools/Packaging.targets b/eng/WpfArcadeSdk/tools/Packaging.targets new file mode 100644 index 000000000..da8b44f84 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Packaging.targets @@ -0,0 +1,378 @@ + + + + + + + lib + + + + $(PackageRuntimeIdentifierPrefix).$(PackageName) + $(PackageName.Replace('$(PackageRuntimeIdentifierPrefix).','')) + $(PackageName) + true + MSBuildSdk + + + + + + + + $(TargetFramework) + + + + win-x86 + win-x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(NormalizedPackageName) + + + + + + + + + + + + + + $(TargetCulture) + $(NeutralLanguage) + + + + + + + + + + + + true + $(LibFolder) + + + + true + $(LibFolder) + + + + true + $(LibFolder) + + + + true + ref + + + + true + content + + + + true + + + + + true + . + + + + true + %(PackagingRootFolderSubFolders.Identity) + + + + + + + + + + CreateContentFolder; + $(GenerateNuspecDependsOn) + + + + + + + + + + + + + $(ArtifactsPackagingDir)$(NormalizedPackageName)\ + $(RepoCommitVersionFileDir)version.txt + + + + + + + + + + + + + + + + + + + + + + + + $(ArtifactsPackagingDir)$(NormalizedPackageName)\ + $(RuntimeJsonFileDir)runtime.json + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/Pbt.props b/eng/WpfArcadeSdk/tools/Pbt.props new file mode 100644 index 000000000..0f7d37181 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Pbt.props @@ -0,0 +1,11 @@ + + + netcoreapp2.1 + net472 + + + + $(ArtifactsTmpDir)PresentationBuildTasks\$(PbtTfm)\ + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/Pbt.targets b/eng/WpfArcadeSdk/tools/Pbt.targets new file mode 100644 index 000000000..f6e391706 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Pbt.targets @@ -0,0 +1,78 @@ + + + + <_PresentationBuildTasksAssembly Condition="'$(InternalMarkupCompilation)'=='true'">$(PbtDir)PresentationBuildTasks.dll + + + + + + + + + + $(PrepareResourceNamesDependsOn); + EnsurePbtPath + + + + $(MarkupCompilePass1DependsOn); + EnsurePbtPath + + + + + + + + + + + + + + + false + false + + + + + + diff --git a/eng/WpfArcadeSdk/tools/ProjectReferences.props b/eng/WpfArcadeSdk/tools/ProjectReferences.props new file mode 100644 index 000000000..5b77909d4 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ProjectReferences.props @@ -0,0 +1,21 @@ + + + + false + + + + true + + + + + + false + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/ProjectReferences.targets b/eng/WpfArcadeSdk/tools/ProjectReferences.targets new file mode 100644 index 000000000..f79f2d713 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ProjectReferences.targets @@ -0,0 +1,15 @@ + + + + ClearReferenceCopyLocalPaths; + $(PrepareForRunDependsOn) + + + + + + + + diff --git a/Publishing.targets b/eng/WpfArcadeSdk/tools/Publishing.targets similarity index 100% rename from Publishing.targets rename to eng/WpfArcadeSdk/tools/Publishing.targets diff --git a/eng/WpfArcadeSdk/tools/Redist.props b/eng/WpfArcadeSdk/tools/Redist.props new file mode 100644 index 000000000..bbb2e2d95 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Redist.props @@ -0,0 +1,15 @@ + + + + vcruntime + 140 + + msvcp + 140 + + D3DCompiler + _47 + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/Redist.targets b/eng/WpfArcadeSdk/tools/Redist.targets new file mode 100644 index 000000000..4a6424ad8 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Redist.targets @@ -0,0 +1,28 @@ + + + + $(PreparePackageAssetsDependsOn); + CopyRedistFile + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/ReferenceAssembly.props b/eng/WpfArcadeSdk/tools/ReferenceAssembly.props new file mode 100644 index 000000000..5be9423c4 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ReferenceAssembly.props @@ -0,0 +1,12 @@ + + + + false + $(ArtifactsDir)ref\ + + + + true + true + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/ReferenceAssembly.targets b/eng/WpfArcadeSdk/tools/ReferenceAssembly.targets new file mode 100644 index 000000000..e63548834 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ReferenceAssembly.targets @@ -0,0 +1,46 @@ + + + + EnsureReferenceDestination; + $(CoreBuildDependsOn) + + + EnsureReferenceDestination; + $(ResolveReferencesDependsOn) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @(RefAssemblies) + + + diff --git a/eng/WpfArcadeSdk/tools/ResourceLinking.targets b/eng/WpfArcadeSdk/tools/ResourceLinking.targets new file mode 100644 index 000000000..a0d338f1a --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ResourceLinking.targets @@ -0,0 +1,20 @@ + + + + + + $(ConfigurationType) + lib + false + + + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/SdkReferences.targets b/eng/WpfArcadeSdk/tools/SdkReferences.targets new file mode 100644 index 000000000..6544fe441 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/SdkReferences.targets @@ -0,0 +1,139 @@ + + + + + + + + + + + + + <_netCoreAppSdkReference Remove="@(_netCoreAppSdkReference)" /> + <_netCoreAppSdkReference Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.NETCore.App'"/> + + + + + + + <_netCoreAppSdkUnwantedRefNormalized Remove="@(_netCoreAppSdkUnwantedRefNormalized)" /> + <_netCoreAppSdkUnwantedRefNormalized Include="@(_netCoreAppSdkReference->'%(FileName)')" /> + <_netCoreAppSdkUnwantedRefNormalized Remove="@(NetCoreReference)" /> + + + + + <_netCoreAppSdkUnwantedRef Remove="@(_netCoreAppSdkUnwantedRef)" /> + <_netCoreAppSdkUnwantedRef Include="@(_netCoreAppSdkUnwantedRefNormalized->'%(OriginalItemSpec)')" /> + + + + + + + + + + + + + + <_windowsDesktopAppSdkReference Remove="@(_windowsDesktopAppSdkReference)" /> + <_windowsDesktopAppSdkReference Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App'"/> + + + + + + + <_windowsDesktopAppSdkUnwantedRefNormalized Remove="@(_windowsDesktopAppSdkUnwantedRefNormalized)" /> + <_windowsDesktopAppSdkUnwantedRefNormalized Include="@(_windowsDesktopAppSdkReference->'%(FileName)')" /> + <_windowsDesktopAppSdkUnwantedRefNormalized Remove="@(WindowsDesktopReference)" /> + + + + + <_windowsDesktopAppSdkUnwantedRef Remove="@(_windowsDesktopAppSdkUnwantedRef)" /> + <_windowsDesktopAppSdkUnwantedRef Include="@(_windowsDesktopAppSdkUnwantedRefNormalized->'%(OriginalItemSpec)')" /> + + + + + + + + + + + + ResolveMicrosoftDotNetWpfGitHubReferences; + ResolveWinFormsReferences; + $(ResolveAssemblyReferencesDependsOn) + + + + + + + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/ShippingProjects.props b/eng/WpfArcadeSdk/tools/ShippingProjects.props new file mode 100644 index 000000000..63d71786b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ShippingProjects.props @@ -0,0 +1,75 @@ + + + + System.Xaml + + + + PresentationBuildTasks; + PresentationCore; + DirectWriteForwarder; + PresentationCore-CommonResources; + PresentationFramework; + PresentationFramework-SystemCore; + PresentationFramework-SystemData; + PresentationFramework-SystemDrawing; + PresentationFramework-SystemXml; + PresentationFramework-SystemXmlLinq; + PresentationUI; + ReachFramework; + System.Printing; + System.Windows.Controls.Ribbon; + System.Windows.Input.Manipulations; + System.Windows.Presentation; + PresentationFramework.Aero; + PresentationFramework.Aero2; + PresentationFramework.AeroLite; + PresentationFramework.Classic; + PresentationFramework.Luna; + PresentationFramework.Royale; + UIAutomationClient; + UIAutomationClientSideProviders; + UIAutomationProvider; + UIAutomationTypes; + WindowsBase; + WindowsFormsIntegration; + PenImc; + PresentationNative; + WpfGfx; + D3DCompiler; + VCRuntime + + + + $(ExternalShippingProjects); + $(InternalShippingProjects) + + + + PresentationBuildTasks; + D3DCompiler; + VCRuntime + + + + PresentationBuildTasks + + + + + + false + true + true + + false + true + + Internal + External + + + WindowsDesktopSdk + + + diff --git a/eng/WpfArcadeSdk/tools/ShippingProjects.targets b/eng/WpfArcadeSdk/tools/ShippingProjects.targets new file mode 100644 index 000000000..1072ca3a6 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/ShippingProjects.targets @@ -0,0 +1,8 @@ + + + tools + true + true + true + + diff --git a/SystemResources.props b/eng/WpfArcadeSdk/tools/SystemResources.props similarity index 100% rename from SystemResources.props rename to eng/WpfArcadeSdk/tools/SystemResources.props diff --git a/eng/WpfArcadeSdk/tools/TargetFrameworks.props b/eng/WpfArcadeSdk/tools/TargetFrameworks.props new file mode 100644 index 000000000..237929e4c --- /dev/null +++ b/eng/WpfArcadeSdk/tools/TargetFrameworks.props @@ -0,0 +1,5 @@ + + + $(DefineConstants);NETFX + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/VersionSuffix.props b/eng/WpfArcadeSdk/tools/VersionSuffix.props new file mode 100644 index 000000000..8c0ebfad6 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/VersionSuffix.props @@ -0,0 +1,5 @@ + + + _cor3 + + \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/Wpf.Cpp.props b/eng/WpfArcadeSdk/tools/Wpf.Cpp.props new file mode 100644 index 000000000..0e5004d36 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Wpf.Cpp.props @@ -0,0 +1,329 @@ + + + 15.0 + Unicode + + + v142 + + + 10.0.17134.0 + + DynamicLibrary + + + $(WindowsSdkDir_10) + $(WindowsSdkDir) + $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots@KitsRoot10) + + $(Platform) + x86 + x64 + + $(Windows10SdkPath)bin\$(WindowsTargetPlatformVersion)\$(Architecture)\tracewpp.exe + + $(ManagedCxx) + true + + 1 + + 0x0700 + + 0x0A00 + + 0x0A000005 + + $(Win32WinNt) + + + + + + $(MsBuildThisFileDirectory)WppConfig\ + + false + + + + false + true + true + + + + + $(SDK40ToolsPath) + $(TargetFrameworkSDKToolsDirectory)$(Platform)\ + + + + true + true + false + Default + false + + + false + true + false + UseLinkTimeCodeGeneration + + + + + $(ManagedCxxSuppressions);4679 + + $(ManagedCxxSuppressions);4691 + + $(ManagedCxxSuppressions);4945 + + $(ManagedCxxSuppressions);4947 + + $(ManagedCxxSuppressions);4995 + + + + true + + 0.0.0.3 + $(RepoRoot).tools\native\bin\msvcurt-c1xx\$(MsvcurtC1xxVersion)\$(Architecture)\ + $(MsvcurtC1xxToolsPath)msvcurt$(LibSuffix)_netcore.lib + + + + + %(AdditionalDependencies);$(MsvcurtNetCoreLib) + + + + + + + + true + + + true + false + + + true + + + $(VCToolsInstallDir)lib\$(Architecture)\ + $(UniversalCRTSdkDir)Lib\$(WindowsTargetPlatformVersion)\UCRT\$(Architecture)\ + + d + + + oldnames.lib + legacy_stdio_wide_specifiers.lib + + + libucrt$(LibSuffix).lib + libvcruntime$(LibSuffix).lib + libcmt$(LibSuffix).lib + libcpmt$(LibSuffix).lib + + + ucrt$(LibSuffix).lib + vcruntime$(LibSuffix).lib + msvcrt$(LibSuffix).lib + msvcprt$(LibSuffix).lib + + $(DisallowLibClause) /disallowlib:ucrt$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:vcruntime$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:msvcrt$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:msvcprt$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:libucrt$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:libvcruntime$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:libcmt$(LibSuffix).lib + $(DisallowLibClause) /disallowlib:libcpmt$(LibSuffix).lib + + + /dllrename:$(VCRuntimeDllBaseName)$(VCRuntimeVersion)$(LibSuffix)=$(VCRuntimeDllBaseName)$(VCRuntimeVersion)$(LibSuffix)$(WpfVersionSuffix) + + + $(StaticUCRTLibrary);$(StaticVCRTLibrary);$(StaticCRTStartupLibrary);$(StaticStandardCppLibrary);$(DynamicUCRTLibrary);$(DynamicVCRTLibrary);$(DynamicCRTStartupLibrary);$(DynamicStandardCppLibrary) + $(StandardLibrariesForNativeCpp);$(OldNamesLib);$(LegacyStdioWideSpecifiersLib) + + + $(NoDefaultLibClauseForRuntimeLibs) /nodefaultlib:ucrt$(LibSuffix).lib /nodefaultlib:libucrt$(LibSuffix).lib /nodefaultlib:msvcrt$(LibSuffix).lib /nodefaultlib:libcmt$(LibSuffix).lib + + + false + + + false + + + $(BaseOutputPath)$(Configuration)\$(TargetFramework)\ + $(BaseOutputPath)$(Architecture)\$(Configuration)\$(TargetFramework)\ + + $(BaseIntermediateOutputPath)$(Configuration)\$(TargetFramework)\ + $(BaseIntermediateOutputPath)$(Architecture)\$(Configuration)\$(TargetFramework)\ + + false + false + + + + + $(ComputeCompileInputsTargets); + SetMscorlibAdditionalUsingDirectory; + + + + + + Level3 + true + + %(DisableSpecificWarnings);$(ManagedCxxSuppressions);4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + + + %(PreprocessorDefinitions);WIN32;_UNICODE;UNICODE;_WINDOWS;STRICT;_WIN32_WINNT=$(Win32WinNt);_WIN32_IE=$(Win32Ie);WINNT=$(WinNt);WINVER=$(WinVer) + %(PreprocessorDefinitions);_LIB; + %(PreprocessorDefinitions);SAL_NO_ATTRIBUTE_DECLARATIONS + + + + + %(PreprocessorDefinitions);ARGITERATOR_SUPPORTED=0 + + + %(PreprocessorDefinitions);_AMD64_; + %(PreprocessorDefinitions);_X86_; + %(PreprocessorDefinitions);_ARM_; + %(PreprocessorDefinitions);_ARM64_; + + ProgramDatabase + + + $(IntermediateOutputPath)$(TargetName)-compile.pdb + + false + Async + Default + + true + OnlyExplicitInline + true + + false + + true + false + + false + + Guard + false + + + StdCall + + + %(AdditionalIncludeDirectories);$(WpfSharedDir)inc\ + %(AdditionalIncludeDirectories);$(WpfCommonDir)inc\ + + ddbanned.h + + + + + + %(AdditionalOptions) /clr:netcore + + + Windows + + true + DebugFull + + %(AdditionalOptions) /DEBUGTYPE:CV,PDATA,FIXUP + + + + + /ignore:4221 %(AdditionalOptions) + %(AdditionalOptions) /MACHINE:$(Architecture) + Machine$(Architecture) + + + $(VcrtLibDir);$(UcrtLibDir);%(AdditionalLibraryDirectories) + %(AdditionalDependencies);$(StandardLibrariesForNativeCpp) + %(AdditionalOptions) $(NoDefaultLibClauseForRuntimeLibs) $(DisallowLibClause) + %(AdditionalOptions) $(DllRenameClause) + true + %(AdditionalOptions) /keyfile:$(AssemblyOriginatorKeyFile) /delaysign + + $(IntermediateOutputPath)$(TargetName).pdb + + + + + + /ignore:4221 %(AdditionalOptions) + %(AdditionalOptions) /MACHINE:$(Architecture) + + + %(AdditionalIncludeDirectories);$(IntermediateOutputPath) + + + + + + Disabled + _DEBUG;DEBUG;%(PreprocessorDefinitions) + + %(PreprocessorDefinitions);DBG=1 + MultiThreadedDebug + MultiThreadedDebugDLL + + + + + + + MaxSpeed + true + true + NDEBUG;%(PreprocessorDefinitions) + + MultiThreaded + MultiThreadedDLL + + + true + true + + + + + + %(AdditionalOptions) /linkrepro:$(IntermediateOutputPath)LinkRepro + + + diff --git a/eng/WpfArcadeSdk/tools/Wpf.Cpp.targets b/eng/WpfArcadeSdk/tools/Wpf.Cpp.targets new file mode 100644 index 000000000..537f71fc0 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/Wpf.Cpp.targets @@ -0,0 +1,333 @@ + + + $(IntermediateOutputPath)NativeVersion.rc + $([System.IO.Path]::GetDirectoryName($(NativeVersionFile))) + + + + + $(MsvcurtC1xxToolsPath)HostX86\c1xx.dll + $(MsvcurtC1xxToolsPath)HostX64\c1xx.dll + + + + %(AdditionalOptions) /Bx"$(FrontEndPath)" + + + %(AdditionalOptions) /fe:"$(FrontEndPath)" + + + + + + + %(AdditionalIncludeDirectories);$(NativeVersionFileDirectory) + + + %(AdditionalIncludeDirectories);$(NativeVersionFileDirectory) + + + + + + + %(AdditionalOptions) /linkrepro:$(IntermediateOutputPath)LinkRepro + + + + + + $(BeforeLinkTargets); + CreateLinkReproFolder + + + + + + $(IntermediateOutputPath)LinkRepro\ + + + + + + + + + + + + + + + + + + + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::InteropServices; +using namespace System::Runtime::Versioning; + +[assembly:AssemblyTitle("$(AssemblyTitle)")]; +[assembly:AssemblyDescription("$(AssemblyDescription)")]; +[assembly:AssemblyDefaultAlias("$(AssemblyName)")]; +[assembly:AssemblyCompany("$(Company)")]; +[assembly:AssemblyProduct("$(Product)")]; +[assembly:AssemblyCopyright("$(Copyright)")]; +[assembly:AssemblyVersion("$(AssemblyVersion)")]; +[assembly:AssemblyFileVersion("$(FileVersion)")]; +[assembly:AssemblyInformationalVersion("$(AssemblyInformationalVersion)")]; +[assembly:TargetFramework("$(TargetFrameworkMoniker)", FrameworkDisplayName="$(TargetFrameworkMonikerDisplayName)")]; + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + + + + + + + + <_AdditionalExplicitAssemblyReferences Include="$(AdditionalExplicitAssemblyReferences)" /> + <_AdditionalExplicitAssemblyReferences Remove="mscorlib" /> + + + @(_AdditionalExplicitAssemblyReferences) + + + + + + + <_mscorlibDirectory Condition="'%(ReferencePath.FileName)%(ReferencePath.Extension)' == 'mscorlib.dll'">%(ReferencePath.RootDir)%(ReferencePath.Directory) + + + + + %(CLCompile.AdditionalUsingDirectories);$(_mscorlibDirectory) + + + + + + + CppCliHelper; + $(ResolveReferencesDependsOn) + + + $(EnsureWpfProjectReferenceDependsOn); + CppCliHelper + + + + + + + + $(IntermediateOutputPath)CppCliSupport\CppClrSupport_$(MSBuildProjectName).csproj + + + + + + + + + netcoreapp3.0 + AnyCPU%3Bx64 + + + + + + + + + true + + + + + <_AdditionalPackages Remove="%40(_AdditionalPackages)" /> + <_AdditionalPackages Include="%24(AdditionalPackages)" /> + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + + AdditionalPackages=@(AdditionalPackageReference->'%(Identity)+%(Version)') + + + + + + + + + + False + + + + + + + + + + + $(BeforeLinkTargets); + EnsureLinkReproFolder + + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/WpfProjectReference.targets b/eng/WpfArcadeSdk/tools/WpfProjectReference.targets new file mode 100644 index 000000000..86438390b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WpfProjectReference.targets @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EnsureWpfProjectReference; + $(PrepareForBuildDependsOn) + + + EnsureWpfProjectReference; + $(CoreBuildDependsOn) + + + EnsureWpfProjectReference; + $(CoreCompileDependsOn) + + + EnsureWpfProjectReference; + $(ResolveReferencesDependsOn) + + + EnsureWpfProjectReference; + $(MarkupCompilePass1DependsOn) + + + + + + + + + <_wpfProjectPath Include="@(WpfProjectPath)"> + %(WpfProjectPath.Identity) + + <_wpfProjectPathAvailableLocally Include="@(WpfProjectPath)" + Condition="Exists('%(ProjectPath)')" /> + + + + + + + + + + + + + <_unmatchedProjectReferenceWithConfiguration Remove="@(_unmatchedProjectReferenceWithConfiguration)" /> + <_unmatched_ProjectReferenceWithConfiguration Remove="@(_unmatched_ProjectReferenceWithConfiguration)" /> + + + + + + + + + + <_ProjectReferenceWithConfiguration Remove="@(_unmatched_ProjectReferenceWithConfiguration)" /> + <_MSBuildProjectReferenceNonExistent Remove="@(_unmatchedProjectReferenceWithConfiguration)" /> + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/CodeTags.txt b/eng/WpfArcadeSdk/tools/WppConfig/rev1/CodeTags.txt new file mode 100644 index 000000000..f4741b663 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/CodeTags.txt @@ -0,0 +1,21 @@ +# Nominal timestamp: 2004/11/17-21:38:31 +# +# Auto-generated from winmain-450k-newerupdatedlist.txt dated 2004/10/20 +# with additional 13288 files from Vikram dated 2004/11/06 +# See DavePr or LisaGra or RajeshM or JFeltis for questions. +# +FILE r1defwpp.ini +$TAG ENGR +$MODULE: build_tools_wppconfig +$OWNER: jtolman +$KEYWORDS: +$ENDTAG + +FILE * +$TAG ENGR +$MODULE: build_tools_wppconfig +$OWNER: josesua +$KEYWORDS: +$ENDTAG + +# checksum: 0020-008292397-00 diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/TCHARUNIwpp.ini b/eng/WpfArcadeSdk/tools/WppConfig/rev1/TCHARUNIwpp.ini new file mode 100644 index 000000000..eb849aab1 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/TCHARUNIwpp.ini @@ -0,0 +1,218 @@ +# +# Default types for WPP for users who are using TCHAR's and have Unicode defined. +# 2004 Revision 0.0 +# + +# our basic arithmetic types + +DEFINE_SIMPLE_TYPE( XINT64, signed __int64, ItemLongLongX, "I64x", x, 8); +DEFINE_SIMPLE_TYPE( XXINT64, signed __int64, ItemLongLongXX, "I64X", X, 8); +DEFINE_SIMPLE_TYPE( OINT64, signed __int64, ItemLongLongO, "I64o", o, 8); + +DEFINE_SIMPLE_TYPE( SBYTE, signed char, ItemChar, "c", c, 1); +DEFINE_SIMPLE_TYPE( SSHORT, signed short, ItemShort, "hd", h, 2); +DEFINE_SIMPLE_TYPE( SINT, signed int, ItemLong, "d", d, 4); +DEFINE_SIMPLE_TYPE( SLONG, signed long, ItemLong, "ld", l, 4); +DEFINE_SIMPLE_TYPE( SINT64, signed __int64, ItemLongLong, "I64d", i, 8); + +DEFINE_SIMPLE_TYPE( UBYTE, unsigned char, ItemChar, "c", C, 1); +DEFINE_SIMPLE_TYPE( USHORT, unsigned short, ItemShort, "hu", H, 2); +DEFINE_SIMPLE_TYPE( UINT, unsigned int, ItemLong, "u", D, 4); +DEFINE_SIMPLE_TYPE( ULONG, unsigned long, ItemLong, "lu", L, 4); +DEFINE_SIMPLE_TYPE( UINT64, unsigned __int64, ItemULongLong, "I64u", I, 8); + + + +DEFINE_SIMPLE_TYPE( DOUBLE, double, ItemDouble, "s", g, 8); + +# arch dependent types + +DEFINE_SIMPLE_TYPE( SLONGPTR, LONG_PTR, ItemPtr, "Id", p, 6); +DEFINE_SIMPLE_TYPE( ULONGPTR, ULONG_PTR, ItemPtr, "Iu", P, 6); +DEFINE_SIMPLE_TYPE( PTR, const void*, ItemPtr, "p", q, 6); +DEFINE_SIMPLE_TYPE( HANDLE, const void*, ItemPtr, "p", Q, 6); + +# predefined constants + +DEFINE_SIMPLE_TYPE( COMPNAME,,, "__COMPNAME__",,); +DEFINE_SIMPLE_TYPE( FILE,,, "__FILE__",,); +DEFINE_SIMPLE_TYPE( LINE,,, "__LINE__",,); +DEFINE_SIMPLE_TYPE( FUNC,,, "%!FUNC!",,); // traceprt now understands %!FUNC! +DEFINE_SIMPLE_TYPE( LEVEL,,, "%!LEVEL!",,); // and %!LEVEL% + +DEFINE_SIMPLE_TYPE( STDPREFIX,,, "%0",,); +DEFINE_SIMPLE_TYPE( MOD,,, "%1!s!",,); +DEFINE_SIMPLE_TYPE( TYP,,, "%2!s!",,); +DEFINE_SIMPLE_TYPE( TID,,, "%3!x!",,); +DEFINE_SIMPLE_TYPE( NOW,,, "%4!s!",,); +DEFINE_SIMPLE_TYPE( SEQ,,, "%7!x!",,); +DEFINE_SIMPLE_TYPE( PID,,, "%8!x!",,); +DEFINE_SIMPLE_TYPE( CPU,,, "%9!x!",,); +DEFINE_SIMPLE_TYPE( SPACE,,, " ",,); + +DEFINE_SIMPLE_TYPE_PTR(GUID, LPCGUID, ItemGuid, "s", _guid_, 0); // simple type, passed by addr + +DEFINE_FLAVOR( UCHAR, SBYTE, ItemUChar, "c" ); +DEFINE_FLAVOR( SCHAR, SBYTE, ItemChar, "c" ); +DEFINE_FLAVOR( BOOLEAN, SBYTE, ItemListByte(FALSE,TRUE), "s"); + + +# all strings require custom processing +# Note that in the TCHAR Unicode verions ASTR is wide and WSTR is mapped to single + +DEFINE_CPLX_TYPE(ASTR, WPP_LOGWSTR, LPCWSTR, ItemWString, "s", s, 0); +DEFINE_CPLX_TYPE(ARSTR, WPP_LOGASTR, LPCSTR, ItemRString, "s", t, 0); +DEFINE_CPLX_TYPE(ARWSTR, WPP_LOGWSTR, LPCWSTR, ItemRWString, "s", S, 0); +DEFINE_CPLX_TYPE(WSTR, WPP_LOGASTR, const char *, ItemString, "s", S, 0); +DEFINE_CPLX_TYPE(CSTR, WPP_LOGPCSTR, PCSTRING, ItemPString, "s", z, 0, 2); +DEFINE_CPLX_TYPE(USTR, WPP_LOGPUSTR, PCUNICODE_STRING,ItemPWString,"s", Z, 0, 2); + +DEFINE_CPLX_TYPE(sid, WPP_LOGPSID, PSID, ItemSid,"s", _sid_, 0); +DEFINE_CPLX_TYPE(str, WPP_LOGSTDSTR, const std::string&, ItemString,"s", _str_, 0); + + +#kludge for printf like statements + +DEFINE_FLAVOR(e, DOUBLE,,); +DEFINE_FLAVOR(E, DOUBLE,,); +DEFINE_FLAVOR(f, DOUBLE,,); +DEFINE_FLAVOR(g, DOUBLE,,); +DEFINE_FLAVOR(G, DOUBLE,,); + +DEFINE_FLAVOR(c, SBYTE,,); +DEFINE_FLAVOR(hc, SBYTE,,); +DEFINE_FLAVOR(lc, SSHORT,,); +DEFINE_FLAVOR(wc, SSHORT,,); +DEFINE_FLAVOR(C, SSHORT,,); + +DEFINE_FLAVOR(s, ASTR,,); +DEFINE_FLAVOR(hs, ASTR,,); +DEFINE_FLAVOR(S, WSTR,,); +DEFINE_FLAVOR(ws, WSTR,,); +DEFINE_FLAVOR(ls, ASTR,,); + +DEFINE_FLAVOR(hi, SSHORT,,); +DEFINE_FLAVOR(hd, SSHORT,,); +DEFINE_FLAVOR(hu, USHORT,,"u"); +DEFINE_FLAVOR(hx, USHORT,,"x"); +DEFINE_FLAVOR(hX, USHORT,,"X"); +DEFINE_FLAVOR(ho, USHORT,,"o"); + +DEFINE_FLAVOR(Id, ULONGPTR,,"Id"); +DEFINE_FLAVOR(Iu, ULONGPTR,,"Iu"); +DEFINE_FLAVOR(Ix, ULONGPTR,,"Ix"); +DEFINE_FLAVOR(IX, ULONGPTR,,"IX"); +DEFINE_FLAVOR(Io, ULONGPTR,,"Io"); + +DEFINE_FLAVOR(i, SINT,,); +DEFINE_FLAVOR(d, SINT,,); +DEFINE_FLAVOR(u, UINT,,"u"); +DEFINE_FLAVOR(x, UINT,,"x"); +DEFINE_FLAVOR(X, UINT,,"X"); +DEFINE_FLAVOR(o, UINT,,"o"); +DEFINE_FLAVOR(cccc, SINT, ItemChar4, "s"); + +DEFINE_FLAVOR(li, SLONG,,); +DEFINE_FLAVOR(ld, SLONG,,); +DEFINE_FLAVOR(lu, ULONG,,"u"); +DEFINE_FLAVOR(lx, ULONG,,"x"); +DEFINE_FLAVOR(lX, ULONG,,"X"); +DEFINE_FLAVOR(lo, ULONG,,"o"); + +DEFINE_FLAVOR(I64d, SINT64,,); +DEFINE_FLAVOR(I64u, UINT64,,); +DEFINE_FLAVOR(I64x, XINT64,,"I64x"); +DEFINE_FLAVOR(I64X, XXINT64,,"I64X"); +DEFINE_FLAVOR(I64o, OINT64,,"I64o"); + +DEFINE_FLAVOR(p, PTR,,); + +DEFINE_FLAVOR(Z, USTR,,); +DEFINE_FLAVOR(wZ, USTR,,); +DEFINE_FLAVOR(z, CSTR,,); +DEFINE_FLAVOR(hZ, CSTR,,); + +# default formats for those who don't care to provide their own strings + +DEFINE_FLAVOR(XBYTE, SBYTE,, "02x"); +DEFINE_FLAVOR(OBYTE, SBYTE,, "o"); + +DEFINE_FLAVOR(XSHORT, SSHORT,, "04hX"); +DEFINE_FLAVOR(OSHORT, SSHORT,, "ho"); + +DEFINE_FLAVOR(XINT, SINT,, "08x"); +DEFINE_FLAVOR(OINT, SINT,, "o"); + +DEFINE_FLAVOR(XLONG, SLONG,, "08lX"); +DEFINE_FLAVOR(OLONG, SLONG,, "lo"); + + +DEFINE_FLAVOR(XLONGPTR, SLONGPTR,,"Ix"); +DEFINE_FLAVOR(OLONGPTR, SLONGPTR,,"Ox"); + +# special formats + +DEFINE_FLAVOR(IPADDR, UINT, ItemIPAddr, "s"); +DEFINE_FLAVOR(PORT, USHORT, ItemPort, "s"); +DEFINE_FLAVOR(STATUS, SINT, ItemNTSTATUS, "s"); +DEFINE_FLAVOR(WINERROR, UINT, ItemWINERROR, "s"); +DEFINE_FLAVOR(HRESULT, SINT, ItemHRESULT, "s"); + +DEFINE_FLAVOR(ipaddr,IPADDR,,); +DEFINE_FLAVOR(port,PORT,,); +DEFINE_FLAVOR(status,STATUS,,); +DEFINE_FLAVOR(hresult,HRESULT,,); +DEFINE_FLAVOR(winerr,WINERROR,,); +DEFINE_FLAVOR(guid,GUID,,); + +# time related stuff + +DEFINE_FLAVOR(TIMESTAMP, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(TIME, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(DATE, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(WAITTIME, SINT64, ItemTimestamp, "s"); + +DEFINE_FLAVOR(due, SINT64, ItemWaitTime, "s"); +DEFINE_FLAVOR(delta, SINT64, ItemTimeDelta, "s"); +DEFINE_FLAVOR(datetime, SINT64, ItemTimestamp, "s"); + +# enumeration types + +DEFINE_FLAVOR(ItemListByte, SBYTE, ItemListByte, "s"); +DEFINE_FLAVOR(ItemListShort, SSHORT, ItemListShort,"s"); +DEFINE_FLAVOR(ItemListLong, SLONG, ItemListLong, "s"); + +DEFINE_FLAVOR(ItemSetByte, UBYTE, ItemSetByte, "s"); +DEFINE_FLAVOR(ItemSetShort, USHORT, ItemSetShort,"s"); +DEFINE_FLAVOR(ItemSetLong, ULONG, ItemSetLong, "s"); +DEFINE_FLAVOR(ItemEnum, ULONG, ItemEnum, "s"); + +DEFINE_FLAVOR(CLSID, GUID, ItemCLSID, "s"); +DEFINE_FLAVOR(LIBID, GUID, ItemLIBID, "s"); +DEFINE_FLAVOR(IID, GUID, ItemIID, "s"); + +CUSTOM_TYPE(b1, ItemSetByte(1,2,3,4,5,6,7,8) ); +CUSTOM_TYPE(b2, ItemSetShort(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) ); +CUSTOM_TYPE(b4, ItemSetLong(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) ); + + +CUSTOM_TYPE(bool, ItemListLong(false,true) ); +CUSTOM_TYPE(bool16, ItemListShort(false,true) ); +CUSTOM_TYPE(bool8, ItemListByte(false,true) ); + +CUSTOM_TYPE(irql, ItemListByte(Low,APC,DPC) ); + +CUSTOM_TYPE(pnpmn, ItemListByte(IRP_MN_START_DEVICE,IRP_MN_QUERY_REMOVE_DEVICE,IRP_MN_REMOVE_DEVICE,IRP_MN_CANCEL_REMOVE_DEVICE,IRP_MN_STOP_DEVICE,IRP_MN_QUERY_STOP_DEVICE,IRP_MN_CANCEL_STOP_DEVICE,IRP_MN_QUERY_DEVICE_RELATIONS,IRP_MN_QUERY_INTERFACE,IRP_MN_QUERY_CAPABILITIES,IRP_MN_QUERY_RESOURCES,IRP_MN_QUERY_RESOURCE_REQUIREMENTS,IRP_MN_QUERY_DEVICE_TEXT,IRP_MN_FILTER_RESOURCE_REQUIREMENTS,IRP_MN_PNP_14,IRP_MN_READ_CONFIG,IRP_MN_WRITE_CONFIG,IRP_MN_EJECT,IRP_MN_SET_LOCK,IRP_MN_QUERY_ID,IRP_MN_QUERY_PNP_DEVICE_STATE,IRP_MN_QUERY_BUS_INFORMATION,IRP_MN_DEVICE_USAGE_NOTIFICATION,IRP_MN_SURPRISE_REMOVAL) ); +CUSTOM_TYPE(sysctrl, ItemListByte(IRP_MN_QUERY_ALL_DATA,IRP_MN_QUERY_SINGLE_INSTANCE, IRP_MN_CHANGE_SINGLE_INSTANCE, IRP_MN_CHANGE_SINGLE_ITEM, IRP_MN_ENABLE_EVENTS, IRP_MN_DISABLE_EVENTS, IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION, IRP_MN_REGINFO, IRP_MN_EXECUTE_METHOD, IRP_MN_Reserved_0a, IRP_MN_REGINFO_EX) ); + +# default tracing macro + +FUNC DoTraceMessage(LEVEL,MSG,...); +FUNC DoDebugTrace(TRACELEVEL,MSG,...); + + +# default prefix (use traceprt default) + +USEPREFIX(*,"%!STDPREFIX!"); // traceprt will add standard prefix + +WPP_FLAGS(-lookfor:WPP_INIT_TRACING); // the same flags that can be passed on the command line to tracewpp diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/control.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/control.tpl new file mode 100644 index 000000000..f945211cf --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/control.tpl @@ -0,0 +1,192 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +#ifndef WPP_ALREADY_INCLUDED + +#define WPP_EVAL(x) x +#define WPP_STR(x) #x +#define WPP_STRINGIZE(x) WPP_STR(x) +#define WPP_GLUE(a, b) a ## b +#define WPP_GLUE3(a, b, c) a ## b ## c +#define WPP_GLUE4(a, b, c, d) a ## b ## c ## d +#define WPP_XGLUE(a, b) WPP_GLUE(a, b) +#define WPP_XGLUE3(a, b, c) WPP_GLUE3(a, b, c) +#define WPP_XGLUE4(a, b, c, d) WPP_GLUE4(a, b, c, d) + +// template `TemplateFile` +// +// Defines a set of macro that expand control model specified +// with WPP_CONTROL_GUIDS (example shown below) +// into an enum of trace levels and required structures that +// contain the mask of levels, logger handle and some information +// required for registration. +// + +/////////////////////////////////////////////////////////////////////////////////// +// +// #define WPP_CONTROL_GUIDS \ +// WPP_DEFINE_CONTROL_GUID(Regular,(81b20fea,73a8,4b62,95bc,354477c97a6f), \ +// WPP_DEFINE_BIT(Error) \ +// WPP_DEFINE_BIT(Unusual) \ +// WPP_DEFINE_BIT(Noise) \ +// ) \ +// WPP_DEFINE_CONTROL_GUID(HiFreq,(91b20fea,73a8,4b62,95bc,354477c97a6f), \ +// WPP_DEFINE_BIT(Entry) \ +// WPP_DEFINE_BIT(Exit) \ +// WPP_DEFINE_BIT(ApiCalls) \ +// WPP_DEFINE_BIT(RandomJunk) \ +// WPP_DEFINE_BIT(LovePoem) \ +// ) + +#if defined(__cplusplus) +extern "C" { +#endif + +#if !defined(WPP_NO_CONTROL_GUIDS) + +#if defined(WPP_DEFAULT_CONTROL_GUID) +# if defined(WPP_CONTROL_GUIDS) +# pragma message(__FILE__ " : error : WPP_DEFAULT_CONTROL_GUID cannot be used together with WPP_CONTROL_GUIDS") +# stop +# else +# define WPP_CONTROL_GUIDS \ + WPP_DEFINE_CONTROL_GUID(Default,(WPP_DEFAULT_CONTROL_GUID), \ + WPP_DEFINE_BIT(Error) \ + WPP_DEFINE_BIT(Unusual) \ + WPP_DEFINE_BIT(Noise) \ + ) +# endif +#endif + +#if !defined(WPP_CONTROL_GUIDS) +# pragma message(__FILE__ " : error : Please define control model via WPP_CONTROL_GUIDS or WPP_DEFAULT_CONTROL_GUID macros") +# pragma message(__FILE__ " : error : don't forget to call WPP_INIT_TRACING and WPP_CLEANUP in your main, DriverEntry or DllInit") +# pragma message(__FILE__ " : error : see tracewpp.doc for further information") +stop. +#endif +// a set of macro to convert a guid in a form x(81b20fea,73a8,4b62,95bc,354477c97a6f) +// into either a a struct or text string + +#define _WPPW(x) WPP_GLUE(L, x) + +#define WPP_GUID_TEXT(l,w1,w2,w3,ll) #l "-" #w1 "-" #w2 "-" #w3 "-" #ll +#define WPP_GUID_WTEXT(l,w1,w2,w3,ll) _WPPW(#l) L"-" _WPPW(#w1) L"-" _WPPW(#w2) L"-" _WPPW(#w3) L"-" _WPPW(#ll) +#define WPP_EXTRACT_BYTE(val,n) (((ULONGLONG)(0x ## val) >> (8 * n)) & 0xFF) +#define WPP_GUID_STRUCT(l,w1,w2,w3,ll) {0x ## l, 0x ## w1, 0x ## w2,\ + {WPP_EXTRACT_BYTE(w3, 1), WPP_EXTRACT_BYTE(w3, 0),\ + WPP_EXTRACT_BYTE(ll, 5), WPP_EXTRACT_BYTE(ll, 4),\ + WPP_EXTRACT_BYTE(ll, 3), WPP_EXTRACT_BYTE(ll, 2),\ + WPP_EXTRACT_BYTE(ll, 1), WPP_EXTRACT_BYTE(ll, 0)} } + +#ifndef WPP_FORCEINLINE +#if !defined(WPP_OLDCC) +#define WPP_FORCEINLINE __forceinline +#else +#define WPP_FORCEINLINE __inline +#endif +#endif + + +// define an enum of control block names +////// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)), +enum WPP_CTL_NAMES { WPP_CONTROL_GUIDS WPP_LAST_CTL}; +#undef WPP_DEFINE_CONTROL_GUID + +// define control guids +////// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ +extern __declspec(selectany) const GUID WPP_XGLUE4(WPP_, ThisDir, _CTLGUID_, WPP_EVAL(Name)) = WPP_GUID_STRUCT Guid; +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_CONTROL_GUID + +// define enums of individual bits +///// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + WPP_XGLUE(WPP_BLOCK_START_, WPP_EVAL(Name)) = WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)) * 0x10000, Bits WPP_XGLUE(WPP_BLOCK_END_, WPP_EVAL(Name)), +# define WPP_DEFINE_BIT(Name) WPP_BIT_ ## Name, +enum WPP_DEFINE_BIT_NAMES { WPP_CONTROL_GUIDS }; +# undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID + +#define WPP_MASK(CTL) (1 << ( ((CTL)-1) & 31 )) +#define WPP_FLAG_NO(CTL) ( (0xFFFF & ((CTL)-1) ) / 32) +#define WPP_CTRL_NO(CTL) ((CTL) >> 16) + +// calculate how many DWORDs we need to get the required number of bits +// upper estimate. Sometimes will be off by one +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) | WPP_XGLUE(WPP_BLOCK_END_, WPP_EVAL(Name)) +enum _WPP_FLAG_LEN_ENUM { WPP_FLAG_LEN = 1 | ((0 WPP_CONTROL_GUIDS) & 0xFFFF) / 32 }; +#undef WPP_DEFINE_CONTROL_GUID + +#ifndef WPP_CB +# define WPP_CB WPP_GLOBAL_Control +#endif +#ifndef WPP_CB_TYPE +#define WPP_CB_TYPE WPP_PROJECT_CONTROL_BLOCK +#endif + +typedef union { + WPP_TRACE_CONTROL_BLOCK Control; + UCHAR ReserveSpace[ sizeof(WPP_TRACE_CONTROL_BLOCK) + sizeof(ULONG) * (WPP_FLAG_LEN - 1) ]; +} WPP_CB_TYPE ; + + +extern __declspec(selectany) WPP_CB_TYPE *WPP_CB = (WPP_CB_TYPE*)&WPP_CB; + +#define WPP_CONTROL(CTL) (WPP_CB[WPP_CTRL_NO(CTL)].Control) + +#ifndef WPP_USE_TRACE_LEVELS +// For historical reasons the use of LEVEL could imply flags, this was a bad choice but very difficult +// to undo. +#if !defined(WPP_LEVEL_LOGGER) +# define WPP_LEVEL_LOGGER(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Logger), +#endif + +#if !defined(WPP_LEVEL_ENABLED) +# define WPP_LEVEL_ENABLED(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Flags[WPP_FLAG_NO(WPP_BIT_ ## CTL)] & WPP_MASK(WPP_BIT_ ## CTL)) +#endif +#else // #ifndef WPP_USE_TRACE_LEVELS +#if !defined(WPP_LEVEL_LOGGER) +#define WPP_LEVEL_LOGGER(lvl) (WPP_CONTROL(WPP_BIT_ ## DUMMY).Logger), +#endif + +#if !defined(WPP_LEVEL_ENABLED) +#define WPP_LEVEL_ENABLED(lvl) (WPP_CONTROL(WPP_BIT_ ## DUMMY).Level >= lvl) +#endif +#endif // #ifndef WPP_USE_TRACE_LEVELS + +#if !defined(WPP_FLAG_LOGGER) +# define WPP_FLAG_LOGGER(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Logger), +#endif + + +#if !defined(WPP_FLAG_ENABLED) +# define WPP_FLAG_ENABLED(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Flags[WPP_FLAG_NO(WPP_BIT_ ## CTL)] & WPP_MASK(WPP_BIT_ ## CTL)) +#endif + +#if !defined(WPP_LOGGER_ARG) +# define WPP_LOGGER_ARG TRACEHANDLE Logger, +#endif + +#if !defined(WPP_GET_LOGGER) +# define WPP_GET_LOGGER Logger +#endif + +#ifndef WPP_ENABLED +# define WPP_ENABLED() 1 +#endif +#ifndef WPP_LOGGER +# define WPP_LOGGER() (WPP_CB[0].Control.Logger), +#endif + +#endif // WPP_NO_CONTROL_GUIDS + +#if defined(__cplusplus) +}; +#endif + +#endif // #ifndef WPP_ALREADY_INCLUDED + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/defaultwpp.ini b/eng/WpfArcadeSdk/tools/WppConfig/rev1/defaultwpp.ini new file mode 100644 index 000000000..71f75402e --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/defaultwpp.ini @@ -0,0 +1,219 @@ +# +# Default types for WPP +# + +# our basic arithmetic types + +DEFINE_SIMPLE_TYPE( XINT64, signed __int64, ItemLongLongX, "I64x", x, 8); +DEFINE_SIMPLE_TYPE( XXINT64, signed __int64, ItemLongLongXX, "I64X", X, 8); +DEFINE_SIMPLE_TYPE( OINT64, signed __int64, ItemLongLongO, "I64o", o, 8); + +DEFINE_SIMPLE_TYPE( SBYTE, signed char, ItemChar, "c", c, 1); +DEFINE_SIMPLE_TYPE( SSHORT, signed short, ItemShort, "hd", h, 2); +DEFINE_SIMPLE_TYPE( SINT, signed int, ItemLong, "d", d, 4); +DEFINE_SIMPLE_TYPE( SLONG, signed long, ItemLong, "ld", l, 4); +DEFINE_SIMPLE_TYPE( SINT64, signed __int64, ItemLongLong, "I64d", i, 8); + +DEFINE_SIMPLE_TYPE( UBYTE, unsigned char, ItemChar, "c", C, 1); +DEFINE_SIMPLE_TYPE( USHORT, unsigned short, ItemShort, "hu", H, 2); +DEFINE_SIMPLE_TYPE( UINT, unsigned int, ItemLong, "u", D, 4); +DEFINE_SIMPLE_TYPE( ULONG, unsigned long, ItemLong, "lu", L, 4); +DEFINE_SIMPLE_TYPE( UINT64, unsigned __int64, ItemULongLong, "I64u", I, 8); + + + +DEFINE_SIMPLE_TYPE( DOUBLE, double, ItemDouble, "s", g, 8); + +# arch dependent types + +DEFINE_SIMPLE_TYPE( SLONGPTR, LONG_PTR, ItemPtr, "Id", p, 6); +DEFINE_SIMPLE_TYPE( ULONGPTR, ULONG_PTR, ItemPtr, "Iu", P, 6); +DEFINE_SIMPLE_TYPE( PTR, const void*, ItemPtr, "p", q, 6); +DEFINE_SIMPLE_TYPE( HANDLE, const void*, ItemPtr, "p", Q, 6); + +# predefined constants + +DEFINE_SIMPLE_TYPE( COMPNAME,,, "__COMPNAME__",,); +DEFINE_SIMPLE_TYPE( FILE,,, "__FILE__",,); +DEFINE_SIMPLE_TYPE( LINE,,, "__LINE__",,); +DEFINE_SIMPLE_TYPE( FUNC,,, "%!FUNC!",,); // traceprt now understands %!FUNC! +DEFINE_SIMPLE_TYPE( LEVEL,,, "%!LEVEL!",,); // and %!LEVEL% + +DEFINE_SIMPLE_TYPE( STDPREFIX,,, "%0",,); +DEFINE_SIMPLE_TYPE( MOD,,, "%1!s!",,); +DEFINE_SIMPLE_TYPE( TYP,,, "%2!s!",,); +DEFINE_SIMPLE_TYPE( TID,,, "%3!x!",,); +DEFINE_SIMPLE_TYPE( NOW,,, "%4!s!",,); +DEFINE_SIMPLE_TYPE( SEQ,,, "%7!x!",,); +DEFINE_SIMPLE_TYPE( PID,,, "%8!x!",,); +DEFINE_SIMPLE_TYPE( CPU,,, "%9!x!",,); +DEFINE_SIMPLE_TYPE( SPACE,,, " ",,); + +DEFINE_SIMPLE_TYPE_PTR(GUID, LPCGUID, ItemGuid, "s", _guid_, 0); // simple type, passed by addr + +DEFINE_FLAVOR( UCHAR, SBYTE, ItemUChar, "c" ); +DEFINE_FLAVOR( SCHAR, SBYTE, ItemChar, "c" ); +DEFINE_FLAVOR( BOOLEAN, SBYTE, ItemListByte(FALSE,TRUE), "s"); + + +# all strings require custom processing + +DEFINE_CPLX_TYPE(ASTR, WPP_LOGASTR, const char*, ItemString, "s", s, 0); +DEFINE_CPLX_TYPE(ARSTR, WPP_LOGASTR, LPCSTR, ItemRString, "s", t, 0); +DEFINE_CPLX_TYPE(ARWSTR, WPP_LOGWSTR, LPCWSTR, ItemRWString, "s", S, 0); +DEFINE_CPLX_TYPE(WSTR, WPP_LOGWSTR, LPCWSTR, ItemWString, "s", S, 0); +DEFINE_CPLX_TYPE(CSTR, WPP_LOGPCSTR, PCSTRING, ItemPString, "s", z, 0, 2); +DEFINE_CPLX_TYPE(USTR, WPP_LOGPUSTR, PCUNICODE_STRING,ItemPWString,"s", Z, 0, 2); +DEFINE_CPLX_TYPE(ANSTR, WPP_LOGPCSTR, PCANSI_STRING, ItemPString, "s", aZ, 0, 2); + +DEFINE_CPLX_TYPE(sid, WPP_LOGPSID, PSID, ItemSid,"s", _sid_, 0); +DEFINE_CPLX_TYPE(str, WPP_LOGSTDSTR, const std::string&, ItemString,"s", _str_, 0); + + +#kludge for printf like statements + +DEFINE_FLAVOR(e, DOUBLE,,); +DEFINE_FLAVOR(E, DOUBLE,,); +DEFINE_FLAVOR(f, DOUBLE,,); +DEFINE_FLAVOR(g, DOUBLE,,); +DEFINE_FLAVOR(G, DOUBLE,,); + +DEFINE_FLAVOR(c, SBYTE,,); +DEFINE_FLAVOR(hc, SBYTE,,); +DEFINE_FLAVOR(lc, SSHORT,,); +DEFINE_FLAVOR(wc, SSHORT,,); +DEFINE_FLAVOR(C, SSHORT,,); + +DEFINE_FLAVOR(s, ASTR,,); +DEFINE_FLAVOR(hs, ASTR,,); +DEFINE_FLAVOR(S, WSTR,,); +DEFINE_FLAVOR(ws, WSTR,,); +DEFINE_FLAVOR(ls, WSTR,,); + +DEFINE_FLAVOR(hi, SSHORT,,); +DEFINE_FLAVOR(hd, SSHORT,,); +DEFINE_FLAVOR(hu, USHORT,,"u"); +DEFINE_FLAVOR(hx, USHORT,,"x"); +DEFINE_FLAVOR(hX, USHORT,,"X"); +DEFINE_FLAVOR(ho, USHORT,,"o"); + +DEFINE_FLAVOR(Id, ULONGPTR,,"Id"); +DEFINE_FLAVOR(Iu, ULONGPTR,,"Iu"); +DEFINE_FLAVOR(Ix, ULONGPTR,,"Ix"); +DEFINE_FLAVOR(IX, ULONGPTR,,"IX"); +DEFINE_FLAVOR(Io, ULONGPTR,,"Io"); + +DEFINE_FLAVOR(i, SINT,,); +DEFINE_FLAVOR(d, SINT,,); +DEFINE_FLAVOR(u, UINT,,"u"); +DEFINE_FLAVOR(x, UINT,,"x"); +DEFINE_FLAVOR(X, UINT,,"X"); +DEFINE_FLAVOR(o, UINT,,"o"); +DEFINE_FLAVOR(cccc, SINT, ItemChar4, "s"); + +DEFINE_FLAVOR(li, SLONG,,); +DEFINE_FLAVOR(ld, SLONG,,); +DEFINE_FLAVOR(lu, ULONG,,"u"); +DEFINE_FLAVOR(lx, ULONG,,"x"); +DEFINE_FLAVOR(lX, ULONG,,"X"); +DEFINE_FLAVOR(lo, ULONG,,"o"); + +DEFINE_FLAVOR(I64d, SINT64,,); +DEFINE_FLAVOR(I64u, UINT64,,); +DEFINE_FLAVOR(I64x, XINT64,,"I64x"); +DEFINE_FLAVOR(I64X, XXINT64,,"I64X"); +DEFINE_FLAVOR(I64o, OINT64,,"I64o"); + +DEFINE_FLAVOR(p, PTR,,); + +DEFINE_FLAVOR(Z, ANSTR,,); +DEFINE_FLAVOR(wZ, USTR,,); +DEFINE_FLAVOR(z, CSTR,,); +DEFINE_FLAVOR(hZ, CSTR,,); + +# default formats for those who don't care to provide their own strings + +DEFINE_FLAVOR(XBYTE, SBYTE,, "02x"); +DEFINE_FLAVOR(OBYTE, SBYTE,, "o"); + +DEFINE_FLAVOR(XSHORT, SSHORT,, "04hX"); +DEFINE_FLAVOR(OSHORT, SSHORT,, "ho"); + +DEFINE_FLAVOR(XINT, SINT,, "08x"); +DEFINE_FLAVOR(OINT, SINT,, "o"); + +DEFINE_FLAVOR(XLONG, SLONG,, "08lX"); +DEFINE_FLAVOR(OLONG, SLONG,, "lo"); + + +DEFINE_FLAVOR(XLONGPTR, SLONGPTR,,"Ix"); +DEFINE_FLAVOR(OLONGPTR, SLONGPTR,,"Ox"); + +# special formats + +DEFINE_FLAVOR(IPADDR, UINT, ItemIPAddr, "s"); +DEFINE_FLAVOR(PORT, USHORT, ItemPort, "s"); +DEFINE_FLAVOR(STATUS, SINT, ItemNTSTATUS, "s"); +DEFINE_FLAVOR(WINERROR, UINT, ItemWINERROR, "s"); +DEFINE_FLAVOR(HRESULT, SINT, ItemHRESULT, "s"); + +DEFINE_FLAVOR(ipaddr,IPADDR,,); +DEFINE_FLAVOR(port,PORT,,); +DEFINE_FLAVOR(status,STATUS,,); +DEFINE_FLAVOR(hresult,HRESULT,,); +DEFINE_FLAVOR(winerr,WINERROR,,); +DEFINE_FLAVOR(guid,GUID,,); + +# time related stuff + +DEFINE_FLAVOR(TIMESTAMP, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(TIME, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(DATE, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(WAITTIME, SINT64, ItemTimestamp, "s"); + +DEFINE_FLAVOR(due, SINT64, ItemWaitTime, "s"); +DEFINE_FLAVOR(delta, SINT64, ItemTimeDelta, "s"); +DEFINE_FLAVOR(datetime, SINT64, ItemTimestamp, "s"); + +# enumeration types + +DEFINE_FLAVOR(ItemListByte, SBYTE, ItemListByte, "s"); +DEFINE_FLAVOR(ItemListShort, SSHORT, ItemListShort,"s"); +DEFINE_FLAVOR(ItemListLong, SLONG, ItemListLong, "s"); + +DEFINE_FLAVOR(ItemSetByte, UBYTE, ItemSetByte, "s"); +DEFINE_FLAVOR(ItemSetShort, USHORT, ItemSetShort,"s"); +DEFINE_FLAVOR(ItemSetLong, ULONG, ItemSetLong, "s"); + +DEFINE_FLAVOR(ItemEnum, ULONG, ItemEnum, "s"); + +DEFINE_FLAVOR(CLSID, GUID, ItemCLSID, "s"); +DEFINE_FLAVOR(LIBID, GUID, ItemLIBID, "s"); +DEFINE_FLAVOR(IID, GUID, ItemIID, "s"); + + +CUSTOM_TYPE(b1, ItemSetByte(1,2,3,4,5,6,7,8) ); +CUSTOM_TYPE(b2, ItemSetShort(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) ); +CUSTOM_TYPE(b4, ItemSetLong(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) ); + + +CUSTOM_TYPE(bool, ItemListLong(false,true) ); +CUSTOM_TYPE(bool16, ItemListShort(false,true) ); +CUSTOM_TYPE(bool8, ItemListByte(false,true) ); + +CUSTOM_TYPE(irql, ItemListByte(Low,APC,DPC) ); + +CUSTOM_TYPE(pnpmn, ItemListByte(IRP_MN_START_DEVICE,IRP_MN_QUERY_REMOVE_DEVICE,IRP_MN_REMOVE_DEVICE,IRP_MN_CANCEL_REMOVE_DEVICE,IRP_MN_STOP_DEVICE,IRP_MN_QUERY_STOP_DEVICE,IRP_MN_CANCEL_STOP_DEVICE,IRP_MN_QUERY_DEVICE_RELATIONS,IRP_MN_QUERY_INTERFACE,IRP_MN_QUERY_CAPABILITIES,IRP_MN_QUERY_RESOURCES,IRP_MN_QUERY_RESOURCE_REQUIREMENTS,IRP_MN_QUERY_DEVICE_TEXT,IRP_MN_FILTER_RESOURCE_REQUIREMENTS,IRP_MN_PNP_14,IRP_MN_READ_CONFIG,IRP_MN_WRITE_CONFIG,IRP_MN_EJECT,IRP_MN_SET_LOCK,IRP_MN_QUERY_ID,IRP_MN_QUERY_PNP_DEVICE_STATE,IRP_MN_QUERY_BUS_INFORMATION,IRP_MN_DEVICE_USAGE_NOTIFICATION,IRP_MN_SURPRISE_REMOVAL) ); +CUSTOM_TYPE(sysctrl, ItemListByte(IRP_MN_QUERY_ALL_DATA,IRP_MN_QUERY_SINGLE_INSTANCE, IRP_MN_CHANGE_SINGLE_INSTANCE, IRP_MN_CHANGE_SINGLE_ITEM, IRP_MN_ENABLE_EVENTS, IRP_MN_DISABLE_EVENTS, IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION, IRP_MN_REGINFO, IRP_MN_EXECUTE_METHOD, IRP_MN_Reserved_0a, IRP_MN_REGINFO_EX) ); + +# default tracing macro + +FUNC DoTraceMessage(LEVEL,MSG,...); +FUNC DoDebugTrace(TRACELEVEL,MSG,...); + + +# default prefix (use traceprt default) + +USEPREFIX(*,"%!STDPREFIX!"); // traceprt will add standard prefix + +WPP_FLAGS(-lookfor:WPP_INIT_TRACING); // the same flags that can be passed on the command line to tracewpp diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/header.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/header.tpl new file mode 100644 index 000000000..25c0c52e1 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/header.tpl @@ -0,0 +1,70 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` + +`* Dump defintions specified via -D on the command line to WPP *` + +`FORALL def IN MacroDefinitions` +#define `def.Name` `def.Alias` +`ENDFOR` + +#define WPP_THIS_FILE `SourceFile.CanonicalName` + +#if !defined(WPP_KERNEL_MODE) +# include +# pragma warning(disable: 4201) +# include +# include +# define WPP_TRACE TraceMessage +#else +#define WPP_TRACE WmiTraceMessage +#endif + +#if !defined(WPP_PRIVATE) +# define WPP_INLINE __inline +# define WPP_SELECT_ANY extern "C" __declspec(selectany) +#else +# define WPP_INLINE static +# define WPP_SELECT_ANY static +#endif + +__inline TRACEHANDLE WppQueryLogger(__in_opt PCWSTR LoggerName) +{ + { +#if defined(WPP_KERNEL_MODE) + ULONG ReturnLength ; + NTSTATUS Status ; + TRACEHANDLE TraceHandle ; + UNICODE_STRING Buffer ; + + RtlInitUnicodeString(&Buffer, LoggerName ? LoggerName : L"stdout"); + + if ((Status = WmiQueryTraceInformation(TraceHandleByNameClass, + (PVOID)&TraceHandle, + sizeof(TraceHandle), + &ReturnLength, + (PVOID)&Buffer)) == STATUS_SUCCESS) { + return TraceHandle ; + } +#else + ULONG status; + EVENT_TRACE_PROPERTIES LoggerInfo; + + ZeroMemory(&LoggerInfo, sizeof(LoggerInfo)); + LoggerInfo.Wnode.BufferSize = sizeof(LoggerInfo); + LoggerInfo.Wnode.Flags = WNODE_FLAG_TRACED_GUID; + + status = QueryTraceW(0, LoggerName ? LoggerName : L"stdout", &LoggerInfo); + if (status == ERROR_SUCCESS || status == ERROR_MORE_DATA) { + return (TRACEHANDLE) LoggerInfo.Wnode.HistoricalContext; + } +#endif + } + return 0; +} + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorControl.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorControl.tpl new file mode 100644 index 000000000..e823a0cc4 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorControl.tpl @@ -0,0 +1,248 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright 1999-2000 Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +// +// Defines a set of macro that expand control model specified +// with WPP_CONTROL_GUIDS (example shown below) +// into an enum of trace levels and required structures that +// contain the mask of levels, logger handle and some information +// required for registration. +// + +/////////////////////////////////////////////////////////////////////////////////// +// +// #define WPP_CONTROL_GUIDS \ +// WPP_DEFINE_CONTROL_GUID(Regular,(81b20fea,73a8,4b62,95bc,354477c97a6f), \ +// WPP_DEFINE_BIT(Error) \ +// WPP_DEFINE_BIT(Unusual) \ +// WPP_DEFINE_BIT(Noise) \ +// ) \ +// WPP_DEFINE_CONTROL_GUID(HiFreq,(91b20fea,73a8,4b62,95bc,354477c97a6f), \ +// WPP_DEFINE_BIT(Entry) \ +// WPP_DEFINE_BIT(Exit) \ +// WPP_DEFINE_BIT(ApiCalls) \ +// WPP_DEFINE_BIT(RandomJunk) \ +// WPP_DEFINE_BIT(LovePoem) \ +// ) + + +#if !defined(WPP_NO_CONTROL_GUIDS) + +#if defined(WPP_DEFAULT_CONTROL_GUID) +# if defined(WPP_CONTROL_GUIDS) +# pragma message(__FILE__ " : error : WPP_DEFAULT_CONTROL_GUID cannot be used together with WPP_CONTROL_GUIDS") +# stop +# else +# define WPP_CONTROL_GUIDS \ + WPP_DEFINE_CONTROL_GUID(Default,(WPP_DEFAULT_CONTROL_GUID), \ + WPP_DEFINE_BIT(Error) \ + WPP_DEFINE_BIT(Unusual) \ + WPP_DEFINE_BIT(Noise) \ + ) +# endif +#endif + +#if !defined(WPP_CONTROL_GUIDS) +# pragma message(__FILE__ " : error : Please define control model via WPP_CONTROL_GUIDS or WPP_DEFAULT_CONTROL_GUID macros") +# pragma message(__FILE__ " : error : don't forget to call WPP_INIT_TRACING and WPP_CLEANUP in your main, DriverEntry or DllInit") +# pragma message(__FILE__ " : error : see tracewpp.doc for further information") +stop. +#endif +// a set of macro to convert a guid in a form x(81b20fea,73a8,4b62,95bc,354477c97a6f) +// into either a a struct or text string + +#define _WPPW(x) L ## x + +#define WPP_GUID_TEXT(l,w1,w2,w3,ll) #l "-" #w1 "-" #w2 "-" #w3 "-" #ll +#define WPP_GUID_WTEXT(l,w1,w2,w3,ll) _WPPW(#l) L"-" _WPPW(#w1) L"-" _WPPW(#w2) L"-" _WPPW(#w3) L"-" _WPPW(#ll) +#define WPP_EXTRACT_BYTE(val,n) ( ((0x ## val) >> (8 * n)) & 0xFF ) +#define WPP_GUID_STRUCT(l,w1,w2,w3,ll) {0x ## l, 0x ## w1, 0x ## w2,\ + {WPP_EXTRACT_BYTE(w3, 1), WPP_EXTRACT_BYTE(w3, 0), \ + WPP_EXTRACT_BYTE(ll, 5), WPP_EXTRACT_BYTE(ll, 4), \ + WPP_EXTRACT_BYTE(ll, 3), WPP_EXTRACT_BYTE(ll, 2), \ + WPP_EXTRACT_BYTE(ll, 1), WPP_EXTRACT_BYTE(ll, 0)} } + +// define annotation record that will carry control intormation to pdb (in case somebody needs it) +__forceinline void WPP_CONTROL_ANNOTATION() { +#if !defined(WPP_NO_ANNOTATIONS) +#if !defined(WPP_ANSI_ANNOTATION) +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation(L"TMC:", WPP_GUID_WTEXT Guid, _WPPW(#Name) Bits); +# define WPP_DEFINE_BIT(Name) , _WPPW(#Name) +#else +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation("TMC:", WPP_GUID_TEXT Guid, #Name Bits); +# define WPP_DEFINE_BIT(Name) , #Name +#endif + WPP_CONTROL_GUIDS +# undef WPP_DEFINE_BIT +# undef WPP_DEFINE_CONTROL_GUID +#endif +} + +// define an enum of control block names +////// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) WPP_CTL_ ## Name, +enum WPP_CTL_NAMES { WPP_CONTROL_GUIDS WPP_LAST_CTL}; +#undef WPP_DEFINE_CONTROL_GUID + +// define control guids +////// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ +extern __declspec(selectany) const GUID WPP_ ## ThisDir ## _CTLGUID_ ## Name = WPP_GUID_STRUCT Guid; +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_CONTROL_GUID + +// define enums of individual bits +///// +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + WPP_BLOCK_START_ ## Name = WPP_CTL_ ## Name * 0x10000, Bits WPP_BLOCK_END_ ## Name, +# define WPP_DEFINE_BIT(Name) WPP_BIT_ ## Name, +enum WPP_DEFINE_BIT_NAMES { WPP_CONTROL_GUIDS }; +# undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID + +#define WPP_MASK(CTL) (1 << ( ((CTL)-1) & 31 )) +#define WPP_FLAG_NO(CTL) ( (0xFFFF & ((CTL)-1) ) / 32) +#define WPP_CTRL_NO(CTL) ((CTL) >> 16) + +// calculate how many DWORDs we need to get the required number of bits +// upper estimate. Sometimes will be off by one +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) | WPP_BLOCK_END_ ## Name +enum _WPP_FLAG_LEN_ENUM { WPP_FLAG_LEN = 1 | ((0 WPP_CONTROL_GUIDS) & 0xFFFF) / 32 }; +#undef WPP_DEFINE_CONTROL_GUID + +#ifndef WPP_CB +# define WPP_CB WPP_GLOBAL_Control +#endif +#ifndef WPP_CB_TYPE +#define WPP_CB_TYPE WPP_PROJECT_CONTROL_BLOCK +#endif + +typedef union { + WPP_REGISTRATION_BLOCK Registration; // need this only to register + WPP_TRACE_CONTROL_BLOCK Control; + UCHAR ReserveSpace[ sizeof(WPP_TRACE_CONTROL_BLOCK) + sizeof(ULONG) * (WPP_FLAG_LEN - 1) ]; +} WPP_CB_TYPE ; + +#define WPP_NEXT(Name) ((WPP_REGISTRATION_BLOCK*) \ + (WPP_CTL_ ## Name + 1 == WPP_LAST_CTL ? 0:WPP_CB + WPP_CTL_ ## Name + 1)) + +// WPP_CONTROL structure has two extra fields in the kernel +// mode. We will use WPPKM_NULL to initalize them + +#if defined(WPP_KERNEL_MODE) +# define WPPKM_NULL 0, +#else +# define WPPKM_NULL +#endif + +#if defined(WPP_DLL) + +extern __declspec(selectany) WPP_CB_TYPE WPP_CB[WPP_LAST_CTL]; + +__inline void WPP_INIT_CONTROL_ARRAY(WPP_CB_TYPE* Arr) { +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + Arr->Registration.Next = WPP_NEXT(Name); \ + Arr->Registration.ControlGuid = &WPP_ ## ThisDir ## _CTLGUID_ ## Name; \ + Arr->Registration.FriendlyName = L ## #Name; \ + Arr->Registration.BitNames = Bits; \ + Arr->Registration.FlagsLen = WPP_FLAG_LEN; \ + Arr->Registration.RegBlockLen = WPP_LAST_CTL; ++Arr; +#define WPP_DEFINE_BIT(BitName) L" " L ## #BitName +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID +} +#define WPP_INIT_STATIC_DATA WPP_INIT_CONTROL_ARRAY(WPP_CB) + +#else + +extern __declspec(selectany) WPP_CB_TYPE WPP_CB[WPP_LAST_CTL] = { +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) {{WPPKM_NULL WPP_NEXT(Name), \ + &WPP_ ## ThisDir ## _CTLGUID_ ## Name, L ## #Name, Bits, WPPKM_NULL WPP_FLAG_LEN, WPP_LAST_CTL}}, +#define WPP_DEFINE_BIT(BitName) L" " L ## #BitName +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID +}; +#define WPP_INIT_STATIC_DATA 0 + +#endif + +#define WPP_CONTROL(CTL) (WPP_CB[WPP_CTRL_NO(CTL)].Control) +#define WPP_REGISTRATION(CTL) (WPP_CB[WPP_CTRL_NO(CTL)].Registration) + +#define WPP_SET_FORWARD_PTR(CTL, FLAGS, PTR) (\ + (WPP_REGISTRATION(WPP_BIT_ ## CTL ).Options = (FLAGS)),\ + (WPP_REGISTRATION(WPP_BIT_ ## CTL ).Ptr = (PTR)) ) + +#if !defined(WPP_LEVEL_LOGGER) +# define WPP_LEVEL_LOGGER(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Logger), +#endif + +#if !defined(WPP_LEVEL_ENABLED) +# define WPP_LEVEL_ENABLED(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Flags[WPP_FLAG_NO(WPP_BIT_ ## CTL)] & WPP_MASK(WPP_BIT_ ## CTL)) +#endif + +#if !defined(WPP_LOGGER_ARG) +# define WPP_LOGGER_ARG TRACEHANDLE Logger, +#endif + +#if !defined(WPP_GET_LOGGER) +# define WPP_GET_LOGGER Logger +#endif + +#ifndef WPP_ENABLED +# define WPP_ENABLED() 1 +#endif +#ifndef WPP_LOGGER +# define WPP_LOGGER() (WPP_CB[0].Control.Logger), +#endif + +#endif // WPP_NO_CONTROL_GUIDS + + +#if defined(__cplusplus) +extern "C" { +#endif +#if !defined(WPP_TRACE_W2K_COMPATABILITY) + VOID WppInitKm(PVOID DrvContext, PVOID InitInfo, PWPP_REGISTRATION_BLOCK Registration); + VOID WppCleanupKm(PVOID TraceContext, PWPP_REGISTRATION_BLOCK Registration); +#else // #if !defined(WPP_TRACE_W2K_COMPATABILITY) + // W2K Compatable versions + VOID WppInitKm(PDEVICE_OBJECT pDevObj, PUNICODE_STRING RegistryPath, PWPP_REGISTRATION_BLOCK Registration); + VOID WppCleanupKm(PDEVICE_OBJECT pDeviceObject); +#endif // #if !defined(WPP_TRACE_W2K_COMPATABILITY) + +#if defined(__cplusplus) +}; +#endif + +#if !defined(WPP_TRACE_W2K_COMPATABILITY) +# define WPP_INIT_TRACING(DrvObj, Regpath, InitInfo) (WPP_CONTROL_ANNOTATION(),WPP_INIT_STATIC_DATA,WppInitKm(DrvObj, InitInfo, &WPP_CB[0].Registration)) + +# define WPP_CLEANUP(DrvObj, TraceContext) WppCleanupKm(TraceContext, &WPP_CB[0].Registration) + +#else // #if !defined(WPP_TRACE_W2K_COMPATABILITY) +# define WPP_INIT_TRACING(DevObj, RegPath) (WPP_CONTROL_ANNOTATION(),WPP_INIT_STATIC_DATA,WppInitKm(DevObj, RegPath, &WPP_CB[0].Registration)) + +# define WPP_CLEANUP(DevObj) WppCleanupKm(DevObj) + +NTSTATUS +WppTraceCallback( + IN UCHAR minorFunction, + IN PVOID DataPath, + IN ULONG BufferLength, + IN PVOID Buffer, + IN PVOID Context, + OUT PULONG Size + ) ; + +#define WPP_TRACE_CONTROL(Function,Buffer,BufferSize,ReturnSize) WppTraceCallback(Function,NULL,BufferSize,Buffer,&WPP_CB[0],&ReturnSize); + +#endif // #if !defined(WPP_TRACE_W2K_COMPATABILITY) + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorDefault.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorDefault.tpl new file mode 100644 index 000000000..d7ac9f676 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorDefault.tpl @@ -0,0 +1,30 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile} option on RUN_WPP line in your sources file *` +`* *` +`* Copyright 1999-2000 Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +typedef +ULONG +(*PFN_WPPTRACEMESSAGE)( + IN ULONG64 LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN ... + ); + +`INCLUDE km-StorHeader.tpl` +`INCLUDE km-StorControl.tpl` +`INCLUDE trmacro.tpl` + +`IF FOUND WPP_INIT_TRACING` +#define WPPINIT_EXPORT + `INCLUDE km-StorInit.tpl` +`ENDIF` diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorHeader.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorHeader.tpl new file mode 100644 index 000000000..e49c9fefd --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorHeader.tpl @@ -0,0 +1,319 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright 1999-2000 Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` + +`* Dump the definitions specified via -D on the command line to WPP *` + +`FORALL def IN MacroDefinitions` +#define `def.Name` `def.Alias` +`ENDFOR` + +#define WPP_THIS_FILE `SourceFile.CanonicalName` + +#include +#include +#include + +#if defined(WPP_TRACE_W2K_COMPATABILITY) +DEFINE_GUID(WPP_TRACE_CONTROL_NULL_GUID, 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +ULONG +__inline +NullTraceFunc ( + IN ULONG64 LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN ... + ) +{ + return 0; +} + +__declspec(selectany) PFN_WPPTRACEMESSAGE pfnWppTraceMessage = NullTraceFunc; + +#if defined(__cplusplus) +}; +#endif + +#if !defined(_NTRTL_) + // fake RTL_TIME_ZONE_INFORMATION // + typedef int RTL_TIME_ZONE_INFORMATION; +# define _WMIKM_ +#endif +#ifndef WPP_TRACE +#define WPP_TRACE pfnWppTraceMessage +#endif + +#ifndef WPP_OLDCC +#define WPP_OLDCC +#endif + +/////////////////////////////////////////////////////////////////////////////// +// +// B O R R O W E D D E F I N I T I O N S +// +/////////////////////////////////////////////////////////////////////////////// + +# define WPP_LOGGER_ARG ULONG64 Logger, + +#if ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)) && !defined(_M_AMD64) +#define NTAPI __stdcall +#else +#define _cdecl +#define NTAPI +#endif + +// +// Define API decoration for direct importing system DLL references. +// + +#if !defined(_NTSYSTEM_) +#define NTSYSAPI DECLSPEC_IMPORT +#define NTSYSCALLAPI DECLSPEC_IMPORT +#else +#define NTSYSAPI +#if defined(_NTDLLBUILD_) +#define NTSYSCALLAPI +#else +#define NTSYSCALLAPI DECLSPEC_ADDRSAFE +#endif + +#endif + +int __cdecl swprintf ( + wchar_t *string, + const wchar_t *format, + ... + ); + +typedef struct _UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; +#ifdef MIDL_PASS + [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer; +#else // MIDL_PASS + PWSTR Buffer; +#endif // MIDL_PASS +} UNICODE_STRING; +typedef UNICODE_STRING *PUNICODE_STRING; +typedef const UNICODE_STRING *PCUNICODE_STRING; + +#define TRACE_MESSAGE_SEQUENCE 1 // Message should include a sequence number +#define TRACE_MESSAGE_GUID 2 // Message includes a GUID +#define TRACE_MESSAGE_COMPONENTID 4 // Message has no GUID, Component ID instead +#define TRACE_MESSAGE_TIMESTAMP 8 // Message includes a timestamp +#define TRACE_MESSAGE_PERFORMANCE_TIMESTAMP 16 // *Obsolete* Clock type is controlled by + // the logger +#define TRACE_MESSAGE_SYSTEMINFO 32 // Message includes system information TID,PID +#define TRACE_MESSAGE_FLAG_MASK 0xFFFF // Only the lower 16 bits of flags are + // placed in the message those above 16 + // bits are reserved for local processing +#define TRACE_MESSAGE_MAXIMUM_SIZE 8*1024 // the maximum size allowed for a single trace + // message + +#define RtlFillMemory(Destination,Length,Fill) StorMemSet((Destination),(Fill),(Length)) +#define RtlZeroMemory(Destination,Length) StorMemSet((Destination),0,(Length)) + +typedef LONG NTSTATUS; + +// +// Generic test for success on any status value (non-negative numbers +// indicate success). +// + +#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0) + +#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) // ntsubauth +#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295L) +#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L) +#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL) +#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010L) + +typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; + +typedef enum _TRACE_INFORMATION_CLASS { + TraceIdClass, + TraceHandleClass, + TraceEnableFlagsClass, + TraceEnableLevelClass, + GlobalLoggerHandleClass, + EventLoggerHandleClass, + AllLoggerHandlesClass, + TraceHandleByNameClass +} TRACE_INFORMATION_CLASS; + +typedef PVOID PDEVICE_OBJECT; + +// +// Action code for IoWMIRegistrationControl api +// + +#define WMIREG_ACTION_REGISTER 1 +#define WMIREG_ACTION_DEREGISTER 2 +#define WMIREG_ACTION_REREGISTER 3 +#define WMIREG_ACTION_UPDATE_GUIDS 4 +#define WMIREG_ACTION_BLOCK_IRPS 5 + +#define REG_DWORD ( 4 ) // 32-bit number + +// +// Subroutines for dealing with the Registry +// + +typedef NTSTATUS (NTAPI * PRTL_QUERY_REGISTRY_ROUTINE)( + IN PWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength, + IN PVOID Context, + IN PVOID EntryContext + ); + +typedef struct _RTL_QUERY_REGISTRY_TABLE { + PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; + ULONG Flags; + PWSTR Name; + PVOID EntryContext; + ULONG DefaultType; + PVOID DefaultData; + ULONG DefaultLength; + +} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; + +// +// The following flags specify how the Name field of a RTL_QUERY_REGISTRY_TABLE +// entry is interpreted. A NULL name indicates the end of the table. +// + +#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 // Name is a subkey and remainder of + // table or until next subkey are value + // names for that subkey to look at. + +#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 // Reset current key to original key for + // this and all following table entries. + +#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 // Fail if no match found for this table + // entry. + +#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 // Used to mark a table entry that has no + // value name, just wants a call out, not + // an enumeration of all values. + +#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 // Used to suppress the expansion of + // REG_MULTI_SZ into multiple callouts or + // to prevent the expansion of environment + // variable values in REG_EXPAND_SZ + +#define RTL_QUERY_REGISTRY_DIRECT 0x00000020 // QueryRoutine field ignored. EntryContext + // field points to location to store value. + // For null terminated strings, EntryContext + // points to UNICODE_STRING structure that + // that describes maximum size of buffer. + // If .Buffer field is NULL then a buffer is + // allocated. + // + +#define RTL_QUERY_REGISTRY_DELETE 0x00000040 // Used to delete value keys after they + // are queried. + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +NTSTATUS +NTAPI +RtlQueryRegistryValues( + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, + IN PVOID Context, + IN OPTIONAL PVOID Environment + ); +#endif + +// +// The following values for the RelativeTo parameter determine what the +// Path parameter to RtlQueryRegistryValues is relative to. +// + +#define RTL_REGISTRY_ABSOLUTE 0 // Path is a full path +#define RTL_REGISTRY_SERVICES 1 // \Registry\Machine\System\CurrentControlSet\Services +#define RTL_REGISTRY_CONTROL 2 // \Registry\Machine\System\CurrentControlSet\Control +#define RTL_REGISTRY_WINDOWS_NT 3 // \Registry\Machine\Software\Microsoft\Windows NT\CurrentVersion +#define RTL_REGISTRY_DEVICEMAP 4 // \Registry\Machine\Hardware\DeviceMap +#define RTL_REGISTRY_USER 5 // \Registry\User\CurrentUser +#define RTL_REGISTRY_MAXIMUM 6 +#define RTL_REGISTRY_HANDLE 0x40000000 // Low order bits are registry handle +#define RTL_REGISTRY_OPTIONAL 0x80000000 // Indicates the key node is optional + +/////////////////////////////////////////////////////////////////////////////// + +__inline TRACEHANDLE WppQueryLogger(__in_opt PWSTR LoggerName) + +{ +#ifndef WPP_TRACE_W2K_COMPATABILITY + ULONG ReturnLength; + NTSTATUS Status; + TRACEHANDLE TraceHandle; + UNICODE_STRING Buffer; + + StorRtlInitUnicodeString(&Buffer, LoggerName ? LoggerName : L"stdout"); + + + if ((Status = StorWmiQueryTraceInformation(TraceHandleByNameClass, + (PVOID)&TraceHandle, + sizeof(TraceHandle), + &ReturnLength, + (PVOID)&Buffer)) != STATUS_SUCCESS) { + return 0; + } + + return TraceHandle; +#else + return (TRACEHANDLE) 0; +#endif // #ifdef WPP_TRACE_W2K_COMPATABILITY + +} + +typedef NTSTATUS (*WMIENTRY_NEW)( + IN UCHAR ActionCode, + IN PVOID DataPath, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + IN PVOID Context, + OUT PULONG Size + ); + +typedef struct _WPP_TRACE_CONTROL_BLOCK +{ + WMIENTRY_NEW Callback; + struct _WPP_TRACE_CONTROL_BLOCK *Next; + + __int64 Logger; + UCHAR FlagsLen; UCHAR Level; USHORT Reserved; + ULONG Flags[1]; +} WPP_TRACE_CONTROL_BLOCK, *PWPP_TRACE_CONTROL_BLOCK; + +typedef struct _WPP_REGISTRATION_BLOCK +{ + WMIENTRY_NEW Callback; + struct _WPP_REGISTRATION_BLOCK *Next; + + LPCGUID ControlGuid; + LPCWSTR FriendlyName; + LPCWSTR BitNames; + PUNICODE_STRING RegistryPath; + + UCHAR FlagsLen, RegBlockLen; +} WPP_REGISTRATION_BLOCK, *PWPP_REGISTRATION_BLOCK; + + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorInit.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorInit.tpl new file mode 100644 index 000000000..3d3a872f3 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-StorInit.tpl @@ -0,0 +1,410 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright 1999-2001 Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +// +// Defines a set of functions that simplifies +// kernel mode registration for tracing +// + +#if !defined(WppDebug) +# define WppDebug(a,b) +#endif + +#define WMIREG_FLAG_CALLBACK 0x80000000 // not exposed in DDK + + +#ifndef WPPINIT_EXPORT +# define WPPINIT_EXPORT +#endif + + +WPPINIT_EXPORT +NTSTATUS +WppTraceCallback( + IN UCHAR minorFunction, + IN PVOID DataPath, + IN ULONG BufferLength, + IN PVOID Buffer, + IN PVOID Context, + OUT PULONG Size + ) +/*++ + +Routine Description: + + Callback routine for IoWMIRegistrationControl. + +Arguments: + +Return Value: + + status + +Comments: + + if return value is STATUS_BUFFER_TOO_SMALL and BufferLength >= 4, + then first ulong of buffer contains required size + + +--*/ + +{ + WPP_PROJECT_CONTROL_BLOCK *cb = (WPP_PROJECT_CONTROL_BLOCK*)Context; + NTSTATUS status = STATUS_SUCCESS; +#if defined(WPP_TRACE_W2K_COMPATABILITY) + static LPCGUID regGuid = NULL; +#endif + + UNREFERENCED_PARAMETER(DataPath); + + WppDebug(0,("WppTraceCallBack 0x%08X %p\n", minorFunction, Context)); + + *Size = 0; + + switch(minorFunction) + { + case IRP_MN_REGINFO: + { + PWMIREGINFOW wmiRegInfo; + PCUNICODE_STRING regPath; + PWCHAR stringPtr; + ULONG registryPathOffset; + ULONG bufferNeeded; + +#if defined(WPP_TRACE_W2K_COMPATABILITY) + + wmiRegInfo = (PWMIREGINFO)Buffer; + + // Replace the null with the driver's trace control GUID + // regGuid is initialized the first time, so the GUID is saved for the next + // IRP_MN_REGINFO call + if (regGuid == NULL) { + regGuid = cb->Registration.ControlGuid; + } + + if (wmiRegInfo->GuidCount >= 1) { + // Replace the null trace GUID with the driver's trace control GUID + wmiRegInfo->WmiRegGuid[wmiRegInfo->GuidCount-1].Guid = *regGuid; + wmiRegInfo->WmiRegGuid[wmiRegInfo->GuidCount-1].Flags = + WMIREG_FLAG_TRACE_CONTROL_GUID | WMIREG_FLAG_TRACED_GUID; + *Size= wmiRegInfo->BufferSize; + status = STATUS_SUCCESS; +#ifdef WPP_GLOBALLOGGER + // Check if Global logger is active + StorWppInitGlobalLogger( + cb->Registration.ControlGuid, + (PTRACEHANDLE)&cb->Control.Logger, + &cb->Control.Flags[0], + &cb->Control.Level); +#endif //#ifdef WPP_GLOBALLOGGER + break; + } +#endif + + regPath = cb->Registration.RegistryPath; + + if (regPath == NULL) + { + // No registry path specified. This is a bad thing for + // the device to do, but is not fatal + + registryPathOffset = 0; + bufferNeeded = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + + 1 * sizeof(WMIREGGUIDW); + } + else { + registryPathOffset = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + + 1 * sizeof(WMIREGGUIDW); + + bufferNeeded = registryPathOffset + + regPath->Length + sizeof(USHORT); + } + + if (bufferNeeded <= BufferLength) + { + RtlZeroMemory(Buffer, BufferLength); + + wmiRegInfo = (PWMIREGINFO)Buffer; + wmiRegInfo->BufferSize = bufferNeeded; + wmiRegInfo->RegistryPath = registryPathOffset; + wmiRegInfo->GuidCount = 1; + +#if defined(WPP_TRACE_W2K_COMPATABILITY) + wmiRegInfo->WmiRegGuid[0].Guid = *regGuid; +#else + wmiRegInfo->WmiRegGuid[0].Guid = *cb->Registration.ControlGuid; + +#endif // #ifdef WPP_TRACE_W2K_COMPATABILITY + + wmiRegInfo->WmiRegGuid[0].Flags = + WMIREG_FLAG_TRACE_CONTROL_GUID | WMIREG_FLAG_TRACED_GUID; + + if (regPath != NULL) { + stringPtr = (PWCHAR)((PUCHAR)Buffer + registryPathOffset); + *stringPtr++ = regPath->Length; + StorMoveMemory(stringPtr, regPath->Buffer, regPath->Length); + + } + status = STATUS_SUCCESS; + *Size = bufferNeeded; + } else { + status = STATUS_BUFFER_TOO_SMALL; + if (BufferLength >= sizeof(ULONG)) { + *((PULONG)Buffer) = bufferNeeded; + *Size = sizeof(ULONG); + } + } + +#ifdef WPP_GLOBALLOGGER + // Check if Global logger is active + StorWppInitGlobalLogger( + cb->Registration.ControlGuid, + (PTRACEHANDLE)&cb->Control.Logger, + &cb->Control.Flags[0], + &cb->Control.Level); +#endif //#ifdef WPP_GLOBALLOGGER + + break; + } + + case IRP_MN_ENABLE_EVENTS: + case IRP_MN_DISABLE_EVENTS: + { + PWNODE_HEADER Wnode = (PWNODE_HEADER)Buffer; + ULONG Level; + ULONG ReturnLength ; + + if (cb == NULL ) + { + status = STATUS_WMI_GUID_NOT_FOUND; + break; + } + + if (BufferLength >= sizeof(WNODE_HEADER)) { + status = STATUS_SUCCESS; + + if (minorFunction == IRP_MN_DISABLE_EVENTS) { + cb->Control.Level = 0; + cb->Control.Flags[0] = 0; + cb->Control.Logger = 0; + } else { + TRACEHANDLE lh; + lh = (TRACEHANDLE)( Wnode->HistoricalContext ); + cb->Control.Logger = lh; +#if !defined(WPP_TRACE_W2K_COMPATABILITY) + if ((status = StorWmiQueryTraceInformation( + TraceEnableLevelClass, + &Level, + sizeof(Level), + &ReturnLength, + (PVOID)Wnode)) == STATUS_SUCCESS) + { + cb->Control.Level = (UCHAR)Level; + } + + status = StorWmiQueryTraceInformation( + TraceEnableFlagsClass, + &cb->Control.Flags[0], + sizeof(cb->Control.Flags[0]), + &ReturnLength, + (PVOID)Wnode); +#else // #ifndef WPP_TRACE_W2K_COMPATABILITY + cb->Control.Flags[0] = WmiGetLoggerEnableFlags(lh) ; + cb->Control.Level = (UCHAR)WmiGetLoggerEnableLevel(lh) ; + WppDebug(0,("Enable/Disable Logger = %p, Flags = 0x%8x, Level = %x08X\n", + cb->Control.Logger,cb->Control.Flags[0],cb->Control.Level)); +#endif // #ifndef WPP_TRACE_W2K_COMPATABILITY + } + } else { + status = STATUS_INVALID_PARAMETER; + } + + break; + } + + case IRP_MN_ENABLE_COLLECTION: + case IRP_MN_DISABLE_COLLECTION: + { + status = STATUS_SUCCESS; + break; + } + + case IRP_MN_QUERY_ALL_DATA: + case IRP_MN_QUERY_SINGLE_INSTANCE: + case IRP_MN_CHANGE_SINGLE_INSTANCE: + case IRP_MN_CHANGE_SINGLE_ITEM: + case IRP_MN_EXECUTE_METHOD: + { + status = STATUS_INVALID_DEVICE_REQUEST; + break; + } + + default: + { + status = STATUS_INVALID_DEVICE_REQUEST; + break; + } + + } +// DbgPrintEx(XX_FLTR, DPFLTR_TRACE_LEVEL, +// "%!FUNC!(%!SYSCTRL!) => %!status! (size = %d)", minorFunction, status, *Size); + return(status); +} + +WPPINIT_EXPORT +void WppInitKm( + IN PVOID DriverObject, + IN PVOID InitInfo, + IN OUT WPP_REGISTRATION_BLOCK* WppReg + ) +{ + if (StorInitTracing(InitInfo) == STATUS_SUCCESS) { + + pfnWppTraceMessage = (PFN_WPPTRACEMESSAGE) StorWmiTraceMessage; + + while(WppReg) { + + WPP_TRACE_CONTROL_BLOCK *cb = (WPP_TRACE_CONTROL_BLOCK*)WppReg; + NTSTATUS status ; + + WppReg -> Callback = WppTraceCallback; + WppReg -> RegistryPath = NULL; + cb -> FlagsLen = WppReg -> FlagsLen; + cb -> Level = 0; + cb -> Flags[0] = 0; + status = StorIoWMIRegistrationControl( + (PDEVICE_OBJECT)WppReg, + WMIREG_ACTION_REGISTER | WMIREG_FLAG_CALLBACK + ); + WppDebug(0,("IoWMIRegistrationControl status = %08X\n")); + WppReg = WppReg->Next; + } + } +} + +#if !defined(WPP_TRACE_W2K_COMPATABILITY) +WPPINIT_EXPORT +void WppCleanupKm( + PVOID TraceContext, + WPP_REGISTRATION_BLOCK* WppReg + ) +{ + StorCleanupTracing(TraceContext); + while (WppReg) { + StorIoWMIRegistrationControl( + (PDEVICE_OBJECT)WppReg, + WMIREG_ACTION_DEREGISTER | WMIREG_FLAG_CALLBACK + ); + WppReg = WppReg -> Next; + } +} +#else // #if !defined(WPP_TRACE_W2K_COMPATABILITY) +WPPINIT_EXPORT +void WppCleanupKm( + PDEVICE_OBJECT pDO + ) +{ + IoWMIRegistrationControl(pDO, WMIREG_ACTION_DEREGISTER ); +} +#endif // #if !defined(WPP_TRACE_W2K_COMPATABILITY) + +#if !defined(WPP_TRACE_W2K_COMPATABILITY) +#define WPP_SYSTEMCONTROL(PDO) +#define WPP_SYSTEMCONTROL2(PDO, offset) +#else // #if !defined(WPP_TRACE_W2K_COMPATABILITY) + +ULONG_PTR WPP_Global_NextDeviceOffsetInDeviceExtension = -1; + +#define WPP_SYSTEMCONTROL(PDO) \ + PDO->MajorFunction[ IRP_MJ_SYSTEM_CONTROL ] = WPPSystemControlDispatch; +#define WPP_SYSTEMCONTROL2(PDO, offset) \ + WPP_SYSTEMCONTROL(PDO); WPP_Global_NextDeviceOffsetInDeviceExtension = (ULONG_PTR)offset; + +#ifdef __cplusplus +extern "C" +{ +#endif __cplusplus + +// Routine to handle the System Control in W2K +NTSTATUS +WPPSystemControlDispatch( + __in PDEVICE_OBJECT pDO, + __in PIRP Irp + ); + +#ifdef __cplusplus +} +#endif __cplusplus + + +#ifdef ALLOC_PRAGMA + #pragma alloc_text( PAGE, WPPSystemControlDispatch) +#endif // ALLOC_PRAGMA + +// Routine to handle the System Control in W2K +NTSTATUS +WPPSystemControlDispatch( + __in PDEVICE_OBJECT pDO, + __in PIRP Irp + ) +{ + + PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp); + ULONG BufferSize = irpSp->Parameters.WMI.BufferSize; + PVOID Buffer = irpSp->Parameters.WMI.Buffer; + ULONG ReturnSize = 0; + NTSTATUS Status = STATUS_SUCCESS; + PWNODE_HEADER Wnode=NULL; + HANDLE ThreadHandle; + + WppDebug(0,("WPPSYSTEMCONTROL\n")); + + if (pDO == (PDEVICE_OBJECT)irpSp->Parameters.WMI.ProviderId) { +#if defined(WPP_TRACE_W2K_COMPATABILITY) + //To differentiate between the case where wmilib has already filled in parts of the buffer + if (irpSp->MinorFunction == IRP_MN_REGINFO) RtlZeroMemory(Buffer, BufferSize); +#endif + Status = WppTraceCallback((UCHAR)(irpSp->MinorFunction), + NULL, + BufferSize, + Buffer, + &WPP_CB[0], + &ReturnSize); + + WppDebug(0,("WPPSYSTEMCONTROL Status 0x%08X\n",Status)); + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = ReturnSize; + IoCompleteRequest( Irp, IO_NO_INCREMENT ); + return Status; + + } else if (WPP_Global_NextDeviceOffsetInDeviceExtension != -1) { + + ULONG_PTR t; + + WppDebug(0,("WPPSYSTEMCONTROL - not for us\n")); + + // + // Set current stack back one. + // + IoSkipCurrentIrpStackLocation( Irp ); + // + // Pass the call to the next driver. + // + t = (ULONG_PTR)pDO->DeviceExtension; + t += WPP_Global_NextDeviceOffsetInDeviceExtension; + return IoCallDriver(*(PDEVICE_OBJECT*)t,Irp); + + } else { + + //unable to pass down -- what to do? + //don't change irp status - IO defaults to failure + return Irp->IoStatus.Status; + } +} + +#endif // #if !defined(WPP_TRACE_W2K_COMPATABILITY) diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-WdfDefault.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-WdfDefault.tpl new file mode 100644 index 000000000..76c7205e6 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-WdfDefault.tpl @@ -0,0 +1 @@ +`INCLUDE km-default.tpl` \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-default.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-default.tpl new file mode 100644 index 000000000..8d1c61c67 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-default.tpl @@ -0,0 +1,119 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile} option on RUN_WPP line in your sources file *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +// +// Define anything which is needs but missing from +// older versions of the DDK. +// +#include +#include +#include +#include + +#if !defined(TRACE_LEVEL_NONE) + #define TRACE_LEVEL_NONE 0 + #define TRACE_LEVEL_CRITICAL 1 + #define TRACE_LEVEL_FATAL 1 + #define TRACE_LEVEL_ERROR 2 + #define TRACE_LEVEL_WARNING 3 + #define TRACE_LEVEL_INFORMATION 4 + #define TRACE_LEVEL_VERBOSE 5 + #define TRACE_LEVEL_RESERVED6 6 + #define TRACE_LEVEL_RESERVED7 7 + #define TRACE_LEVEL_RESERVED8 8 + #define TRACE_LEVEL_RESERVED9 9 +#endif + +#if !defined(TRACE_INFORMATION_CLASS_DEFINE) +typedef enum _TRACE_INFORMATION_CLASS { + TraceIdClass, + TraceHandleClass, + TraceEnableFlagsClass, + TraceEnableLevelClass, + GlobalLoggerHandleClass, + EventLoggerHandleClass, + AllLoggerHandlesClass, + TraceHandleByNameClass +} TRACE_INFORMATION_CLASS; + +#define TRACE_MESSAGE_SEQUENCE 1 +#define TRACE_MESSAGE_GUID 2 +#define TRACE_MESSAGE_COMPONENTID 4 +#define TRACE_MESSAGE_TIMESTAMP 8 +#define TRACE_MESSAGE_PERFORMANCE_TIMESTAMP 16 +#define TRACE_MESSAGE_SYSTEMINFO 32 + +#endif // !defined(TRACE_INFORMATION_CLASS_DEFINE) + + +// +// Advanced tracing APIs (XP and later) will be indirectly called. +// +typedef +LONG +(*PFN_WPPQUERYTRACEINFORMATION) ( + IN TRACE_INFORMATION_CLASS TraceInformationClass, + OUT PVOID TraceInformation, + IN ULONG TraceInformationLength, + OUT PULONG RequiredLength OPTIONAL, + IN PVOID Buffer OPTIONAL + ); + +typedef +LONG +(*PFN_WPPTRACEMESSAGE)( + IN ULONG64 LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN ... + ); + +`INCLUDE km-header.tpl` +`INCLUDE control.tpl` +`INCLUDE tracemacro.tpl` + +`IF FOUND WPP_INIT_TRACING` +#define WPPINIT_EXPORT + `INCLUDE km-init.tpl` +`ENDIF` + +// +// Tracing Macro name redefinition +// + +// NoMsgArgs + +`FORALL f IN Funcs WHERE !DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name` WPP_(CALL) +`ENDFOR` + +`FORALL f IN Funcs WHERE DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name`(ARGS) WPP_(CALL) ARGS +`ENDFOR` + + +// MsgArgs + +`FORALL f IN Funcs WHERE MsgArgs` +#undef `f.Name` +#define `f.Name`(`f.FixedArgs` MSGARGS) WPP_(CALL)(`f.FixedArgs` MSGARGS) +`ENDFOR` + +`FORALL r IN Reorder` +#undef WPP_R`r.Name` +#define WPP_R`r.Name`(`r.Arguments`) `r.Permutation` +`ENDFOR` + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-header.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-header.tpl new file mode 100644 index 000000000..8a7ff6e38 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-header.tpl @@ -0,0 +1,154 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +#ifdef WPP_THIS_FILE +// included twice +# define WPP_ALREADY_INCLUDED +# undef WPP_THIS_FILE +#endif // #ifdef WPP_THIS_FILE + +#define WPP_THIS_FILE `SourceFile.CanonicalName` + +#ifndef WPP_ALREADY_INCLUDED + +`* Dump the definitions specified via -D on the command line to WPP *` + +`FORALL def IN MacroDefinitions` +#define `def.Name` `def.Alias` +`ENDFOR` + +#define WPP_THIS_FILE `SourceFile.CanonicalName` + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef enum _WPP_TRACE_API_SUITE { + WppTraceDisabledSuite, + WppTraceWin2K, + WppTraceWinXP, + WppTraceTraceLH, + WppTraceMaxSuite +} WPP_TRACE_API_SUITE; + + +__declspec(selectany) PFN_WPPQUERYTRACEINFORMATION pfnWppQueryTraceInformation = NULL; +__declspec(selectany) PFN_WPPTRACEMESSAGE pfnWppTraceMessage = NULL; +__declspec(selectany) WPP_TRACE_API_SUITE WPPTraceSuite = WppTraceDisabledSuite; + + +#if !defined(_NTRTL_) +#if !defined(_NTHAL_) + // fake RTL_TIME_ZONE_INFORMATION // + typedef int RTL_TIME_ZONE_INFORMATION; +#endif +# define _WMIKM_ +#endif +#ifndef WPP_TRACE +#define WPP_TRACE pfnWppTraceMessage +#endif + + +VOID +WppLoadTracingSupport( + VOID + ); + +LONG +WppTraceCallback( + __in UCHAR MinorFunction, + __in_opt PVOID DataPath, + __in ULONG BufferLength, + __inout_bcount(BufferLength) PVOID Buffer, + __in PVOID Context, + __out PULONG Size + ); +#if !defined(WPP_TRACE_CONTROL_NULL_GUID) +DEFINE_GUID(WPP_TRACE_CONTROL_NULL_GUID, 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); +#endif +#define WPP_TRACE_CONTROL(Function,Buffer,BufferSize,ReturnSize) WppTraceCallback(Function,NULL,BufferSize,Buffer,&WPP_CB[0],&ReturnSize); + + +__inline ULONG64 WppQueryLogger(__in_opt PCWSTR LoggerName) +{ + + if (WppTraceWinXP == WPPTraceSuite) { + + ULONG ReturnLength ; + LONG Status ; + ULONG64 TraceHandle ; + UNICODE_STRING Buffer ; + + RtlInitUnicodeString(&Buffer, LoggerName ? LoggerName : L"stdout"); + + Status = pfnWppQueryTraceInformation( + TraceHandleByNameClass, + (PVOID)&TraceHandle, + sizeof(TraceHandle), + &ReturnLength, + (PVOID)&Buffer + ); + if (Status != STATUS_SUCCESS) { + return (ULONG64)0 ; + } + + return TraceHandle ; + } else { + return (ULONG64) 0 ; + } +} + +typedef LONG (*WMIENTRY_NEW)( + __in UCHAR MinorFunction, + __in_opt PVOID DataPath, + __in ULONG BufferLength, + __inout_bcount(BufferLength) PVOID Buffer, + __in PVOID Context, + __out PULONG Size + ); + +typedef struct _WPP_TRACE_CONTROL_BLOCK +{ + WMIENTRY_NEW Callback; + LPCGUID ControlGuid; + struct _WPP_TRACE_CONTROL_BLOCK *Next; + __int64 Logger; + PUNICODE_STRING RegistryPath; + UCHAR FlagsLen; + UCHAR Level; + USHORT Reserved; + ULONG Flags[1]; +} WPP_TRACE_CONTROL_BLOCK, *PWPP_TRACE_CONTROL_BLOCK; + +VOID WppCleanupKm(__in_opt PDEVICE_OBJECT pDeviceObject); +#define WPP_CLEANUP(DrvObj) WppCleanupKm((PDEVICE_OBJECT) DrvObj) + +#define WPP_IsValidSid RtlValidSid +#define WPP_GetLengthSid RtlLengthSid + +// +// Callback routine to be defined by the driver, which will be called from WPP callback +// WPP will pass current valued of : GUID, Logger, Enable, Flags, and Level +// +// To activate driver must define WPP_PRIVATE_ENABLE_CALLBACK in their code, sample below +// #define WPP_PRIVATE_ENABLE_CALLBACK MyPrivateCallback; +// +typedef +VOID +(*PFN_WPP_PRIVATE_ENABLE_CALLBACK)( + __in LPCGUID Guid, + __in __int64 Logger, + __in BOOLEAN Enable, + __in ULONG Flags, + __in UCHAR Level); + +#if defined(__cplusplus) +}; +#endif + +#endif // #ifndef WPP_ALREADY_INCLUDED + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-init.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-init.tpl new file mode 100644 index 000000000..4c9d9b444 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-init.tpl @@ -0,0 +1,1052 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +// +// Defines a set of functions that simplifies +// kernel mode registration for tracing +// + +#pragma warning(disable: 4201) +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#if !defined(WppDebug) +#define WppDebug(a,b) +#endif + + +// Routine to handle the System Control in W2K +DRIVER_DISPATCH WPPSystemControlDispatch; +NTSTATUS +WPPSystemControlDispatch( + __in PDEVICE_OBJECT DeviceObject, + __in PIRP Irp + ); + +WPPINIT_EXPORT +void WppInitGlobalLogger( + __in LPCGUID ControlGuid, + __out PTRACEHANDLE LoggerHandle, + __out PULONG Flags, + __out PUCHAR Level + ); + + +WPPINIT_EXPORT +VOID WppInitKm( + __in_opt PDEVICE_OBJECT pDevObject + ); + +#ifdef ALLOC_PRAGMA + #pragma alloc_text( PAGE, WPPSystemControlDispatch) + #pragma alloc_text( PAGE, WppLoadTracingSupport) + #pragma alloc_text( PAGE, WppInitGlobalLogger) + #pragma alloc_text( PAGE, WppTraceCallback) + #pragma alloc_text( PAGE, WppInitKm) + #pragma alloc_text( PAGE, WppCleanupKm) +#endif // ALLOC_PRAGMA + +// define annotation record that will carry control information to pdb (in case somebody needs it) +WPP_FORCEINLINE void WPP_CONTROL_ANNOTATION() { +#if !defined(WPP_NO_ANNOTATIONS) +#if !defined(WPP_ANSI_ANNOTATION) +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation(L"TMC:", WPP_GUID_WTEXT Guid, _WPPW(WPP_STRINGIZE(Name)) Bits); +# define WPP_DEFINE_BIT(Name) , _WPPW(#Name) +#else +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation("TMC:", WPP_GUID_TEXT Guid, WPP_STRINGIZE(Name) Bits); +# define WPP_DEFINE_BIT(Name) , #Name +#endif + WPP_CONTROL_GUIDS +# undef WPP_DEFINE_BIT +# undef WPP_DEFINE_CONTROL_GUID +#endif +} + + +#define WPP_NEXT(Name) ((WPP_TRACE_CONTROL_BLOCK*) \ + (WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)) + 1 == WPP_LAST_CTL ? 0:WPP_MAIN_CB + WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)) + 1)) + + +WPP_CB_TYPE WPP_MAIN_CB[WPP_LAST_CTL]; + +__inline void WPP_INIT_CONTROL_ARRAY(WPP_CB_TYPE* Arr) { +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + Arr->Control.Callback = NULL; \ + Arr->Control.ControlGuid = WPP_XGLUE4(&WPP_, ThisDir, _CTLGUID_, WPP_EVAL(Name)); \ + Arr->Control.Next = WPP_NEXT(WPP_EVAL(Name)); \ + Arr->Control.RegistryPath= NULL; \ + Arr->Control.FlagsLen = WPP_FLAG_LEN; \ + Arr->Control.Level = WPP_LAST_CTL; \ + Arr->Control.Reserved = 0; \ + Arr->Control.Flags[0] = 0; \ + ++Arr; +#define WPP_DEFINE_BIT(BitName) L" " L ## #BitName +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID +} + + +#undef WPP_INIT_STATIC_DATA +#define WPP_INIT_STATIC_DATA WPP_INIT_CONTROL_ARRAY(WPP_MAIN_CB) + + +ULONG_PTR WPP_Global_NextDeviceOffsetInDeviceExtension = (ULONG_PTR)-1; + +#define WPP_INIT_TRACING(DrvObj, RegPath) \ + { \ + UNREFERENCED_PARAMETER(RegPath); \ + WppDebug(0,("WPP_INIT_TRACING: &WPP_CB[0] %p\n", &WPP_MAIN_CB[0])); \ + WPP_INIT_STATIC_DATA; \ + WppLoadTracingSupport(); \ + WPP_CB = WPP_MAIN_CB; \ + ( WPP_CONTROL_ANNOTATION(), \ + WPP_MAIN_CB[0].Control.RegistryPath = NULL, \ + WppInitKm( (PDEVICE_OBJECT)DrvObj ) \ + ); \ + } + +#define WMIREG_FLAG_CALLBACK 0x80000000 // not exposed in DDK + +#ifndef WMIREG_FLAG_TRACE_PROVIDER +#define WMIREG_FLAG_TRACE_PROVIDER 0x00010000 +#endif + +#ifndef WPP_POOLTAG +#define WPP_POOLTAG 'ECTS' +#endif + +#ifndef WPP_POOLTYPE +#define WPP_POOLTYPE PagedPool +#endif + +#ifndef WPP_MAX_MOF_FIELDS +#define WPP_MAX_MOF_FIELDS 7 +#endif + +#ifndef TRACE_MESSAGE_MAXIMUM_SIZE +#define TRACE_MESSAGE_MAXIMUM_SIZE 8*1024 +#endif + +typedef struct _WPP_TRACE_BUFFER { + EVENT_TRACE_HEADER Header; + MOF_FIELD MofField[WPP_MAX_MOF_FIELDS+1]; +} WPP_TRACE_BUFFER; + + +NTSTATUS +W2kTraceMessage(__in TRACEHANDLE LoggerHandle, + __in ULONG TraceOptions, + __in LPGUID MessageGuid, + __in USHORT MessageNumber, + ... + ) +/*++ + +Routine Description: + + This is a function that simulates tracemessage in W2K + +Arguments: + + LoggerHandle - handle providers logger handle + + TraceOptions - unreferenced + + MessageGuid - pointer to message GUID + + MessageNumber - Type of message been logged + + ... - list or arguments + +Return Value: + + NTSTATUS code indicating success or failure + +--*/ + +{ + size_t ByteCount; + size_t ArgumentCount; + va_list VarArgs; + PVOID DataPtr; + size_t DataSize = 0; + size_t ArgOffset; + NTSTATUS Status = STATUS_SUCCESS; + WPP_TRACE_BUFFER TraceBuf; + PVOID Data=NULL; + + UNREFERENCED_PARAMETER(TraceOptions); // unused + + RtlZeroMemory(&(TraceBuf.Header), sizeof(EVENT_TRACE_HEADER)); + + //Fill in header fields + ((PWNODE_HEADER)&(TraceBuf.Header))->HistoricalContext = LoggerHandle; + TraceBuf.Header.GuidPtr = (ULONG_PTR)MessageGuid; + TraceBuf.Header.Flags = WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_GUID_PTR|WNODE_FLAG_USE_MOF_PTR; + //Type is 0xFF to indicate that the first data is the MessageNumber + TraceBuf.Header.Class.Type = 0xFF; + + //The first Mof data is the Message Number + TraceBuf.MofField[0].DataPtr = (ULONG_PTR)&MessageNumber; + TraceBuf.MofField[0].Length = sizeof(USHORT); + + + // Determine the number bytes to follow header + ByteCount = 0; // For Count of Bytes + ArgumentCount = 0; // For Count of Arguments + va_start(VarArgs, MessageNumber); + + while ((DataPtr = va_arg (VarArgs, PVOID)) != NULL) + { + DataSize = va_arg (VarArgs, size_t); + + // Check for integer overflow. + if (ByteCount + DataSize > ByteCount) + { + ByteCount += DataSize; + ArgumentCount++; + if (ArgumentCount <= WPP_MAX_MOF_FIELDS) + { + TraceBuf.MofField[ArgumentCount].DataPtr = (ULONG_PTR)DataPtr; + TraceBuf.MofField[ArgumentCount].Length = (ULONG)DataSize; + } + } + } + + va_end(VarArgs); + + if (ByteCount > TRACE_MESSAGE_MAXIMUM_SIZE) + { + return STATUS_UNSUCCESSFUL; + } + + //This occurs infrequently + if (ArgumentCount > WPP_MAX_MOF_FIELDS) + { + //Allocate the blob to hold the data + Data = ExAllocatePoolWithTag(WPP_POOLTYPE,ByteCount,WPP_POOLTAG); + if (Data == NULL) + { + return STATUS_NO_MEMORY; + } + + TraceBuf.MofField[1].DataPtr = (ULONG_PTR)Data; + TraceBuf.MofField[1].Length = (ULONG)ByteCount; + + ArgOffset = 0; + DataSize = 0; + va_start(VarArgs, MessageNumber); + + while ((DataPtr = va_arg (VarArgs, PVOID)) != NULL) { + DataSize = va_arg (VarArgs, size_t); + RtlCopyMemory((char*)Data + ArgOffset, DataPtr, DataSize); + ArgOffset += DataSize; + } + + va_end(VarArgs); + + //Fill in the total size (header + 2 mof fields) + TraceBuf.Header.Size = (USHORT)(sizeof(EVENT_TRACE_HEADER) + 2*sizeof(MOF_FIELD)); + + } + else + { + //Fill in the total size (header + mof fields) + TraceBuf.Header.Size = (USHORT)(sizeof(EVENT_TRACE_HEADER) + (ArgumentCount+1)*sizeof(MOF_FIELD)); + } + + + Status = IoWMIWriteEvent(&TraceBuf.Header); + + if (Data) ExFreePool(Data); + + return Status; +} + +// +// Public routines to break down the Loggerhandle +// + +#if !defined(KERNEL_LOGGER_ID) +#define KERNEL_LOGGER_ID 0xFFFF // USHORT only +#endif + +typedef struct _WPP_TRACE_ENABLE_CONTEXT { + USHORT LoggerId; // Actual Id of the logger + UCHAR Level; // Enable level passed by control caller + UCHAR InternalFlag; // Reserved + ULONG EnableFlags; // Enable flags passed by control caller +} WPP_TRACE_ENABLE_CONTEXT, *PWPP_TRACE_ENABLE_CONTEXT; + +#if !defined(WmiGetLoggerId) +#define WmiGetLoggerId(LoggerContext) \ + (((PWPP_TRACE_ENABLE_CONTEXT) (&LoggerContext))->LoggerId == \ + (USHORT)KERNEL_LOGGER_ID) ? \ + KERNEL_LOGGER_ID : \ + ((PWPP_TRACE_ENABLE_CONTEXT) (&LoggerContext))->LoggerId + +#define WmiGetLoggerEnableFlags(LoggerContext) \ + ((PWPP_TRACE_ENABLE_CONTEXT) (&LoggerContext))->EnableFlags +#define WmiGetLoggerEnableLevel(LoggerContext) \ + ((PWPP_TRACE_ENABLE_CONTEXT) (&LoggerContext))->Level +#endif + +#ifndef WPPINIT_EXPORT +#define WPPINIT_EXPORT +#endif + +#define WppIsEqualGuid(G1, G2)(RtlCompareMemory(G1, G2, sizeof(GUID)) == sizeof(GUID)) + + +VOID +WppLoadTracingSupport( + VOID + ) +/*++ + +Routine Description: + + This function assigns at runtime the ETW API set to be use for tracing. + +Arguments: + +Remarks: + + At runtime determine assing the funtions pointers for the trace APIs to be use. + XP and above will use TraceMessage, and Win2K will use our private W2kTraceMessage + which uses TraceEvent + +--*/ +{ + UNICODE_STRING name; + + + PAGED_CODE(); + + RtlInitUnicodeString(&name, L"WmiTraceMessage"); + pfnWppTraceMessage = (PFN_WPPTRACEMESSAGE) (INT_PTR) + MmGetSystemRoutineAddress(&name); + + if (pfnWppTraceMessage == NULL) { + // + // Subsitute the W2K verion of WmiTraceMessage + // + pfnWppTraceMessage = W2kTraceMessage; + WPPTraceSuite = WppTraceWin2K; + + WppDebug(0,("WppLoadTracingSupport:subsitute pWmiTraceMessage %p\n", + pfnWppTraceMessage)); + + return; // no point in continuing. + } + + RtlInitUnicodeString(&name, L"WmiQueryTraceInformation"); + pfnWppQueryTraceInformation = (PFN_WPPQUERYTRACEINFORMATION) (INT_PTR) + MmGetSystemRoutineAddress(&name); + WPPTraceSuite = WppTraceWinXP; +} + + +#ifdef WPP_GLOBALLOGGER +#define DEFAULT_GLOBAL_LOGGER_KEY L"WMI\\GlobalLogger\\" +#define WPP_TEXTGUID_LEN 38 +#define GREGVALUENAMELENGTH (18 + WPP_TEXTGUID_LEN) // wslen(L"WMI\\GlobalLogger\\") + GUIDLENGTH + +WPPINIT_EXPORT +void WppInitGlobalLogger( + __in LPCGUID ControlGuid, + __out PTRACEHANDLE LoggerHandle, + __out PULONG Flags, + __out PUCHAR Level + ) +{ +WCHAR GRegValueName[GREGVALUENAMELENGTH]; +RTL_QUERY_REGISTRY_TABLE Parms[3]; +ULONG CurrentFlags = 0; +ULONG CurrentLevel = 0; +ULONG Start = 0; +NTSTATUS Status; +ULONG Zero = 0; +UNICODE_STRING GuidString; + + + PAGED_CODE(); + + WppDebug(0,("WPP checking Global Logger\n")); + + + // + // Fill in the query table to find out if the Global Logger is Started + // + // Trace Flags + Parms[0].QueryRoutine = NULL; + Parms[0].Flags = RTL_QUERY_REGISTRY_DIRECT; + Parms[0].Name = L"Start"; + Parms[0].EntryContext = &Start; + Parms[0].DefaultType = REG_DWORD; + Parms[0].DefaultData = &Zero; + Parms[0].DefaultLength = sizeof(ULONG); + // Termination + Parms[1].QueryRoutine = NULL; + Parms[1].Flags = 0; + // + // Perform the query + // + + Status = RtlQueryRegistryValues(RTL_REGISTRY_CONTROL | RTL_REGISTRY_OPTIONAL, + DEFAULT_GLOBAL_LOGGER_KEY, + Parms, + NULL, + NULL); + if (!NT_SUCCESS(Status) || Start == 0 ) { + return; + } + + // Fill in the query table to find out if we should use the Global logger + // + // Trace Flags + Parms[0].QueryRoutine = NULL; + Parms[0].Flags = RTL_QUERY_REGISTRY_DIRECT; + Parms[0].Name = L"Flags"; + Parms[0].EntryContext = &CurrentFlags; + Parms[0].DefaultType = REG_DWORD; + Parms[0].DefaultData = &Zero; + Parms[0].DefaultLength = sizeof(ULONG); + // Trace level + Parms[1].QueryRoutine = NULL; + Parms[1].Flags = RTL_QUERY_REGISTRY_DIRECT; + Parms[1].Name = L"Level"; + Parms[1].EntryContext = &CurrentLevel; + Parms[1].DefaultType = REG_DWORD; + Parms[1].DefaultData = &Zero; + Parms[1].DefaultLength = sizeof(UCHAR); + // Termination + Parms[2].QueryRoutine = NULL; + Parms[2].Flags = 0; + + + RtlCopyMemory(GRegValueName, DEFAULT_GLOBAL_LOGGER_KEY, (wcslen(DEFAULT_GLOBAL_LOGGER_KEY)+1) *sizeof(WCHAR)); + + Status = RtlStringFromGUID(ControlGuid, &GuidString); + if( Status != STATUS_SUCCESS ) { + WppDebug(0,("WPP GlobalLogger failed RtlStringFromGUID \n")); + return; + } + + if (GuidString.Length > (WPP_TEXTGUID_LEN * sizeof(WCHAR))){ + WppDebug(0,("WPP GlobalLogger RtlStringFromGUID too large\n")); + RtlFreeUnicodeString(&GuidString); + return; + } + + // got the GUID in form "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" + // need GUID in form "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + // copy the translated GUID string + + RtlCopyMemory(&GRegValueName[(ULONG)wcslen(GRegValueName)], &GuidString.Buffer[1], GuidString.Length); + GRegValueName[(ULONG)wcslen(GRegValueName) - 1] = L'\0'; + RtlFreeUnicodeString(&GuidString); + + // + // Perform the query + // + + Status = RtlQueryRegistryValues(RTL_REGISTRY_CONTROL | RTL_REGISTRY_OPTIONAL, + GRegValueName, + Parms, + NULL, + NULL); + if (NT_SUCCESS(Status)) { + if (Start==1) { + *LoggerHandle= WMI_GLOBAL_LOGGER_ID; + *Flags = CurrentFlags & 0x7FFFFFFF; + *Level = (UCHAR)(CurrentLevel & 0xFF); + WppDebug(0,("WPP Enabled via Global Logger Flags=0x%08X Level=0x%02X\n",CurrentFlags,CurrentLevel)); + + } + } else { + WppDebug(0,("WPP GlobalLogger has No Flags/Levels Status=%08X\n",Status)); + } +} +#endif //#ifdef WPP_GLOBALLOGGER + +#define WPP_MAX_COUNT_REGISTRATION_GUID 63 + +WPPINIT_EXPORT +NTSTATUS +WppTraceCallback( + __in UCHAR MinorFunction, + __in_opt PVOID DataPath, + __in ULONG BufferLength, + __inout_bcount(BufferLength) PVOID Buffer, + __in PVOID Context, + __out PULONG Size + ) +/*++ + +Routine Description: + + This function is the callback WMI calls when we register and when our + events are enabled or disabled. + +Arguments: + + MinorFunction - specifies the type of callback (register, event enable/disable) + + DataPath - varies depending on the ActionCode + + BufferLength - size of the Buffer parameter + + Buffer - in/out buffer where we read from or write to depending on the type + of callback + + Context - the pointer private struct WPP_TRACE_CONTROL_BLOCK + + Size - output parameter to receive the amount of data written into Buffer + +Return Value: + + NTSTATUS code indicating success/failure + +Comments: + + if return value is STATUS_BUFFER_TOO_SMALL and BufferLength >= 4, + then first ulong of buffer contains required size + + +--*/ + +{ + PWPP_TRACE_CONTROL_BLOCK cntl; + NTSTATUS Status = STATUS_SUCCESS; + + UNREFERENCED_PARAMETER(DataPath); + + + PAGED_CODE(); + + WppDebug(0,("WppTraceCallBack 0x%08X %p\n", MinorFunction, Context)); + + *Size = 0; + + switch(MinorFunction) + { + case IRP_MN_REGINFO: + { + PWMIREGINFOW WmiRegInfo; + PCUNICODE_STRING RegPath; + PWCHAR StringPtr; + ULONG RegistryPathOffset; + ULONG BufferNeeded; + ULONG GuidCount = 0; + + // + // Initialize locals + // + + cntl = (PWPP_TRACE_CONTROL_BLOCK)Context; + WmiRegInfo = (PWMIREGINFO)Buffer; + + if (WppTraceWin2K == WPPTraceSuite && WmiRegInfo->GuidCount > 1) { + + // + // Calculate buffer size need to hold all info. + // + BufferNeeded = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + + WmiRegInfo->GuidCount * sizeof(WMIREGGUIDW); + + if ( BufferNeeded > BufferLength) { + Status = STATUS_BUFFER_TOO_SMALL; + if (BufferLength >= sizeof(ULONG)) { + *((PULONG)Buffer) = BufferNeeded; + *Size = sizeof(ULONG); + } + break; + } + + // + // Deal with the WMI + WPP registration case can only handle + // One Tracing CONTROL GUID, at the last poscition + // + + WmiRegInfo->WmiRegGuid[WmiRegInfo->GuidCount - 1].Guid = *cntl->ControlGuid; + WmiRegInfo->WmiRegGuid[WmiRegInfo->GuidCount - 1].Flags = + WMIREG_FLAG_TRACE_CONTROL_GUID | WMIREG_FLAG_TRACED_GUID; + cntl->Level = 0; + cntl->Flags[0] = 0; +#ifdef WPP_GLOBALLOGGER + WppInitGlobalLogger( cntl->ControlGuid, + (PTRACEHANDLE)&cntl->Logger, + &cntl->Flags[0], + &cntl->Level + ); +#endif + break; + } + + RegPath = cntl->RegistryPath; + + // + // Count the number of guid to be identified. + // + while(cntl) { GuidCount++; cntl = cntl->Next; } + + if (GuidCount > WPP_MAX_COUNT_REGISTRATION_GUID){ + Status = STATUS_INVALID_PARAMETER; + break; + } + + WppDebug(0,("WppTraceCallBack: GUID count %d\n", GuidCount)); + + // + // Calculate buffer size need to hold all info. + // Calculate offset to where RegistryPath parm will be copied. + // + + if (RegPath == NULL) + { + + RegistryPathOffset = 0; + + BufferNeeded = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + + GuidCount * sizeof(WMIREGGUIDW); + + } else { + + RegistryPathOffset = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + + GuidCount * sizeof(WMIREGGUIDW); + + BufferNeeded = RegistryPathOffset + + RegPath->Length + sizeof(USHORT); + } + + // + // If the provided buffer is large enough, then fill with info. + // + + if (BufferNeeded <= BufferLength) + { + ULONG i; + + RtlZeroMemory(Buffer, BufferLength); + + // + // Fill in the WMIREGINFO + // + + WmiRegInfo->BufferSize = BufferNeeded; + WmiRegInfo->RegistryPath = RegistryPathOffset; + WmiRegInfo->GuidCount = GuidCount; + + if (RegPath != NULL) { + StringPtr = (PWCHAR)((PUCHAR)Buffer + RegistryPathOffset); + *StringPtr++ = RegPath->Length; + + RtlCopyMemory(StringPtr, RegPath->Buffer, RegPath->Length); + } + + // + // Fill in the WMIREGGUID + // + + cntl = (PWPP_TRACE_CONTROL_BLOCK) Context; + + for (i=0; iWmiRegGuid[i].Guid = *cntl->ControlGuid; + WmiRegInfo->WmiRegGuid[i].Flags = WMIREG_FLAG_TRACE_CONTROL_GUID | + WMIREG_FLAG_TRACED_GUID; + cntl->Level = 0; + cntl->Flags[0] = 0; + WppDebug(0,("Control GUID::%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", + cntl->ControlGuid->Data1, + cntl->ControlGuid->Data2, + cntl->ControlGuid->Data3, + cntl->ControlGuid->Data4[0], + cntl->ControlGuid->Data4[1], + cntl->ControlGuid->Data4[2], + cntl->ControlGuid->Data4[3], + cntl->ControlGuid->Data4[4], + cntl->ControlGuid->Data4[5], + cntl->ControlGuid->Data4[6], + cntl->ControlGuid->Data4[7] + )); + + cntl = cntl->Next; + } + + Status = STATUS_SUCCESS; + *Size = BufferNeeded; + + } else { + Status = STATUS_BUFFER_TOO_SMALL; + + if (BufferLength >= sizeof(ULONG)) { + *((PULONG)Buffer) = BufferNeeded; + *Size = sizeof(ULONG); + } + } + +#ifdef WPP_GLOBALLOGGER + // Check if Global logger is active + + cntl = (PWPP_TRACE_CONTROL_BLOCK) Context; + while(cntl) { + WppInitGlobalLogger( + cntl->ControlGuid, + (PTRACEHANDLE)&cntl->Logger, + &cntl->Flags[0], + &cntl->Level); + cntl = cntl->Next; + } +#endif //#ifdef WPP_GLOBALLOGGER + + break; + } + + case IRP_MN_ENABLE_EVENTS: + case IRP_MN_DISABLE_EVENTS: + { + PWNODE_HEADER Wnode; + ULONG Level; + ULONG ReturnLength; + ULONG index; + + if (Context == NULL ) { + Status = STATUS_WMI_GUID_NOT_FOUND; + break; + } + + if (BufferLength < sizeof(WNODE_HEADER)) { + Status = STATUS_INVALID_PARAMETER; + } + + // + // Initialize locals + // + Wnode = (PWNODE_HEADER)Buffer; + + // + // Traverse this ProjectControlBlock's ControlBlock list and + // find the "cntl" ControlBlock which matches the Wnode GUID. + // + cntl = (PWPP_TRACE_CONTROL_BLOCK) Context; + index = 0; + while(cntl) { + if (WppIsEqualGuid(cntl->ControlGuid, &Wnode->Guid )) { + break; + } + index++; + cntl = cntl->Next; + } + + if (cntl == NULL) { + Status = STATUS_WMI_GUID_NOT_FOUND; + break; + } + + // + // Do the requested event action + // + Status = STATUS_SUCCESS; + + if (MinorFunction == IRP_MN_DISABLE_EVENTS) { + + WppDebug(0,("WppTraceCallBack: DISABLE_EVENTS\n")); + + cntl->Level = 0; + cntl->Flags[0] = 0; + cntl->Logger = 0; + + } else { + + TRACEHANDLE lh; + + lh = (TRACEHANDLE)( Wnode->HistoricalContext ); + cntl->Logger = lh; + + if (WppTraceWinXP == WPPTraceSuite) { + + Status = pfnWppQueryTraceInformation( TraceEnableLevelClass, + &Level, + sizeof(Level), + &ReturnLength, + (PVOID) Wnode ); + + if (Status == STATUS_SUCCESS) { + cntl->Level = (UCHAR)Level; + } + + Status = pfnWppQueryTraceInformation( TraceEnableFlagsClass, + &cntl->Flags[0], + sizeof(cntl->Flags[0]), + &ReturnLength, + (PVOID) Wnode ); + + } else { + cntl->Flags[0] = ((PWPP_TRACE_ENABLE_CONTEXT) &lh)->EnableFlags; + cntl->Level = (UCHAR) ((PWPP_TRACE_ENABLE_CONTEXT) &lh)->Level; + } + + WppDebug(0,("WppTraceCallBack: ENABLE_EVENTS " + "LoggerId %d, Flags 0x%08X, Level 0x%02X\n", + (USHORT) cntl->Logger, + cntl->Flags[0], + cntl->Level)); + + } + +#ifdef WPP_PRIVATE_ENABLE_CALLBACK + // + // Notify changes to flags, level for GUID + // + WPP_PRIVATE_ENABLE_CALLBACK( cntl->ControlGuid, + cntl->Logger, + (MinorFunction != IRP_MN_DISABLE_EVENTS) ? TRUE:FALSE, + cntl->Flags[0], + cntl->Level ); +#endif + + break; + } + + case IRP_MN_ENABLE_COLLECTION: + case IRP_MN_DISABLE_COLLECTION: + { + Status = STATUS_SUCCESS; + break; + } + + case IRP_MN_QUERY_ALL_DATA: + case IRP_MN_QUERY_SINGLE_INSTANCE: + case IRP_MN_CHANGE_SINGLE_INSTANCE: + case IRP_MN_CHANGE_SINGLE_ITEM: + case IRP_MN_EXECUTE_METHOD: + { + Status = STATUS_INVALID_DEVICE_REQUEST; + break; + } + + default: + { + Status = STATUS_INVALID_DEVICE_REQUEST; + break; + } + + } + return(Status); +} + +WPPINIT_EXPORT +VOID WppInitKm( + __in_opt PDEVICE_OBJECT pDevObject + ) +/*++ + +Routine Description: + + This function registers a driver with ETW as a provider of trace + events from the defined GUIDs + +Arguments: + + pDevObject - Optional pointer to a device object object, neede only for W2K + +Remarks: + + This function is called by the WPP_INIT_TRACING(DrvObj, RegPath) macro, for XP and + above the DrvObj can be NULL. + +--*/ + +{ + PWPP_TRACE_CONTROL_BLOCK WppReg = &WPP_CB[0].Control; + NTSTATUS Status; + + + PAGED_CODE(); + + WppDebug(0,("WPP Init.\n")); + + if (WppTraceWinXP == WPPTraceSuite){ + + + WppReg -> Callback = WppTraceCallback; + Status = IoWMIRegistrationControl( + (PDEVICE_OBJECT)WppReg, + WMIREG_ACTION_REGISTER | + WMIREG_FLAG_CALLBACK | + WMIREG_FLAG_TRACE_PROVIDER + ); + WppDebug(0,("IoWMIRegistrationControl Status = %08X\n",Status)); + + } else { + +#ifdef WDF_WPP_KMDF_DRIVER + Status = WdfDriverRegisterTraceInfo((PDRIVER_OBJECT)pDevObject, + WppTraceCallback, + WppReg); + if (!NT_SUCCESS(Status)) { + WppDebug(0,("WdfDriverRegisterTraceInfo failed Status = %08X\n",Status)); + } +#else + WppReg -> Callback = NULL; + Status = IoWMIRegistrationControl(pDevObject, + WMIREG_ACTION_REGISTER + ); + WppDebug(0,("IoWMIRegistrationControl Status = %08X\n",Status)); +#endif + } + +} + +WPPINIT_EXPORT +VOID +WppCleanupKm( + __in_opt PDEVICE_OBJECT DeviceObject + ) +/*++ + +Routine Description: + + This function deregisters a driver from ETW as provider of trace + events. + +Arguments: + + pDevObject - Optional pointer to a device object object, neede only for W2K. + +Remarks: + + This is the defined WPP_CLEANUP(DrvObj) macro, and the macro can + take NULL as an argument for XP and above. + +--*/ + +{ + + + PAGED_CODE(); + + if (WPP_CB == (WPP_CB_TYPE*)&WPP_CB){ + // + // WPP_INIT_TRACING macro has not been called + // + return; + } + + if (WppTraceWinXP == WPPTraceSuite) { + PWPP_TRACE_CONTROL_BLOCK WppReg = &WPP_CB[0].Control; + + IoWMIRegistrationControl( (PDEVICE_OBJECT)WppReg, + WMIREG_ACTION_DEREGISTER | + WMIREG_FLAG_CALLBACK ); + + } else { +#ifndef WDF_WPP_KMDF_DRIVER + IoWMIRegistrationControl(DeviceObject, WMIREG_ACTION_DEREGISTER ); +#else + UNREFERENCED_PARAMETER(DeviceObject); + // + // WDF does the job of unregistering the device and deleting it + // when the driver is unloaded. So we don't do anything in the + // WPP_CLEANUP call. + // +#endif + } + + WPP_CB = (WPP_CB_TYPE*)&WPP_CB; + +} + + +#define WPP_SYSTEMCONTROL(PDO) \ + if(WPPTraceSuite == WppTraceDisabledSuite){ \ + WppLoadTracingSupport(); \ + } \ + if(WPPTraceSuite == WppTraceWin2K){ \ + PDO->MajorFunction[ IRP_MJ_SYSTEM_CONTROL ] = WPPSystemControlDispatch; \ + } + +#define WPP_SYSTEMCONTROL2(PDO, offset) \ + if(WPPTraceSuite == WppTraceDisabledSuite){ \ + WppLoadTracingSupport(); \ + } \ + if(WPPTraceSuite == WppTraceWin2K){ \ + WPP_SYSTEMCONTROL(PDO); WPP_Global_NextDeviceOffsetInDeviceExtension = (ULONG_PTR)offset; \ + } + + + +// Routine to handle the System Control in W2K +NTSTATUS +WPPSystemControlDispatch( + __in PDEVICE_OBJECT DeviceObject, + __in PIRP Irp + ) +{ + + PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp); + ULONG BufferSize = irpSp->Parameters.WMI.BufferSize; + PVOID Buffer = irpSp->Parameters.WMI.Buffer; + ULONG ReturnSize = 0; + NTSTATUS Status = STATUS_SUCCESS; + + PAGED_CODE(); + + WppDebug(0,("WPPSYSTEMCONTROL\n")); + + if (DeviceObject == (PDEVICE_OBJECT)irpSp->Parameters.WMI.ProviderId) { + if (irpSp->MinorFunction == IRP_MN_REGINFO) { + RtlZeroMemory(Buffer, BufferSize); + } + Status = WppTraceCallback((UCHAR)(irpSp->MinorFunction), + NULL, + BufferSize, + Buffer, + &WPP_CB[0], + &ReturnSize + ); + + WppDebug(0,("WPPSYSTEMCONTROL Status 0x%08X\n",Status)); + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = ReturnSize; + IoCompleteRequest( Irp, IO_NO_INCREMENT ); + return Status; + } else if (WPP_Global_NextDeviceOffsetInDeviceExtension != -1) { + + ULONG_PTR t; + + WppDebug(0,("WPPSYSTEMCONTROL - not for us\n")); + + // + // Set current stack back one. + // + IoSkipCurrentIrpStackLocation( Irp ); + // + // Pass the call to the next driver. + // + t = (ULONG_PTR)DeviceObject->DeviceExtension; + t += WPP_Global_NextDeviceOffsetInDeviceExtension; + return IoCallDriver(*(PDEVICE_OBJECT*)t,Irp); + + } else { + // + // Unable to pass down + // + return Irp->IoStatus.Status; + } +} + +#if defined(__cplusplus) +}; +#endif diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-w2k.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-w2k.tpl new file mode 100644 index 000000000..92db45b36 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/km-w2k.tpl @@ -0,0 +1,13 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile} option on RUN_WPP line in your sources file *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +`INCLUDE km-default.tpl` diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/mof.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/mof.tpl new file mode 100644 index 000000000..a9c7d9220 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/mof.tpl @@ -0,0 +1,15 @@ +// Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC + +`FORALL Guid IN TraceGuids` +`Guid.Text` `Guid.Comment` +`FORALL Msg in Guid.Messages` +#typev `Msg.Name` `Msg.MsgNo` "`Msg.Text`" +{ +`FORALL Arg IN Msg.Arguments` + `Arg.Name`, `Arg.MofType` // `Arg.No` +`ENDFOR Arg` +} +`ENDFOR Msg` +`ENDFOR Guid` diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/r1defwpp.ini b/eng/WpfArcadeSdk/tools/WppConfig/rev1/r1defwpp.ini new file mode 100644 index 000000000..da747d9c2 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/r1defwpp.ini @@ -0,0 +1,89 @@ +# +# Default types for WPP +# + +# our basic arithmetic types + +DEFINE_SIMPLE_TYPE( SBYTE, signed char, ItemChar, "d"); +DEFINE_SIMPLE_TYPE( SSHORT, signed short, ItemShort, "hd"); +DEFINE_SIMPLE_TYPE( SINT, signed int, ItemInt, "d"); +DEFINE_SIMPLE_TYPE( SLONG, signed long, ItemLong, "ld"); +DEFINE_SIMPLE_TYPE( SINT64, signed _int64, ItemLongLong, "I64d"); + +DEFINE_FLAVOR( UCHAR, SBYTE, ItemUChar, "c" ); +DEFINE_FLAVOR( SCHAR, SBYTE, ItemChar, "c" ); +DEFINE_FLAVOR( BOOLEAN, SBYTE, ItemListByte(FALSE,TRUE), "s"); + +# arch dependent types + +DEFINE_SIMPLE_TYPE( SLONGPTR, void*, ItemPtr, "p"); +DEFINE_SIMPLE_TYPE( PTR, void*, ItemPtr, "p"); +DEFINE_SIMPLE_TYPE( HANDLE, void*, ItemPtr, "p"); + +# all strings require custom processing + +DEFINE_CPLX_TYPE(ASTR, WPP_LOGASTR, ItemString, "s"); +DEFINE_CPLX_TYPE(ARSTR, WPP_LOGASTR, ItemRString, "s"); +DEFINE_CPLX_TYPE(WSTR, WPP_LOGWSTR, ItemWString, "s"); +DEFINE_CPLX_TYPE(CSTR, WPP_LOGCSTR, ItemPString, "s"); +DEFINE_CPLX_TYPE(USTR, WPP_LOGUSTR, ItemPWString, "s"); + +# default formats for those who don't care to provide their own strings + +DEFINE_FLAVOR(UBYTE, SBYTE,, "u"); +DEFINE_FLAVOR(XBYTE, SBYTE,, "02x"); +DEFINE_FLAVOR(OBYTE, SBYTE,, "o"); + +DEFINE_FLAVOR(USHORT, SSHORT, ItemUShort, "hu"); +DEFINE_FLAVOR(XSHORT, SSHORT,, "04hX"); +DEFINE_FLAVOR(OSHORT, SSHORT,, "ho"); + +DEFINE_FLAVOR(UINT, SINT, ItemUInt, "u"); +DEFINE_FLAVOR(XINT, SINT,, "08x"); +DEFINE_FLAVOR(OINT, SINT,, "o"); + +DEFINE_FLAVOR(ULONG, SLONG, ItemULong, "lu"); +DEFINE_FLAVOR(XLONG, SLONG,, "08lX"); +DEFINE_FLAVOR(OLONG, SLONG,, "lo"); + +DEFINE_FLAVOR(UINT64, SINT64,, "i64u"); +DEFINE_FLAVOR(XINT64, SINT64,, "08i64X"); +DEFINE_FLAVOR(OINT64, SINT64,, "i64o"); + +DEFINE_FLAVOR(ULONGPTR, SLONGPTR,,); +DEFINE_FLAVOR(XLONGPTR, SLONGPTR,,); +DEFINE_FLAVOR(OLONGPTR, SLONGPTR,,); + +# special formats + +DEFINE_FLAVOR(IPADDR, UINT, ItemIPAddr, "s"); +DEFINE_FLAVOR(PORT, USHORT, ItemPort, "s"); +DEFINE_FLAVOR(STATUS, UINT, ItemNTSTATUS, "s"); +DEFINE_FLAVOR(WINERROR, UINT, ItemWINERROR, "s"); +DEFINE_FLAVOR(PORT, USHORT, ItemPort, "s"); +DEFINE_SIMPLE_TYPE(GUID, GUID, ItemGuid, "s"); + +# time related stuff + +DEFINE_FLAVOR(TIMESTAMP, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(TIME, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(DATE, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(WAITTIME, SINT64, ItemTimestamp, "s"); +DEFINE_FLAVOR(TIMEDELTA, SINT64, ItemTimestamp, "s"); + +# enumeration types + +DEFINE_FLAVOR(ItemListByte, SBYTE, ItemListByte, "s"); +DEFINE_FLAVOR(ItemListShort, SSHORT, ItemListShort,"s"); +DEFINE_FLAVOR(ItemListLong, SLONG, ItemListLong, "s"); + +CUSTOM_TYPE(IRQL, ItemListByte(Low,APC,DPC) ); + +CUSTOM_TYPE(PNPMN, ItemListByte(IRP_MN_START_DEVICE,IRP_MN_QUERY_REMOVE_DEVICE,IRP_MN_REMOVE_DEVICE,IRP_MN_CANCEL_REMOVE_DEVICE,IRP_MN_STOP_DEVICE,IRP_MN_QUERY_STOP_DEVICE,IRP_MN_CANCEL_STOP_DEVICE,IRP_MN_QUERY_DEVICE_RELATIONS,IRP_MN_QUERY_INTERFACE,IRP_MN_QUERY_CAPABILITIES,IRP_MN_QUERY_RESOURCES,IRP_MN_QUERY_RESOURCE_REQUIREMENTS,IRP_MN_QUERY_DEVICE_TEXT,IRP_MN_FILTER_RESOURCE_REQUIREMENTS,IRP_MN_PNP_14,IRP_MN_READ_CONFIG,IRP_MN_WRITE_CONFIG,IRP_MN_EJECT,IRP_MN_SET_LOCK,IRP_MN_QUERY_ID,IRP_MN_QUERY_PNP_DEVICE_STATE,IRP_MN_QUERY_BUS_INFORMATION,IRP_MN_DEVICE_USAGE_NOTIFICATION,IRP_MN_SURPRISE_REMOVAL) ); + +# default tracing macro + +SimpleTrace(MSG,ARG); +SimpleTraceEx(GRP,MSG,ARG); + +USEPREFIX(*, "[%9!x!].%3!03x!::%4 [%1] "); \ No newline at end of file diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/simple.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/simple.tpl new file mode 100644 index 000000000..dd00ffd3d --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/simple.tpl @@ -0,0 +1,23 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile}outfile option on RUN_WPP line in your sources file *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +// PLEASE NOTE: +// Using simple.tpl for production environment without overriding +// WPP_ENABLED and WPP_LOGGER macro is NOT RECOMMENDED. +// +// If WPP_ENABLED is not provided, the logging is always on +// If WPP_LOGGER is not provided, traces always go to the logger named stdout (if it is running) +// + +`INCLUDE header.tpl` +`INCLUDE stdout.tpl` +`INCLUDE trmacro.tpl` diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/stdout.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/stdout.tpl new file mode 100644 index 000000000..7935f4443 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/stdout.tpl @@ -0,0 +1,29 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` + +`FORALL f IN Funcs` +#define WPP`f.GooId`_LOGGER(`f.GooArgs`) // `f.Name` +`ENDFOR` + +#ifndef WPP_LOGGER_ARG +# define WPP_LOGGER_ARG +#endif + +#ifndef WPP_GET_LOGGER + #define WPP_GET_LOGGER WppGetLogger() + __inline TRACEHANDLE WppGetLogger() + { + static TRACEHANDLE Logger; + if (Logger) {return Logger;} + return Logger = WppQueryLogger(0); + } +#endif + +#ifndef WPP_ENABLED +# define WPP_ENABLED() 1 +#endif diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/tracemacro.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/tracemacro.tpl new file mode 100644 index 000000000..bf5fe128b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/tracemacro.tpl @@ -0,0 +1,255 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +#if defined(__cplusplus) +extern "C" { +#endif + +#ifndef WPP_ALREADY_INCLUDED + +// template `TemplateFile` +// expects: +// WPP_THIS_FILE defined (see header.tpl) +// WPP_LOGGER_ARG defined +// WPP_GET_LOGGER defined +// WPP_ENABLED() defined + +#ifndef NO_CHECK_FOR_NULL_STRING +#ifndef WPP_CHECK_FOR_NULL_STRING +#define WPP_CHECK_FOR_NULL_STRING 1 +#endif +#endif + +#define WPP_EVAL(_value_) _value_ +#define WPP_(Id) WPP_EVAL(WPP_) ## WPP_EVAL(Id) ## WPP_EVAL(_) ## WPP_EVAL(WPP_THIS_FILE) ## WPP_EVAL(__LINE__) + +#if !defined(WPP_INLINE) +#define WPP_INLINE DECLSPEC_NOINLINE __inline +#endif + +#else // #ifndef WPP_ALREADY_INCLUDED + +#undef WPP_LOCAL_TraceGuids + +#endif // #ifndef WPP_ALREADY_INCLUDED + +#if !defined(WPP_NO_ANNOTATIONS) +#if !defined(WPP_ANSI_ANNOTATION) +`FORALL Msg IN Messages` +# define WPP_ANNOTATE_`Msg.Name` __annotation(L"TMF:", L"`Msg.Guid` `CurrentDir` // SRC=`SourceFile.Name` MJ=`ENV MAJORCOMP` MN=`ENV MINORCOMP`", L"#typev `Msg.Name` `Msg.MsgNo` \"`Msg.Text`\" // `Msg.Indent` `Msg.GooPairs`", L"{"`FORALL Arg IN Msg.Arguments`, L"`Arg.Name`, `Arg.MofType` -- `Arg.No`" `ENDFOR Arg`, L"}") +`ENDFOR` +#else +`FORALL Msg IN Messages` +# define WPP_ANNOTATE_`Msg.Name` __annotation("TMF:", "`Msg.Guid` `CurrentDir` // SRC=`SourceFile.Name` MJ=`ENV MAJORCOMP` MN=`ENV MINORCOMP`", "#typev `Msg.Name` `Msg.MsgNo` \"`Msg.Text`\" // `Msg.Indent` `Msg.GooPairs`", "{"`FORALL Arg IN Msg.Arguments`, "`Arg.Name`, `Arg.MofType` -- `Arg.No`" `ENDFOR Arg`, "}") +`ENDFOR` +#endif +# define WPP_ANNOTATE(x) WPP_ANNOTATE_ ## x, +#else +# define WPP_ANNOTATE(x) +#endif + +#define WPP_LOCAL_TraceGuids WPP_`SourceFile.CanonicalName`_Traceguids + +#if `TraceGuids.Count` +static const GUID WPP_LOCAL_TraceGuids[] = {`FORALL Guid IN TraceGuids` `Guid.Struct`, `ENDFOR`}; +#endif + +#ifndef WPP_ALREADY_INCLUDED + +#if !defined(WPP_TRACE_OPTIONS) +enum {WPP_TRACE_OPTIONS = TRACE_MESSAGE_SEQUENCE | TRACE_MESSAGE_GUID + | TRACE_MESSAGE_SYSTEMINFO | TRACE_MESSAGE_TIMESTAMP }; +#endif + +#if !defined(WPP_LOGPAIR) +# define WPP_LOGPAIR(_Size, _Addr) (_Addr),((SIZE_T)_Size), +#endif + +#define WPP_LOGTYPEVAL(_Type, _Value) WPP_LOGPAIR(sizeof(_Type), &(_Value)) +#define WPP_LOGTYPEPTR(_Value) WPP_LOGPAIR(sizeof(*(_Value)), (_Value)) + +// Marshalling macros. + +#if !defined(WPP_LOGASTR) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGASTR(_value) WPP_LOGPAIR(strlen(_value) + 1, _value ) +# else +# define WPP_LOGASTR(_value) WPP_LOGPAIR( (_value)?strlen(_value) + 1:5, (_value)?(_value):"NULL" ) +# endif +#endif + +#if !defined(WPP_LOGWSTR) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGWSTR(_value) WPP_LOGPAIR( (wcslen(_value)+1) * sizeof(WCHAR), _value) +# else +# define WPP_LOGWSTR(_value) WPP_LOGPAIR( (_value)?(((_value)[0] == 0)?7 * sizeof(WCHAR):(wcslen(_value) + 1)* sizeof(WCHAR)):5 * sizeof(WCHAR), (_value)?(((_value)[0] == 0) ? L"" : (_value)):L"NULL") +# endif +#endif + +#if !defined(WPP_LOGPGUID) +# define WPP_LOGPGUID(_value) WPP_LOGPAIR( sizeof(GUID), (_value) ) +#endif + + +#if !defined(WPP_LOGPSID) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPSID(_value) WPP_LOGPAIR( WPP_GetLengthSid(_value), (_value) ) +# else +# define WPP_LOGPSID(_value) WPP_LOGPAIR( (_value)? (WPP_IsValidSid(_value)? \ + WPP_GetLengthSid(_value):5):5, \ + (_value)? (WPP_IsValidSid(_value)?\ + (_value):"NULL"):"NULL") +#endif +#endif + +#if !defined(WPP_LOGCSTR) +# define WPP_LOGCSTR(_x) \ + WPP_LOGPAIR( sizeof((_x).Length), &(_x).Length ) WPP_LOGPAIR( (_x).Length, (_x).Buffer ) +#endif + +#if !defined(WPP_LOGUSTR) +# define WPP_LOGUSTR(_x) \ + WPP_LOGPAIR( sizeof((_x).Length), &(_x).Length ) WPP_LOGPAIR( (_x).Length, (_x).Buffer ) +#endif + +#if !defined(WPP_LOGPUSTR) +#if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPUSTR(_x) WPP_LOGUSTR(*(_x)) +#else +# define WPP_LOGPUSTR(_x) WPP_LOGPAIR( sizeof(USHORT), (_x && (*(_x)).Length)? &(*(_x)).Length : L"\5")\ + WPP_LOGPAIR( (_x && (*(_x)).Buffer)?(*(_x)).Length:5*sizeof(WCHAR), (_x && (*(_x)).Buffer)?(*(_x)).Buffer:L"NULL") +#endif +#endif + +#if !defined(WPP_LOGPCSTR) +#if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPCSTR(_x) WPP_LOGCSTR(*(_x)) +#else +# define WPP_LOGPCSTR(_x) WPP_LOGPAIR( sizeof(USHORT), (_x && (*(_x)).Length)? &(*(_x)).Length : L"\5")\ + WPP_LOGPAIR( (_x && (*(_x)).Buffer)?(*(_x)).Length:5*sizeof(char), (_x && (*(_x)).Buffer)?((const char *)(*(_x)).Buffer):"NULL") +#endif +#endif + +#if !defined(WPP_LOGSTDSTR) +#define WPP_LOGSTDSTR(_value) WPP_LOGPAIR( (_value).size()+1, (_value).c_str() ) +#endif + +#endif // #ifndef WPP_ALREADY_INCLUDED + + +`FORALL i IN TypeSigSet WHERE !UnsafeArgs` +#ifndef WPP_SF_`i.Name`_def +# define WPP_SF_`i.Name`_def +WPP_INLINE void WPP_SF_`i.Name`(WPP_LOGGER_ARG unsigned short id, LPCGUID TraceGuid`i.Arguments`) + { WPP_TRACE(WPP_GET_LOGGER, WPP_TRACE_OPTIONS, (LPGUID)TraceGuid, id, `i.LogArgs` 0); } +#endif // #ifndef WPP_SF_`i.Name`_def +`ENDFOR` + +`FORALL i IN TypeSigSet WHERE UnsafeArgs` +#ifndef WPP_SF_`i.Name`_def +# define WPP_SF_`i.Name`_def +WPP_INLINE void WPP_SF_`i.Name`(WPP_LOGGER_ARG unsigned short id, LPCGUID TraceGuid, ...) { + va_list ap; va_start(ap, TraceGuid); UNREFERENCED_PARAMETER(ap); + { + `i.DeclVars` + WPP_TRACE(WPP_GET_LOGGER, WPP_TRACE_OPTIONS, (LPGUID)TraceGuid, id, `i.LogArgs` 0); + + } +} +#endif // #ifndef WPP_SF_`i.Name`_def +`ENDFOR` +#ifndef WPP_POST +# define WPP_POST() +#endif + +#ifndef WPP_PRE +# define WPP_PRE() +#endif + + +#ifdef WPP_DEBUG +`FORALL i IN Messages WHERE !MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs``i.MacroArgs`) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + ( ( \ + (WPP_CB != (WPP_CB_TYPE*)&WPP_CB) && `i.MsgVal`WPP`i.GooId`_ENABLED(`i.GooVals`) ? \ + WPP_DEBUG((`i.DbgMacroArgs`)), \ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`, \ + WPP_LOCAL_TraceGuids+0`i.MacroExprs`), 1:0 \ + ) ) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#else +`FORALL i IN Messages WHERE !MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs``i.MacroArgs`) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + ( ( \ + (WPP_CB != (WPP_CB_TYPE*)&WPP_CB) && `i.MsgVal`WPP`i.GooId`_ENABLED(`i.GooVals`) ? \ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`, \ + WPP_LOCAL_TraceGuids+0`i.MacroExprs`), 1:0 \ + ) ) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#endif + + +#ifdef WPP_DEBUG +`FORALL i IN Messages WHERE MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs` MSGARGS) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + (( \ + (WPP_CB != (WPP_CB_TYPE*)&WPP_CB) && WPP`i.GooId`_ENABLED(`i.GooVals`)? \ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`,WPP_LOCAL_TraceGuids+0 WPP_R`i.ReorderSig` MSGARGS), \ + WPP_DEBUG(MSGARGS),1:0 \ + )) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#else +`FORALL i IN Messages WHERE MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs` MSGARGS) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + ( \ + (WPP_CB != (WPP_CB_TYPE*)&WPP_CB) && WPP`i.GooId`_ENABLED(`i.GooVals`)?\ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`,WPP_LOCAL_TraceGuids+0 WPP_R`i.ReorderSig` MSGARGS),\ + 1:0 \ + ) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#endif + + + +#if defined(__cplusplus) +}; +#endif diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/trmacro.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/trmacro.tpl new file mode 100644 index 000000000..ac811a341 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/trmacro.tpl @@ -0,0 +1,261 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright 1999-2005 Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +#ifndef WPP_ALREADY_INCLUDED + +// template `TemplateFile` +// expects: +// WPP_THIS_FILE defined (see header.tpl) +// WPP_LOGGER_ARG defined +// WPP_GET_LOGGER defined +// WPP_ENABLED() defined + +#ifndef NO_CHECK_FOR_NULL_STRING +#ifndef WPP_CHECK_FOR_NULL_STRING +#define WPP_CHECK_FOR_NULL_STRING 1 +#endif +#endif + + +#define WPP_EVAL(_value_) _value_ +#define WPP_(Id) WPP_EVAL(WPP_) ## WPP_EVAL(Id) ## WPP_EVAL(_) ## WPP_EVAL(WPP_THIS_FILE) ## WPP_EVAL(__LINE__) + +#if !defined(WPP_INLINE) +# define WPP_INLINE __inline +#endif + +#else // #ifndef WPP_ALREADY_INCLUDED + +#undef WPP_LOCAL_TraceGuids + +#endif // #ifndef WPP_ALREADY_INCLUDED + + +#if !defined(WPP_NO_ANNOTATIONS) +#if !defined(WPP_ANSI_ANNOTATION) +`FORALL Msg IN Messages` +# define WPP_ANNOTATE_`Msg.Name` __annotation(L"TMF:", L"`Msg.Guid` `CurrentDir` // SRC=`SourceFile.Name` MJ=`ENV MAJORCOMP` MN=`ENV MINORCOMP`", L"#typev `Msg.Name` `Msg.MsgNo` \"`Msg.Text`\" // `Msg.Indent` `Msg.GooPairs`", L"{"`FORALL Arg IN Msg.Arguments`, L"`Arg.Name`, `Arg.MofType` -- `Arg.No`" `ENDFOR Arg`, L"}") +`ENDFOR` +#else +`FORALL Msg IN Messages` +# define WPP_ANNOTATE_`Msg.Name` __annotation("TMF:", "`Msg.Guid` `CurrentDir` // SRC=`SourceFile.Name` MJ=`ENV MAJORCOMP` MN=`ENV MINORCOMP`", "#typev `Msg.Name` `Msg.MsgNo` \"`Msg.Text`\" // `Msg.Indent` `Msg.GooPairs`", "{"`FORALL Arg IN Msg.Arguments`, "`Arg.Name`, `Arg.MofType` -- `Arg.No`" `ENDFOR Arg`, "}") +`ENDFOR` +#endif +# define WPP_ANNOTATE(x) WPP_ANNOTATE_ ## x, +#else +# define WPP_ANNOTATE(x) +#endif + +#define WPP_LOCAL_TraceGuids WPP_`SourceFile.CanonicalName`_Traceguids + +#if `TraceGuids.Count` +static const GUID WPP_LOCAL_TraceGuids[] = {`FORALL Guid IN TraceGuids` `Guid.Struct`, `ENDFOR`}; +#endif + +#ifndef WPP_ALREADY_INCLUDED + +#if !defined(WPP_TRACE_OPTIONS) +enum {WPP_TRACE_OPTIONS = TRACE_MESSAGE_SEQUENCE | TRACE_MESSAGE_GUID + | TRACE_MESSAGE_SYSTEMINFO | TRACE_MESSAGE_TIMESTAMP }; +#endif + +#if !defined(WPP_LOGPAIR) +# define WPP_LOGPAIR(_Size, _Addr) (_Addr),((SIZE_T)_Size), +#endif + +#define WPP_LOGTYPEVAL(_Type, _Value) WPP_LOGPAIR(sizeof(_Type), &(_Value)) +#define WPP_LOGTYPEPTR(_Value) WPP_LOGPAIR(sizeof(*(_Value)), (_Value)) + +// Marshalling macros. + +#if !defined(WPP_LOGASTR) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGASTR(_value) WPP_LOGPAIR(strlen(_value) + 1, _value ) +# else +# define WPP_LOGASTR(_value) WPP_LOGPAIR( (_value)?strlen(_value) + 1:5, (_value)?(_value):"NULL" ) +# endif +#endif + +#if !defined(WPP_LOGWSTR) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGWSTR(_value) WPP_LOGPAIR( (wcslen(_value)+1) * sizeof(WCHAR), _value) +# else +# define WPP_LOGWSTR(_value) WPP_LOGPAIR( (_value)?(((_value)[0] == 0)?7 * sizeof(WCHAR):(wcslen(_value) + 1)* sizeof(WCHAR)):5 * sizeof(WCHAR), (_value)?(((_value)[0] == 0) ? L"" : (_value)):L"NULL") +# endif +#endif + +#if !defined(WPP_LOGPGUID) +# define WPP_LOGPGUID(_value) WPP_LOGPAIR( sizeof(GUID), (_value) ) +#endif + + +#if !defined(WPP_LOGPSID) +# if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPSID(_value) WPP_LOGPAIR( GetLengthSid(_value), (_value) ) +# else +# define WPP_LOGPSID(_value) WPP_LOGPAIR( (_value)? (IsValidSid(_value)? \ + GetLengthSid(_value):5):5, \ + (_value)? (IsValidSid(_value)?\ + (_value):"NULL"):"NULL") +#endif +#endif + +#if !defined(WPP_LOGCSTR) +# define WPP_LOGCSTR(_x) \ + WPP_LOGPAIR( sizeof((_x).Length), &(_x).Length ) WPP_LOGPAIR( (_x).Length, (_x).Buffer ) +#endif + +#if !defined(WPP_LOGUSTR) +# define WPP_LOGUSTR(_x) \ + WPP_LOGPAIR( sizeof((_x).Length), &(_x).Length ) WPP_LOGPAIR( (_x).Length, (_x).Buffer ) +#endif + +#if !defined(WPP_LOGPUSTR) +#if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPUSTR(_x) WPP_LOGUSTR(*(_x)) +#else +# define WPP_LOGPUSTR(_x) WPP_LOGPAIR( sizeof(USHORT), (_x && (*(_x)).Length)? &(*(_x)).Length : L"\5")\ + WPP_LOGPAIR( (_x && (*(_x)).Buffer)?(*(_x)).Length:5*sizeof(WCHAR), (_x && (*(_x)).Buffer)?(*(_x)).Buffer:L"NULL") +#endif +#endif + +#if !defined(WPP_LOGPCSTR) +#if !defined(WPP_CHECK_FOR_NULL_STRING) +# define WPP_LOGPCSTR(_x) WPP_LOGCSTR(*(_x)) +#else +# define WPP_LOGPCSTR(_x) WPP_LOGPAIR( sizeof(USHORT), (_x && (*(_x)).Length)? &(*(_x)).Length : L"\5")\ + WPP_LOGPAIR( (_x && (*(_x)).Buffer)?(*(_x)).Length:5*sizeof(char), (_x && (*(_x)).Buffer)?((const char *)(*(_x)).Buffer):"NULL") +#endif +#endif + +#if !defined(WPP_LOGSTDSTR) +#define WPP_LOGSTDSTR(_value) WPP_LOGPAIR( (_value).size()+1, (_value).c_str() ) +#endif + +#endif // #ifndef WPP_ALREADY_INCLUDED + + +`FORALL i IN TypeSigSet WHERE !UnsafeArgs` +#ifndef WPP_SF_`i.Name`_def +# define WPP_SF_`i.Name`_def +WPP_INLINE void WPP_SF_`i.Name`(WPP_LOGGER_ARG unsigned short id, LPCGUID TraceGuid`i.Arguments`) + { WPP_TRACE(WPP_GET_LOGGER, WPP_TRACE_OPTIONS, (LPGUID)TraceGuid, id, `i.LogArgs` 0); } +#endif // #ifndef WPP_SF_`i.Name`_def +`ENDFOR` + +`FORALL i IN TypeSigSet WHERE UnsafeArgs` +#ifndef WPP_SF_`i.Name`_def +# define WPP_SF_`i.Name`_def +WPP_INLINE void WPP_SF_`i.Name`(WPP_LOGGER_ARG unsigned short id, LPCGUID TraceGuid, ...) { + va_list ap; va_start(ap, TraceGuid); UNREFERENCED_PARAMETER(ap); + { + `i.DeclVars` + WPP_TRACE(WPP_GET_LOGGER, WPP_TRACE_OPTIONS, (LPGUID)TraceGuid, id, `i.LogArgs` 0); + + } +} +#endif // #ifndef WPP_SF_`i.Name`_def +`ENDFOR` +#ifndef WPP_POST +# define WPP_POST() +#endif + +#ifndef WPP_PRE +# define WPP_PRE() +#endif + + +#ifdef WPP_DEBUG +`FORALL i IN Messages WHERE !MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs``i.MacroArgs`) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + ( ( \ + `i.MsgVal`WPP`i.GooId`_ENABLED(`i.GooVals`) ? \ + WPP_DEBUG((`i.MacroArgs`)), \ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`, \ + WPP_LOCAL_TraceGuids+0`i.MacroExprs`), 1:0 \ + ) ) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#else +`FORALL i IN Messages WHERE !MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs``i.MacroArgs`) \ + WPP`i.GooId`_PRE(`i.GooVals`) \ + WPP_ANNOTATE(`i.Name`) \ + ( ( \ + `i.MsgVal`WPP`i.GooId`_ENABLED(`i.GooVals`) ? \ + WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`, \ + WPP_LOCAL_TraceGuids+0`i.MacroExprs`), 1:0 \ + ) ) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#endif + +// NoMsgArgs + +`FORALL f IN Funcs WHERE !DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name` WPP_(CALL) +`ENDFOR` + +`FORALL f IN Funcs WHERE DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name`(ARGS) WPP_(CALL) ARGS +`ENDFOR` + + +// MsgArgs + +`FORALL f IN Funcs WHERE MsgArgs` +#undef `f.Name` +#define `f.Name`(`f.FixedArgs` MSGARGS) WPP_(CALL)(`f.FixedArgs` MSGARGS) +`ENDFOR` + + +#ifdef WPP_DEBUG +`FORALL i IN Messages WHERE MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs` MSGARGS) WPP`i.GooId`_PRE(`i.GooVals`) WPP_ANNOTATE(`i.Name`) ((WPP`i.GooId`_ENABLED(`i.GooVals`)?WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`,WPP_LOCAL_TraceGuids+0 WPP_R`i.ReorderSig` MSGARGS), WPP_DEBUG((MSGARGS),1:0)) \ + WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#else +`FORALL i IN Messages WHERE MsgArgs` +#ifndef WPP`i.GooId`_POST +# define WPP`i.GooId`_POST(`i.GooArgs`) +#endif +#ifndef WPP`i.GooId`_PRE +# define WPP`i.GooId`_PRE(`i.GooArgs`) +#endif +#define WPP_CALL_`i.Name`(`i.FixedArgs` MSGARGS) WPP`i.GooId`_PRE(`i.GooVals`) WPP_ANNOTATE(`i.Name`) (WPP`i.GooId`_ENABLED(`i.GooVals`)?WPP_SF_`i.TypeSig`(WPP`i.GooId`_LOGGER(`i.GooVals`) `i.MsgNo`,WPP_LOCAL_TraceGuids+0 WPP_R`i.ReorderSig` MSGARGS),1:0) WPP`i.GooId`_POST(`i.GooVals`) +`ENDFOR` +#endif + + +`FORALL r IN Reorder` +#undef WPP_R`r.Name` +#define WPP_R`r.Name`(`r.Arguments`) `r.Permutation` +`ENDFOR` + +/// more stuff + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-default.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-default.tpl new file mode 100644 index 000000000..a849e9db3 --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-default.tpl @@ -0,0 +1,50 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile} option on RUN_WPP line in your sources file *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +`INCLUDE um-header.tpl` +`INCLUDE control.tpl` +`INCLUDE tracemacro.tpl` + +`IF FOUND WPP_INIT_TRACING` +#define WPPINIT_EXPORT + `INCLUDE um-init.tpl` +`ENDIF` + +// +// Tracing Macro name redefinition +// + +// NoMsgArgs + +`FORALL f IN Funcs WHERE !DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name` WPP_(CALL) +`ENDFOR` + +`FORALL f IN Funcs WHERE DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name`(ARGS) WPP_(CALL) ARGS +`ENDFOR` + + +// MsgArgs + +`FORALL f IN Funcs WHERE MsgArgs` +#undef `f.Name` +#define `f.Name`(`f.FixedArgs` MSGARGS) WPP_(CALL)(`f.FixedArgs` MSGARGS) +`ENDFOR` + +`FORALL r IN Reorder` +#undef WPP_R`r.Name` +#define WPP_R`r.Name`(`r.Arguments`) `r.Permutation` +`ENDFOR` + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-header.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-header.tpl new file mode 100644 index 000000000..a548bf97f --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-header.tpl @@ -0,0 +1,89 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +#ifdef WPP_THIS_FILE +// included twice +# define WPP_ALREADY_INCLUDED +# undef WPP_THIS_FILE +#endif // #ifdef WPP_THIS_FILE + +#define WPP_THIS_FILE `SourceFile.CanonicalName` + +#ifndef WPP_ALREADY_INCLUDED + +`* Dump defintions specified via -D on the command line to WPP *` + +`FORALL def IN MacroDefinitions` +#define `def.Name` `def.Alias` +`ENDFOR` + +#include +#include +#include +#ifndef WPP_TRACE_W2K_COMPATABILITY +#include +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +// LEGACY: This structure was used by Win2k RpcRt4 and cluster tracing + +typedef struct _WPP_WIN2K_CONTROL_BLOCK { + TRACEHANDLE Logger; + ULONG Flags; + ULONG Level; +} WPP_WIN2K_CONTROL_BLOCK, *PWPP_WIN2K_CONTROL_BLOCK; + +#pragma warning(push) +#pragma warning(disable:4201) // nonstandard extension used nameless struct/union + +typedef struct _WPP_TRACE_CONTROL_BLOCK +{ + struct _WPP_TRACE_CONTROL_BLOCK *Next; + TRACEHANDLE UmRegistrationHandle; + union { + TRACEHANDLE Logger; + PWPP_WIN2K_CONTROL_BLOCK Win2kCb; + PVOID Ptr; + struct _WPP_TRACE_CONTROL_BLOCK *Cb; + }; + + UCHAR FlagsLen; + UCHAR Level; + USHORT Options; + ULONG Flags[1]; +} WPP_TRACE_CONTROL_BLOCK, *PWPP_TRACE_CONTROL_BLOCK; +#pragma warning(pop) + + +#define WPP_IsValidSid IsValidSid +#define WPP_GetLengthSid GetLengthSid + +#ifndef WPP_TRACE +#define WPP_TRACE TraceMessage +#endif + +enum { + WPP_VER_WIN2K_CB_FORWARD_PTR = 0x01, + WPP_VER_WHISTLER_CB_FORWARD_PTR = 0x02, + WPP_VER_LH_CB_FORWARD_PTR = 0x03 +}; + +VOID WppCleanupUm( VOID ); +#define WPP_CLEANUP() WppCleanupUm() + +#define WppLoadTracingSupport + +#if defined(__cplusplus) +}; +#endif + +#endif // #ifndef WPP_ALREADY_INCLUDED + + diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-init.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-init.tpl new file mode 100644 index 000000000..8005cd18b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-init.tpl @@ -0,0 +1,482 @@ +`**********************************************************************` +`* This is an include template file for tracewpp preprocessor. *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` + +// template `TemplateFile` +// +// Defines a set of functions that simplifies +// User mode registration for tracing +// + +#if defined(__cplusplus) +extern "C" { +#endif + +// define annotation record that will carry control information to pdb (in case somebody needs it) +WPP_FORCEINLINE void WPP_CONTROL_ANNOTATION() { +#if !defined(WPP_NO_ANNOTATIONS) +#if !defined(WPP_ANSI_ANNOTATION) +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation(L"TMC:", WPP_GUID_WTEXT Guid, _WPPW(WPP_STRINGIZE(Name)) Bits); +# define WPP_DEFINE_BIT(Name) , _WPPW(#Name) +#else +# define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) __annotation("TMC:", WPP_GUID_TEXT Guid, WPP_STRINGIZE(Name) Bits); +# define WPP_DEFINE_BIT(Name) , #Name +#endif + WPP_CONTROL_GUIDS +# undef WPP_DEFINE_BIT +# undef WPP_DEFINE_CONTROL_GUID +#endif +} + +LPCGUID WPP_REGISTRATION_GUIDS[WPP_LAST_CTL]; + +WPP_CB_TYPE WPP_MAIN_CB[WPP_LAST_CTL]; + +#define WPP_NEXT(Name) ((WPP_TRACE_CONTROL_BLOCK*) \ + (WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)) + 1 == WPP_LAST_CTL ? 0:WPP_MAIN_CB + WPP_XGLUE(WPP_CTL_, WPP_EVAL(Name)) + 1)) + +__inline void WPP_INIT_CONTROL_ARRAY(WPP_CB_TYPE* Arr) { +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + Arr->Control.Ptr = NULL; \ + Arr->Control.Next = WPP_NEXT(WPP_EVAL(Name)); \ + Arr->Control.FlagsLen = WPP_FLAG_LEN; \ + Arr->Control.Level = WPP_LAST_CTL; \ + Arr->Control.Options = 0; \ + Arr->Control.Flags[0] = 0; \ + ++Arr; +#define WPP_DEFINE_BIT(BitName) L" " L ## #BitName +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_BIT +#undef WPP_DEFINE_CONTROL_GUID +} + +#undef WPP_INIT_STATIC_DATA +#define WPP_INIT_STATIC_DATA WPP_INIT_CONTROL_ARRAY(WPP_MAIN_CB) + +__inline void WPP_INIT_GUID_ARRAY(LPCGUID* Arr) { +#define WPP_DEFINE_CONTROL_GUID(Name,Guid,Bits) \ + WPP_XGLUE4(*Arr = &WPP_, ThisDir, _CTLGUID_, WPP_EVAL(Name)); \ + ++Arr; +WPP_CONTROL_GUIDS +#undef WPP_DEFINE_CONTROL_GUID +} + + + +VOID WppInitUm(__in_opt LPCWSTR AppName); + +#define WPP_INIT_TRACING(AppName) \ + WppLoadTracingSupport; \ + (WPP_CONTROL_ANNOTATION(),WPP_INIT_STATIC_DATA, \ + WPP_INIT_GUID_ARRAY((LPCGUID*)&WPP_REGISTRATION_GUIDS), \ + WPP_CB= WPP_MAIN_CB, \ + WppInitUm(AppName)) + + +void WPP_Set_Dll_CB( + PWPP_TRACE_CONTROL_BLOCK Control, + VOID * DllControlBlock, + USHORT Flags) +{ + + if (*(PVOID*)DllControlBlock != DllControlBlock){ + Control->Ptr = DllControlBlock; + } else { + if (Flags == WPP_VER_WHISTLER_CB_FORWARD_PTR ){ + memset(Control, 0, sizeof(WPP_TRACE_CONTROL_BLOCK)); + *(PWPP_TRACE_CONTROL_BLOCK*)DllControlBlock = Control; + Control->Options = WPP_VER_LH_CB_FORWARD_PTR; + + } else if (Flags == WPP_VER_WIN2K_CB_FORWARD_PTR ) { + Control->Ptr = DllControlBlock; + } + } + +} + + +#define WPP_SET_FORWARD_PTR(CTL, FLAGS, PTR) (\ + (WPP_MAIN_CB[WPP_CTRL_NO(WPP_BIT_ ## CTL )].Control.Options = (FLAGS)));\ + WPP_Set_Dll_CB(&WPP_MAIN_CB[WPP_CTRL_NO(WPP_BIT_ ## CTL )].Control,(PTR),(USHORT)FLAGS) + + +#define DEFAULT_LOGGER_NAME L"stdout" + +#if !defined(WppDebug) +# define WppDebug(a,b) +#endif + +#if !defined(WPPINIT_STATIC) +# define WPPINIT_STATIC +#endif + +#if !defined(WPPINIT_EXPORT) +# define WPPINIT_EXPORT +#endif + +#define WPP_GUID_FORMAT "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x" +#define WPP_GUID_ELEMENTS(p) \ + p->Data1, p->Data2, p->Data3,\ + p->Data4[0], p->Data4[1], p->Data4[2], p->Data4[3],\ + p->Data4[4], p->Data4[5], p->Data4[6], p->Data4[7] + +#define WPP_MAX_LEVEL 255 +#define WPP_MAX_FLAGS 0xFFFFFFFF + + + + + +__inline TRACEHANDLE WppQueryLogger(__in_opt PCWSTR LoggerName) +{ + ULONG Status; + EVENT_TRACE_PROPERTIES LoggerInfo; + + ZeroMemory(&LoggerInfo, sizeof(LoggerInfo)); + LoggerInfo.Wnode.BufferSize = sizeof(LoggerInfo); + LoggerInfo.Wnode.Flags = WNODE_FLAG_TRACED_GUID; + + Status = ControlTraceW(0, LoggerName ? LoggerName : L"stdout", &LoggerInfo, EVENT_TRACE_CONTROL_QUERY); + if (Status == ERROR_SUCCESS || Status == ERROR_MORE_DATA) { + return (TRACEHANDLE) LoggerInfo.Wnode.HistoricalContext; + } + return 0; +} + + +#if defined (WPP_GLOBALLOGGER) + +#define WPP_REG_GLOBALLOGGER_FLAGS L"Flags" +#define WPP_REG_GLOBALLOGGER_LEVEL L"Level" +#define WPP_REG_GLOBALLOGGER_START L"Start" + +#define WPP_TEXTGUID_LEN 38 +#define WPP_REG_GLOBALLOGGER_KEY L"SYSTEM\\CurrentControlSet\\Control\\Wmi\\GlobalLogger" + +WPPINIT_STATIC +void WppIntToHex( + __out_ecount(digits) LPWSTR Buf, + unsigned int value, + int digits + ) +{ + static LPCWSTR hexDigit = L"0123456789abcdef"; + while (--digits >= 0) { + Buf[digits] = hexDigit[ value & 15 ]; + value /= 16; + } +} + +WPPINIT_EXPORT +void WppInitGlobalLogger( + IN LPCGUID ControlGuid, + IN PTRACEHANDLE LoggerHandle, + OUT PULONG Flags, + __out_ecount(sizeof(UCHAR)) PUCHAR Level ) +{ +WCHAR GuidBuf[WPP_TEXTGUID_LEN]; +ULONG CurrentFlags = 0; +ULONG CurrentLevel = 0; +DWORD Start = 0; +DWORD DataSize ; +ULONG Status ; +HKEY GloblaLoggerHandleKey; +HKEY ValueHandleKey ; + + + + WppDebug(0,("WPP checking Global Logger %S",WPP_REG_GLOBALLOGGER_KEY)); + + if ((Status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + (LPWSTR)WPP_REG_GLOBALLOGGER_KEY, + 0, + KEY_READ, + &GloblaLoggerHandleKey + )) != ERROR_SUCCESS) { + WppDebug(0,("GlobalLogger key does not exist (0x%08X)",Status)); + return ; + } + + DataSize = sizeof(DWORD); + Status = RegQueryValueExW(GloblaLoggerHandleKey, + (LPWSTR)WPP_REG_GLOBALLOGGER_START, + 0, + NULL, + (LPBYTE)&Start, + &DataSize); + if (Status != ERROR_SUCCESS || Start == 0 ) { + WppDebug(0,("Global Logger not started (0x%08X)",Status)); + goto Cleanup; + } + + + WppDebug(0,("Global Logger exists and is set to be started")); + + { + static LPCWSTR hexDigit = L"0123456789abcdef"; + int i; + + WppIntToHex(GuidBuf, ControlGuid->Data1, 8); + GuidBuf[8] = '-'; + + WppIntToHex(&GuidBuf[9], ControlGuid->Data2, 4); + GuidBuf[13] = '-'; + + WppIntToHex(&GuidBuf[14], ControlGuid->Data3, 4); + GuidBuf[18] = '-'; + + GuidBuf[19] = hexDigit[(ControlGuid->Data4[0] & 0xF0) >> 4]; + GuidBuf[20] = hexDigit[ControlGuid->Data4[0] & 0x0F ]; + GuidBuf[21] = hexDigit[(ControlGuid->Data4[1] & 0xF0) >> 4]; + GuidBuf[22] = hexDigit[ControlGuid->Data4[1] & 0x0F ]; + GuidBuf[23] = '-'; + + for( i=2; i < 8 ; i++ ){ + GuidBuf[i*2+20] = hexDigit[(ControlGuid->Data4[i] & 0xF0) >> 4]; + GuidBuf[i*2+21] = hexDigit[ControlGuid->Data4[i] & 0x0F ]; + } + GuidBuf[36] = 0; + + } + + // + // Perform the query + // + + if ((Status = RegOpenKeyExW(GloblaLoggerHandleKey, + (LPWSTR)GuidBuf, + 0, + KEY_READ, + &ValueHandleKey + )) != ERROR_SUCCESS) { + WppDebug(0,("Global Logger Key not set for this Control Guid %S (0x%08X)",GuidBuf,Status)); + goto Cleanup; + } + // Get the Flags Parameter + DataSize = sizeof(DWORD); + Status = RegQueryValueExW(ValueHandleKey, + (LPWSTR)WPP_REG_GLOBALLOGGER_FLAGS, + 0, + NULL, + (LPBYTE)&CurrentFlags, + &DataSize); + if (Status != ERROR_SUCCESS || CurrentFlags == 0 ) { + WppDebug(0,("GlobalLogger for %S Flags not set (0x%08X)",GuidBuf,Status)); + } + // Get the levels Parameter + DataSize = sizeof(DWORD); + Status = RegQueryValueExW(ValueHandleKey, + (LPWSTR)WPP_REG_GLOBALLOGGER_LEVEL, + 0, + NULL, + (LPBYTE)&CurrentLevel, + &DataSize); + if (Status != ERROR_SUCCESS || CurrentLevel == 0 ) { + WppDebug(0,("GlobalLogger for %S Level not set (0x%08X)",GuidBuf,Status)); + } + + if (Start==1) { + + if ((*LoggerHandle= WppQueryLogger( L"GlobalLogger")) != (TRACEHANDLE)NULL) { + *Flags = CurrentFlags & 0x7FFFFFFF ; + *Level = (UCHAR)(CurrentLevel & 0xFF) ; + WppDebug(0,("WPP Enabled via Global Logger Flags=0x%08X Level=0x%02X",CurrentFlags,CurrentLevel)); + } else { + WppDebug(0,("GlobalLogger set for start but not running (Flags=0x%08X Level=0x%02X)",CurrentFlags,CurrentLevel)); + } + + } + + RegCloseKey(ValueHandleKey); +Cleanup: + RegCloseKey(GloblaLoggerHandleKey); +} +#endif //#ifdef WPP_GLOBALLOGGER + +#ifdef WPP_MANAGED_CPP +#pragma managed(push, off) +#endif + +ULONG +WINAPI +WppControlCallback( + IN WMIDPREQUESTCODE RequestCode, + IN PVOID Context, + __inout ULONG *InOutBufferSize, + __inout PVOID Buffer + ) +{ + PWPP_TRACE_CONTROL_BLOCK Ctx = (PWPP_TRACE_CONTROL_BLOCK)Context; + TRACEHANDLE Logger; + UCHAR Level; + DWORD Flags; + + *InOutBufferSize = 0; + + switch (RequestCode) + { + case WMI_ENABLE_EVENTS: + { + Logger = GetTraceLoggerHandle( Buffer ); + Level = GetTraceEnableLevel(Logger); + Flags = GetTraceEnableFlags(Logger); + + WppDebug(1, ("[WppInit] WMI_ENABLE_EVENTS Ctx %p Flags %x" + " Lev %d Logger %I64x\n", + Ctx, Flags, Level, Logger) ); + break; + } + case WMI_DISABLE_EVENTS: + { + Logger = 0; + Flags = 0; + Level = 0; + WppDebug(1, ("[WppInit] WMI_DISABLE_EVENTS Ctx 0x%08p\n", Ctx)); + break; + } + default: + { + return(ERROR_INVALID_PARAMETER); + } + } + if (Ctx->Options & WPP_VER_WIN2K_CB_FORWARD_PTR && Ctx->Win2kCb) { + Ctx->Win2kCb->Logger = Logger; + Ctx->Win2kCb->Level = Level; + Ctx->Win2kCb->Flags = Flags; + } else { + if (Ctx->Options & WPP_VER_WHISTLER_CB_FORWARD_PTR && Ctx->Cb) { + Ctx = Ctx->Cb; // use forwarding address + } + Ctx->Logger = Logger; + Ctx->Level = Level; + Ctx->Flags[0] = Flags; + + } + return(ERROR_SUCCESS); +} + +#ifdef WPP_MANAGED_CPP +#pragma managed(pop) +#endif + + +WPPINIT_EXPORT +VOID WppInitUm(__in_opt LPCWSTR AppName) +{ + PWPP_TRACE_CONTROL_BLOCK Control = &WPP_CB[0].Control; + TRACE_GUID_REGISTRATION TraceRegistration; + LPCGUID * RegistrationGuids = (LPCGUID *)&WPP_REGISTRATION_GUIDS; + LPCGUID ControlGuid; + + ULONG Status; + +#ifdef WPP_MOF_RESOURCENAME +#ifdef WPP_DLL + HMODULE hModule = NULL; +#endif + WCHAR ImagePath[MAX_PATH] = {UNICODE_NULL} ; + WCHAR WppMofResourceName[] = WPP_MOF_RESOURCENAME ; +#else + UNREFERENCED_PARAMETER(AppName); +#endif //#ifdef WPP_MOF_RESOURCENAME + + WppDebug(1, ("Registering %ws\n", AppName) ); + + for(; Control; Control = Control->Next) { + + ControlGuid = *RegistrationGuids++; + TraceRegistration.Guid = ControlGuid; + TraceRegistration.RegHandle = 0; + + WppDebug(1,(WPP_GUID_FORMAT " %ws : %d\n", + WPP_GUID_ELEMENTS(ControlGuid), + AppName, + Control->FlagsLen)); + + +#ifdef WPP_MOF_RESOURCENAME + if (AppName != NULL) { + DWORD Status ; +#ifdef WPP_DLL + if ((hModule = GetModuleHandleW(AppName)) != NULL) { + Status = GetModuleFileNameW(hModule, ImagePath, MAX_PATH) ; + ImagePath[MAX_PATH-1] = '\0'; + if (Status == 0) { + WppDebug(1,("RegisterTraceGuids => GetModuleFileName(DLL) Failed 0x%08X\n",GetLastError())); + } + } else { + WppDebug(1,("RegisterTraceGuids => GetModuleHandleW failed for %ws (0x%08X)\n",AppName,GetLastError())); + } +#else // #ifdef WPP_DLL + Status = GetModuleFileNameW(NULL,ImagePath,MAX_PATH); + if (Status == 0) { + WppDebug(1,("GetModuleFileName(EXE) Failed 0x%08X\n",GetLastError())); + } +#endif // #ifdef WPP_DLL + } + WppDebug(1,("registerTraceGuids => registering with WMI, App=%ws, Mof=%ws, ImagePath=%ws\n",AppName,WppMofResourceName,ImagePath)); + + Status = RegisterTraceGuidsW( // Always use Unicode +#else // ifndef WPP_MOF_RESOURCENAME + + Status = RegisterTraceGuids( +#endif // ifndef WPP_MOF_RESOURCENAME + + WppControlCallback, + Control, // Context for the callback + ControlGuid, + 1, + &TraceRegistration, +#ifndef WPP_MOF_RESOURCENAME + 0, //ImagePath, + 0, //ResourceName, +#else // #ifndef WPP_MOF_RESOURCENAME + ImagePath, + WppMofResourceName, +#endif // #ifndef WPP_MOF_RESOURCENAME + &Control->UmRegistrationHandle + ); + + WppDebug(1, ("RegisterTraceGuid => %d\n", Status) ); +#if defined (WPP_GLOBALLOGGER) + // Check if Global logger is active if we have not been immediately activated + + if (Control->Logger == (TRACEHANDLE)NULL) { + WppInitGlobalLogger( ControlGuid, (PTRACEHANDLE)&Control->Logger, &Control->Flags[0], &Control->Level); + } +#endif //#if defined (WPP_GLOBALLOGGER) + + } + + +} + +WPPINIT_EXPORT +VOID WppCleanupUm( VOID ) +{ + PWPP_TRACE_CONTROL_BLOCK Control; + + if (WPP_CB == (WPP_CB_TYPE*)&WPP_CB){ + // + // WPP_INIT_TRACING macro has not been called + // + return; + } + WppDebug(1, ("Cleanup\n") ); + Control = &WPP_CB[0].Control; + for(; Control; Control = Control->Next) { + WppDebug(1,("UnRegistering %I64x\n", Control->UmRegistrationHandle) ); + if (Control->UmRegistrationHandle) { + UnregisterTraceGuids(Control->UmRegistrationHandle); + Control->UmRegistrationHandle = (TRACEHANDLE)NULL ; + } + } + + WPP_CB = (WPP_CB_TYPE*)&WPP_CB; +} + +#if defined(__cplusplus) +}; +#endif diff --git a/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-w2k.tpl b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-w2k.tpl new file mode 100644 index 000000000..88fb0982b --- /dev/null +++ b/eng/WpfArcadeSdk/tools/WppConfig/rev1/um-w2k.tpl @@ -0,0 +1,398 @@ +`**********************************************************************` +`* This is a template file for tracewpp preprocessor *` +`* If you need to use a custom version of this file in your project *` +`* Please clone it from this one and point WPP to it by specifying *` +`* -gen:{yourfile} option on RUN_WPP line in your sources file *` +`* *` +`* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +`**********************************************************************` +//`Compiler.Checksum` Generated File. Do not edit. +// File created by `Compiler.Name` compiler version `Compiler.Version`-`Compiler.Timestamp` +// on `System.Date` at `System.Time` UTC from a template `TemplateFile` + +`INCLUDE um-header.tpl` + +#ifndef WPP_ALREADY_INCLUDED + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef +ULONG +(*PFN_WPPTRACEMESSAGE)( + IN TRACEHANDLE LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN ... + ); + + +typedef +ULONG +(*PFN_WPPTRACEMESSAGEVA)( + IN TRACEHANDLE LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN va_list MessageArgList + ); + +typedef enum _WPP_TRACE_API_SUITE { + WppTraceWin2K, + WppTraceWinXP, + WppTraceTraceLH, + WppTraceMaxSuite +} WPP_TRACE_API_SUITE; + +ULONG +WppInitTraceFunction(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + ... + ); +ULONG +TraceMessageW2k(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + ... + ) ; + +ULONG +TraceMessageW2kVa(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN va_list MessageArgList + ); + +__declspec(selectany) PFN_WPPTRACEMESSAGE pfnWppTraceMessage = WppInitTraceFunction; +__declspec(selectany) PFN_WPPTRACEMESSAGEVA pfnWppTraceMessageVa = TraceMessageW2kVa; +__declspec(selectany) WPP_TRACE_API_SUITE WPPTraceSuite = WppTraceWin2K; + + +#undef WPP_TRACE +#define WPP_TRACE pfnWppTraceMessage + +#ifndef WPP_MAX_MOF_FIELDS +#define WPP_MAX_MOF_FIELDS 7 +#endif + + +#ifndef TRACE_MESSAGE_MAXIMUM_SIZE +#define TRACE_MESSAGE_MAXIMUM_SIZE 8*1024 +#endif + + +__inline ULONG +TraceMessageW2kVa(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN va_list MessageArgList + ) +/*++ + +Routine Description: + + This is a function that simulates tracemessage in W2K + +Arguments: + + LoggerHandle - handle providers logger handle + + TraceOptions - unreferenced + + MessageGuid - pointer to message GUID + + MessageNumber - Type of message been logged + + MessageArgList - list or arguments + +Return Value: + + code indicating success or failure +--*/ +{ + +typedef struct _WPP_TRACE_BUFFER { + EVENT_TRACE_HEADER Header; + MOF_FIELD MofField[WPP_MAX_MOF_FIELDS+1]; +} WPP_TRACE_BUFFER; + + + size_t ByteCount; + size_t ArgumentCount; + va_list VarArgs = MessageArgList; + PVOID DataPtr ; + size_t DataSize = 0; + size_t ArgOffset; + ULONG Status; + WPP_TRACE_BUFFER TraceBuf; + PVOID Data=NULL; + + UNREFERENCED_PARAMETER(TraceOptions); + + // + // Fill in header fields + // Type is 0xFF to indicate that the first data is the MessageNumber + // The first Mof data is the Message Number + // + + TraceBuf.Header.GuidPtr = (ULONGLONG)MessageGuid ; + TraceBuf.Header.Flags = WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_GUID_PTR|WNODE_FLAG_USE_MOF_PTR; + TraceBuf.Header.Class.Type = 0xFF ; + TraceBuf.MofField[0].DataPtr = (ULONGLONG)&MessageNumber; + TraceBuf.MofField[0].Length = sizeof(USHORT); + + // Determine the number bytes to follow header + ByteCount = 0 ; + ArgumentCount = 0 ; + + while ((DataPtr = va_arg (VarArgs, PVOID)) != NULL) { + DataSize = va_arg (VarArgs, size_t); + + // Check for integer overflow. + if (ByteCount + DataSize > ByteCount) + { + ByteCount += DataSize ; + ArgumentCount++ ; + + if (ArgumentCount <= WPP_MAX_MOF_FIELDS) { + TraceBuf.MofField[ArgumentCount].DataPtr = (ULONGLONG)DataPtr; + TraceBuf.MofField[ArgumentCount].Length = (ULONG)DataSize; + } + } + } + + va_end(VarArgs); + if (ByteCount > TRACE_MESSAGE_MAXIMUM_SIZE) { + return 0; + } + + if (ArgumentCount > WPP_MAX_MOF_FIELDS) { + // + // This occurs infrequently + // Allocate the blob to hold the data + // + Data = LocalAlloc(0,ByteCount); + if (Data == NULL) { + return 0; + } + + TraceBuf.MofField[1].DataPtr = (ULONGLONG)Data; + TraceBuf.MofField[1].Length = (ULONG)ByteCount; + + ArgOffset = 0 ; + DataSize = 0 ; + VarArgs = MessageArgList; + while ((DataPtr = va_arg (VarArgs, PVOID)) != NULL) { + DataSize = va_arg (VarArgs, size_t) ; + memcpy((char*)Data + ArgOffset, DataPtr, DataSize) ; + ArgOffset += DataSize ; + } + va_end(VarArgs) ; + + //Fill in the total size (header + 2 mof fields) + TraceBuf.Header.Size = (USHORT)(sizeof(EVENT_TRACE_HEADER) + 2*sizeof(MOF_FIELD)); + + } else { + //Fill in the total size (header + mof fields) + TraceBuf.Header.Size = (USHORT)(sizeof(EVENT_TRACE_HEADER) + (ArgumentCount+1)*sizeof(MOF_FIELD)); + } + + Status = TraceEvent(LoggerHandle, &TraceBuf.Header) ; + + if (Data) { + LocalFree(Data); + } + + if(ERROR_SUCCESS != Status) { + // Silently ignored error + } + + return 0; +} + + +__inline ULONG +TraceMessageW2k(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + ... + ) +/*++ + +Routine Description: + + This is a function that simulates tracemessage in W2K + +Arguments: + + LoggerHandle - handle providers logger handle + + TraceOptions - unreferenced + + MessageGuid - pointer to message GUID + + MessageNumber - Type of message been logged + + ... - list or arguments + +Return Value: + + code indicating success or failure +--*/ +{ + va_list VarArgs ; + + va_start(VarArgs, MessageNumber); + + return( TraceMessageW2kVa( LoggerHandle, + TraceOptions, + MessageGuid, + MessageNumber, + VarArgs + ) + ); + +} + +// +// Advanced tracing APIs (XP and later) will be indirectly called. +// + +__inline VOID WppDynamicTracingSupport( + VOID + ) +/*++ + +Routine Description: + + This function assigns at runtime the ETW API set to be use for tracing. + +Arguments: + +Remarks: + + At runtime determine assing the funtions pointers for the trace APIs to be use. + XP and above will use TraceMessage, and Win2K will use our private W2kTraceMessage + which uses TraceEvent + +--*/ +{ + HINSTANCE hinstLib; + + hinstLib = LoadLibraryW(L"advapi32"); + if (hinstLib != NULL) + { + pfnWppTraceMessage = (PFN_WPPTRACEMESSAGE) (INT_PTR) + GetProcAddress(hinstLib, "TraceMessage"); + + if (NULL == pfnWppTraceMessage) { + pfnWppTraceMessage = TraceMessageW2k; + pfnWppTraceMessageVa = TraceMessageW2kVa; + WPPTraceSuite = WppTraceWin2K; + } else { + + WPPTraceSuite = WppTraceWinXP; + pfnWppTraceMessageVa = (PFN_WPPTRACEMESSAGEVA) (INT_PTR) + GetProcAddress(hinstLib, "TraceMessageVa"); + if (NULL == pfnWppTraceMessageVa) { + pfnWppTraceMessageVa = TraceMessageW2kVa; + } + } + + FreeLibrary(hinstLib); + } else { + pfnWppTraceMessage = TraceMessageW2k; + pfnWppTraceMessageVa = TraceMessageW2kVa; + WPPTraceSuite = WppTraceWin2K; + } +} + + +__inline ULONG +WppInitTraceFunction(IN TRACEHANDLE LoggerHandle, + IN DWORD TraceOptions, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + ... + ) +/*++ + +Routine Description: + + This is a function initializes the tracing function if not + calling WPP_INIT_TRACING. It uses TraceMessageVa to log events + + +--*/ +{ + + va_list VarArgs ; + + WppDynamicTracingSupport(); + + va_start(VarArgs, MessageNumber); + + pfnWppTraceMessageVa( LoggerHandle, + TraceOptions, + MessageGuid, + MessageNumber, + VarArgs + ); + + return 0; +} + +#undef WppLoadTracingSupport +#define WppLoadTracingSupport WppDynamicTracingSupport() + +#if defined(__cplusplus) +}; +#endif + +#endif // WPP_ALREADY_INCLUDED + +`INCLUDE control.tpl` +`INCLUDE tracemacro.tpl` + +`IF FOUND WPP_INIT_TRACING` +#define WPPINIT_EXPORT + `INCLUDE um-init.tpl` +`ENDIF` + +// +// Tracing Macro name redefinition +// + +// NoMsgArgs + +`FORALL f IN Funcs WHERE !DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name` WPP_(CALL) +`ENDFOR` + +`FORALL f IN Funcs WHERE DoubleP && !MsgArgs` +#undef `f.Name` +#define `f.Name`(ARGS) WPP_(CALL) ARGS +`ENDFOR` + + +// MsgArgs + +`FORALL f IN Funcs WHERE MsgArgs` +#undef `f.Name` +#define `f.Name`(`f.FixedArgs` MSGARGS) WPP_(CALL)(`f.FixedArgs` MSGARGS) +`ENDFOR` + +`FORALL r IN Reorder` +#undef WPP_R`r.Name` +#define WPP_R`r.Name`(`r.Arguments`) `r.Permutation` +`ENDFOR` + diff --git a/eng/build.yml b/eng/build.yml new file mode 100644 index 000000000..464b0c1b0 --- /dev/null +++ b/eng/build.yml @@ -0,0 +1,94 @@ +# +# This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. +# + +parameters: + name: '' + # send telemetry + enableTelemetry: true + # install Microbuild plugin if not a public build + enableMicrobuild: true + # queue YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#queue + queue: {} + # variables YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#phase + variables: {} + # run this build as a public build, even in the internal project + runAsPublic: false + +# Common conditionals: There are a number of common conditionals that are useful. Generally these are used to decide what resources can be accessed, +# or what logic should be applied based on the context the build is being run in. +# - eq/ne(variables['Agent.Os'], 'Windows_NT') - Running/not running on a windows machine +# - eq/ne(variables['System.TeamProject'], 'public') - Running/not running on the dotnet public VSTS project +# - and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest') - Not running in public and not a pull request. +# - or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest') - Running in public or a pull request. + +phases: +- template: /eng/common/templates/phases/base.yml + parameters: + enableTelemetry: ${{ parameters.enableTelemetry }} + + enableMicrobuild: ${{ parameters.enableMicrobuild }} + + name: ${{ parameters.name }} + + queue: ${{ parameters.queue }} + + runAsPublic: ${{ parameters.runAsPublic }} + + variables: + ${{ insert }}: ${{ parameters.variables }} + _HelixBuildConfig: $(_BuildConfig) + # Only enable publishing in non-public, non PR scenarios. + ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + # This should be changed to an isolated blob feed per-build. + # Right now a manual build of a random branch would get published alongside the normal branch artifacts. + _PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json + _SignArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) + _PublishArgs: /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) + /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + _OfficialBuildIdArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + # else + ${{ if or(eq(parameters.runAsPublic, 'true'), eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + _PublishArgs: '' + _OfficialBuildIdArgs: '' + _SignArgs: '' + + steps: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureKeyVault@1 + inputs: + azureSubscription: 'DotNet-Engineering-Services_KeyVault' + KeyVaultName: EngKeyVault + SecretsFilter: 'dotnetfeed-storage-access-key-1,microsoft-symbol-server-pat,symweb-symbol-server-pat' + + # Use utility script to run script command dependent on agent OS. + - script: eng\common\cibuild.cmd + -configuration $(_BuildConfig) + -prepareMachine + $(_PublishArgs) + $(_SignArgs) + $(_OfficialBuildIdArgs) + /p:Platform=$(_Platform) /p:IsShipping=$(_IsShipping) + displayName: Windows Build / Publish + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + + - task: PublishBuildArtifacts@1 + displayName: Publish Logs to VSTS + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)' + PublishLocation: Container + ArtifactName: $(Agent.Os)_$(Agent.JobName) + continueOnError: true + condition: always() + + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'xUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + continueOnError: true + condition: always() \ No newline at end of file diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh old mode 100755 new mode 100644 diff --git a/eng/configure-toolset.ps1 b/eng/configure-toolset.ps1 new file mode 100644 index 000000000..735681835 --- /dev/null +++ b/eng/configure-toolset.ps1 @@ -0,0 +1,20 @@ +# +# This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. +# + +# This repo uses C++/CLI /clr:pure (or /clr:netcore) switches during compilation, which are +# deprecated. Ensure that this warning is always suppressed during build. +if (($properties -eq $null) -or (-not ($properties -icontains '/nowarn:D9035'))) { + $properties = @('/nowarn:D9035') + $properties +} + +# Make sure that Nuget restore doesn't hit the cache when running CI builds +# See https://github.com/NuGet/Home/issues/3116 +if ($ci) { + if (($properties -eq $null) -or (-not ($properties -icontains '/p:RestoreNoCache=true'))) { + $properties = @('/p:RestoreNoCache=true') + $properties + } +} +# Always generate binary logs +$binaryLog = $true +$DoNotAbortNativeToolsInstallationOnFailure = $true diff --git a/eng/pipeline.yml b/eng/pipeline.yml index 1d75c6cf8..e726b9e38 100644 --- a/eng/pipeline.yml +++ b/eng/pipeline.yml @@ -1,8 +1,12 @@ +# +# This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. +# +# parameters: # Needed because agent pool can't be read from a user-defined variable (Azure DevOps limitation) - # Defaults to dotnet-external-temp-vs2019 - agentPool: dotnet-external-temp-vs2019 + # Defaults to dotnet-internal-vs2019-preview + agentPool: dotnet-internal-vs2019-preview # Needed because runAsPublic is used in template expressions, which can't read from user-defined variables # Defaults to true @@ -16,7 +20,7 @@ jobs: enablePublishTestResults: true enablePublishBuildAssets: true enableTelemetry: true - helixRepo: dotnet/wpf + helixRepo: dnceng/wpf jobs: - job: Windows_NT @@ -26,7 +30,7 @@ jobs: - name: _TeamName value: DotNetCore - name: _SignType - value: test + value: real - name: _SignArgs value: '' @@ -67,6 +71,8 @@ jobs: value: /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) + /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - name: _OfficialBuildIdArgs @@ -102,4 +108,4 @@ jobs: $(_SignArgs) $(_OfficialBuildIdArgs) $(_PlatformArgs) - displayName: Windows Build / Publish \ No newline at end of file + displayName: Windows Build / Publish diff --git a/eng/restore-toolset.ps1 b/eng/restore-toolset.ps1 new file mode 100644 index 000000000..a7f5a8162 --- /dev/null +++ b/eng/restore-toolset.ps1 @@ -0,0 +1,5 @@ +# +# This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. +# + +. $PsScriptRoot\common\init-tools-native.ps1 -InstallDirectory $PSScriptRoot\..\.tools\native -GlobalJsonFile $PSScriptRoot\..\global.json \ No newline at end of file diff --git a/global.json b/global.json index 27bac917b..b02c631f1 100644 --- a/global.json +++ b/global.json @@ -9,6 +9,11 @@ "version": "3.0.100-preview-010024" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19177.11" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19177.2", + "Microsoft.DotNet.Arcade.Wpf.Sdk": "4.8.0-prerelease.19168.11" + }, + "native-tools": { + "strawberry-perl": "5.28.1.1-1", + "msvcurt-c1xx": "0.0.0.3" } } diff --git a/packaging/Directory.Build.props b/packaging/Directory.Build.props new file mode 100644 index 000000000..1152d4c9c --- /dev/null +++ b/packaging/Directory.Build.props @@ -0,0 +1,47 @@ + + + true + + + true + true + + + + Dummy-$(PackageName) + true + false + true + + + true + false + + + + + LICENSE.TXT + + + + + + + + diff --git a/packaging/Directory.Build.targets b/packaging/Directory.Build.targets new file mode 100644 index 000000000..144371187 --- /dev/null +++ b/packaging/Directory.Build.targets @@ -0,0 +1,3 @@ + + + diff --git a/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj b/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj new file mode 100644 index 000000000..ac9fb2d11 --- /dev/null +++ b/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj @@ -0,0 +1,31 @@ + + + {B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3} + netcoreapp3.0 + AnyCPU;x64 + + + + + true + + + + $(MSBuildProjectName.Replace('.ArchNeutral','')) + $(PackageName) + WPF Build props/targets transport package shared between dotnet/wpf and dotnet-wpf-int + + + + + + + + + + + diff --git a/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.ArchNeutral.csproj b/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.ArchNeutral.csproj new file mode 100644 index 000000000..d908eccc6 --- /dev/null +++ b/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.ArchNeutral.csproj @@ -0,0 +1,13 @@ + + + 9a7e395b-e859-40e2-809d-efb72cf3a2ee + netcoreapp3.0 + AnyCPU;x64 + + + + $(MSBuildProjectName.Replace('.ArchNeutral','')) + $(PackageName) + WPF Transport Package from dotnet/wpf repository + + diff --git a/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.csproj b/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.csproj new file mode 100644 index 000000000..46d1b123c --- /dev/null +++ b/packaging/Microsoft.DotNet.Wpf.GitHub/Microsoft.DotNet.Wpf.GitHub.csproj @@ -0,0 +1,13 @@ + + + c847934a-828c-4ebb-a004-b0e97c8313f4 + netcoreapp3.0 + AnyCPU;x64 + + + + $(MSBuildProjectName.Replace('.ArchNeutral','')) + $(PackageName) + WPF Transport Package from dotnet/wpf repository + + diff --git a/src/Directory.Build.Props b/src/Directory.Build.Props index c7d7f5865..12d9ad073 100644 --- a/src/Directory.Build.Props +++ b/src/Directory.Build.Props @@ -1,4 +1,3 @@ - - + diff --git a/src/Microsoft.DotNet.Wpf/Directory.Build.Props b/src/Microsoft.DotNet.Wpf/Directory.Build.Props index c7d7f5865..12d9ad073 100644 --- a/src/Microsoft.DotNet.Wpf/Directory.Build.Props +++ b/src/Microsoft.DotNet.Wpf/Directory.Build.Props @@ -1,4 +1,3 @@ - - + diff --git a/src/Microsoft.DotNet.Wpf/src/Common/src/System/SR.cs b/src/Microsoft.DotNet.Wpf/src/Common/src/System/SR.cs index 10e7fb032..3c8620533 100644 --- a/src/Microsoft.DotNet.Wpf/src/Common/src/System/SR.cs +++ b/src/Microsoft.DotNet.Wpf/src/Common/src/System/SR.cs @@ -2,21 +2,24 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using System.Resources; using System.Runtime.CompilerServices; -#if CUSTOM_SR_NAMESPACE -namespace #CUSTOM_SR_NAMESPACE# +#if WINDOWS_BASE +namespace MS.Internal.WindowsBase +#elif PRESENTATION_CORE +namespace MS.Internal.PresentationCore +#elif PBTCOMPILER +namespace MS.Utility +#elif AUTOMATION +namespace MS.Internal.Automation #else namespace System #endif { -#if CUSTOM_SR_CLASSNAME - internal partial class #CUSTOM_SR_CLASSNAME# -#else internal partial class SR -#endif { private static ResourceManager ResourceManager => SRID.ResourceManager; diff --git a/src/Microsoft.DotNet.Wpf/src/Directory.Build.Props b/src/Microsoft.DotNet.Wpf/src/Directory.Build.Props index 0d695cffd..01dd16530 100644 --- a/src/Microsoft.DotNet.Wpf/src/Directory.Build.Props +++ b/src/Microsoft.DotNet.Wpf/src/Directory.Build.Props @@ -1,12 +1,15 @@ - - + + + ECMA + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb true $(MSBuildThisFileDirectory)Shared\ $(MSBuildThisFileDirectory)Common\ - true - true + $(MSBuildThisFileDirectory)WpfGfx\ + $(WpfGraphicsPath) + $(MSBuildThisFileDirectory)PresentationNative\ diff --git a/src/Microsoft.DotNet.Wpf/src/Shared/RefAssemblyAttrs.cs b/src/Microsoft.DotNet.Wpf/src/Shared/RefAssemblyAttrs.cs index ef53e902c..aa83750cf 100644 --- a/src/Microsoft.DotNet.Wpf/src/Shared/RefAssemblyAttrs.cs +++ b/src/Microsoft.DotNet.Wpf/src/Shared/RefAssemblyAttrs.cs @@ -17,6 +17,8 @@ namespace MS.Internal.PresentationFramework namespace MS.Internal.ReachFramework #elif UIAUTOMATIONTYPES namespace MS.Internal.UIAutomationTypes +#elif DIRECTWRITE_FORWARDER +namespace MS.Internal.DirectWriteForwarder #else namespace Microsoft.Internal #endif @@ -32,6 +34,7 @@ namespace Microsoft.Internal internal const string DEVDIV_PUBLIC_KEY_TOKEN = "b77a5c561934e089"; // Constants to prevent hardcoding in InternalsVisibleTo attribute + internal const string DirectWriteForwarder = "DirectWriteForwarder, PublicKey=" + WCP_PUBLIC_KEY_STRING; internal const string PresentationCore = "PresentationCore, PublicKey="+ WCP_PUBLIC_KEY_STRING; internal const string PresentationCFFRasterizer = "PresentationCFFRasterizer, PublicKey="+ WCP_PUBLIC_KEY_STRING; internal const string PresentationFramework = "PresentationFramework, PublicKey="+ WCP_PUBLIC_KEY_STRING; diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/Configurations.props b/src/Microsoft.DotNet.Wpf/src/System.Xaml/Configurations.props deleted file mode 100644 index 6cc4dcd0e..000000000 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/Configurations.props +++ /dev/null @@ -1,8 +0,0 @@ - - - - - netcoreapp-Windows_NT; - - - \ No newline at end of file diff --git a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System.Xaml.csproj b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System.Xaml.csproj index d8de8227f..ff7be72b8 100644 --- a/src/Microsoft.DotNet.Wpf/src/System.Xaml/System.Xaml.csproj +++ b/src/Microsoft.DotNet.Wpf/src/System.Xaml/System.Xaml.csproj @@ -2,22 +2,15 @@ {9AC36357-34B7-40A1-95CA-FE9F46D089A7} System.Xaml - netcoreapp3.0 + netcoreapp3.0 AnyCPU;x64 - $(NoWarn);0618;NU5125 + $(NoWarn);0618;NU5125;0618 $(DefineConstants);OLDRESOURCES;SYSTEM_XAML - - true - runtime.win-$(Platform) - runtime.win-x86 - $(PackageRuntimeIdentifierPrefix).Microsoft.DotNet.Wpf.Private - Microsoft.DotNet.Wpf - @@ -96,11 +89,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - All - + diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj b/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj index 9b4f79194..54ec59335 100644 --- a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj +++ b/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj @@ -4,7 +4,7 @@ TestServices $(DefineConstants);FRAMEWORK_NATIVEMETHODS;CORE_NATIVEMETHODS;DRT true - $(NoWarn);CS0618 + $(NoWarn);CS0618;0618 AnyCPU;x64 true diff --git a/src/Microsoft.DotNet.Wpf/test/Common/dir.props b/src/Microsoft.DotNet.Wpf/test/Common/dir.props deleted file mode 100644 index a6853553d..000000000 --- a/src/Microsoft.DotNet.Wpf/test/Common/dir.props +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Microsoft.DotNet.Wpf/test/Directory.Build.props b/src/Microsoft.DotNet.Wpf/test/Directory.Build.props index d927641fe..4ca582bca 100644 --- a/src/Microsoft.DotNet.Wpf/test/Directory.Build.props +++ b/src/Microsoft.DotNet.Wpf/test/Directory.Build.props @@ -1,4 +1,7 @@ + + true + $(MsBuildThisFileDirectory) @@ -6,6 +9,7 @@ true false false + false diff --git a/src/Microsoft.DotNet.Wpf/test/dir.props b/src/Microsoft.DotNet.Wpf/test/dir.props deleted file mode 100644 index a6853553d..000000000 --- a/src/Microsoft.DotNet.Wpf/test/dir.props +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file