headers: Import relogger.idl and windowscontracts.idl from Wine.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index dedf305..2ddd726 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -225,6 +225,7 @@
   include/mmstream.idl \
   include/qedit.idl \
   include/qnetwork.idl \
+  include/relogger.idl \
   include/vmr9.idl \
   include/wincodec.idl \
   include/wincodecsdk.idl \
@@ -246,6 +247,7 @@
   include/windows.storage.streams.idl \
   include/windows.system.idl \
   include/windows.system.threading.idl \
+  include/windowscontracts.idl \
   include/wmcodecdsp.idl \
   include/wmdrmsdk.idl \
   include/wpcapi.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 7221351..d1ad190 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -527,6 +527,7 @@
 @HAVE_WIDL_TRUE@  include/mmstream.idl \
 @HAVE_WIDL_TRUE@  include/qedit.idl \
 @HAVE_WIDL_TRUE@  include/qnetwork.idl \
+@HAVE_WIDL_TRUE@  include/relogger.idl \
 @HAVE_WIDL_TRUE@  include/vmr9.idl \
 @HAVE_WIDL_TRUE@  include/wincodec.idl \
 @HAVE_WIDL_TRUE@  include/wincodecsdk.idl \
@@ -548,6 +549,7 @@
 @HAVE_WIDL_TRUE@  include/windows.storage.streams.idl \
 @HAVE_WIDL_TRUE@  include/windows.system.idl \
 @HAVE_WIDL_TRUE@  include/windows.system.threading.idl \
+@HAVE_WIDL_TRUE@  include/windowscontracts.idl \
 @HAVE_WIDL_TRUE@  include/wmcodecdsp.idl \
 @HAVE_WIDL_TRUE@  include/wmdrmsdk.idl \
 @HAVE_WIDL_TRUE@  include/wpcapi.idl \
diff --git a/mingw-w64-headers/include/relogger.h b/mingw-w64-headers/include/relogger.h
new file mode 100644
index 0000000..1f38414
--- /dev/null
+++ b/mingw-w64-headers/include/relogger.h
@@ -0,0 +1,636 @@
+/*** Autogenerated by WIDL 6.2 from include/relogger.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __relogger_h__
+#define __relogger_h__
+
+/* Forward declarations */
+
+#ifndef __ITraceEvent_FWD_DEFINED__
+#define __ITraceEvent_FWD_DEFINED__
+typedef interface ITraceEvent ITraceEvent;
+#ifdef __cplusplus
+interface ITraceEvent;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ITraceEventCallback_FWD_DEFINED__
+#define __ITraceEventCallback_FWD_DEFINED__
+typedef interface ITraceEventCallback ITraceEventCallback;
+#ifdef __cplusplus
+interface ITraceEventCallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ITraceRelogger_FWD_DEFINED__
+#define __ITraceRelogger_FWD_DEFINED__
+typedef interface ITraceRelogger ITraceRelogger;
+#ifdef __cplusplus
+interface ITraceRelogger;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __CTraceRelogger_FWD_DEFINED__
+#define __CTraceRelogger_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CTraceRelogger CTraceRelogger;
+#else
+typedef struct CTraceRelogger CTraceRelogger;
+#endif /* defined __cplusplus */
+#endif /* defined __CTraceRelogger_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _EVENT_DESCRIPTOR {
+    USHORT Id;
+    UCHAR Version;
+    UCHAR Channel;
+    UCHAR Level;
+    UCHAR Opcode;
+    USHORT Task;
+    ULONGLONG Keyword;
+} EVENT_DESCRIPTOR;
+typedef struct _EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+typedef struct _EVENT_HEADER {
+    USHORT Size;
+    USHORT HeaderType;
+    USHORT Flags;
+    USHORT EventProperty;
+    ULONG ThreadId;
+    ULONG ProcessId;
+    LARGE_INTEGER TimeStamp;
+    GUID ProviderId;
+    EVENT_DESCRIPTOR EventDescriptor;
+    union {
+        struct {
+            ULONG KernelTime;
+            ULONG UserTime;
+        } DUMMYSTRUCTNAME;
+        ULONG64 ProcessorTime;
+    } DUMMYUNIONNAME;
+    GUID ActivityId;
+} EVENT_HEADER;
+typedef struct _EVENT_HEADER *PEVENT_HEADER;
+typedef struct _ETW_BUFFER_CONTEXT {
+    union {
+        struct {
+            UCHAR ProcessorNumber;
+            UCHAR Alignment;
+        } DUMMYSTRUCTNAME;
+        USHORT ProcessorIndex;
+    } DUMMYUNIONNAME;
+    USHORT LoggerId;
+} ETW_BUFFER_CONTEXT;
+typedef struct _ETW_BUFFER_CONTEXT *PETW_BUFFER_CONTEXT;
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM {
+    USHORT Reserved1;
+    USHORT ExtType;
+    USHORT Linkage;
+    USHORT DataSize;
+    ULONGLONG DataPtr;
+} EVENT_HEADER_EXTENDED_DATA_ITEM;
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM *PEVENT_HEADER_EXTENDED_DATA_ITEM;
+typedef struct _EVENT_RECORD {
+    EVENT_HEADER EventHeader;
+    ETW_BUFFER_CONTEXT BufferContext;
+    USHORT ExtendedDataCount;
+    USHORT UserDataLength;
+    EVENT_HEADER_EXTENDED_DATA_ITEM *ExtendedData;
+    void *UserData;
+    void *UserContext;
+} EVENT_RECORD;
+typedef struct _EVENT_RECORD *PEVENT_RECORD;
+typedef ULONG64 TRACEHANDLE;
+typedef ULONG64 *PTRACEHANDLE;
+/*****************************************************************************
+ * ITraceEvent interface
+ */
+#ifndef __ITraceEvent_INTERFACE_DEFINED__
+#define __ITraceEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceEvent, 0x8cc97f40, 0x9028, 0x4ff3, 0x9b,0x62, 0x7d,0x1f,0x79,0xca,0x7b,0xcb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8cc97f40-9028-4ff3-9b62-7d1f79ca7bcb")
+ITraceEvent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        ITraceEvent **NewEvent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserContext(
+        void **UserContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEventRecord(
+        PEVENT_RECORD *EventRecord) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPayload(
+        BYTE *Payload,
+        ULONG PayloadSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEventDescriptor(
+        PCEVENT_DESCRIPTOR EventDescriptor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProcessId(
+        ULONG ProcessId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProcessorIndex(
+        ULONG ProcessorIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetThreadId(
+        ULONG ThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetThreadTimes(
+        ULONG KernelTime,
+        ULONG UserTime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetActivityId(
+        LPCGUID ActivityId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTimeStamp(
+        LARGE_INTEGER *TimeStamp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProviderId(
+        LPCGUID ProviderId) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceEvent, 0x8cc97f40, 0x9028, 0x4ff3, 0x9b,0x62, 0x7d,0x1f,0x79,0xca,0x7b,0xcb)
+#endif
+#else
+typedef struct ITraceEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceEvent *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceEvent *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceEvent *This);
+
+    /*** ITraceEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ITraceEvent *This,
+        ITraceEvent **NewEvent);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserContext)(
+        ITraceEvent *This,
+        void **UserContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventRecord)(
+        ITraceEvent *This,
+        PEVENT_RECORD *EventRecord);
+
+    HRESULT (STDMETHODCALLTYPE *SetPayload)(
+        ITraceEvent *This,
+        BYTE *Payload,
+        ULONG PayloadSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetEventDescriptor)(
+        ITraceEvent *This,
+        PCEVENT_DESCRIPTOR EventDescriptor);
+
+    HRESULT (STDMETHODCALLTYPE *SetProcessId)(
+        ITraceEvent *This,
+        ULONG ProcessId);
+
+    HRESULT (STDMETHODCALLTYPE *SetProcessorIndex)(
+        ITraceEvent *This,
+        ULONG ProcessorIndex);
+
+    HRESULT (STDMETHODCALLTYPE *SetThreadId)(
+        ITraceEvent *This,
+        ULONG ThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *SetThreadTimes)(
+        ITraceEvent *This,
+        ULONG KernelTime,
+        ULONG UserTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetActivityId)(
+        ITraceEvent *This,
+        LPCGUID ActivityId);
+
+    HRESULT (STDMETHODCALLTYPE *SetTimeStamp)(
+        ITraceEvent *This,
+        LARGE_INTEGER *TimeStamp);
+
+    HRESULT (STDMETHODCALLTYPE *SetProviderId)(
+        ITraceEvent *This,
+        LPCGUID ProviderId);
+
+    END_INTERFACE
+} ITraceEventVtbl;
+
+interface ITraceEvent {
+    CONST_VTBL ITraceEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceEvent methods ***/
+#define ITraceEvent_Clone(This,NewEvent) (This)->lpVtbl->Clone(This,NewEvent)
+#define ITraceEvent_GetUserContext(This,UserContext) (This)->lpVtbl->GetUserContext(This,UserContext)
+#define ITraceEvent_GetEventRecord(This,EventRecord) (This)->lpVtbl->GetEventRecord(This,EventRecord)
+#define ITraceEvent_SetPayload(This,Payload,PayloadSize) (This)->lpVtbl->SetPayload(This,Payload,PayloadSize)
+#define ITraceEvent_SetEventDescriptor(This,EventDescriptor) (This)->lpVtbl->SetEventDescriptor(This,EventDescriptor)
+#define ITraceEvent_SetProcessId(This,ProcessId) (This)->lpVtbl->SetProcessId(This,ProcessId)
+#define ITraceEvent_SetProcessorIndex(This,ProcessorIndex) (This)->lpVtbl->SetProcessorIndex(This,ProcessorIndex)
+#define ITraceEvent_SetThreadId(This,ThreadId) (This)->lpVtbl->SetThreadId(This,ThreadId)
+#define ITraceEvent_SetThreadTimes(This,KernelTime,UserTime) (This)->lpVtbl->SetThreadTimes(This,KernelTime,UserTime)
+#define ITraceEvent_SetActivityId(This,ActivityId) (This)->lpVtbl->SetActivityId(This,ActivityId)
+#define ITraceEvent_SetTimeStamp(This,TimeStamp) (This)->lpVtbl->SetTimeStamp(This,TimeStamp)
+#define ITraceEvent_SetProviderId(This,ProviderId) (This)->lpVtbl->SetProviderId(This,ProviderId)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceEvent_QueryInterface(ITraceEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceEvent_AddRef(ITraceEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceEvent_Release(ITraceEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceEvent methods ***/
+static FORCEINLINE HRESULT ITraceEvent_Clone(ITraceEvent* This,ITraceEvent **NewEvent) {
+    return This->lpVtbl->Clone(This,NewEvent);
+}
+static FORCEINLINE HRESULT ITraceEvent_GetUserContext(ITraceEvent* This,void **UserContext) {
+    return This->lpVtbl->GetUserContext(This,UserContext);
+}
+static FORCEINLINE HRESULT ITraceEvent_GetEventRecord(ITraceEvent* This,PEVENT_RECORD *EventRecord) {
+    return This->lpVtbl->GetEventRecord(This,EventRecord);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetPayload(ITraceEvent* This,BYTE *Payload,ULONG PayloadSize) {
+    return This->lpVtbl->SetPayload(This,Payload,PayloadSize);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetEventDescriptor(ITraceEvent* This,PCEVENT_DESCRIPTOR EventDescriptor) {
+    return This->lpVtbl->SetEventDescriptor(This,EventDescriptor);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProcessId(ITraceEvent* This,ULONG ProcessId) {
+    return This->lpVtbl->SetProcessId(This,ProcessId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProcessorIndex(ITraceEvent* This,ULONG ProcessorIndex) {
+    return This->lpVtbl->SetProcessorIndex(This,ProcessorIndex);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetThreadId(ITraceEvent* This,ULONG ThreadId) {
+    return This->lpVtbl->SetThreadId(This,ThreadId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetThreadTimes(ITraceEvent* This,ULONG KernelTime,ULONG UserTime) {
+    return This->lpVtbl->SetThreadTimes(This,KernelTime,UserTime);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetActivityId(ITraceEvent* This,LPCGUID ActivityId) {
+    return This->lpVtbl->SetActivityId(This,ActivityId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetTimeStamp(ITraceEvent* This,LARGE_INTEGER *TimeStamp) {
+    return This->lpVtbl->SetTimeStamp(This,TimeStamp);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProviderId(ITraceEvent* This,LPCGUID ProviderId) {
+    return This->lpVtbl->SetProviderId(This,ProviderId);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceEvent_INTERFACE_DEFINED__ */
+
+#ifndef __ITraceRelogger_FWD_DEFINED__
+#define __ITraceRelogger_FWD_DEFINED__
+typedef interface ITraceRelogger ITraceRelogger;
+#ifdef __cplusplus
+interface ITraceRelogger;
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * ITraceEventCallback interface
+ */
+#ifndef __ITraceEventCallback_INTERFACE_DEFINED__
+#define __ITraceEventCallback_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceEventCallback, 0x3ed25501, 0x593f, 0x43e9, 0x8f,0x38, 0x3a,0xb4,0x6f,0x5a,0x4a,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3ed25501-593f-43e9-8f38-3ab46f5a4a52")
+ITraceEventCallback : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnBeginProcessTrace(
+        ITraceEvent *HeaderEvent,
+        ITraceRelogger *Relogger) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnFinalizeProcessTrace(
+        ITraceRelogger *Relogger) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnEvent(
+        ITraceEvent *Event,
+        ITraceRelogger *Relogger) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceEventCallback, 0x3ed25501, 0x593f, 0x43e9, 0x8f,0x38, 0x3a,0xb4,0x6f,0x5a,0x4a,0x52)
+#endif
+#else
+typedef struct ITraceEventCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceEventCallback *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceEventCallback *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceEventCallback *This);
+
+    /*** ITraceEventCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnBeginProcessTrace)(
+        ITraceEventCallback *This,
+        ITraceEvent *HeaderEvent,
+        ITraceRelogger *Relogger);
+
+    HRESULT (STDMETHODCALLTYPE *OnFinalizeProcessTrace)(
+        ITraceEventCallback *This,
+        ITraceRelogger *Relogger);
+
+    HRESULT (STDMETHODCALLTYPE *OnEvent)(
+        ITraceEventCallback *This,
+        ITraceEvent *Event,
+        ITraceRelogger *Relogger);
+
+    END_INTERFACE
+} ITraceEventCallbackVtbl;
+
+interface ITraceEventCallback {
+    CONST_VTBL ITraceEventCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceEventCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceEventCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceEventCallback_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceEventCallback methods ***/
+#define ITraceEventCallback_OnBeginProcessTrace(This,HeaderEvent,Relogger) (This)->lpVtbl->OnBeginProcessTrace(This,HeaderEvent,Relogger)
+#define ITraceEventCallback_OnFinalizeProcessTrace(This,Relogger) (This)->lpVtbl->OnFinalizeProcessTrace(This,Relogger)
+#define ITraceEventCallback_OnEvent(This,Event,Relogger) (This)->lpVtbl->OnEvent(This,Event,Relogger)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceEventCallback_QueryInterface(ITraceEventCallback* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceEventCallback_AddRef(ITraceEventCallback* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceEventCallback_Release(ITraceEventCallback* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceEventCallback methods ***/
+static FORCEINLINE HRESULT ITraceEventCallback_OnBeginProcessTrace(ITraceEventCallback* This,ITraceEvent *HeaderEvent,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnBeginProcessTrace(This,HeaderEvent,Relogger);
+}
+static FORCEINLINE HRESULT ITraceEventCallback_OnFinalizeProcessTrace(ITraceEventCallback* This,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnFinalizeProcessTrace(This,Relogger);
+}
+static FORCEINLINE HRESULT ITraceEventCallback_OnEvent(ITraceEventCallback* This,ITraceEvent *Event,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnEvent(This,Event,Relogger);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceEventCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITraceRelogger interface
+ */
+#ifndef __ITraceRelogger_INTERFACE_DEFINED__
+#define __ITraceRelogger_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceRelogger, 0xf754ad43, 0x3bcc, 0x4286, 0x80,0x09, 0x9c,0x5d,0xa2,0x14,0xe8,0x4e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f754ad43-3bcc-4286-8009-9c5da214e84e")
+ITraceRelogger : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddLogfileTraceStream(
+        BSTR LogfileName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddRealtimeTraceStream(
+        BSTR LoggerName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterCallback(
+        ITraceEventCallback *Callback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Inject(
+        ITraceEvent *Event) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateEventInstance(
+        TRACEHANDLE TraceHandle,
+        ULONG Flags,
+        ITraceEvent **Event) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessTrace(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputFilename(
+        BSTR LogfileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCompressionMode(
+        BOOLEAN CompressionMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceRelogger, 0xf754ad43, 0x3bcc, 0x4286, 0x80,0x09, 0x9c,0x5d,0xa2,0x14,0xe8,0x4e)
+#endif
+#else
+typedef struct ITraceReloggerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceRelogger *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceRelogger *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceRelogger *This);
+
+    /*** ITraceRelogger methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddLogfileTraceStream)(
+        ITraceRelogger *This,
+        BSTR LogfileName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle);
+
+    HRESULT (STDMETHODCALLTYPE *AddRealtimeTraceStream)(
+        ITraceRelogger *This,
+        BSTR LoggerName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterCallback)(
+        ITraceRelogger *This,
+        ITraceEventCallback *Callback);
+
+    HRESULT (STDMETHODCALLTYPE *Inject)(
+        ITraceRelogger *This,
+        ITraceEvent *Event);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEventInstance)(
+        ITraceRelogger *This,
+        TRACEHANDLE TraceHandle,
+        ULONG Flags,
+        ITraceEvent **Event);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessTrace)(
+        ITraceRelogger *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilename)(
+        ITraceRelogger *This,
+        BSTR LogfileName);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompressionMode)(
+        ITraceRelogger *This,
+        BOOLEAN CompressionMode);
+
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        ITraceRelogger *This);
+
+    END_INTERFACE
+} ITraceReloggerVtbl;
+
+interface ITraceRelogger {
+    CONST_VTBL ITraceReloggerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceRelogger_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceRelogger_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceRelogger_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceRelogger methods ***/
+#define ITraceRelogger_AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle) (This)->lpVtbl->AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle)
+#define ITraceRelogger_AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle) (This)->lpVtbl->AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle)
+#define ITraceRelogger_RegisterCallback(This,Callback) (This)->lpVtbl->RegisterCallback(This,Callback)
+#define ITraceRelogger_Inject(This,Event) (This)->lpVtbl->Inject(This,Event)
+#define ITraceRelogger_CreateEventInstance(This,TraceHandle,Flags,Event) (This)->lpVtbl->CreateEventInstance(This,TraceHandle,Flags,Event)
+#define ITraceRelogger_ProcessTrace(This) (This)->lpVtbl->ProcessTrace(This)
+#define ITraceRelogger_SetOutputFilename(This,LogfileName) (This)->lpVtbl->SetOutputFilename(This,LogfileName)
+#define ITraceRelogger_SetCompressionMode(This,CompressionMode) (This)->lpVtbl->SetCompressionMode(This,CompressionMode)
+#define ITraceRelogger_Cancel(This) (This)->lpVtbl->Cancel(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceRelogger_QueryInterface(ITraceRelogger* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceRelogger_AddRef(ITraceRelogger* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceRelogger_Release(ITraceRelogger* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceRelogger methods ***/
+static FORCEINLINE HRESULT ITraceRelogger_AddLogfileTraceStream(ITraceRelogger* This,BSTR LogfileName,void *UserContext,TRACEHANDLE *TraceHandle) {
+    return This->lpVtbl->AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle);
+}
+static FORCEINLINE HRESULT ITraceRelogger_AddRealtimeTraceStream(ITraceRelogger* This,BSTR LoggerName,void *UserContext,TRACEHANDLE *TraceHandle) {
+    return This->lpVtbl->AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle);
+}
+static FORCEINLINE HRESULT ITraceRelogger_RegisterCallback(ITraceRelogger* This,ITraceEventCallback *Callback) {
+    return This->lpVtbl->RegisterCallback(This,Callback);
+}
+static FORCEINLINE HRESULT ITraceRelogger_Inject(ITraceRelogger* This,ITraceEvent *Event) {
+    return This->lpVtbl->Inject(This,Event);
+}
+static FORCEINLINE HRESULT ITraceRelogger_CreateEventInstance(ITraceRelogger* This,TRACEHANDLE TraceHandle,ULONG Flags,ITraceEvent **Event) {
+    return This->lpVtbl->CreateEventInstance(This,TraceHandle,Flags,Event);
+}
+static FORCEINLINE HRESULT ITraceRelogger_ProcessTrace(ITraceRelogger* This) {
+    return This->lpVtbl->ProcessTrace(This);
+}
+static FORCEINLINE HRESULT ITraceRelogger_SetOutputFilename(ITraceRelogger* This,BSTR LogfileName) {
+    return This->lpVtbl->SetOutputFilename(This,LogfileName);
+}
+static FORCEINLINE HRESULT ITraceRelogger_SetCompressionMode(ITraceRelogger* This,BOOLEAN CompressionMode) {
+    return This->lpVtbl->SetCompressionMode(This,CompressionMode);
+}
+static FORCEINLINE HRESULT ITraceRelogger_Cancel(ITraceRelogger* This) {
+    return This->lpVtbl->Cancel(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceRelogger_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * CTraceRelogger coclass
+ */
+
+DEFINE_GUID(CLSID_CTraceRelogger, 0x7b40792d, 0x05ff, 0x44c4, 0x90,0x58, 0xf4,0x40,0xc7,0x1f,0x17,0xd4);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("7b40792d-05ff-44c4-9058-f440c71f17d4") CTraceRelogger;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CTraceRelogger, 0x7b40792d, 0x05ff, 0x44c4, 0x90,0x58, 0xf4,0x40,0xc7,0x1f,0x17,0xd4)
+#endif
+#endif
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __relogger_h__ */
diff --git a/mingw-w64-headers/include/relogger.idl b/mingw-w64-headers/include/relogger.idl
new file mode 100644
index 0000000..60e0451
--- /dev/null
+++ b/mingw-w64-headers/include/relogger.idl
@@ -0,0 +1,184 @@
+/*
+ * Copyright 2021 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#endif
+
+typedef struct _EVENT_DESCRIPTOR
+{
+    USHORT     Id;
+    UCHAR      Version;
+    UCHAR      Channel;
+    UCHAR      Level;
+    UCHAR      Opcode;
+    USHORT     Task;
+    ULONGLONG  Keyword;
+} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_HEADER
+{
+    USHORT            Size;
+    USHORT            HeaderType;
+    USHORT            Flags;
+    USHORT            EventProperty;
+    ULONG             ThreadId;
+    ULONG             ProcessId;
+    LARGE_INTEGER     TimeStamp;
+    GUID              ProviderId;
+    EVENT_DESCRIPTOR  EventDescriptor;
+    union {
+        struct {
+            ULONG     KernelTime;
+            ULONG     UserTime;
+        } DUMMYSTRUCTNAME;
+        ULONG64       ProcessorTime;
+    } DUMMYUNIONNAME;
+    GUID              ActivityId;
+} EVENT_HEADER, *PEVENT_HEADER;
+
+typedef struct _ETW_BUFFER_CONTEXT
+{
+    union {
+        struct {
+            UCHAR ProcessorNumber;
+            UCHAR Alignment;
+        } DUMMYSTRUCTNAME;
+        USHORT ProcessorIndex;
+    } DUMMYUNIONNAME;
+    USHORT LoggerId;
+} ETW_BUFFER_CONTEXT, *PETW_BUFFER_CONTEXT;
+
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM
+{
+    USHORT     Reserved1;
+    USHORT     ExtType;
+    USHORT     Linkage;
+    USHORT     DataSize;
+    ULONGLONG  DataPtr;
+} EVENT_HEADER_EXTENDED_DATA_ITEM, *PEVENT_HEADER_EXTENDED_DATA_ITEM;
+
+typedef struct _EVENT_RECORD
+{
+    EVENT_HEADER                      EventHeader;
+    ETW_BUFFER_CONTEXT                BufferContext;
+    USHORT                            ExtendedDataCount;
+    USHORT                            UserDataLength;
+    EVENT_HEADER_EXTENDED_DATA_ITEM  *ExtendedData;
+    void                             *UserData;
+    void                             *UserContext;
+} EVENT_RECORD, *PEVENT_RECORD;
+
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+
+[
+    object,
+    uuid(8cc97f40-9028-4ff3-9b62-7d1f79ca7bcb),
+    local
+]
+interface ITraceEvent : IUnknown
+{
+    HRESULT Clone([out, retval] ITraceEvent **NewEvent);
+
+    HRESULT GetUserContext([out, retval] void **UserContext);
+
+    HRESULT GetEventRecord([out, retval] PEVENT_RECORD *EventRecord);
+
+    HRESULT SetPayload([in, size_is(PayloadSize)] BYTE *Payload,
+                       [in] ULONG PayloadSize);
+
+    HRESULT SetEventDescriptor([in] PCEVENT_DESCRIPTOR EventDescriptor);
+
+    HRESULT SetProcessId([in] ULONG ProcessId);
+
+    HRESULT SetProcessorIndex([in] ULONG ProcessorIndex);
+
+    HRESULT SetThreadId([in] ULONG ThreadId);
+
+    HRESULT SetThreadTimes([in] ULONG KernelTime,
+                           [in] ULONG UserTime);
+
+    HRESULT SetActivityId([in] LPCGUID ActivityId);
+
+    HRESULT SetTimeStamp([in] LARGE_INTEGER *TimeStamp);
+
+    HRESULT SetProviderId([in] LPCGUID ProviderId);
+}
+
+interface ITraceRelogger;
+
+[
+    object,
+    uuid(3ed25501-593f-43e9-8f38-3ab46f5a4a52)
+]
+interface ITraceEventCallback : IUnknown
+{
+    HRESULT OnBeginProcessTrace([in] ITraceEvent *HeaderEvent,
+                                [in] ITraceRelogger *Relogger);
+
+    HRESULT OnFinalizeProcessTrace([in] ITraceRelogger *Relogger);
+
+    HRESULT OnEvent([in] ITraceEvent *Event,
+                    [in] ITraceRelogger *Relogger);
+}
+
+[
+    object,
+    uuid(f754ad43-3bcc-4286-8009-9c5da214e84e),
+    local
+]
+interface ITraceRelogger : IUnknown
+{
+    HRESULT AddLogfileTraceStream([in] BSTR LogfileName,
+                                  [in] void *UserContext,
+                                  [out, retval] TRACEHANDLE *TraceHandle);
+
+    HRESULT AddRealtimeTraceStream([in] BSTR LoggerName,
+                                   [in] void *UserContext,
+                                   [out, retval] TRACEHANDLE *TraceHandle);
+
+    HRESULT RegisterCallback([in] ITraceEventCallback *Callback);
+
+    HRESULT Inject([in] ITraceEvent *Event);
+
+    HRESULT CreateEventInstance([in] TRACEHANDLE TraceHandle,
+                                [in] ULONG Flags,
+                                [out, retval] ITraceEvent **Event);
+
+    HRESULT ProcessTrace();
+
+    HRESULT SetOutputFilename([in] BSTR LogfileName);
+
+    HRESULT SetCompressionMode([in] BOOLEAN CompressionMode);
+
+    HRESULT Cancel();
+}
+
+[
+    uuid(7b40792d-05ff-44c4-9058-f440c71f17d4),
+    threading(both)
+]
+coclass CTraceRelogger
+{
+    [default] interface ITraceRelogger;
+}
diff --git a/mingw-w64-headers/include/windowscontracts.h b/mingw-w64-headers/include/windowscontracts.h
new file mode 100644
index 0000000..4a3f1df
--- /dev/null
+++ b/mingw-w64-headers/include/windowscontracts.h
@@ -0,0 +1,45 @@
+/*** Autogenerated by WIDL 6.2 from include/windowscontracts.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __windowscontracts_h__
+#define __windowscontracts_h__
+
+/* Forward declarations */
+
+/* Headers for imported files */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION 0x40000
+#endif // defined(WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION)
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xa0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windowscontracts_h__ */
diff --git a/mingw-w64-headers/include/windowscontracts.idl b/mingw-w64-headers/include/windowscontracts.idl
new file mode 100644
index 0000000..6bcf80a
--- /dev/null
+++ b/mingw-w64-headers/include/windowscontracts.idl
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020 Rémi Bernon for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifdef __WIDL__
+#pragma winrt ns_prefix
+#endif
+
+namespace Windows {
+    namespace Foundation {
+        [contractversion(4)]
+        apicontract FoundationContract
+        {};
+
+        [contractversion(10)]
+        apicontract UniversalApiContract
+        {};
+    }
+}
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index f1859cb..1dd2748 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -182,6 +182,7 @@
 	objectarray \
 	optary \
 	qedit \
+        relogger \
 	spatialaudioclient \
 	taskschd \
 	thumbcache \
@@ -191,6 +192,7 @@
 	vmr9 \
 	wincodec \
 	wincodecsdk \
+        windowscontracts \
 	wmdrmsdk \
 	wmp \
 	wmsbuffer \