From 45869a0cadad0ceadd86e605ae07ff6dfd8bdef6 Mon Sep 17 00:00:00 2001
From: Mike Battista <13860912+mikebattista@users.noreply.github.com>
Date: Thu, 6 Apr 2023 15:20:14 -0700
Subject: [PATCH] Retired Windows.Win32.Interop.dll and moved attribute
definitions to Windows.Win32.Foundation.Metadata (#1527)
* Initial attempt at merging Interop types into the main winmd.
The winmd is generated but the attributes don't appear to be retaining the Attribute inheritance which is causing build failures in the WinmdGenerator and samples.
* Updated new files and attributes.
* Updated interop reference.
* Attributes moved to Windows.Win32.Foundation.Metadata and everything builds and compiles but attributes that expose properties like MemorySize and NativeArrayInfo have questionable definitions since the properties aren't exposed in the metadata.
* Updated debug configuration.
* Added support for properties and attributes.
* Updated the baseline.
* Added public constructors.
* Updated the diffing tool to account for the attribute namespace change and updated the baseline.
---
BuildTools/BuildTools.proj | 1 -
CONTRIBUTING.md | 2 +-
README.md | 2 +-
azure-pipelines.yml | 2 +-
.../ApplicationInstallationAndServicing.cs | 2 +-
generation/WinSDK/manual/Audio.cs | 2 +-
generation/WinSDK/manual/Com.cs | 2 +-
generation/WinSDK/manual/Console.cs | 2 +-
generation/WinSDK/manual/Controls.cs | 2 +-
generation/WinSDK/manual/CryptCerts.cs | 2 +-
generation/WinSDK/manual/DevInst.cs | 2 +-
generation/WinSDK/manual/Dfs.cs | 2 +-
generation/WinSDK/manual/Direct2D.cs | 2 +-
generation/WinSDK/manual/DirectWrite.cs | 2 +-
generation/WinSDK/manual/Dxgi.cs | 2 +-
generation/WinSDK/manual/ETW.cs | 2 +-
generation/WinSDK/manual/FileSystem.cs | 2 +-
generation/WinSDK/manual/Foundation.cs | 2 +-
generation/WinSDK/manual/Gdi.cs | 2 +-
generation/WinSDK/manual/HiDpi.cs | 2 +-
generation/WinSDK/manual/Identity.cs | 3 +-
generation/WinSDK/manual/Iis.cs | 2 +-
generation/WinSDK/manual/Ioctl.cs | 2 +-
generation/WinSDK/manual/JobObjects.cs | 2 +-
generation/WinSDK/manual/Js.cs | 2 +-
generation/WinSDK/manual/Kernel.cs | 2 +-
generation/WinSDK/manual/MediaFoundation.cs | 2 +-
generation/WinSDK/manual/Metadata.cs | 276 ++++++++++++++++++
generation/WinSDK/manual/Mi.cs | 2 +-
generation/WinSDK/manual/MsCs.cs | 2 +-
generation/WinSDK/manual/Multimedia.cs | 2 +-
generation/WinSDK/manual/NativeWiFi.cs | 2 +-
generation/WinSDK/manual/Ole.cs | 2 +-
generation/WinSDK/manual/Power.cs | 2 +-
generation/WinSDK/manual/Printing.cs | 2 +-
generation/WinSDK/manual/Registry.cs | 2 +-
generation/WinSDK/manual/RemoteDesktop.cs | 2 +-
generation/WinSDK/manual/RestartManager.cs | 2 +-
generation/WinSDK/manual/Rpc.cs | 2 +-
generation/WinSDK/manual/Scsi.cs | 2 +-
generation/WinSDK/manual/Security.cs | 2 +-
generation/WinSDK/manual/Services.cs | 2 +-
generation/WinSDK/manual/Shell.cs | 3 +-
generation/WinSDK/manual/SystemInformation.cs | 2 +-
generation/WinSDK/manual/SystemServices.cs | 2 +-
generation/WinSDK/manual/TabletPC.cs | 2 +-
.../WinSDK/manual/TextServices.Manual.cs | 2 +-
generation/WinSDK/manual/Threading.cs | 2 +-
.../WinSDK/manual/VirtualDiskService.cs | 2 +-
generation/WinSDK/manual/WinProg.cs | 2 +-
generation/WinSDK/manual/WinSock.cs | 2 +-
.../WinSDK/manual/WindowsAndMessaging.cs | 2 +-
generation/WinSDK/scraper.header.txt | 1 +
scripts/BuildMetadataBin.ps1 | 4 -
scripts/ChangesSinceLastRelease.txt | 37 +++
scripts/CreateUsingsForGeneratedSources.ps1 | 2 +-
sources/BuildTools.sln | 2 -
.../ClangSharpSourceCompilation.cs | 21 +-
.../ClangSharpSourceToWinmd.csproj | 1 -
.../ClangSharpSourceWinmdGenerator.cs | 65 +++--
.../CrossArchSyntaxMap.cs | 4 +-
.../CrossArchTreeMerger.cs | 3 +-
.../MetadataSyntaxTreeCleaner.cs | 2 +-
.../NativeTypedefStructsCreator.cs | 2 +-
sources/ClangSharpSourceToWinmd/Program.cs | 4 +-
.../Properties/launchSettings.json | 6 +-
.../GeneratorSdk/MetadataTasks/EmitWinmd.cs | 2 -
.../GeneratorSdk/samples/DiaSdk/Dia.manual.cs | 2 +-
.../DiaSdk/Microsoft.Dia.Win32Metadata.nuspec | 2 +-
.../scraper/ConstantsScraper.header.txt | 2 +-
.../tools/assets/scraper/scraper.header.txt | 2 +-
sources/MetadataUtils/Architecture.cs | 14 +
sources/MetadataUtils/EncodeHelpers.cs | 103 ++++++-
sources/MetadataUtils/RepoInfo.cs | 2 +-
.../Win32MetadataInterop/AgileAttribute.cs | 9 -
.../AlsoUsableForAttribute.cs | 14 -
.../CanReturnErrorsAsSuccessAttribute.cs | 9 -
...CanReturnMultipleSuccessValuesAttribute.cs | 9 -
.../ComOutPtrAttribute.cs | 11 -
.../Win32MetadataInterop/ConstAttribute.cs | 9 -
.../Win32MetadataInterop/ConstantAttribute.cs | 15 -
.../CppAttributeListAttribute.cs | 16 -
.../DoNotReleaseAttribute.cs | 9 -
.../Win32MetadataInterop/FreeWithAttribute.cs | 16 -
sources/Win32MetadataInterop/GuidAttribute.cs | 13 -
.../InvalidHandleValueAttribute.cs | 11 -
.../MemorySizeAttribute.cs | 13 -
.../NativeArrayInfoAttribute.cs | 27 --
.../NativeEncodingAttribute.cs | 22 --
.../NativeInheritanceAttribute.cs | 16 -
.../NativeTypeNameAttribute.cs | 22 --
.../NativeTypedefAttribute.cs | 8 -
.../NotNullTerminatedAttribute.cs | 8 -
.../NullNullTerminatedAttribute.cs | 8 -
.../Win32MetadataInterop/RAIIFreeAttribute.cs | 15 -
.../Win32MetadataInterop/ReservedAttribute.cs | 9 -
.../Win32MetadataInterop/RetValAttribute.cs | 9 -
.../ReturnsUnownedHandle.cs | 9 -
.../ScopedEnumAttribute.cs | 9 -
.../StaticLibraryAttribute.cs | 32 --
.../StructSizeFieldAttribute.cs | 14 -
.../SupportedArchitectureAttribute.cs | 23 --
.../SupportedOSPlatformAttribute.cs | 12 -
.../Win32MetadataInterop.csproj | 10 -
sources/WinmdUtils/Program.cs | 13 +-
sources/WinmdUtils/WinmdUtils.csproj | 1 -
...Microsoft.Windows.SDK.Win32Metadata.nuspec | 1 -
.../source/generated/fake/test.cs | 2 +-
108 files changed, 537 insertions(+), 549 deletions(-)
create mode 100644 generation/WinSDK/manual/Metadata.cs
create mode 100644 sources/MetadataUtils/Architecture.cs
delete mode 100644 sources/Win32MetadataInterop/AgileAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/AlsoUsableForAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/CanReturnErrorsAsSuccessAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/CanReturnMultipleSuccessValuesAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/ComOutPtrAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/ConstAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/ConstantAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/CppAttributeListAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/DoNotReleaseAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/FreeWithAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/GuidAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/InvalidHandleValueAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/MemorySizeAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NativeArrayInfoAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NativeEncodingAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NativeInheritanceAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NativeTypeNameAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NativeTypedefAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NotNullTerminatedAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/NullNullTerminatedAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/RAIIFreeAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/ReservedAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/RetValAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/ReturnsUnownedHandle.cs
delete mode 100644 sources/Win32MetadataInterop/ScopedEnumAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/StaticLibraryAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/StructSizeFieldAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/SupportedArchitectureAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/SupportedOSPlatformAttribute.cs
delete mode 100644 sources/Win32MetadataInterop/Win32MetadataInterop.csproj
diff --git a/BuildTools/BuildTools.proj b/BuildTools/BuildTools.proj
index 2f8e3718c..d59bfbf31 100644
--- a/BuildTools/BuildTools.proj
+++ b/BuildTools/BuildTools.proj
@@ -4,7 +4,6 @@
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index de3da6587..ad8aaf7fa 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -156,7 +156,7 @@ Constants are removed from the metadata when they are detected as members of an
## Attributes
-Our tooling defines several [attributes](sources/Win32MetadataInterop) that can be applied to APIs to provide useful context to language projections.
+Our tooling defines several [attributes](generation/WinSDK/manual/Metadata.cs) that can be applied to APIs to provide useful context to language projections.
To apply an attribute to an API, update the `--memberRemap` section of [emitter.settings.rsp](generation/WinSDK/emitter.settings.rsp) in one of the following ways:
diff --git a/README.md b/README.md
index 45eed3cac..07cd751d3 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Note: Community projects are listed here to help with discovery but are not offi
See the [roadmap](./docs/roadmap.md) and [FAQ](./docs/faq.md) for more details.
-If you'd like to browse the metadata to see what we're emitting, extract Windows.Win32.winmd and Windows.Win32.Interop.dll from the [Microsoft.Windows.SDK.Win32Metadata](https://www.nuget.org/packages/Microsoft.Windows.SDK.Win32Metadata/) NuGet package and load Windows.Win32.winmd in [ILSpy](https://github.com/icsharpcode/ILSpy/releases/latest). Download the package and rename it to .zip to browse and extract its content.
+If you'd like to browse the metadata to see what we're emitting, extract Windows.Win32.winmd from the [Microsoft.Windows.SDK.Win32Metadata](https://www.nuget.org/packages/Microsoft.Windows.SDK.Win32Metadata/) NuGet package and load Windows.Win32.winmd in [ILSpy](https://github.com/icsharpcode/ILSpy/releases/latest). Download the package and rename it to .zip to browse and extract its content.

diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 2d3948da9..2cfdb188d 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -169,7 +169,7 @@ jobs:
inputs:
ConnectedServiceName: 'Xlang Code Signing'
FolderPath: '$(Build.SourcesDirectory)\bin'
- Pattern: 'Windows.Win32.Interop.dll,Windows.Win32.winmd'
+ Pattern: 'Windows.Win32.winmd'
signConfigType: 'inlineSignParams'
inlineOperation: |
[
diff --git a/generation/WinSDK/manual/ApplicationInstallationAndServicing.cs b/generation/WinSDK/manual/ApplicationInstallationAndServicing.cs
index ae3ffc418..350c516a6 100644
--- a/generation/WinSDK/manual/ApplicationInstallationAndServicing.cs
+++ b/generation/WinSDK/manual/ApplicationInstallationAndServicing.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.ApplicationInstallationAndServicing
{
diff --git a/generation/WinSDK/manual/Audio.cs b/generation/WinSDK/manual/Audio.cs
index 29ca2a195..96d4ef8fc 100644
--- a/generation/WinSDK/manual/Audio.cs
+++ b/generation/WinSDK/manual/Audio.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.UI.WindowsAndMessaging.Apis;
namespace Windows.Win32.Media.Audio
diff --git a/generation/WinSDK/manual/Com.cs b/generation/WinSDK/manual/Com.cs
index 074bbde32..79fe2972e 100644
--- a/generation/WinSDK/manual/Com.cs
+++ b/generation/WinSDK/manual/Com.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.UI.Controls.Apis;
namespace Windows.Win32.System.Com
diff --git a/generation/WinSDK/manual/Console.cs b/generation/WinSDK/manual/Console.cs
index 7b0dcbb1b..353a9cf73 100644
--- a/generation/WinSDK/manual/Console.cs
+++ b/generation/WinSDK/manual/Console.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Console
{
diff --git a/generation/WinSDK/manual/Controls.cs b/generation/WinSDK/manual/Controls.cs
index a14adb98e..f8f6d39c5 100644
--- a/generation/WinSDK/manual/Controls.cs
+++ b/generation/WinSDK/manual/Controls.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.UI.Controls.Apis;
namespace Windows.Win32.UI.Controls
diff --git a/generation/WinSDK/manual/CryptCerts.cs b/generation/WinSDK/manual/CryptCerts.cs
index fbea30008..4a926ab08 100644
--- a/generation/WinSDK/manual/CryptCerts.cs
+++ b/generation/WinSDK/manual/CryptCerts.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.UI.WindowsAndMessaging.Apis;
namespace Windows.Win32.Security.Cryptography.Certificates
diff --git a/generation/WinSDK/manual/DevInst.cs b/generation/WinSDK/manual/DevInst.cs
index 823895b36..8da14f566 100644
--- a/generation/WinSDK/manual/DevInst.cs
+++ b/generation/WinSDK/manual/DevInst.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Devices.DeviceAndDriverInstallation
{
diff --git a/generation/WinSDK/manual/Dfs.cs b/generation/WinSDK/manual/Dfs.cs
index ebf2fac62..100359e88 100644
--- a/generation/WinSDK/manual/Dfs.cs
+++ b/generation/WinSDK/manual/Dfs.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Storage.IscsiDisc
{
diff --git a/generation/WinSDK/manual/Direct2D.cs b/generation/WinSDK/manual/Direct2D.cs
index efecbbd90..6110b95d6 100644
--- a/generation/WinSDK/manual/Direct2D.cs
+++ b/generation/WinSDK/manual/Direct2D.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Graphics.Direct2D
{
diff --git a/generation/WinSDK/manual/DirectWrite.cs b/generation/WinSDK/manual/DirectWrite.cs
index 2f6c9beab..c290de0fd 100644
--- a/generation/WinSDK/manual/DirectWrite.cs
+++ b/generation/WinSDK/manual/DirectWrite.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.System.SystemServices.Apis;
namespace Windows.Win32.Graphics.DirectWrite
diff --git a/generation/WinSDK/manual/Dxgi.cs b/generation/WinSDK/manual/Dxgi.cs
index 9c15f2b39..4b8986a7b 100644
--- a/generation/WinSDK/manual/Dxgi.cs
+++ b/generation/WinSDK/manual/Dxgi.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Graphics.Dxgi
{
diff --git a/generation/WinSDK/manual/ETW.cs b/generation/WinSDK/manual/ETW.cs
index 861e511b7..91bad7ea3 100644
--- a/generation/WinSDK/manual/ETW.cs
+++ b/generation/WinSDK/manual/ETW.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Diagnostics.Etw
{
diff --git a/generation/WinSDK/manual/FileSystem.cs b/generation/WinSDK/manual/FileSystem.cs
index 2cd3c46b2..1d7491a9c 100644
--- a/generation/WinSDK/manual/FileSystem.cs
+++ b/generation/WinSDK/manual/FileSystem.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Storage.FileSystem
{
diff --git a/generation/WinSDK/manual/Foundation.cs b/generation/WinSDK/manual/Foundation.cs
index 71f7f9fc5..d2487d441 100644
--- a/generation/WinSDK/manual/Foundation.cs
+++ b/generation/WinSDK/manual/Foundation.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Foundation
{
diff --git a/generation/WinSDK/manual/Gdi.cs b/generation/WinSDK/manual/Gdi.cs
index 97642d4b5..4beac98c8 100644
--- a/generation/WinSDK/manual/Gdi.cs
+++ b/generation/WinSDK/manual/Gdi.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Graphics.Gdi
{
diff --git a/generation/WinSDK/manual/HiDpi.cs b/generation/WinSDK/manual/HiDpi.cs
index a38f30c6f..aba86020b 100644
--- a/generation/WinSDK/manual/HiDpi.cs
+++ b/generation/WinSDK/manual/HiDpi.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.UI.HiDpi
{
diff --git a/generation/WinSDK/manual/Identity.cs b/generation/WinSDK/manual/Identity.cs
index f36c19367..fa96c31d6 100644
--- a/generation/WinSDK/manual/Identity.cs
+++ b/generation/WinSDK/manual/Identity.cs
@@ -1,7 +1,6 @@
using System;
using System.Runtime.InteropServices;
-
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Security.Authentication.Identity
{
diff --git a/generation/WinSDK/manual/Iis.cs b/generation/WinSDK/manual/Iis.cs
index 2ee718434..af087068f 100644
--- a/generation/WinSDK/manual/Iis.cs
+++ b/generation/WinSDK/manual/Iis.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Iis
{
diff --git a/generation/WinSDK/manual/Ioctl.cs b/generation/WinSDK/manual/Ioctl.cs
index 881c475ed..778b79c5b 100644
--- a/generation/WinSDK/manual/Ioctl.cs
+++ b/generation/WinSDK/manual/Ioctl.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Ioctl
{
diff --git a/generation/WinSDK/manual/JobObjects.cs b/generation/WinSDK/manual/JobObjects.cs
index 4557c51dc..d5beab2cb 100644
--- a/generation/WinSDK/manual/JobObjects.cs
+++ b/generation/WinSDK/manual/JobObjects.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.JobObjects
{
diff --git a/generation/WinSDK/manual/Js.cs b/generation/WinSDK/manual/Js.cs
index 8f9dd68cb..0b2f91340 100644
--- a/generation/WinSDK/manual/Js.cs
+++ b/generation/WinSDK/manual/Js.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Js
{
diff --git a/generation/WinSDK/manual/Kernel.cs b/generation/WinSDK/manual/Kernel.cs
index f74ddab9e..35333048a 100644
--- a/generation/WinSDK/manual/Kernel.cs
+++ b/generation/WinSDK/manual/Kernel.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Kernel
{
diff --git a/generation/WinSDK/manual/MediaFoundation.cs b/generation/WinSDK/manual/MediaFoundation.cs
index 61775b284..cb2114fcf 100644
--- a/generation/WinSDK/manual/MediaFoundation.cs
+++ b/generation/WinSDK/manual/MediaFoundation.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Media.MediaFoundation
{
diff --git a/generation/WinSDK/manual/Metadata.cs b/generation/WinSDK/manual/Metadata.cs
new file mode 100644
index 000000000..1a7739d96
--- /dev/null
+++ b/generation/WinSDK/manual/Metadata.cs
@@ -0,0 +1,276 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Windows.Win32.Foundation.Metadata;
+
+[AttributeUsage(AttributeTargets.Interface, AllowMultiple = false, Inherited = true)]
+public class AgileAttribute : Attribute
+{
+ public AgileAttribute()
+ {
+ }
+}
+
+public class AlsoUsableForAttribute : Attribute
+{
+ public AlsoUsableForAttribute(string otherType)
+ {
+ }
+}
+
+public class CanReturnErrorsAsSuccessAttribute : Attribute
+{
+ public CanReturnErrorsAsSuccessAttribute()
+ {
+ }
+}
+
+public class CanReturnMultipleSuccessValuesAttribute : Attribute
+{
+ public CanReturnMultipleSuccessValuesAttribute()
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+public class ComOutPtrAttribute : Attribute
+{
+ public ComOutPtrAttribute()
+ {
+ }
+}
+
+public class ConstantAttribute : Attribute
+{
+ public ConstantAttribute(String Value)
+ {
+ }
+}
+
+public class ConstAttribute : Attribute
+{
+ public ConstAttribute()
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
+[ComVisible(true)]
+public class CppAttributeList : Attribute
+{
+ public CppAttributeList(String AttributeList)
+ {
+ }
+}
+
+public class DoNotReleaseAttribute : Attribute
+{
+ public DoNotReleaseAttribute()
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
+[ComVisible(true)]
+public class FreeWithAttribute : Attribute
+{
+ public FreeWithAttribute(String Name)
+ {
+ }
+}
+
+public class GuidAttribute : Attribute
+{
+ public GuidAttribute(uint a, ushort b, ushort c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k)
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Struct, AllowMultiple = true, Inherited = true)]
+public class InvalidHandleValueAttribute : Attribute
+{
+ public InvalidHandleValueAttribute(long Value)
+ {
+ }
+}
+
+public class MemorySizeAttribute : Attribute
+{
+ public short BytesParamIndex;
+
+ public MemorySizeAttribute()
+ {
+ }
+}
+
+public class NativeArrayInfoAttribute : Attribute
+{
+ //
+ // Summary:
+ // Indicates the number of elements in the fixed-length array or the number of characters
+ // (not bytes) in a string to import.
+ public int CountConst;
+
+ //
+ // Summary:
+ // Indicates the zero-based parameter that contains the count of array elements,
+ // similar to size_is in COM.
+ public short CountParamIndex;
+
+ //
+ // Summary:
+ // Indicates the struct field name that contains the count of array elements.
+ public string CountFieldName;
+
+ public NativeArrayInfoAttribute()
+ {
+ }
+}
+
+/// Defines the encoding of a string as it was defined in the native signature.
+//[Conditional("DEBUG")]
+[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
+[ComVisible(true)]
+public class NativeEncodingAttribute : Attribute
+{
+ /// Initializes a new instance of the class.
+ /// The encoding of a string as it was defined in the native signature.
+ public NativeEncodingAttribute(String Name)
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Struct, AllowMultiple = false, Inherited = true)]
+public class NativeInheritanceAttribute : Attribute
+{
+ public NativeInheritanceAttribute(string BaseName)
+ {
+ }
+}
+
+public class NativeTypedefAttribute : Attribute
+{
+ public NativeTypedefAttribute()
+ {
+ }
+}
+
+/// Defines the type of a member as it was used in the native signature.
+//[Conditional("DEBUG")]
+[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
+[ComVisible(true)]
+public class NativeTypeNameAttribute : Attribute
+{
+ /// Initializes a new instance of the class.
+ /// The name of the type that was used in the native signature.
+ public NativeTypeNameAttribute(String Name)
+ {
+ }
+}
+
+public class NotNullTerminatedAttribute : Attribute
+{
+ public NotNullTerminatedAttribute()
+ {
+ }
+}
+
+public class NullNullTerminatedAttribute : Attribute
+{
+ public NullNullTerminatedAttribute()
+ {
+ }
+}
+
+public class PropertyKeyAttribute : Attribute
+{
+ public PropertyKeyAttribute(uint a, ushort b, ushort c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k, uint pid)
+ {
+ }
+}
+
+public class RAIIFreeAttribute : Attribute
+{
+ public RAIIFreeAttribute(string Name)
+ {
+ }
+}
+
+public class ReservedAttribute : Attribute
+{
+ public ReservedAttribute()
+ {
+ }
+}
+
+public class ReturnsUnownedHandle : Attribute
+{
+ public ReturnsUnownedHandle()
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+public class RetValAttribute : Attribute
+{
+ public RetValAttribute()
+ {
+ }
+}
+
+public class ScopedEnumAttribute : Attribute
+{
+ public ScopedEnumAttribute()
+ {
+ }
+}
+
+///
+/// Indicates that the attributed method is defined in an unmanaged static library (LIB).
+///
+[AttributeUsage(AttributeTargets.Method, Inherited = false)]
+public class StaticLibraryAttribute : Attribute
+{
+ ///
+ /// Initialize a new instance of with the name of the LIB
+ /// file that contains the definition of this method.
+ ///
+ ///
+ /// The name of the LIB file that contains the definition of this method.
+ ///
+ public StaticLibraryAttribute(string LibName)
+ {
+ }
+}
+
+public class StructSizeFieldAttribute : Attribute
+{
+ public StructSizeFieldAttribute(string field)
+ {
+ }
+}
+
+[Flags]
+public enum Architecture
+{
+ None = 0,
+ X86 = 1,
+ X64 = 2,
+ Arm64 = 4,
+ All = Architecture.X64 | Architecture.X86 | Architecture.Arm64
+}
+
+public class SupportedArchitectureAttribute : Attribute
+{
+ public SupportedArchitectureAttribute(Architecture arch)
+ {
+ }
+}
+
+[AttributeUsage(AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Method, AllowMultiple = false)]
+public class SupportedOSPlatformAttribute : Attribute
+{
+ public SupportedOSPlatformAttribute(string platform)
+ {
+ }
+}
diff --git a/generation/WinSDK/manual/Mi.cs b/generation/WinSDK/manual/Mi.cs
index ae88b5487..399e2b499 100644
--- a/generation/WinSDK/manual/Mi.cs
+++ b/generation/WinSDK/manual/Mi.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Wmi
{
diff --git a/generation/WinSDK/manual/MsCs.cs b/generation/WinSDK/manual/MsCs.cs
index 0b5b5ea07..1a927e95d 100644
--- a/generation/WinSDK/manual/MsCs.cs
+++ b/generation/WinSDK/manual/MsCs.cs
@@ -1,4 +1,4 @@
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Networking.Clustering
{
// Here becauase of: https://github.com/dotnet/ClangSharp/issues/367
diff --git a/generation/WinSDK/manual/Multimedia.cs b/generation/WinSDK/manual/Multimedia.cs
index b4225e6e6..2a751ec5f 100644
--- a/generation/WinSDK/manual/Multimedia.cs
+++ b/generation/WinSDK/manual/Multimedia.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.Media.Audio.Apis;
using static Windows.Win32.UI.WindowsAndMessaging.Apis;
diff --git a/generation/WinSDK/manual/NativeWiFi.cs b/generation/WinSDK/manual/NativeWiFi.cs
index 5971dfc29..af72c51cd 100644
--- a/generation/WinSDK/manual/NativeWiFi.cs
+++ b/generation/WinSDK/manual/NativeWiFi.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.NetworkManagement.WiFi
{
diff --git a/generation/WinSDK/manual/Ole.cs b/generation/WinSDK/manual/Ole.cs
index ab489039e..6e9f75029 100644
--- a/generation/WinSDK/manual/Ole.cs
+++ b/generation/WinSDK/manual/Ole.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.Foundation.Apis;
using static Windows.Win32.System.Diagnostics.Debug.FACILITY_CODE;
using static Windows.Win32.System.SystemServices.Apis;
diff --git a/generation/WinSDK/manual/Power.cs b/generation/WinSDK/manual/Power.cs
index e15c5f294..957b45e0f 100644
--- a/generation/WinSDK/manual/Power.cs
+++ b/generation/WinSDK/manual/Power.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Power
{
diff --git a/generation/WinSDK/manual/Printing.cs b/generation/WinSDK/manual/Printing.cs
index d5701a4f5..26f894eb8 100644
--- a/generation/WinSDK/manual/Printing.cs
+++ b/generation/WinSDK/manual/Printing.cs
@@ -2,7 +2,7 @@
using System.Runtime.InteropServices;
using Windows.Win32.Devices.Communication;
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using Windows.Win32.System.Power;
namespace Windows.Win32.Graphics.Printing
diff --git a/generation/WinSDK/manual/Registry.cs b/generation/WinSDK/manual/Registry.cs
index 86422d867..e8eab1c99 100644
--- a/generation/WinSDK/manual/Registry.cs
+++ b/generation/WinSDK/manual/Registry.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Registry
{
diff --git a/generation/WinSDK/manual/RemoteDesktop.cs b/generation/WinSDK/manual/RemoteDesktop.cs
index 40d401047..f9479298f 100644
--- a/generation/WinSDK/manual/RemoteDesktop.cs
+++ b/generation/WinSDK/manual/RemoteDesktop.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.RemoteDesktop
{
diff --git a/generation/WinSDK/manual/RestartManager.cs b/generation/WinSDK/manual/RestartManager.cs
index b6cfe6874..fc4383b33 100644
--- a/generation/WinSDK/manual/RestartManager.cs
+++ b/generation/WinSDK/manual/RestartManager.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.RestartManager
{
diff --git a/generation/WinSDK/manual/Rpc.cs b/generation/WinSDK/manual/Rpc.cs
index 6ff332819..ec8543fa6 100644
--- a/generation/WinSDK/manual/Rpc.cs
+++ b/generation/WinSDK/manual/Rpc.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Rpc
{
diff --git a/generation/WinSDK/manual/Scsi.cs b/generation/WinSDK/manual/Scsi.cs
index 71095f7c2..4d470d7bf 100644
--- a/generation/WinSDK/manual/Scsi.cs
+++ b/generation/WinSDK/manual/Scsi.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Storage.DistributedFileSystem
{
diff --git a/generation/WinSDK/manual/Security.cs b/generation/WinSDK/manual/Security.cs
index 6f30b1ac8..6078cf597 100644
--- a/generation/WinSDK/manual/Security.cs
+++ b/generation/WinSDK/manual/Security.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Security
{
diff --git a/generation/WinSDK/manual/Services.cs b/generation/WinSDK/manual/Services.cs
index 4f7217421..c61f57b23 100644
--- a/generation/WinSDK/manual/Services.cs
+++ b/generation/WinSDK/manual/Services.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Services
{
diff --git a/generation/WinSDK/manual/Shell.cs b/generation/WinSDK/manual/Shell.cs
index 500844066..ca7eb69c9 100644
--- a/generation/WinSDK/manual/Shell.cs
+++ b/generation/WinSDK/manual/Shell.cs
@@ -1,6 +1,7 @@
using System;
+using Windows.Win32.Foundation.Metadata;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
using static Windows.Win32.Foundation.Apis;
using static Windows.Win32.System.SystemServices.Apis;
diff --git a/generation/WinSDK/manual/SystemInformation.cs b/generation/WinSDK/manual/SystemInformation.cs
index 6adb36642..b50652f98 100644
--- a/generation/WinSDK/manual/SystemInformation.cs
+++ b/generation/WinSDK/manual/SystemInformation.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.SystemInformation
{
diff --git a/generation/WinSDK/manual/SystemServices.cs b/generation/WinSDK/manual/SystemServices.cs
index a1fa871a7..5e231b9b7 100644
--- a/generation/WinSDK/manual/SystemServices.cs
+++ b/generation/WinSDK/manual/SystemServices.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.SystemServices
{
diff --git a/generation/WinSDK/manual/TabletPC.cs b/generation/WinSDK/manual/TabletPC.cs
index a593339ce..baa72c8cc 100644
--- a/generation/WinSDK/manual/TabletPC.cs
+++ b/generation/WinSDK/manual/TabletPC.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.UI.TabletPC
{
diff --git a/generation/WinSDK/manual/TextServices.Manual.cs b/generation/WinSDK/manual/TextServices.Manual.cs
index 6dc429d1e..2a57598e6 100644
--- a/generation/WinSDK/manual/TextServices.Manual.cs
+++ b/generation/WinSDK/manual/TextServices.Manual.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.UI.TextServices
{
diff --git a/generation/WinSDK/manual/Threading.cs b/generation/WinSDK/manual/Threading.cs
index e6514d04f..db14ee5c4 100644
--- a/generation/WinSDK/manual/Threading.cs
+++ b/generation/WinSDK/manual/Threading.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.Threading
{
diff --git a/generation/WinSDK/manual/VirtualDiskService.cs b/generation/WinSDK/manual/VirtualDiskService.cs
index fc3f8578d..902064304 100644
--- a/generation/WinSDK/manual/VirtualDiskService.cs
+++ b/generation/WinSDK/manual/VirtualDiskService.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Storage.VirtualDiskService
{
diff --git a/generation/WinSDK/manual/WinProg.cs b/generation/WinSDK/manual/WinProg.cs
index be3e582aa..536269a62 100644
--- a/generation/WinSDK/manual/WinProg.cs
+++ b/generation/WinSDK/manual/WinProg.cs
@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.System.WindowsProgramming
{
diff --git a/generation/WinSDK/manual/WinSock.cs b/generation/WinSDK/manual/WinSock.cs
index 5a3a35caa..5febb1b5d 100644
--- a/generation/WinSDK/manual/WinSock.cs
+++ b/generation/WinSDK/manual/WinSock.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Networking.WinSock
{
diff --git a/generation/WinSDK/manual/WindowsAndMessaging.cs b/generation/WinSDK/manual/WindowsAndMessaging.cs
index 4077d69e0..626640e83 100644
--- a/generation/WinSDK/manual/WindowsAndMessaging.cs
+++ b/generation/WinSDK/manual/WindowsAndMessaging.cs
@@ -1,6 +1,6 @@
using System;
using System.Runtime.InteropServices;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.UI.WindowsAndMessaging
{
diff --git a/generation/WinSDK/scraper.header.txt b/generation/WinSDK/scraper.header.txt
index 9ffeded19..6762580b4 100644
--- a/generation/WinSDK/scraper.header.txt
+++ b/generation/WinSDK/scraper.header.txt
@@ -29,6 +29,7 @@ using Windows.Win32.Devices.Tapi;
using Windows.Win32.Devices.Usb;
using Windows.Win32.Devices.WebServicesOnDevices;
using Windows.Win32.Foundation;
+using Windows.Win32.Foundation.Metadata;
using Windows.Win32.Gaming;
using Windows.Win32.Globalization;
using Windows.Win32.Graphics.Direct2D;
diff --git a/scripts/BuildMetadataBin.ps1 b/scripts/BuildMetadataBin.ps1
index 5ebdcc440..bb8986545 100644
--- a/scripts/BuildMetadataBin.ps1
+++ b/scripts/BuildMetadataBin.ps1
@@ -27,10 +27,6 @@ if (!$skipInstallTools.IsPresent)
$assemblyVersion = nbgv get-version -v AssemblyVersion
-$metadataInteropBin = "$PSScriptRoot\..\bin\Release\netstandard2.1\Windows.Win32.Interop.dll"
-
-Copy-Item $metadataInteropBin $binDir
-
$arch = "crossarch"
$outputWinmdFileName = Get-OutputWinmdFileName -Arch $arch
diff --git a/scripts/ChangesSinceLastRelease.txt b/scripts/ChangesSinceLastRelease.txt
index f4ce2a3b3..ebdcf2e64 100644
--- a/scripts/ChangesSinceLastRelease.txt
+++ b/scripts/ChangesSinceLastRelease.txt
@@ -57,3 +57,40 @@ Windows.Win32.Security.Cryptography.BCRYPTGENRANDOM_FLAGS.BCRYPT_USE_SYSTEM_PREF
# Fixed #1526.
Windows.Win32.UI.TextServices.Apis.TF_DEFAULT_SELECTION...System.UInt64 => System.UInt32
Windows.Win32.UI.TextServices.Apis.TS_DEFAULT_SELECTION...System.UInt64 => System.UInt32
+# Fixed #1467.
+Windows.Win32.Foundation.Metadata.AgileAttribute added
+Windows.Win32.Foundation.Metadata.AlsoUsableForAttribute added
+Windows.Win32.Foundation.Metadata.Architecture added
+Windows.Win32.Foundation.Metadata.Architecture.All added
+Windows.Win32.Foundation.Metadata.Architecture.Arm64 added
+Windows.Win32.Foundation.Metadata.Architecture.None added
+Windows.Win32.Foundation.Metadata.Architecture.X64 added
+Windows.Win32.Foundation.Metadata.Architecture.X86 added
+Windows.Win32.Foundation.Metadata.CanReturnErrorsAsSuccessAttribute added
+Windows.Win32.Foundation.Metadata.CanReturnMultipleSuccessValuesAttribute added
+Windows.Win32.Foundation.Metadata.ComOutPtrAttribute added
+Windows.Win32.Foundation.Metadata.ConstantAttribute added
+Windows.Win32.Foundation.Metadata.ConstAttribute added
+Windows.Win32.Foundation.Metadata.CppAttributeList added
+Windows.Win32.Foundation.Metadata.DoNotReleaseAttribute added
+Windows.Win32.Foundation.Metadata.FreeWithAttribute added
+Windows.Win32.Foundation.Metadata.GuidAttribute added
+Windows.Win32.Foundation.Metadata.InvalidHandleValueAttribute added
+Windows.Win32.Foundation.Metadata.MemorySizeAttribute added
+Windows.Win32.Foundation.Metadata.NativeArrayInfoAttribute added
+Windows.Win32.Foundation.Metadata.NativeEncodingAttribute added
+Windows.Win32.Foundation.Metadata.NativeInheritanceAttribute added
+Windows.Win32.Foundation.Metadata.NativeTypedefAttribute added
+Windows.Win32.Foundation.Metadata.NativeTypeNameAttribute added
+Windows.Win32.Foundation.Metadata.NotNullTerminatedAttribute added
+Windows.Win32.Foundation.Metadata.NullNullTerminatedAttribute added
+Windows.Win32.Foundation.Metadata.PropertyKeyAttribute added
+Windows.Win32.Foundation.Metadata.RAIIFreeAttribute added
+Windows.Win32.Foundation.Metadata.ReservedAttribute added
+Windows.Win32.Foundation.Metadata.ReturnsUnownedHandle added
+Windows.Win32.Foundation.Metadata.RetValAttribute added
+Windows.Win32.Foundation.Metadata.ScopedEnumAttribute added
+Windows.Win32.Foundation.Metadata.StaticLibraryAttribute added
+Windows.Win32.Foundation.Metadata.StructSizeFieldAttribute added
+Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute added
+Windows.Win32.Foundation.Metadata.SupportedOSPlatformAttribute added
diff --git a/scripts/CreateUsingsForGeneratedSources.ps1 b/scripts/CreateUsingsForGeneratedSources.ps1
index 3b755e3a0..25ef7d3ca 100644
--- a/scripts/CreateUsingsForGeneratedSources.ps1
+++ b/scripts/CreateUsingsForGeneratedSources.ps1
@@ -27,7 +27,7 @@ $outputFileName = "$PSScriptRoot\..\generation\header.txt"
$stream = [System.IO.StreamWriter] $outputFileName
$stream.WriteLine("// Copyright © Microsoft")
-$stream.WriteLine("using Windows.Win32.Interop;")
+$stream.WriteLine("using Windows.Win32.Foundation.Metadata;")
$stream.WriteLine()
$sortedKeys = $namespaces.Keys | Sort-Object
diff --git a/sources/BuildTools.sln b/sources/BuildTools.sln
index 4d86c5e40..1129151c1 100644
--- a/sources/BuildTools.sln
+++ b/sources/BuildTools.sln
@@ -13,8 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClangSharpSourceToWinmd", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinmdUtils", "WinmdUtils\WinmdUtils.csproj", "{D58855C2-F427-4C4D-990A-7F932A7B4CA3}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Win32MetadataInterop", "Win32MetadataInterop\Win32MetadataInterop.csproj", "{C8AA8253-FF34-4963-9CD0-B7A4C28D33BB}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{4D4F6043-CD81-4FD3-A6E5-0A2148281E78}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetadataUtils", "MetadataUtils\MetadataUtils.csproj", "{08297558-5DC0-4ACB-A67B-3E498638AD4B}"
diff --git a/sources/ClangSharpSourceToWinmd/ClangSharpSourceCompilation.cs b/sources/ClangSharpSourceToWinmd/ClangSharpSourceCompilation.cs
index 9f89ebabd..3449ee477 100644
--- a/sources/ClangSharpSourceToWinmd/ClangSharpSourceCompilation.cs
+++ b/sources/ClangSharpSourceToWinmd/ClangSharpSourceCompilation.cs
@@ -6,7 +6,6 @@
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
-using System.Runtime.InteropServices;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -72,23 +71,23 @@ private static IEnumerable FilesToTrees(IEnumerable files)
}
}
- private static Windows.Win32.Interop.Architecture GetArchitectureForFileName(string fileName)
+ private static Architecture GetArchitectureForFileName(string fileName)
{
string potentialArch = Path.GetFileName(Path.GetDirectoryName(fileName));
switch (potentialArch)
{
case "x64":
- return Windows.Win32.Interop.Architecture.X64;
+ return Architecture.X64;
case "x86":
- return Windows.Win32.Interop.Architecture.X86;
+ return Architecture.X86;
case "arm64":
- return Windows.Win32.Interop.Architecture.Arm64;
+ return Architecture.Arm64;
default:
- return Windows.Win32.Interop.Architecture.None;
+ return Architecture.None;
}
}
@@ -96,8 +95,8 @@ private static CrossArchSyntaxMap LoadCrossArchMapFromFiles(IEnumerable
{
CrossArchSyntaxMap crossArchSyntaxMap = new CrossArchSyntaxMap();
- var nonx86Files = files.Where(f => GetArchitectureForFileName(f) == Windows.Win32.Interop.Architecture.X64 || GetArchitectureForFileName(f) == Windows.Win32.Interop.Architecture.Arm64);
- var x86Files = files.Where(f => GetArchitectureForFileName(f) == Windows.Win32.Interop.Architecture.X86);
+ var nonx86Files = files.Where(f => GetArchitectureForFileName(f) == Architecture.X64 || GetArchitectureForFileName(f) == Architecture.Arm64);
+ var x86Files = files.Where(f => GetArchitectureForFileName(f) == Architecture.X86);
// Add non-x86 first so that x86 has a chance to see if it can merge structs not marked
// with 4-byte packing with 64-bit versions that are marked. The default packing is 4
@@ -123,7 +122,6 @@ private static string GetPartitionNameFromFileName(string fileName)
public static ClangSharpSourceCompilation Create(
string sourceDirectory,
string arch,
- string interopFileName,
Dictionary remaps,
Dictionary> enumAdditions,
IEnumerable enumsMakeFlags,
@@ -151,7 +149,6 @@ public static ClangSharpSourceCompilation Create(
}
List refs = new List();
- refs.Add(MetadataReference.CreateFromFile(interopFileName));
refs.Add(MetadataReference.CreateFromFile(netstandardPath));
if (addedRefs != null)
@@ -238,7 +235,7 @@ public static ClangSharpSourceCompilation Create(
watch.Restart();
List filesToMerge = new List();
- foreach (string x86FileName in modifiedFiles.Where(f => GetArchitectureForFileName(f) == Windows.Win32.Interop.Architecture.X86))
+ foreach (string x86FileName in modifiedFiles.Where(f => GetArchitectureForFileName(f) == Architecture.X86))
{
string x64FileName = x86FileName.Replace(@"\x86\", @"\x64\", StringComparison.OrdinalIgnoreCase);
string arm64FileName = x86FileName.Replace(@"\x86\", @"\arm64\", StringComparison.OrdinalIgnoreCase);
@@ -268,7 +265,7 @@ public static ClangSharpSourceCompilation Create(
HashSet nonX86TreesUsedForX86 = crossArchSyntaxMap.Get64BitTreesUsedForX86();
CrossArchTreeMerger crossArchTreeMerger = new CrossArchTreeMerger(crossArchSyntaxMap);
- System.Threading.Tasks.Parallel.ForEach(FilesToTrees(filesToMerge.Where(f => GetArchitectureForFileName(f) == Windows.Win32.Interop.Architecture.X86)), opt, (x86Tree) =>
+ System.Threading.Tasks.Parallel.ForEach(FilesToTrees(filesToMerge.Where(f => GetArchitectureForFileName(f) == Architecture.X86)), opt, (x86Tree) =>
{
string x64FileName = x86Tree.FilePath.Replace(@"\x86\", @"\x64\", StringComparison.OrdinalIgnoreCase);
string arm64FileName = x86Tree.FilePath.Replace(@"\x86\", @"\arm64\", StringComparison.OrdinalIgnoreCase);
diff --git a/sources/ClangSharpSourceToWinmd/ClangSharpSourceToWinmd.csproj b/sources/ClangSharpSourceToWinmd/ClangSharpSourceToWinmd.csproj
index ba4294a81..a897daf89 100644
--- a/sources/ClangSharpSourceToWinmd/ClangSharpSourceToWinmd.csproj
+++ b/sources/ClangSharpSourceToWinmd/ClangSharpSourceToWinmd.csproj
@@ -20,7 +20,6 @@
-
diff --git a/sources/ClangSharpSourceToWinmd/ClangSharpSourceWinmdGenerator.cs b/sources/ClangSharpSourceToWinmd/ClangSharpSourceWinmdGenerator.cs
index 34aa131d1..20e17ff91 100644
--- a/sources/ClangSharpSourceToWinmd/ClangSharpSourceWinmdGenerator.cs
+++ b/sources/ClangSharpSourceToWinmd/ClangSharpSourceWinmdGenerator.cs
@@ -9,15 +9,16 @@
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Reflection.Metadata.Ecma335;
using System.Reflection.Metadata;
+using System.Reflection.Metadata.Ecma335;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
+using MetadataUtils;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-using MetadataUtils;
+using Newtonsoft.Json.Linq;
namespace ClangSharpSourceToWinmd
{
@@ -26,13 +27,11 @@ public class ClangSharpSourceWinmdGenerator
public const string Win32WideStringType = "Windows.Win32.Foundation.PWSTR";
public const string Win32StringType = "Windows.Win32.Foundation.PSTR";
- private const string InteropNamespace = "Windows.Win32.Interop";
private const string ScannedSuffix = "__scanned__";
private const string RemovePrefix = "__remove__";
private const string ForceConstPrefix = "__forceconst__";
private const string SystemAssemblyName = "netstandard";
- private const string Win32InteropAssemblyName = "Windows.Win32.Interop";
private const string Win32MetadataAssemblyName = "Windows.Win32.winmd";
private static readonly Regex TypeImportRegex = new Regex(@"<(([^,]+),\s*Version=(\d+\.\d+\.\d+\.\d+),\s*Culture=([^,]+),\s*PublicKeyToken=([^>]+))>(\S+)");
@@ -100,7 +99,7 @@ private ClangSharpSourceWinmdGenerator(
void VerifySymbolsLoadedByCompiler()
{
- string[] standardSymbolNames = new string[] { "System.Object", "System.Attribute", $"{InteropNamespace}.ConstAttribute" };
+ string[] standardSymbolNames = new string[] { "System.Object", "System.Attribute" };
foreach (var name in standardSymbolNames)
{
@@ -157,17 +156,6 @@ void InitReferences()
default);
this.assemblyNamesToRefHandles[SystemAssemblyName] = systemAssemblyRef;
- var interopAssembly = this.compilation.ReferencedAssemblyNames.ToList().Find(a => a.Name == Win32InteropAssemblyName);
- var interopAssemblyRef =
- this.metadataBuilder.AddAssemblyReference(
- this.metadataBuilder.GetOrAddString(InteropNamespace),
- interopAssembly.Version,
- default,
- this.metadataBuilder.GetOrAddBlob(interopAssembly.PublicKeyToken),
- default,
- default);
- this.assemblyNamesToRefHandles[Win32InteropAssemblyName] = interopAssemblyRef;
-
var win32Assembly = this.compilation.ReferencedAssemblyNames.ToList().Find(a => a.Name == Win32MetadataAssemblyName);
if (win32Assembly != null)
{
@@ -257,7 +245,7 @@ private static string GetQualifiedName(string @namespace, string name)
private static bool HasGuidAttribute(SyntaxList attributeLists)
{
- bool ret = attributeLists.Any(list => list.Attributes.Any(attr => attr.Name.ToString() == "Windows.Win32.Interop.Guid"));
+ bool ret = attributeLists.Any(list => list.Attributes.Any(attr => attr.Name.ToString() == "Windows.Win32.Foundation.Metadata.Guid"));
return ret;
}
@@ -597,10 +585,6 @@ private EntityHandle GetTypeReference(string @namespace, string name, EntityHand
{
scopeRef = this.assemblyNamesToRefHandles[SystemAssemblyName];
}
- else if (@namespace.StartsWith(InteropNamespace))
- {
- scopeRef = this.assemblyNamesToRefHandles[Win32InteropAssemblyName];
- }
else
{
scopeRef = this.moduleRef;
@@ -971,7 +955,7 @@ private ITypeSymbol GetTypeFromShortName(string name)
if (!fixedName.Contains("."))
{
- foreach (string @namespace in new string[] { InteropNamespace, "System" })
+ foreach (string @namespace in new string[] { "System" })
{
var fullNameToCheck = GetQualifiedName(@namespace, fixedName);
ret = this.compilation.GetTypeByMetadataName(fullNameToCheck);
@@ -1263,11 +1247,16 @@ private FieldDefinitionHandle WriteClassFields(ClassDeclarationSyntax node)
if (!fieldSymbol.IsConst)
{
- fieldAttributes = FieldAttributes.Public | FieldAttributes.Static;
+ fieldAttributes = FieldAttributes.Public;
- if (!HasGuidAttribute(field.AttributeLists) && !HasConstantAttribute(field.AttributeLists))
+ if (node.BaseList?.Types[0]?.ToString() != "Attribute")
{
- continue;
+ fieldAttributes |= FieldAttributes.Static;
+
+ if (!HasGuidAttribute(field.AttributeLists) && !HasConstantAttribute(field.AttributeLists))
+ {
+ continue;
+ }
}
if (fieldSymbol.Name.StartsWith("IID_"))
@@ -1352,6 +1341,25 @@ private MethodDefinitionHandle WriteClassMethods(ClassDeclarationSyntax node)
MethodDefinitionHandle firstMethod = default;
string classFullName = this.GetFullNameForSymbol(classSymbol);
+ foreach (ConstructorDeclarationSyntax constructor in node.Members.Where(m => m is ConstructorDeclarationSyntax))
+ {
+ var symbol = model.GetDeclaredSymbol(constructor);
+
+ MethodImplAttributes methodImplAttributes = MethodImplAttributes.Managed;
+ var methodDef =
+ this.AddMethodViaSymbol(
+ symbol,
+ MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName,
+ methodImplAttributes,
+ false,
+ false);
+
+ if (firstMethod.IsNil)
+ {
+ firstMethod = methodDef;
+ }
+ }
+
foreach (MethodDeclarationSyntax method in node.Members.Where(m => m is MethodDeclarationSyntax))
{
var symbol = model.GetDeclaredSymbol(method);
@@ -1476,7 +1484,8 @@ private void WriteClassDef(ClassDeclarationSyntax node)
var name = node.Identifier.ValueText;
string fullName = symbol.ConstructedFrom.ToString();
- TypeAttributes typeAttributes = TypeAttributes.Public | TypeAttributes.AutoClass | TypeAttributes.Abstract | TypeAttributes.Sealed | TypeAttributes.BeforeFieldInit;
+ TypeAttributes typeAttributes = TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.AutoClass | TypeAttributes.BeforeFieldInit;
+ typeAttributes |= node.BaseList is null ? TypeAttributes.Abstract : TypeAttributes.Class;
if (methodDefinition.IsNil)
{
@@ -1493,10 +1502,12 @@ private void WriteClassDef(ClassDeclarationSyntax node)
typeAttributes,
nsHandle,
this.metadataBuilder.GetOrAddString(name),
- this.GetTypeReference("System", "Object"),
+ this.GetTypeReference("System", node.BaseList is null ? "Object" : node.BaseList.Types[0].ToString()),
fieldList: fieldDefinition,
methodList: methodDefinition);
+ this.AddCustomAttributes(symbol.GetAttributes(), destTypeDefHandle);
+
this.namesToTypeDefHandles[fullName] = destTypeDefHandle;
}
diff --git a/sources/ClangSharpSourceToWinmd/CrossArchSyntaxMap.cs b/sources/ClangSharpSourceToWinmd/CrossArchSyntaxMap.cs
index 8f3eca8ac..691a9afdd 100644
--- a/sources/ClangSharpSourceToWinmd/CrossArchSyntaxMap.cs
+++ b/sources/ClangSharpSourceToWinmd/CrossArchSyntaxMap.cs
@@ -1,11 +1,11 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Windows.Win32.Interop;
using MetadataUtils;
namespace ClangSharpSourceToWinmd
diff --git a/sources/ClangSharpSourceToWinmd/CrossArchTreeMerger.cs b/sources/ClangSharpSourceToWinmd/CrossArchTreeMerger.cs
index f4718bc1a..5efedf933 100644
--- a/sources/ClangSharpSourceToWinmd/CrossArchTreeMerger.cs
+++ b/sources/ClangSharpSourceToWinmd/CrossArchTreeMerger.cs
@@ -6,7 +6,6 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Windows.Win32.Interop;
using MetadataUtils;
namespace ClangSharpSourceToWinmd
@@ -235,7 +234,7 @@ private static string FormatArch(Architecture arch)
ret.Append(" | ");
}
- ret.Append($"Windows.Win32.Interop.Architecture.{val}");
+ ret.Append($"Windows.Win32.Foundation.Metadata.Architecture.{val}");
}
}
diff --git a/sources/ClangSharpSourceToWinmd/MetadataSyntaxTreeCleaner.cs b/sources/ClangSharpSourceToWinmd/MetadataSyntaxTreeCleaner.cs
index a3c033b3b..ad66bfa55 100644
--- a/sources/ClangSharpSourceToWinmd/MetadataSyntaxTreeCleaner.cs
+++ b/sources/ClangSharpSourceToWinmd/MetadataSyntaxTreeCleaner.cs
@@ -292,7 +292,7 @@ public override SyntaxNode VisitFieldDeclaration(FieldDeclarationSyntax node)
SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
- SyntaxFactory.ParseName("Windows.Win32.Interop.Guid"),
+ SyntaxFactory.ParseName("Windows.Win32.Foundation.Metadata.Guid"),
SyntaxFactory.ParseAttributeArgumentList(argsFormatted))));
node = node.AddAttributeLists(attrsList).WithLeadingTrivia(node.GetLeadingTrivia());
diff --git a/sources/ClangSharpSourceToWinmd/NativeTypedefStructsCreator.cs b/sources/ClangSharpSourceToWinmd/NativeTypedefStructsCreator.cs
index 7fd8d6ed3..47c52ba25 100644
--- a/sources/ClangSharpSourceToWinmd/NativeTypedefStructsCreator.cs
+++ b/sources/ClangSharpSourceToWinmd/NativeTypedefStructsCreator.cs
@@ -11,7 +11,7 @@ public static void WriteToStream(Dictionary methodNamesToNamespa
using var writer = new StreamWriter(output, leaveOpen: true);
writer.Write(
@"using System;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
");
string currentNamespace = null;
diff --git a/sources/ClangSharpSourceToWinmd/Program.cs b/sources/ClangSharpSourceToWinmd/Program.cs
index 0d115cfbf..7acba2bd7 100644
--- a/sources/ClangSharpSourceToWinmd/Program.cs
+++ b/sources/ClangSharpSourceToWinmd/Program.cs
@@ -23,7 +23,6 @@ public static int Main(string[] args)
{
new Option("--sourceDir", "The location of the source files.") { IsRequired = true },
new Option("--arch", () => "x64", "The CPU architecture."),
- new Option("--interopFileName", "The path to Windows.Win32.Interop.dll") { IsRequired = true },
new Option("--outputFileName", "The path to the .winmd to create") { IsRequired = true },
new Option("--version", description: "The version to use on the .winmd", getDefaultValue: () => "1.0.0.0"),
new Option("--memberRemap", "Remaps fields and parameters by adding attributes or changing the type.", ArgumentArity.OneOrMore),
@@ -48,7 +47,6 @@ public static int Run(InvocationContext context)
{
string sourceDirectory = context.ParseResult.ValueForOption("--sourceDir");
string arch = context.ParseResult.ValueForOption("--arch");
- string interopFileName = context.ParseResult.ValueForOption("--interopFileName");
string outputFileName = context.ParseResult.ValueForOption("--outputFileName");
string version = context.ParseResult.ValueForOption("--version");
var remappedNameValuePairs = context.ParseResult.ValueForOption("--memberRemap");
@@ -118,7 +116,7 @@ public static int Run(InvocationContext context)
ClangSharpSourceCompilation clangSharpCompliation =
ClangSharpSourceCompilation.Create(
- sourceDirectory, arch, interopFileName, remaps, enumAdditions, enumMakeFlags, typeImports, requiredNamespaces, reducePointerLevels, refs, staticLibs);
+ sourceDirectory, arch, remaps, enumAdditions, enumMakeFlags, typeImports, requiredNamespaces, reducePointerLevels, refs, staticLibs);
System.Diagnostics.Stopwatch errorsWatch = System.Diagnostics.Stopwatch.StartNew();
Console.WriteLine(" Looking for compilation errors...");
diff --git a/sources/ClangSharpSourceToWinmd/Properties/launchSettings.json b/sources/ClangSharpSourceToWinmd/Properties/launchSettings.json
index 3e78f5d59..68f8251b1 100644
--- a/sources/ClangSharpSourceToWinmd/Properties/launchSettings.json
+++ b/sources/ClangSharpSourceToWinmd/Properties/launchSettings.json
@@ -2,15 +2,15 @@
"profiles": {
"ClangSharpSourceToWinmd": {
"commandName": "Project",
- "commandLineArgs": "--sourceDir $(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated --arch crossarch --interopFileName $(ProjectDir)..\\..\\bin\\Windows.Win32.Interop.dll --version 1.0.0.0 --outputFileName $(ProjectDir)..\\..\\bin\\Windows.Win32.winmd --autoTypes $(ProjectDir)..\\..\\generation\\WinSDK\\autoTypes.json @$(ProjectDir)..\\..\\generation\\WinSDK\\emitter.settings.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\requiredNamespacesForNames.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\emitter.functionPointerFixups.generated.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\enumsMakeFlags.generated.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\enumsRemap.rsp"
+ "commandLineArgs": "--sourceDir $(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated --arch crossarch --version 1.0.0.0 --outputFileName $(ProjectDir)..\\..\\bin\\Windows.Win32.winmd --autoTypes $(ProjectDir)..\\..\\generation\\WinSDK\\autoTypes.json @$(ProjectDir)..\\..\\generation\\WinSDK\\emitter.settings.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\requiredNamespacesForNames.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\emitter.functionPointerFixups.generated.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\enumsMakeFlags.generated.rsp @$(ProjectDir)..\\..\\generation\\WinSDK\\obj\\generated\\enumsRemap.rsp"
},
"TestSource": {
"commandName": "Project",
- "commandLineArgs": "--sourceDir $(ProjectDir)..\\..\\tests\\SourceToWinmd\\source --arch fake --interopFileName $(ProjectDir)..\\Win32MetadataInterop\\bin\\Debug\\netstandard2.1\\Windows.Win32.Interop.dll --outputFileName $(ProjectDir)..\\..\\bin\\Test.winmd --version 10.0.15000.3-preview @$(ProjectDir)..\\..\\tests\\SourceToWinmd\\generation\\remap.rsp"
+ "commandLineArgs": "--sourceDir $(ProjectDir)..\\..\\tests\\SourceToWinmd\\source --arch fake --outputFileName $(ProjectDir)..\\..\\bin\\Test.winmd --version 10.0.15000.3-preview @$(ProjectDir)..\\..\\tests\\SourceToWinmd\\generation\\remap.rsp"
},
"Debug winmd builder": {
"commandName": "Project",
- "commandLineArgs": "--sourceDir D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped --arch crossarch --interopFileName D:\\repos\\win32metadata\\bin\\Windows.Win32.Interop.dll --version 1.0.0.0 --outputFileName D:\\repos\\win32metadata\\bin\\Windows.Win32.winmd --autoTypes D:\\repos\\win32metadata\\generation\\autoTypes.json \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\emitter.remap.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\requiredNamespacesForNames.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\emitter.functionPointerFixups.generated.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped\\enumsMakeFlags.generated.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped\\enumsRemap.rsp\" "
+ "commandLineArgs": "--sourceDir D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped --arch crossarch --version 1.0.0.0 --outputFileName D:\\repos\\win32metadata\\bin\\Windows.Win32.winmd --autoTypes D:\\repos\\win32metadata\\generation\\autoTypes.json \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\emitter.remap.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\requiredNamespacesForNames.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\emitter.functionPointerFixups.generated.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped\\enumsMakeFlags.generated.rsp\" \"@D:\\repos\\win32metadata\\generation\\Windows.Win32\\obj\\scraped\\enumsRemap.rsp\" "
}
}
}
\ No newline at end of file
diff --git a/sources/GeneratorSdk/MetadataTasks/EmitWinmd.cs b/sources/GeneratorSdk/MetadataTasks/EmitWinmd.cs
index 1399f1897..7d04ccddc 100644
--- a/sources/GeneratorSdk/MetadataTasks/EmitWinmd.cs
+++ b/sources/GeneratorSdk/MetadataTasks/EmitWinmd.cs
@@ -61,7 +61,6 @@ protected override string GenerateCommandLineCommands()
var builder = new CommandLineBuilder();
builder.AppendFileNameIfNotNull(Path.Combine(this.ToolsBinDir, "ClangSharpSourceToWinmd.dll"));
- string interopPath = Path.Combine(this.Win32WinmdBinDir, "Windows.Win32.Interop.dll");
string win32WinmdPath = Path.Combine(this.Win32WinmdBinDir, "Windows.Win32.winmd");
this.outputWinmdFullPath = this.OutputWinmd;
@@ -72,7 +71,6 @@ protected override string GenerateCommandLineCommands()
builder.AppendSwitchIfNotNull("--sourceDir ", this.EmitterSourceDir);
builder.AppendSwitchIfNotNull("--arch ", "crossarch");
- builder.AppendSwitchIfNotNull("--interopFileName ", interopPath);
if (!StringComparer.OrdinalIgnoreCase.Equals(
Path.GetFileName(this.outputWinmdFullPath),
diff --git a/sources/GeneratorSdk/samples/DiaSdk/Dia.manual.cs b/sources/GeneratorSdk/samples/DiaSdk/Dia.manual.cs
index 65dce33d4..983bffbdd 100644
--- a/sources/GeneratorSdk/samples/DiaSdk/Dia.manual.cs
+++ b/sources/GeneratorSdk/samples/DiaSdk/Dia.manual.cs
@@ -1,5 +1,5 @@
using Windows.Win32.Foundation;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Microsoft.Dia
{
diff --git a/sources/GeneratorSdk/samples/DiaSdk/Microsoft.Dia.Win32Metadata.nuspec b/sources/GeneratorSdk/samples/DiaSdk/Microsoft.Dia.Win32Metadata.nuspec
index e9a1d01b1..34b88dfc5 100644
--- a/sources/GeneratorSdk/samples/DiaSdk/Microsoft.Dia.Win32Metadata.nuspec
+++ b/sources/GeneratorSdk/samples/DiaSdk/Microsoft.Dia.Win32Metadata.nuspec
@@ -17,7 +17,7 @@
images\windows.png
-
+
diff --git a/sources/GeneratorSdk/tools/assets/scraper/ConstantsScraper.header.txt b/sources/GeneratorSdk/tools/assets/scraper/ConstantsScraper.header.txt
index 55813e5f5..3f38a92e1 100644
--- a/sources/GeneratorSdk/tools/assets/scraper/ConstantsScraper.header.txt
+++ b/sources/GeneratorSdk/tools/assets/scraper/ConstantsScraper.header.txt
@@ -1,2 +1,2 @@
using System;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
diff --git a/sources/GeneratorSdk/tools/assets/scraper/scraper.header.txt b/sources/GeneratorSdk/tools/assets/scraper/scraper.header.txt
index 4b1b6f47a..dca2e81b8 100644
--- a/sources/GeneratorSdk/tools/assets/scraper/scraper.header.txt
+++ b/sources/GeneratorSdk/tools/assets/scraper/scraper.header.txt
@@ -1,2 +1,2 @@
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
diff --git a/sources/MetadataUtils/Architecture.cs b/sources/MetadataUtils/Architecture.cs
new file mode 100644
index 000000000..7ab7be09e
--- /dev/null
+++ b/sources/MetadataUtils/Architecture.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace MetadataUtils
+{
+ [Flags]
+ public enum Architecture
+ {
+ None = 0,
+ X86 = 1,
+ X64 = 2,
+ Arm64 = 4,
+ All = Architecture.X64 | Architecture.X86 | Architecture.Arm64
+ }
+}
\ No newline at end of file
diff --git a/sources/MetadataUtils/EncodeHelpers.cs b/sources/MetadataUtils/EncodeHelpers.cs
index f01210aad..d30874fef 100644
--- a/sources/MetadataUtils/EncodeHelpers.cs
+++ b/sources/MetadataUtils/EncodeHelpers.cs
@@ -207,23 +207,47 @@ public static void NamedArgumentType(this NamedArgumentTypeEncoder encoder, INam
{
var fieldMembers = attributeType.GetMembers(field);
var fieldSymbol = fieldMembers.First() as IFieldSymbol;
+ var propertySymbol = fieldMembers.First() as IPropertySymbol;
- if (fieldSymbol.Type.SpecialType == SpecialType.System_Object)
+ if (fieldSymbol != null)
{
- encoder.Object();
- }
- else if (fieldSymbol.Type.SpecialType == SpecialType.System_Array)
- {
- // TODO array type encoder
- encoder.SZArray();
- }
- else if (fieldSymbol.Type.TypeKind == TypeKind.Enum)
- {
- encoder.ScalarType().Enum(fieldSymbol.Type.ToString());
+ if (fieldSymbol.Type.SpecialType == SpecialType.System_Object)
+ {
+ encoder.Object();
+ }
+ else if (fieldSymbol.Type.SpecialType == SpecialType.System_Array)
+ {
+ // TODO array type encoder
+ encoder.SZArray();
+ }
+ else if (fieldSymbol.Type.TypeKind == TypeKind.Enum)
+ {
+ encoder.ScalarType().Enum(fieldSymbol.Type.ToString());
+ }
+ else
+ {
+ encoder.ScalarType().CustomElementType(fieldSymbol);
+ }
}
- else
+ else if (propertySymbol != null)
{
- encoder.ScalarType().CustomElementType(fieldSymbol);
+ if (propertySymbol.Type.SpecialType == SpecialType.System_Object)
+ {
+ encoder.Object();
+ }
+ else if (propertySymbol.Type.SpecialType == SpecialType.System_Array)
+ {
+ // TODO array type encoder
+ encoder.SZArray();
+ }
+ else if (propertySymbol.Type.TypeKind == TypeKind.Enum)
+ {
+ encoder.ScalarType().Enum(propertySymbol.Type.ToString());
+ }
+ else
+ {
+ encoder.ScalarType().CustomElementType(propertySymbol);
+ }
}
}
@@ -278,6 +302,57 @@ public static void CustomElementType(this CustomAttributeElementTypeEncoder type
}
}
+ public static void CustomElementType(this CustomAttributeElementTypeEncoder typeEncoder, IPropertySymbol property)
+ {
+ switch (property.Type.SpecialType)
+ {
+ case SpecialType.System_Boolean:
+ typeEncoder.Boolean();
+ break;
+ case SpecialType.System_Byte:
+ typeEncoder.Byte();
+ break;
+ case SpecialType.System_Int16:
+ typeEncoder.Int16();
+ break;
+ case SpecialType.System_Int32:
+ typeEncoder.Int32();
+ break;
+ case SpecialType.System_Int64:
+ typeEncoder.Int64();
+ break;
+ case SpecialType.System_UInt16:
+ typeEncoder.UInt16();
+ break;
+ case SpecialType.System_UInt32:
+ typeEncoder.UInt32();
+ break;
+ case SpecialType.System_UInt64:
+ typeEncoder.UInt64();
+ break;
+ case SpecialType.System_Single:
+ typeEncoder.Single();
+ break;
+ case SpecialType.System_Double:
+ typeEncoder.Double();
+ break;
+ case SpecialType.System_Char:
+ typeEncoder.Char();
+ break;
+ case SpecialType.System_String:
+ typeEncoder.String();
+ break;
+ case SpecialType.System_Enum:
+ typeEncoder.Enum(property.Type.ToString());
+ break;
+ case SpecialType.System_SByte:
+ typeEncoder.SByte();
+ break;
+ default:
+ throw new NotImplementedException();
+ }
+ }
+
public static void NamedArguments(
this CustomAttributeNamedArgumentsEncoder argumentsEncoder,
INamedTypeSymbol attributeType,
@@ -325,7 +400,7 @@ public static AttributeListSyntax ConvertGuidToAttributeList(Guid guid)
SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
- SyntaxFactory.ParseName("Windows.Win32.Interop.Guid"),
+ SyntaxFactory.ParseName("Windows.Win32.Foundation.Metadata.Guid"),
SyntaxFactory.ParseAttributeArgumentList(args))));
}
}
diff --git a/sources/MetadataUtils/RepoInfo.cs b/sources/MetadataUtils/RepoInfo.cs
index d71a73f52..5548f830e 100644
--- a/sources/MetadataUtils/RepoInfo.cs
+++ b/sources/MetadataUtils/RepoInfo.cs
@@ -34,7 +34,7 @@ public void UpdateGeneratedSourceHeader()
using (StreamWriter streamWriter = new StreamWriter(headerPath))
{
streamWriter.WriteLine("// Copyright © Microsoft");
- streamWriter.WriteLine("using Windows.Win32.Interop");
+ streamWriter.WriteLine("using Windows.Win32.Foundation.Metadata");
streamWriter.WriteLine();
foreach (var partInfo in this.GetPartitionInfos())
diff --git a/sources/Win32MetadataInterop/AgileAttribute.cs b/sources/Win32MetadataInterop/AgileAttribute.cs
deleted file mode 100644
index 6ea5019bc..000000000
--- a/sources/Win32MetadataInterop/AgileAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Interface, AllowMultiple = false, Inherited = true)]
- public sealed class AgileAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/AlsoUsableForAttribute.cs b/sources/Win32MetadataInterop/AlsoUsableForAttribute.cs
deleted file mode 100644
index de33084ab..000000000
--- a/sources/Win32MetadataInterop/AlsoUsableForAttribute.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Windows.Win32.Interop
-{
- public class AlsoUsableForAttribute : Attribute
- {
- public AlsoUsableForAttribute(string otherType)
- {
-
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/CanReturnErrorsAsSuccessAttribute.cs b/sources/Win32MetadataInterop/CanReturnErrorsAsSuccessAttribute.cs
deleted file mode 100644
index f4ab4ac01..000000000
--- a/sources/Win32MetadataInterop/CanReturnErrorsAsSuccessAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class CanReturnErrorsAsSuccessAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/CanReturnMultipleSuccessValuesAttribute.cs b/sources/Win32MetadataInterop/CanReturnMultipleSuccessValuesAttribute.cs
deleted file mode 100644
index 4e3c15b82..000000000
--- a/sources/Win32MetadataInterop/CanReturnMultipleSuccessValuesAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class CanReturnMultipleSuccessValuesAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/ComOutPtrAttribute.cs b/sources/Win32MetadataInterop/ComOutPtrAttribute.cs
deleted file mode 100644
index 7e501368b..000000000
--- a/sources/Win32MetadataInterop/ComOutPtrAttribute.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
- public sealed class ComOutPtrAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/ConstAttribute.cs b/sources/Win32MetadataInterop/ConstAttribute.cs
deleted file mode 100644
index 67a764643..000000000
--- a/sources/Win32MetadataInterop/ConstAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class ConstAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/ConstantAttribute.cs b/sources/Win32MetadataInterop/ConstantAttribute.cs
deleted file mode 100644
index e2334dd32..000000000
--- a/sources/Win32MetadataInterop/ConstantAttribute.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class ConstantAttribute : Attribute
- {
- public ConstantAttribute(String value)
- {
- this.Value = value;
- }
-
- public string Value { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/CppAttributeListAttribute.cs b/sources/Win32MetadataInterop/CppAttributeListAttribute.cs
deleted file mode 100644
index 29865c1d5..000000000
--- a/sources/Win32MetadataInterop/CppAttributeListAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class CppAttributeList : Attribute
- {
- public CppAttributeList(String attributeList)
- {
- this.AttributeList = attributeList;
- }
-
- public string AttributeList { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/DoNotReleaseAttribute.cs b/sources/Win32MetadataInterop/DoNotReleaseAttribute.cs
deleted file mode 100644
index 25c3efa0e..000000000
--- a/sources/Win32MetadataInterop/DoNotReleaseAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class DoNotReleaseAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/FreeWithAttribute.cs b/sources/Win32MetadataInterop/FreeWithAttribute.cs
deleted file mode 100644
index e71181855..000000000
--- a/sources/Win32MetadataInterop/FreeWithAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class FreeWithAttribute : Attribute
- {
- public FreeWithAttribute(String name)
- {
- this.Name = name;
- }
-
- public string Name { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/GuidAttribute.cs b/sources/Win32MetadataInterop/GuidAttribute.cs
deleted file mode 100644
index 2ea0c4db0..000000000
--- a/sources/Win32MetadataInterop/GuidAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Windows.Win32.Interop
-{
- public class GuidAttribute : Attribute
- {
- public GuidAttribute(uint a, ushort b, ushort c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k)
- {
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/InvalidHandleValueAttribute.cs b/sources/Win32MetadataInterop/InvalidHandleValueAttribute.cs
deleted file mode 100644
index 0726c7276..000000000
--- a/sources/Win32MetadataInterop/InvalidHandleValueAttribute.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Struct, AllowMultiple = true, Inherited = true)]
- public class InvalidHandleValueAttribute : Attribute
- {
- public InvalidHandleValueAttribute(long value) => this.Value = value;
- public long Value { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/MemorySizeAttribute.cs b/sources/Win32MetadataInterop/MemorySizeAttribute.cs
deleted file mode 100644
index 9c6c22427..000000000
--- a/sources/Win32MetadataInterop/MemorySizeAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class MemorySizeAttribute : Attribute
- {
- public short BytesParamIndex;
- public MemorySizeAttribute()
- {
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/NativeArrayInfoAttribute.cs b/sources/Win32MetadataInterop/NativeArrayInfoAttribute.cs
deleted file mode 100644
index 47bff9696..000000000
--- a/sources/Win32MetadataInterop/NativeArrayInfoAttribute.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class NativeArrayInfoAttribute : Attribute
- {
- //
- // Summary:
- // Indicates the number of elements in the fixed-length array or the number of characters
- // (not bytes) in a string to import.
- public int CountConst;
- //
- // Summary:
- // Indicates the zero-based parameter that contains the count of array elements,
- // similar to size_is in COM.
- public short CountParamIndex;
- //
- // Summary:
- // Indicates the struct field name that contains the count of array elements.
- public string CountFieldName;
-
- public NativeArrayInfoAttribute()
- {
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/NativeEncodingAttribute.cs b/sources/Win32MetadataInterop/NativeEncodingAttribute.cs
deleted file mode 100644
index 27736142b..000000000
--- a/sources/Win32MetadataInterop/NativeEncodingAttribute.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace Windows.Win32.Interop
-{
- /// Defines the encoding of a string as it was defined in the native signature.
- //[Conditional("DEBUG")]
- [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class NativeEncodingAttribute : Attribute
- {
- /// Initializes a new instance of the class.
- /// The encoding of a string as it was defined in the native signature.
- public NativeEncodingAttribute(String name)
- {
- this.Name = name;
- }
-
- /// Gets the encoding of a string as it was defined in the native signature.
- public string Name { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/NativeInheritanceAttribute.cs b/sources/Win32MetadataInterop/NativeInheritanceAttribute.cs
deleted file mode 100644
index 963826f6e..000000000
--- a/sources/Win32MetadataInterop/NativeInheritanceAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Struct, AllowMultiple = false, Inherited = true)]
- public sealed class NativeInheritanceAttribute : Attribute
- {
- public NativeInheritanceAttribute(string baseName)
- {
- this.BaseName = BaseName;
- }
-
- public string BaseName { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/NativeTypeNameAttribute.cs b/sources/Win32MetadataInterop/NativeTypeNameAttribute.cs
deleted file mode 100644
index 9267f7aad..000000000
--- a/sources/Win32MetadataInterop/NativeTypeNameAttribute.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace Windows.Win32.Interop
-{
- /// Defines the type of a member as it was used in the native signature.
- //[Conditional("DEBUG")]
- [AttributeUsage(AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class NativeTypeNameAttribute : Attribute
- {
- /// Initializes a new instance of the class.
- /// The name of the type that was used in the native signature.
- public NativeTypeNameAttribute(String name)
- {
- this.Name = name;
- }
-
- /// Gets the name of the type that was used in the native signature.
- public string Name { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/NativeTypedefAttribute.cs b/sources/Win32MetadataInterop/NativeTypedefAttribute.cs
deleted file mode 100644
index 8050fb039..000000000
--- a/sources/Win32MetadataInterop/NativeTypedefAttribute.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- public class NativeTypedefAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/NotNullTerminatedAttribute.cs b/sources/Win32MetadataInterop/NotNullTerminatedAttribute.cs
deleted file mode 100644
index 3aa9b7fbb..000000000
--- a/sources/Win32MetadataInterop/NotNullTerminatedAttribute.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- public class NotNullTerminatedAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/NullNullTerminatedAttribute.cs b/sources/Win32MetadataInterop/NullNullTerminatedAttribute.cs
deleted file mode 100644
index 82ab8f20f..000000000
--- a/sources/Win32MetadataInterop/NullNullTerminatedAttribute.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- public class NullNullTerminatedAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/RAIIFreeAttribute.cs b/sources/Win32MetadataInterop/RAIIFreeAttribute.cs
deleted file mode 100644
index 5a0d1c38c..000000000
--- a/sources/Win32MetadataInterop/RAIIFreeAttribute.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- public class RAIIFreeAttribute : Attribute
- {
- public RAIIFreeAttribute(string name)
- {
- this.Name = name;
- }
-
- /// Gets the name of the type that was used in the native signature.
- public string Name { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/ReservedAttribute.cs b/sources/Win32MetadataInterop/ReservedAttribute.cs
deleted file mode 100644
index e06722a8a..000000000
--- a/sources/Win32MetadataInterop/ReservedAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class ReservedAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/RetValAttribute.cs b/sources/Win32MetadataInterop/RetValAttribute.cs
deleted file mode 100644
index bb0b20bea..000000000
--- a/sources/Win32MetadataInterop/RetValAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
- public sealed class RetValAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/ReturnsUnownedHandle.cs b/sources/Win32MetadataInterop/ReturnsUnownedHandle.cs
deleted file mode 100644
index f46b8e044..000000000
--- a/sources/Win32MetadataInterop/ReturnsUnownedHandle.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class ReturnsUnownedHandle : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/ScopedEnumAttribute.cs b/sources/Win32MetadataInterop/ScopedEnumAttribute.cs
deleted file mode 100644
index f46d95e8c..000000000
--- a/sources/Win32MetadataInterop/ScopedEnumAttribute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace Windows.Win32.Interop
-{
- public class ScopedEnumAttribute : Attribute
- {
- }
-}
diff --git a/sources/Win32MetadataInterop/StaticLibraryAttribute.cs b/sources/Win32MetadataInterop/StaticLibraryAttribute.cs
deleted file mode 100644
index 79a3dfada..000000000
--- a/sources/Win32MetadataInterop/StaticLibraryAttribute.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- ///
- /// Indicates that the attributed method is defined in an unmanaged static library (LIB).
- ///
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- public class StaticLibraryAttribute : Attribute
- {
- ///
- /// Initialize a new instance of with the name of the LIB
- /// file that contains the definition of this method.
- ///
- ///
- /// The name of the LIB file that contains the definition of this method.
- ///
- public StaticLibraryAttribute(string libName)
- {
- this.Value = libName;
- }
-
- ///
- /// Gets the name of a static library which may be substituted for the
- /// DLL.
- ///
- ///
- /// The name of the LIB file that contains the definition of this entry point.
- ///
- public string Value { get; }
- }
-}
diff --git a/sources/Win32MetadataInterop/StructSizeFieldAttribute.cs b/sources/Win32MetadataInterop/StructSizeFieldAttribute.cs
deleted file mode 100644
index a60e9afaf..000000000
--- a/sources/Win32MetadataInterop/StructSizeFieldAttribute.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Windows.Win32.Interop
-{
- public class StructSizeFieldAttribute : Attribute
- {
- public StructSizeFieldAttribute(string field)
- {
-
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/SupportedArchitectureAttribute.cs b/sources/Win32MetadataInterop/SupportedArchitectureAttribute.cs
deleted file mode 100644
index fa3cd9c70..000000000
--- a/sources/Win32MetadataInterop/SupportedArchitectureAttribute.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Windows.Win32.Interop
-{
- [Flags]
- public enum Architecture
- {
- None = 0,
- X86 = 1,
- X64 = 2,
- Arm64 = 4,
- All = Architecture.X64 | Architecture.X86 | Architecture.Arm64
- }
-
- public class SupportedArchitectureAttribute : Attribute
- {
- public SupportedArchitectureAttribute(Architecture arch)
- {
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/SupportedOSPlatformAttribute.cs b/sources/Win32MetadataInterop/SupportedOSPlatformAttribute.cs
deleted file mode 100644
index cea2a8596..000000000
--- a/sources/Win32MetadataInterop/SupportedOSPlatformAttribute.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-
-namespace Windows.Win32.Interop
-{
- [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Method, AllowMultiple = false)]
- public class SupportedOSPlatformAttribute : Attribute
- {
- public SupportedOSPlatformAttribute(string platform)
- {
- }
- }
-}
diff --git a/sources/Win32MetadataInterop/Win32MetadataInterop.csproj b/sources/Win32MetadataInterop/Win32MetadataInterop.csproj
deleted file mode 100644
index 0d00fa646..000000000
--- a/sources/Win32MetadataInterop/Win32MetadataInterop.csproj
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- netstandard2.1
- Windows.Win32.Interop
- Windows.Win32.Interop
- true
- 1701;1702;0649
-
-
diff --git a/sources/WinmdUtils/Program.cs b/sources/WinmdUtils/Program.cs
index 757968527..20d0aec4f 100644
--- a/sources/WinmdUtils/Program.cs
+++ b/sources/WinmdUtils/Program.cs
@@ -15,7 +15,6 @@
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using MetadataUtils;
-using Windows.Win32.Interop;
namespace WinmdUtilsProgram
{
@@ -724,7 +723,7 @@ public static int ShowEmptyDelegates(FileInfo winmd, string[] allowItem, IConsol
private static string GetArchInfo(IEnumerable attributes)
{
- var archAttr = attributes.FirstOrDefault(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute");
+ var archAttr = attributes.FirstOrDefault(a => a.AttributeType.Name == "SupportedArchitectureAttribute");
if (archAttr != null)
{
Architecture arch = (Architecture)archAttr.FixedArguments[0].Value;
@@ -769,7 +768,7 @@ private static bool VerifyTypeHasRightArch(
foreach (var archType in foundArchTypes)
{
var typeArchAttr =
- archType.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute");
+ archType.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute");
var typeArch = (Architecture)typeArchAttr.FixedArguments[0].Value;
typeArches |= typeArch;
@@ -821,7 +820,7 @@ public static int ShowBrokenArchTypes(FileInfo winmd, IConsole console)
foreach (var type in winmd1.GetTopLevelTypeDefinitions()
.Where(t => t.GetAttributes()
- .Any(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute")))
+ .Any(a => a.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute")))
{
if (!namesToArchDefs.TryGetValue(type.FullName, out var list))
{
@@ -834,7 +833,7 @@ public static int ShowBrokenArchTypes(FileInfo winmd, IConsole console)
foreach (var type in namesToArchDefs.SelectMany(map => map.Value))
{
- var archAttr = type.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute");
+ var archAttr = type.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute");
Architecture arch = (Architecture)archAttr.FixedArguments[0].Value;
if (!VerifyTypeHasRightArch(namesToArchDefs, type, type, arch, console))
@@ -847,9 +846,9 @@ public static int ShowBrokenArchTypes(FileInfo winmd, IConsole console)
{
foreach (var method in apisClass.Methods.Where(
m => m.IsStatic && m.DeclaringType == apisClass && m.GetAttributes()
- .Any(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute")))
+ .Any(a => a.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute")))
{
- var archAttr = method.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Interop.SupportedArchitectureAttribute");
+ var archAttr = method.GetAttributes().Single(a => a.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.SupportedArchitectureAttribute");
Architecture arch = (Architecture)archAttr.FixedArguments[0].Value;
foreach (var param in method.Parameters)
diff --git a/sources/WinmdUtils/WinmdUtils.csproj b/sources/WinmdUtils/WinmdUtils.csproj
index 54f4b4206..9d661c530 100644
--- a/sources/WinmdUtils/WinmdUtils.csproj
+++ b/sources/WinmdUtils/WinmdUtils.csproj
@@ -12,7 +12,6 @@
-
diff --git a/sources/nuget/Microsoft.Windows.SDK.Win32Metadata/Microsoft.Windows.SDK.Win32Metadata.nuspec b/sources/nuget/Microsoft.Windows.SDK.Win32Metadata/Microsoft.Windows.SDK.Win32Metadata.nuspec
index 19fe5da69..4e4896b33 100644
--- a/sources/nuget/Microsoft.Windows.SDK.Win32Metadata/Microsoft.Windows.SDK.Win32Metadata.nuspec
+++ b/sources/nuget/Microsoft.Windows.SDK.Win32Metadata/Microsoft.Windows.SDK.Win32Metadata.nuspec
@@ -23,7 +23,6 @@
-
diff --git a/tests/SourceToWinmd/source/generated/fake/test.cs b/tests/SourceToWinmd/source/generated/fake/test.cs
index 81b29c26e..3e0fb4971 100644
--- a/tests/SourceToWinmd/source/generated/fake/test.cs
+++ b/tests/SourceToWinmd/source/generated/fake/test.cs
@@ -5,7 +5,7 @@
using Windows.Win32.Foundation;
using Windows.Win32.System.Memory;
-using Windows.Win32.Interop;
+using Windows.Win32.Foundation.Metadata;
namespace Windows.Win32.Test
{