headers: Updated to current Wine master

Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/directmanipulation.h b/mingw-w64-headers/include/directmanipulation.h
new file mode 100644
index 0000000..7c0a5c9
--- /dev/null
+++ b/mingw-w64-headers/include/directmanipulation.h
@@ -0,0 +1,2311 @@
+/*** Autogenerated by WIDL 5.19 from directmanipulation.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 __directmanipulation_h__
+#define __directmanipulation_h__
+
+/* Forward declarations */
+
+#ifndef __IDirectManipulationFrameInfoProvider_FWD_DEFINED__
+#define __IDirectManipulationFrameInfoProvider_FWD_DEFINED__
+typedef interface IDirectManipulationFrameInfoProvider IDirectManipulationFrameInfoProvider;
+#ifdef __cplusplus
+interface IDirectManipulationFrameInfoProvider;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationManager_FWD_DEFINED__
+#define __IDirectManipulationManager_FWD_DEFINED__
+typedef interface IDirectManipulationManager IDirectManipulationManager;
+#ifdef __cplusplus
+interface IDirectManipulationManager;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationContent_FWD_DEFINED__
+#define __IDirectManipulationContent_FWD_DEFINED__
+typedef interface IDirectManipulationContent IDirectManipulationContent;
+#ifdef __cplusplus
+interface IDirectManipulationContent;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationUpdateHandler_FWD_DEFINED__
+#define __IDirectManipulationUpdateHandler_FWD_DEFINED__
+typedef interface IDirectManipulationUpdateHandler IDirectManipulationUpdateHandler;
+#ifdef __cplusplus
+interface IDirectManipulationUpdateHandler;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationUpdateManager_FWD_DEFINED__
+#define __IDirectManipulationUpdateManager_FWD_DEFINED__
+typedef interface IDirectManipulationUpdateManager IDirectManipulationUpdateManager;
+#ifdef __cplusplus
+interface IDirectManipulationUpdateManager;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationCompositor_FWD_DEFINED__
+#define __IDirectManipulationCompositor_FWD_DEFINED__
+typedef interface IDirectManipulationCompositor IDirectManipulationCompositor;
+#ifdef __cplusplus
+interface IDirectManipulationCompositor;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationViewport_FWD_DEFINED__
+#define __IDirectManipulationViewport_FWD_DEFINED__
+typedef interface IDirectManipulationViewport IDirectManipulationViewport;
+#ifdef __cplusplus
+interface IDirectManipulationViewport;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationViewport2_FWD_DEFINED__
+#define __IDirectManipulationViewport2_FWD_DEFINED__
+typedef interface IDirectManipulationViewport2 IDirectManipulationViewport2;
+#ifdef __cplusplus
+interface IDirectManipulationViewport2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationViewportEventHandler_FWD_DEFINED__
+#define __IDirectManipulationViewportEventHandler_FWD_DEFINED__
+typedef interface IDirectManipulationViewportEventHandler IDirectManipulationViewportEventHandler;
+#ifdef __cplusplus
+interface IDirectManipulationViewportEventHandler;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationManager2_FWD_DEFINED__
+#define __IDirectManipulationManager2_FWD_DEFINED__
+typedef interface IDirectManipulationManager2 IDirectManipulationManager2;
+#ifdef __cplusplus
+interface IDirectManipulationManager2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationPrimaryContent_FWD_DEFINED__
+#define __IDirectManipulationPrimaryContent_FWD_DEFINED__
+typedef interface IDirectManipulationPrimaryContent IDirectManipulationPrimaryContent;
+#ifdef __cplusplus
+interface IDirectManipulationPrimaryContent;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectManipulationCompositor2_FWD_DEFINED__
+#define __IDirectManipulationCompositor2_FWD_DEFINED__
+typedef interface IDirectManipulationCompositor2 IDirectManipulationCompositor2;
+#ifdef __cplusplus
+interface IDirectManipulationCompositor2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __DirectManipulationManager_FWD_DEFINED__
+#define __DirectManipulationManager_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DirectManipulationManager DirectManipulationManager;
+#else
+typedef struct DirectManipulationManager DirectManipulationManager;
+#endif /* defined __cplusplus */
+#endif /* defined __DirectManipulationManager_FWD_DEFINED__ */
+
+#ifndef __DirectManipulationSharedManager_FWD_DEFINED__
+#define __DirectManipulationSharedManager_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DirectManipulationSharedManager DirectManipulationSharedManager;
+#else
+typedef struct DirectManipulationSharedManager DirectManipulationSharedManager;
+#endif /* defined __cplusplus */
+#endif /* defined __DirectManipulationSharedManager_FWD_DEFINED__ */
+
+#ifndef __DCompManipulationCompositor_FWD_DEFINED__
+#define __DCompManipulationCompositor_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DCompManipulationCompositor DCompManipulationCompositor;
+#else
+typedef struct DCompManipulationCompositor DCompManipulationCompositor;
+#endif /* defined __cplusplus */
+#endif /* defined __DCompManipulationCompositor_FWD_DEFINED__ */
+
+#ifndef __DirectManipulationViewport_FWD_DEFINED__
+#define __DirectManipulationViewport_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DirectManipulationViewport DirectManipulationViewport;
+#else
+typedef struct DirectManipulationViewport DirectManipulationViewport;
+#endif /* defined __cplusplus */
+#endif /* defined __DirectManipulationViewport_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+typedef void *HWND;
+#endif
+#ifndef __IDirectManipulationViewportEventHandler_FWD_DEFINED__
+#define __IDirectManipulationViewportEventHandler_FWD_DEFINED__
+typedef interface IDirectManipulationViewportEventHandler IDirectManipulationViewportEventHandler;
+#ifdef __cplusplus
+interface IDirectManipulationViewportEventHandler;
+#endif /* __cplusplus */
+#endif
+
+typedef enum DIRECTMANIPULATION_HITTEST_TYPE {
+    DIRECTMANIPULATION_HITTEST_TYPE_ASYNCHRONOUS = 0x0,
+    DIRECTMANIPULATION_HITTEST_TYPE_SYNCHRONOUS = 0x1,
+    DIRECTMANIPULATION_HITTEST_TYPE_AUTO_SYNCHRONOUS = 0x2
+} DIRECTMANIPULATION_HITTEST_TYPE;
+typedef enum DIRECTMANIPULATION_STATUS {
+    DIRECTMANIPULATION_BUILDING = 0,
+    DIRECTMANIPULATION_ENABLED = 1,
+    DIRECTMANIPULATION_DISABLED = 2,
+    DIRECTMANIPULATION_RUNNING = 3,
+    DIRECTMANIPULATION_INERTIA = 4,
+    DIRECTMANIPULATION_READY = 5,
+    DIRECTMANIPULATION_SUSPENDED = 6
+} DIRECTMANIPULATION_STATUS;
+typedef enum DIRECTMANIPULATION_VIEWPORT_OPTIONS {
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_DEFAULT = 0x0,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_AUTODISABLE = 0x1,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE = 0x2,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT = 0x4,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_EXPLICITHITTEST = 0x8,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_DISABLEPIXELSNAPPING = 0x10
+} DIRECTMANIPULATION_VIEWPORT_OPTIONS;
+typedef enum DIRECTMANIPULATION_CONFIGURATION {
+    DIRECTMANIPULATION_CONFIGURATION_NONE = 0x0,
+    DIRECTMANIPULATION_CONFIGURATION_INTERACTION = 0x1,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_X = 0x2,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_Y = 0x4,
+    DIRECTMANIPULATION_CONFIGURATION_SCALING = 0x10,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_INERTIA = 0x20,
+    DIRECTMANIPULATION_CONFIGURATION_SCALING_INERTIA = 0x80,
+    DIRECTMANIPULATION_CONFIGURATION_RAILS_X = 0x100,
+    DIRECTMANIPULATION_CONFIGURATION_RAILS_Y = 0x200
+} DIRECTMANIPULATION_CONFIGURATION;
+typedef enum DIRECTMANIPULATION_GESTURE_CONFIGURATION {
+    DIRECTMANIPULATION_GESTURE_NONE = 0x0,
+    DIRECTMANIPULATION_GESTURE_DEFAULT = 0x0,
+    DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_VERTICAL = 0x8,
+    DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_HORIZONTAL = 0x10,
+    DIRECTMANIPULATION_GESTURE_PINCH_ZOOM = 0x20
+} DIRECTMANIPULATION_GESTURE_CONFIGURATION;
+typedef enum DIRECTMANIPULATION_MOTION_TYPES {
+    DIRECTMANIPULATION_MOTION_NONE = 0x0,
+    DIRECTMANIPULATION_MOTION_TRANSLATEX = 0x1,
+    DIRECTMANIPULATION_MOTION_TRANSLATEY = 0x2,
+    DIRECTMANIPULATION_MOTION_ZOOM = 0x4,
+    DIRECTMANIPULATION_MOTION_CENTERX = 0x10,
+    DIRECTMANIPULATION_MOTION_CENTERY = 0x20,
+    DIRECTMANIPULATION_MOTION_ALL = (((DIRECTMANIPULATION_MOTION_TRANSLATEX | DIRECTMANIPULATION_MOTION_TRANSLATEY) | DIRECTMANIPULATION_MOTION_ZOOM) | DIRECTMANIPULATION_MOTION_CENTERX) | DIRECTMANIPULATION_MOTION_CENTERY
+} DIRECTMANIPULATION_MOTION_TYPES;
+typedef enum DIRECTMANIPULATION_SNAPPOINT_TYPE {
+    DIRECTMANIPULATION_SNAPPOINT_MANDATORY = 0,
+    DIRECTMANIPULATION_SNAPPOINT_OPTIONAL = 1,
+    DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE = 2,
+    DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE = 3
+} DIRECTMANIPULATION_SNAPPOINT_TYPE;
+typedef enum DIRECTMANIPULATION_SNAPPOINT_COORDINATE {
+    DIRECTMANIPULATION_COORDINATE_BOUNDARY = 0x0,
+    DIRECTMANIPULATION_COORDINATE_ORIGIN = 0x1,
+    DIRECTMANIPULATION_COORDINATE_MIRRORED = 0x10
+} DIRECTMANIPULATION_SNAPPOINT_COORDINATE;
+typedef enum DIRECTMANIPULATION_HORIZONTALALIGNMENT {
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE = 0x0,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT = 0x1,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER = 0x2,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT = 0x4,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER = 0x8
+} DIRECTMANIPULATION_HORIZONTALALIGNMENT;
+typedef enum DIRECTMANIPULATION_VERTICALALIGNMENT {
+    DIRECTMANIPULATION_VERTICALALIGNMENT_NONE = 0x0,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_TOP = 0x1,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER = 0x2,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM = 0x4,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER = 0x8
+} DIRECTMANIPULATION_VERTICALALIGNMENT;
+typedef enum DIRECTMANIPULATION_INPUT_MODE {
+    DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC = 0,
+    DIRECTMANIPULATION_INPUT_MODE_MANUAL = 1
+} DIRECTMANIPULATION_INPUT_MODE;
+/*****************************************************************************
+ * IDirectManipulationFrameInfoProvider interface
+ */
+#ifndef __IDirectManipulationFrameInfoProvider_INTERFACE_DEFINED__
+#define __IDirectManipulationFrameInfoProvider_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationFrameInfoProvider, 0xfb759dba, 0x6f4c, 0x4c01, 0x87,0x4e, 0x19,0xc8,0xa0,0x59,0x07,0xf9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fb759dba-6f4c-4c01-874e-19c8a05907f9")
+IDirectManipulationFrameInfoProvider : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetNextFrameInfo(
+        ULONGLONG *time,
+        ULONGLONG *process,
+        ULONGLONG *composition) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationFrameInfoProvider, 0xfb759dba, 0x6f4c, 0x4c01, 0x87,0x4e, 0x19,0xc8,0xa0,0x59,0x07,0xf9)
+#endif
+#else
+typedef struct IDirectManipulationFrameInfoProviderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationFrameInfoProvider *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationFrameInfoProvider *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationFrameInfoProvider *This);
+
+    /*** IDirectManipulationFrameInfoProvider methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetNextFrameInfo)(
+        IDirectManipulationFrameInfoProvider *This,
+        ULONGLONG *time,
+        ULONGLONG *process,
+        ULONGLONG *composition);
+
+    END_INTERFACE
+} IDirectManipulationFrameInfoProviderVtbl;
+
+interface IDirectManipulationFrameInfoProvider {
+    CONST_VTBL IDirectManipulationFrameInfoProviderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationFrameInfoProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationFrameInfoProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationFrameInfoProvider_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationFrameInfoProvider methods ***/
+#define IDirectManipulationFrameInfoProvider_GetNextFrameInfo(This,time,process,composition) (This)->lpVtbl->GetNextFrameInfo(This,time,process,composition)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationFrameInfoProvider_QueryInterface(IDirectManipulationFrameInfoProvider* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationFrameInfoProvider_AddRef(IDirectManipulationFrameInfoProvider* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationFrameInfoProvider_Release(IDirectManipulationFrameInfoProvider* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationFrameInfoProvider methods ***/
+static FORCEINLINE HRESULT IDirectManipulationFrameInfoProvider_GetNextFrameInfo(IDirectManipulationFrameInfoProvider* This,ULONGLONG *time,ULONGLONG *process,ULONGLONG *composition) {
+    return This->lpVtbl->GetNextFrameInfo(This,time,process,composition);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationFrameInfoProvider_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationManager interface
+ */
+#ifndef __IDirectManipulationManager_INTERFACE_DEFINED__
+#define __IDirectManipulationManager_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationManager, 0xfbf5d3b4, 0x70c7, 0x4163, 0x93,0x22, 0x5a,0x6f,0x66,0x0d,0x6f,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fbf5d3b4-70c7-4163-9322-5a6f660d6fbc")
+IDirectManipulationManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Activate(
+        HWND window) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Deactivate(
+        HWND window) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterHitTestTarget(
+        HWND window,
+        HWND hittest,
+        DIRECTMANIPULATION_HITTEST_TYPE type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessInput(
+        const MSG *msg,
+        WINBOOL *handled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateManager(
+        REFIID riid,
+        void **obj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateViewport(
+        IDirectManipulationFrameInfoProvider *frame,
+        HWND window,
+        REFIID riid,
+        void **obj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateContent(
+        IDirectManipulationFrameInfoProvider *frame,
+        REFCLSID clsid,
+        REFIID riid,
+        void **obj) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationManager, 0xfbf5d3b4, 0x70c7, 0x4163, 0x93,0x22, 0x5a,0x6f,0x66,0x0d,0x6f,0xbc)
+#endif
+#else
+typedef struct IDirectManipulationManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationManager *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationManager *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationManager *This);
+
+    /*** IDirectManipulationManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *Activate)(
+        IDirectManipulationManager *This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *Deactivate)(
+        IDirectManipulationManager *This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterHitTestTarget)(
+        IDirectManipulationManager *This,
+        HWND window,
+        HWND hittest,
+        DIRECTMANIPULATION_HITTEST_TYPE type);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessInput)(
+        IDirectManipulationManager *This,
+        const MSG *msg,
+        WINBOOL *handled);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateManager)(
+        IDirectManipulationManager *This,
+        REFIID riid,
+        void **obj);
+
+    HRESULT (STDMETHODCALLTYPE *CreateViewport)(
+        IDirectManipulationManager *This,
+        IDirectManipulationFrameInfoProvider *frame,
+        HWND window,
+        REFIID riid,
+        void **obj);
+
+    HRESULT (STDMETHODCALLTYPE *CreateContent)(
+        IDirectManipulationManager *This,
+        IDirectManipulationFrameInfoProvider *frame,
+        REFCLSID clsid,
+        REFIID riid,
+        void **obj);
+
+    END_INTERFACE
+} IDirectManipulationManagerVtbl;
+
+interface IDirectManipulationManager {
+    CONST_VTBL IDirectManipulationManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationManager methods ***/
+#define IDirectManipulationManager_Activate(This,window) (This)->lpVtbl->Activate(This,window)
+#define IDirectManipulationManager_Deactivate(This,window) (This)->lpVtbl->Deactivate(This,window)
+#define IDirectManipulationManager_RegisterHitTestTarget(This,window,hittest,type) (This)->lpVtbl->RegisterHitTestTarget(This,window,hittest,type)
+#define IDirectManipulationManager_ProcessInput(This,msg,handled) (This)->lpVtbl->ProcessInput(This,msg,handled)
+#define IDirectManipulationManager_GetUpdateManager(This,riid,obj) (This)->lpVtbl->GetUpdateManager(This,riid,obj)
+#define IDirectManipulationManager_CreateViewport(This,frame,window,riid,obj) (This)->lpVtbl->CreateViewport(This,frame,window,riid,obj)
+#define IDirectManipulationManager_CreateContent(This,frame,clsid,riid,obj) (This)->lpVtbl->CreateContent(This,frame,clsid,riid,obj)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationManager_QueryInterface(IDirectManipulationManager* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationManager_AddRef(IDirectManipulationManager* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationManager_Release(IDirectManipulationManager* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationManager methods ***/
+static FORCEINLINE HRESULT IDirectManipulationManager_Activate(IDirectManipulationManager* This,HWND window) {
+    return This->lpVtbl->Activate(This,window);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_Deactivate(IDirectManipulationManager* This,HWND window) {
+    return This->lpVtbl->Deactivate(This,window);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_RegisterHitTestTarget(IDirectManipulationManager* This,HWND window,HWND hittest,DIRECTMANIPULATION_HITTEST_TYPE type) {
+    return This->lpVtbl->RegisterHitTestTarget(This,window,hittest,type);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_ProcessInput(IDirectManipulationManager* This,const MSG *msg,WINBOOL *handled) {
+    return This->lpVtbl->ProcessInput(This,msg,handled);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_GetUpdateManager(IDirectManipulationManager* This,REFIID riid,void **obj) {
+    return This->lpVtbl->GetUpdateManager(This,riid,obj);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_CreateViewport(IDirectManipulationManager* This,IDirectManipulationFrameInfoProvider *frame,HWND window,REFIID riid,void **obj) {
+    return This->lpVtbl->CreateViewport(This,frame,window,riid,obj);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager_CreateContent(IDirectManipulationManager* This,IDirectManipulationFrameInfoProvider *frame,REFCLSID clsid,REFIID riid,void **obj) {
+    return This->lpVtbl->CreateContent(This,frame,clsid,riid,obj);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationContent interface
+ */
+#ifndef __IDirectManipulationContent_INTERFACE_DEFINED__
+#define __IDirectManipulationContent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationContent, 0xb89962cb, 0x3d89, 0x442b, 0xbb,0x58, 0x50,0x98,0xfa,0x0f,0x9f,0x16);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b89962cb-3d89-442b-bb58-5098fa0f9f16")
+IDirectManipulationContent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContentRect(
+        RECT *size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContentRect(
+        const RECT *size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetViewport(
+        REFIID riid,
+        void **object) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTag(
+        REFIID riid,
+        void **object,
+        UINT32 *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTag(
+        IUnknown *object,
+        UINT32 id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputTransform(
+        float *matrix,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetContentTransform(
+        float *matrix,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SyncContentTransform(
+        const float *matrix,
+        DWORD count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationContent, 0xb89962cb, 0x3d89, 0x442b, 0xbb,0x58, 0x50,0x98,0xfa,0x0f,0x9f,0x16)
+#endif
+#else
+typedef struct IDirectManipulationContentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationContent *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationContent *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationContent *This);
+
+    /*** IDirectManipulationContent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContentRect)(
+        IDirectManipulationContent *This,
+        RECT *size);
+
+    HRESULT (STDMETHODCALLTYPE *SetContentRect)(
+        IDirectManipulationContent *This,
+        const RECT *size);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewport)(
+        IDirectManipulationContent *This,
+        REFIID riid,
+        void **object);
+
+    HRESULT (STDMETHODCALLTYPE *GetTag)(
+        IDirectManipulationContent *This,
+        REFIID riid,
+        void **object,
+        UINT32 *id);
+
+    HRESULT (STDMETHODCALLTYPE *SetTag)(
+        IDirectManipulationContent *This,
+        IUnknown *object,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputTransform)(
+        IDirectManipulationContent *This,
+        float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *GetContentTransform)(
+        IDirectManipulationContent *This,
+        float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *SyncContentTransform)(
+        IDirectManipulationContent *This,
+        const float *matrix,
+        DWORD count);
+
+    END_INTERFACE
+} IDirectManipulationContentVtbl;
+
+interface IDirectManipulationContent {
+    CONST_VTBL IDirectManipulationContentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationContent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationContent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationContent_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationContent methods ***/
+#define IDirectManipulationContent_GetContentRect(This,size) (This)->lpVtbl->GetContentRect(This,size)
+#define IDirectManipulationContent_SetContentRect(This,size) (This)->lpVtbl->SetContentRect(This,size)
+#define IDirectManipulationContent_GetViewport(This,riid,object) (This)->lpVtbl->GetViewport(This,riid,object)
+#define IDirectManipulationContent_GetTag(This,riid,object,id) (This)->lpVtbl->GetTag(This,riid,object,id)
+#define IDirectManipulationContent_SetTag(This,object,id) (This)->lpVtbl->SetTag(This,object,id)
+#define IDirectManipulationContent_GetOutputTransform(This,matrix,count) (This)->lpVtbl->GetOutputTransform(This,matrix,count)
+#define IDirectManipulationContent_GetContentTransform(This,matrix,count) (This)->lpVtbl->GetContentTransform(This,matrix,count)
+#define IDirectManipulationContent_SyncContentTransform(This,matrix,count) (This)->lpVtbl->SyncContentTransform(This,matrix,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationContent_QueryInterface(IDirectManipulationContent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationContent_AddRef(IDirectManipulationContent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationContent_Release(IDirectManipulationContent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationContent methods ***/
+static FORCEINLINE HRESULT IDirectManipulationContent_GetContentRect(IDirectManipulationContent* This,RECT *size) {
+    return This->lpVtbl->GetContentRect(This,size);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_SetContentRect(IDirectManipulationContent* This,const RECT *size) {
+    return This->lpVtbl->SetContentRect(This,size);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_GetViewport(IDirectManipulationContent* This,REFIID riid,void **object) {
+    return This->lpVtbl->GetViewport(This,riid,object);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_GetTag(IDirectManipulationContent* This,REFIID riid,void **object,UINT32 *id) {
+    return This->lpVtbl->GetTag(This,riid,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_SetTag(IDirectManipulationContent* This,IUnknown *object,UINT32 id) {
+    return This->lpVtbl->SetTag(This,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_GetOutputTransform(IDirectManipulationContent* This,float *matrix,DWORD count) {
+    return This->lpVtbl->GetOutputTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_GetContentTransform(IDirectManipulationContent* This,float *matrix,DWORD count) {
+    return This->lpVtbl->GetContentTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationContent_SyncContentTransform(IDirectManipulationContent* This,const float *matrix,DWORD count) {
+    return This->lpVtbl->SyncContentTransform(This,matrix,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationContent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationUpdateHandler interface
+ */
+#ifndef __IDirectManipulationUpdateHandler_INTERFACE_DEFINED__
+#define __IDirectManipulationUpdateHandler_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationUpdateHandler, 0x790b6337, 0x64f8, 0x4ff5, 0xa2,0x69, 0xb3,0x2b,0xc2,0xaf,0x27,0xa7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("790b6337-64f8-4ff5-a269-b32bc2af27a7")
+IDirectManipulationUpdateHandler : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Update(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationUpdateHandler, 0x790b6337, 0x64f8, 0x4ff5, 0xa2,0x69, 0xb3,0x2b,0xc2,0xaf,0x27,0xa7)
+#endif
+#else
+typedef struct IDirectManipulationUpdateHandlerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationUpdateHandler *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationUpdateHandler *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationUpdateHandler *This);
+
+    /*** IDirectManipulationUpdateHandler methods ***/
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        IDirectManipulationUpdateHandler *This);
+
+    END_INTERFACE
+} IDirectManipulationUpdateHandlerVtbl;
+
+interface IDirectManipulationUpdateHandler {
+    CONST_VTBL IDirectManipulationUpdateHandlerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationUpdateHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationUpdateHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationUpdateHandler_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationUpdateHandler methods ***/
+#define IDirectManipulationUpdateHandler_Update(This) (This)->lpVtbl->Update(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationUpdateHandler_QueryInterface(IDirectManipulationUpdateHandler* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationUpdateHandler_AddRef(IDirectManipulationUpdateHandler* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationUpdateHandler_Release(IDirectManipulationUpdateHandler* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationUpdateHandler methods ***/
+static FORCEINLINE HRESULT IDirectManipulationUpdateHandler_Update(IDirectManipulationUpdateHandler* This) {
+    return This->lpVtbl->Update(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationUpdateHandler_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationUpdateManager interface
+ */
+#ifndef __IDirectManipulationUpdateManager_INTERFACE_DEFINED__
+#define __IDirectManipulationUpdateManager_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationUpdateManager, 0xb0ae62fd, 0xbe34, 0x46e7, 0x9c,0xaa, 0xd3,0x61,0xfa,0xcb,0xb9,0xcc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b0ae62fd-be34-46e7-9caa-d361facbb9cc")
+IDirectManipulationUpdateManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RegisterWaitHandleCallback(
+        HANDLE handle,
+        IDirectManipulationUpdateHandler *handler,
+        DWORD *cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnregisterWaitHandleCallback(
+        DWORD cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Update(
+        IDirectManipulationFrameInfoProvider *provider) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationUpdateManager, 0xb0ae62fd, 0xbe34, 0x46e7, 0x9c,0xaa, 0xd3,0x61,0xfa,0xcb,0xb9,0xcc)
+#endif
+#else
+typedef struct IDirectManipulationUpdateManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationUpdateManager *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationUpdateManager *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationUpdateManager *This);
+
+    /*** IDirectManipulationUpdateManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *RegisterWaitHandleCallback)(
+        IDirectManipulationUpdateManager *This,
+        HANDLE handle,
+        IDirectManipulationUpdateHandler *handler,
+        DWORD *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterWaitHandleCallback)(
+        IDirectManipulationUpdateManager *This,
+        DWORD cookie);
+
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        IDirectManipulationUpdateManager *This,
+        IDirectManipulationFrameInfoProvider *provider);
+
+    END_INTERFACE
+} IDirectManipulationUpdateManagerVtbl;
+
+interface IDirectManipulationUpdateManager {
+    CONST_VTBL IDirectManipulationUpdateManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationUpdateManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationUpdateManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationUpdateManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationUpdateManager methods ***/
+#define IDirectManipulationUpdateManager_RegisterWaitHandleCallback(This,handle,handler,cookie) (This)->lpVtbl->RegisterWaitHandleCallback(This,handle,handler,cookie)
+#define IDirectManipulationUpdateManager_UnregisterWaitHandleCallback(This,cookie) (This)->lpVtbl->UnregisterWaitHandleCallback(This,cookie)
+#define IDirectManipulationUpdateManager_Update(This,provider) (This)->lpVtbl->Update(This,provider)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationUpdateManager_QueryInterface(IDirectManipulationUpdateManager* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationUpdateManager_AddRef(IDirectManipulationUpdateManager* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationUpdateManager_Release(IDirectManipulationUpdateManager* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationUpdateManager methods ***/
+static FORCEINLINE HRESULT IDirectManipulationUpdateManager_RegisterWaitHandleCallback(IDirectManipulationUpdateManager* This,HANDLE handle,IDirectManipulationUpdateHandler *handler,DWORD *cookie) {
+    return This->lpVtbl->RegisterWaitHandleCallback(This,handle,handler,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationUpdateManager_UnregisterWaitHandleCallback(IDirectManipulationUpdateManager* This,DWORD cookie) {
+    return This->lpVtbl->UnregisterWaitHandleCallback(This,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationUpdateManager_Update(IDirectManipulationUpdateManager* This,IDirectManipulationFrameInfoProvider *provider) {
+    return This->lpVtbl->Update(This,provider);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationUpdateManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationCompositor interface
+ */
+#ifndef __IDirectManipulationCompositor_INTERFACE_DEFINED__
+#define __IDirectManipulationCompositor_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationCompositor, 0x537a0825, 0x0387, 0x4efa, 0xb6,0x2f, 0x71,0xeb,0x1f,0x08,0x5a,0x7e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("537a0825-0387-4efa-b62f-71eb1f085a7e")
+IDirectManipulationCompositor : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddContent(
+        IDirectManipulationContent *content,
+        IUnknown *device,
+        IUnknown *parent,
+        IUnknown *child) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveContent(
+        IDirectManipulationContent *content) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUpdateManager(
+        IDirectManipulationUpdateManager *manager) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationCompositor, 0x537a0825, 0x0387, 0x4efa, 0xb6,0x2f, 0x71,0xeb,0x1f,0x08,0x5a,0x7e)
+#endif
+#else
+typedef struct IDirectManipulationCompositorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationCompositor *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationCompositor *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationCompositor *This);
+
+    /*** IDirectManipulationCompositor methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddContent)(
+        IDirectManipulationCompositor *This,
+        IDirectManipulationContent *content,
+        IUnknown *device,
+        IUnknown *parent,
+        IUnknown *child);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveContent)(
+        IDirectManipulationCompositor *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *SetUpdateManager)(
+        IDirectManipulationCompositor *This,
+        IDirectManipulationUpdateManager *manager);
+
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IDirectManipulationCompositor *This);
+
+    END_INTERFACE
+} IDirectManipulationCompositorVtbl;
+
+interface IDirectManipulationCompositor {
+    CONST_VTBL IDirectManipulationCompositorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationCompositor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationCompositor_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationCompositor_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationCompositor methods ***/
+#define IDirectManipulationCompositor_AddContent(This,content,device,parent,child) (This)->lpVtbl->AddContent(This,content,device,parent,child)
+#define IDirectManipulationCompositor_RemoveContent(This,content) (This)->lpVtbl->RemoveContent(This,content)
+#define IDirectManipulationCompositor_SetUpdateManager(This,manager) (This)->lpVtbl->SetUpdateManager(This,manager)
+#define IDirectManipulationCompositor_Flush(This) (This)->lpVtbl->Flush(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationCompositor_QueryInterface(IDirectManipulationCompositor* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationCompositor_AddRef(IDirectManipulationCompositor* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationCompositor_Release(IDirectManipulationCompositor* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationCompositor methods ***/
+static FORCEINLINE HRESULT IDirectManipulationCompositor_AddContent(IDirectManipulationCompositor* This,IDirectManipulationContent *content,IUnknown *device,IUnknown *parent,IUnknown *child) {
+    return This->lpVtbl->AddContent(This,content,device,parent,child);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor_RemoveContent(IDirectManipulationCompositor* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->RemoveContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor_SetUpdateManager(IDirectManipulationCompositor* This,IDirectManipulationUpdateManager *manager) {
+    return This->lpVtbl->SetUpdateManager(This,manager);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor_Flush(IDirectManipulationCompositor* This) {
+    return This->lpVtbl->Flush(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationCompositor_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationViewport interface
+ */
+#ifndef __IDirectManipulationViewport_INTERFACE_DEFINED__
+#define __IDirectManipulationViewport_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationViewport, 0x28b85a3d, 0x60a0, 0x48bd, 0x9b,0xa1, 0x5c,0xe8,0xd9,0xea,0x3a,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("28b85a3d-60a0-48bd-9ba1-5ce8d9ea3a6d")
+IDirectManipulationViewport : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Enable(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Disable(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContact(
+        UINT32 id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseContact(
+        UINT32 id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseAllContacts(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStatus(
+        DIRECTMANIPULATION_STATUS *status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTag(
+        REFIID riid,
+        void **object,
+        UINT32 *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTag(
+        IUnknown *object,
+        UINT32 id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetViewportRect(
+        RECT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewportRect(
+        const RECT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ZoomToRect(
+        const float left,
+        const float top,
+        const float right,
+        const float bottom,
+        WINBOOL animate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewportTransform(
+        const float *matrix,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SyncDisplayTransform(
+        const float *matrix,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPrimaryContent(
+        REFIID riid,
+        void **object) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddContent(
+        IDirectManipulationContent *content) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveContent(
+        IDirectManipulationContent *content) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewportOptions(
+        DIRECTMANIPULATION_VIEWPORT_OPTIONS options) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddConfiguration(
+        DIRECTMANIPULATION_CONFIGURATION configuration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveConfiguration(
+        DIRECTMANIPULATION_CONFIGURATION configuration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ActivateConfiguration(
+        DIRECTMANIPULATION_CONFIGURATION configuration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetManualGesture(
+        DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetChaining(
+        DIRECTMANIPULATION_MOTION_TYPES enabledTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddEventHandler(
+        HWND window,
+        IDirectManipulationViewportEventHandler *eventHandler,
+        DWORD *cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveEventHandler(
+        DWORD cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetInputMode(
+        DIRECTMANIPULATION_INPUT_MODE mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUpdateMode(
+        DIRECTMANIPULATION_INPUT_MODE mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Abandon(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationViewport, 0x28b85a3d, 0x60a0, 0x48bd, 0x9b,0xa1, 0x5c,0xe8,0xd9,0xea,0x3a,0x6d)
+#endif
+#else
+typedef struct IDirectManipulationViewportVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationViewport *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationViewport *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationViewport *This);
+
+    /*** IDirectManipulationViewport methods ***/
+    HRESULT (STDMETHODCALLTYPE *Enable)(
+        IDirectManipulationViewport *This);
+
+    HRESULT (STDMETHODCALLTYPE *Disable)(
+        IDirectManipulationViewport *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetContact)(
+        IDirectManipulationViewport *This,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseContact)(
+        IDirectManipulationViewport *This,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseAllContacts)(
+        IDirectManipulationViewport *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_STATUS *status);
+
+    HRESULT (STDMETHODCALLTYPE *GetTag)(
+        IDirectManipulationViewport *This,
+        REFIID riid,
+        void **object,
+        UINT32 *id);
+
+    HRESULT (STDMETHODCALLTYPE *SetTag)(
+        IDirectManipulationViewport *This,
+        IUnknown *object,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewportRect)(
+        IDirectManipulationViewport *This,
+        RECT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportRect)(
+        IDirectManipulationViewport *This,
+        const RECT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *ZoomToRect)(
+        IDirectManipulationViewport *This,
+        const float left,
+        const float top,
+        const float right,
+        const float bottom,
+        WINBOOL animate);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportTransform)(
+        IDirectManipulationViewport *This,
+        const float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *SyncDisplayTransform)(
+        IDirectManipulationViewport *This,
+        const float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrimaryContent)(
+        IDirectManipulationViewport *This,
+        REFIID riid,
+        void **object);
+
+    HRESULT (STDMETHODCALLTYPE *AddContent)(
+        IDirectManipulationViewport *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveContent)(
+        IDirectManipulationViewport *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportOptions)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_VIEWPORT_OPTIONS options);
+
+    HRESULT (STDMETHODCALLTYPE *AddConfiguration)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveConfiguration)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *ActivateConfiguration)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualGesture)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *SetChaining)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_MOTION_TYPES enabledTypes);
+
+    HRESULT (STDMETHODCALLTYPE *AddEventHandler)(
+        IDirectManipulationViewport *This,
+        HWND window,
+        IDirectManipulationViewportEventHandler *eventHandler,
+        DWORD *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveEventHandler)(
+        IDirectManipulationViewport *This,
+        DWORD cookie);
+
+    HRESULT (STDMETHODCALLTYPE *SetInputMode)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetUpdateMode)(
+        IDirectManipulationViewport *This,
+        DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IDirectManipulationViewport *This);
+
+    HRESULT (STDMETHODCALLTYPE *Abandon)(
+        IDirectManipulationViewport *This);
+
+    END_INTERFACE
+} IDirectManipulationViewportVtbl;
+
+interface IDirectManipulationViewport {
+    CONST_VTBL IDirectManipulationViewportVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationViewport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationViewport_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationViewport_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationViewport methods ***/
+#define IDirectManipulationViewport_Enable(This) (This)->lpVtbl->Enable(This)
+#define IDirectManipulationViewport_Disable(This) (This)->lpVtbl->Disable(This)
+#define IDirectManipulationViewport_SetContact(This,id) (This)->lpVtbl->SetContact(This,id)
+#define IDirectManipulationViewport_ReleaseContact(This,id) (This)->lpVtbl->ReleaseContact(This,id)
+#define IDirectManipulationViewport_ReleaseAllContacts(This) (This)->lpVtbl->ReleaseAllContacts(This)
+#define IDirectManipulationViewport_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
+#define IDirectManipulationViewport_GetTag(This,riid,object,id) (This)->lpVtbl->GetTag(This,riid,object,id)
+#define IDirectManipulationViewport_SetTag(This,object,id) (This)->lpVtbl->SetTag(This,object,id)
+#define IDirectManipulationViewport_GetViewportRect(This,viewport) (This)->lpVtbl->GetViewportRect(This,viewport)
+#define IDirectManipulationViewport_SetViewportRect(This,viewport) (This)->lpVtbl->SetViewportRect(This,viewport)
+#define IDirectManipulationViewport_ZoomToRect(This,left,top,right,bottom,animate) (This)->lpVtbl->ZoomToRect(This,left,top,right,bottom,animate)
+#define IDirectManipulationViewport_SetViewportTransform(This,matrix,count) (This)->lpVtbl->SetViewportTransform(This,matrix,count)
+#define IDirectManipulationViewport_SyncDisplayTransform(This,matrix,count) (This)->lpVtbl->SyncDisplayTransform(This,matrix,count)
+#define IDirectManipulationViewport_GetPrimaryContent(This,riid,object) (This)->lpVtbl->GetPrimaryContent(This,riid,object)
+#define IDirectManipulationViewport_AddContent(This,content) (This)->lpVtbl->AddContent(This,content)
+#define IDirectManipulationViewport_RemoveContent(This,content) (This)->lpVtbl->RemoveContent(This,content)
+#define IDirectManipulationViewport_SetViewportOptions(This,options) (This)->lpVtbl->SetViewportOptions(This,options)
+#define IDirectManipulationViewport_AddConfiguration(This,configuration) (This)->lpVtbl->AddConfiguration(This,configuration)
+#define IDirectManipulationViewport_RemoveConfiguration(This,configuration) (This)->lpVtbl->RemoveConfiguration(This,configuration)
+#define IDirectManipulationViewport_ActivateConfiguration(This,configuration) (This)->lpVtbl->ActivateConfiguration(This,configuration)
+#define IDirectManipulationViewport_SetManualGesture(This,configuration) (This)->lpVtbl->SetManualGesture(This,configuration)
+#define IDirectManipulationViewport_SetChaining(This,enabledTypes) (This)->lpVtbl->SetChaining(This,enabledTypes)
+#define IDirectManipulationViewport_AddEventHandler(This,window,eventHandler,cookie) (This)->lpVtbl->AddEventHandler(This,window,eventHandler,cookie)
+#define IDirectManipulationViewport_RemoveEventHandler(This,cookie) (This)->lpVtbl->RemoveEventHandler(This,cookie)
+#define IDirectManipulationViewport_SetInputMode(This,mode) (This)->lpVtbl->SetInputMode(This,mode)
+#define IDirectManipulationViewport_SetUpdateMode(This,mode) (This)->lpVtbl->SetUpdateMode(This,mode)
+#define IDirectManipulationViewport_Stop(This) (This)->lpVtbl->Stop(This)
+#define IDirectManipulationViewport_Abandon(This) (This)->lpVtbl->Abandon(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewport_QueryInterface(IDirectManipulationViewport* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationViewport_AddRef(IDirectManipulationViewport* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationViewport_Release(IDirectManipulationViewport* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationViewport methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewport_Enable(IDirectManipulationViewport* This) {
+    return This->lpVtbl->Enable(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_Disable(IDirectManipulationViewport* This) {
+    return This->lpVtbl->Disable(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetContact(IDirectManipulationViewport* This,UINT32 id) {
+    return This->lpVtbl->SetContact(This,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_ReleaseContact(IDirectManipulationViewport* This,UINT32 id) {
+    return This->lpVtbl->ReleaseContact(This,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_ReleaseAllContacts(IDirectManipulationViewport* This) {
+    return This->lpVtbl->ReleaseAllContacts(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_GetStatus(IDirectManipulationViewport* This,DIRECTMANIPULATION_STATUS *status) {
+    return This->lpVtbl->GetStatus(This,status);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_GetTag(IDirectManipulationViewport* This,REFIID riid,void **object,UINT32 *id) {
+    return This->lpVtbl->GetTag(This,riid,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetTag(IDirectManipulationViewport* This,IUnknown *object,UINT32 id) {
+    return This->lpVtbl->SetTag(This,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_GetViewportRect(IDirectManipulationViewport* This,RECT *viewport) {
+    return This->lpVtbl->GetViewportRect(This,viewport);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetViewportRect(IDirectManipulationViewport* This,const RECT *viewport) {
+    return This->lpVtbl->SetViewportRect(This,viewport);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_ZoomToRect(IDirectManipulationViewport* This,const float left,const float top,const float right,const float bottom,WINBOOL animate) {
+    return This->lpVtbl->ZoomToRect(This,left,top,right,bottom,animate);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetViewportTransform(IDirectManipulationViewport* This,const float *matrix,DWORD count) {
+    return This->lpVtbl->SetViewportTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SyncDisplayTransform(IDirectManipulationViewport* This,const float *matrix,DWORD count) {
+    return This->lpVtbl->SyncDisplayTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_GetPrimaryContent(IDirectManipulationViewport* This,REFIID riid,void **object) {
+    return This->lpVtbl->GetPrimaryContent(This,riid,object);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_AddContent(IDirectManipulationViewport* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->AddContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_RemoveContent(IDirectManipulationViewport* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->RemoveContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetViewportOptions(IDirectManipulationViewport* This,DIRECTMANIPULATION_VIEWPORT_OPTIONS options) {
+    return This->lpVtbl->SetViewportOptions(This,options);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_AddConfiguration(IDirectManipulationViewport* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->AddConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_RemoveConfiguration(IDirectManipulationViewport* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->RemoveConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_ActivateConfiguration(IDirectManipulationViewport* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->ActivateConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetManualGesture(IDirectManipulationViewport* This,DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration) {
+    return This->lpVtbl->SetManualGesture(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetChaining(IDirectManipulationViewport* This,DIRECTMANIPULATION_MOTION_TYPES enabledTypes) {
+    return This->lpVtbl->SetChaining(This,enabledTypes);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_AddEventHandler(IDirectManipulationViewport* This,HWND window,IDirectManipulationViewportEventHandler *eventHandler,DWORD *cookie) {
+    return This->lpVtbl->AddEventHandler(This,window,eventHandler,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_RemoveEventHandler(IDirectManipulationViewport* This,DWORD cookie) {
+    return This->lpVtbl->RemoveEventHandler(This,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetInputMode(IDirectManipulationViewport* This,DIRECTMANIPULATION_INPUT_MODE mode) {
+    return This->lpVtbl->SetInputMode(This,mode);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_SetUpdateMode(IDirectManipulationViewport* This,DIRECTMANIPULATION_INPUT_MODE mode) {
+    return This->lpVtbl->SetUpdateMode(This,mode);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_Stop(IDirectManipulationViewport* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport_Abandon(IDirectManipulationViewport* This) {
+    return This->lpVtbl->Abandon(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationViewport_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationViewport2 interface
+ */
+#ifndef __IDirectManipulationViewport2_INTERFACE_DEFINED__
+#define __IDirectManipulationViewport2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationViewport2, 0x923ccaac, 0x61e1, 0x4385, 0xb7,0x26, 0x01,0x7a,0xf1,0x89,0x88,0x2a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("923ccaac-61e1-4385-b726-017af189882a")
+IDirectManipulationViewport2 : public IDirectManipulationViewport
+{
+    virtual HRESULT STDMETHODCALLTYPE AddBehavior(
+        IUnknown *behavior,
+        DWORD *cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveBehavior(
+        DWORD cookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveAllBehaviors(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationViewport2, 0x923ccaac, 0x61e1, 0x4385, 0xb7,0x26, 0x01,0x7a,0xf1,0x89,0x88,0x2a)
+#endif
+#else
+typedef struct IDirectManipulationViewport2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationViewport2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationViewport2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationViewport2 *This);
+
+    /*** IDirectManipulationViewport methods ***/
+    HRESULT (STDMETHODCALLTYPE *Enable)(
+        IDirectManipulationViewport2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Disable)(
+        IDirectManipulationViewport2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetContact)(
+        IDirectManipulationViewport2 *This,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseContact)(
+        IDirectManipulationViewport2 *This,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseAllContacts)(
+        IDirectManipulationViewport2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_STATUS *status);
+
+    HRESULT (STDMETHODCALLTYPE *GetTag)(
+        IDirectManipulationViewport2 *This,
+        REFIID riid,
+        void **object,
+        UINT32 *id);
+
+    HRESULT (STDMETHODCALLTYPE *SetTag)(
+        IDirectManipulationViewport2 *This,
+        IUnknown *object,
+        UINT32 id);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewportRect)(
+        IDirectManipulationViewport2 *This,
+        RECT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportRect)(
+        IDirectManipulationViewport2 *This,
+        const RECT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *ZoomToRect)(
+        IDirectManipulationViewport2 *This,
+        const float left,
+        const float top,
+        const float right,
+        const float bottom,
+        WINBOOL animate);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportTransform)(
+        IDirectManipulationViewport2 *This,
+        const float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *SyncDisplayTransform)(
+        IDirectManipulationViewport2 *This,
+        const float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrimaryContent)(
+        IDirectManipulationViewport2 *This,
+        REFIID riid,
+        void **object);
+
+    HRESULT (STDMETHODCALLTYPE *AddContent)(
+        IDirectManipulationViewport2 *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveContent)(
+        IDirectManipulationViewport2 *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewportOptions)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_VIEWPORT_OPTIONS options);
+
+    HRESULT (STDMETHODCALLTYPE *AddConfiguration)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveConfiguration)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *ActivateConfiguration)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualGesture)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration);
+
+    HRESULT (STDMETHODCALLTYPE *SetChaining)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_MOTION_TYPES enabledTypes);
+
+    HRESULT (STDMETHODCALLTYPE *AddEventHandler)(
+        IDirectManipulationViewport2 *This,
+        HWND window,
+        IDirectManipulationViewportEventHandler *eventHandler,
+        DWORD *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveEventHandler)(
+        IDirectManipulationViewport2 *This,
+        DWORD cookie);
+
+    HRESULT (STDMETHODCALLTYPE *SetInputMode)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetUpdateMode)(
+        IDirectManipulationViewport2 *This,
+        DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IDirectManipulationViewport2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Abandon)(
+        IDirectManipulationViewport2 *This);
+
+    /*** IDirectManipulationViewport2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddBehavior)(
+        IDirectManipulationViewport2 *This,
+        IUnknown *behavior,
+        DWORD *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveBehavior)(
+        IDirectManipulationViewport2 *This,
+        DWORD cookie);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAllBehaviors)(
+        IDirectManipulationViewport2 *This);
+
+    END_INTERFACE
+} IDirectManipulationViewport2Vtbl;
+
+interface IDirectManipulationViewport2 {
+    CONST_VTBL IDirectManipulationViewport2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationViewport2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationViewport2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationViewport2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationViewport methods ***/
+#define IDirectManipulationViewport2_Enable(This) (This)->lpVtbl->Enable(This)
+#define IDirectManipulationViewport2_Disable(This) (This)->lpVtbl->Disable(This)
+#define IDirectManipulationViewport2_SetContact(This,id) (This)->lpVtbl->SetContact(This,id)
+#define IDirectManipulationViewport2_ReleaseContact(This,id) (This)->lpVtbl->ReleaseContact(This,id)
+#define IDirectManipulationViewport2_ReleaseAllContacts(This) (This)->lpVtbl->ReleaseAllContacts(This)
+#define IDirectManipulationViewport2_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
+#define IDirectManipulationViewport2_GetTag(This,riid,object,id) (This)->lpVtbl->GetTag(This,riid,object,id)
+#define IDirectManipulationViewport2_SetTag(This,object,id) (This)->lpVtbl->SetTag(This,object,id)
+#define IDirectManipulationViewport2_GetViewportRect(This,viewport) (This)->lpVtbl->GetViewportRect(This,viewport)
+#define IDirectManipulationViewport2_SetViewportRect(This,viewport) (This)->lpVtbl->SetViewportRect(This,viewport)
+#define IDirectManipulationViewport2_ZoomToRect(This,left,top,right,bottom,animate) (This)->lpVtbl->ZoomToRect(This,left,top,right,bottom,animate)
+#define IDirectManipulationViewport2_SetViewportTransform(This,matrix,count) (This)->lpVtbl->SetViewportTransform(This,matrix,count)
+#define IDirectManipulationViewport2_SyncDisplayTransform(This,matrix,count) (This)->lpVtbl->SyncDisplayTransform(This,matrix,count)
+#define IDirectManipulationViewport2_GetPrimaryContent(This,riid,object) (This)->lpVtbl->GetPrimaryContent(This,riid,object)
+#define IDirectManipulationViewport2_AddContent(This,content) (This)->lpVtbl->AddContent(This,content)
+#define IDirectManipulationViewport2_RemoveContent(This,content) (This)->lpVtbl->RemoveContent(This,content)
+#define IDirectManipulationViewport2_SetViewportOptions(This,options) (This)->lpVtbl->SetViewportOptions(This,options)
+#define IDirectManipulationViewport2_AddConfiguration(This,configuration) (This)->lpVtbl->AddConfiguration(This,configuration)
+#define IDirectManipulationViewport2_RemoveConfiguration(This,configuration) (This)->lpVtbl->RemoveConfiguration(This,configuration)
+#define IDirectManipulationViewport2_ActivateConfiguration(This,configuration) (This)->lpVtbl->ActivateConfiguration(This,configuration)
+#define IDirectManipulationViewport2_SetManualGesture(This,configuration) (This)->lpVtbl->SetManualGesture(This,configuration)
+#define IDirectManipulationViewport2_SetChaining(This,enabledTypes) (This)->lpVtbl->SetChaining(This,enabledTypes)
+#define IDirectManipulationViewport2_AddEventHandler(This,window,eventHandler,cookie) (This)->lpVtbl->AddEventHandler(This,window,eventHandler,cookie)
+#define IDirectManipulationViewport2_RemoveEventHandler(This,cookie) (This)->lpVtbl->RemoveEventHandler(This,cookie)
+#define IDirectManipulationViewport2_SetInputMode(This,mode) (This)->lpVtbl->SetInputMode(This,mode)
+#define IDirectManipulationViewport2_SetUpdateMode(This,mode) (This)->lpVtbl->SetUpdateMode(This,mode)
+#define IDirectManipulationViewport2_Stop(This) (This)->lpVtbl->Stop(This)
+#define IDirectManipulationViewport2_Abandon(This) (This)->lpVtbl->Abandon(This)
+/*** IDirectManipulationViewport2 methods ***/
+#define IDirectManipulationViewport2_AddBehavior(This,behavior,cookie) (This)->lpVtbl->AddBehavior(This,behavior,cookie)
+#define IDirectManipulationViewport2_RemoveBehavior(This,cookie) (This)->lpVtbl->RemoveBehavior(This,cookie)
+#define IDirectManipulationViewport2_RemoveAllBehaviors(This) (This)->lpVtbl->RemoveAllBehaviors(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewport2_QueryInterface(IDirectManipulationViewport2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationViewport2_AddRef(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationViewport2_Release(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationViewport methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewport2_Enable(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->Enable(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_Disable(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->Disable(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetContact(IDirectManipulationViewport2* This,UINT32 id) {
+    return This->lpVtbl->SetContact(This,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_ReleaseContact(IDirectManipulationViewport2* This,UINT32 id) {
+    return This->lpVtbl->ReleaseContact(This,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_ReleaseAllContacts(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->ReleaseAllContacts(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_GetStatus(IDirectManipulationViewport2* This,DIRECTMANIPULATION_STATUS *status) {
+    return This->lpVtbl->GetStatus(This,status);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_GetTag(IDirectManipulationViewport2* This,REFIID riid,void **object,UINT32 *id) {
+    return This->lpVtbl->GetTag(This,riid,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetTag(IDirectManipulationViewport2* This,IUnknown *object,UINT32 id) {
+    return This->lpVtbl->SetTag(This,object,id);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_GetViewportRect(IDirectManipulationViewport2* This,RECT *viewport) {
+    return This->lpVtbl->GetViewportRect(This,viewport);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetViewportRect(IDirectManipulationViewport2* This,const RECT *viewport) {
+    return This->lpVtbl->SetViewportRect(This,viewport);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_ZoomToRect(IDirectManipulationViewport2* This,const float left,const float top,const float right,const float bottom,WINBOOL animate) {
+    return This->lpVtbl->ZoomToRect(This,left,top,right,bottom,animate);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetViewportTransform(IDirectManipulationViewport2* This,const float *matrix,DWORD count) {
+    return This->lpVtbl->SetViewportTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SyncDisplayTransform(IDirectManipulationViewport2* This,const float *matrix,DWORD count) {
+    return This->lpVtbl->SyncDisplayTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_GetPrimaryContent(IDirectManipulationViewport2* This,REFIID riid,void **object) {
+    return This->lpVtbl->GetPrimaryContent(This,riid,object);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_AddContent(IDirectManipulationViewport2* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->AddContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_RemoveContent(IDirectManipulationViewport2* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->RemoveContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetViewportOptions(IDirectManipulationViewport2* This,DIRECTMANIPULATION_VIEWPORT_OPTIONS options) {
+    return This->lpVtbl->SetViewportOptions(This,options);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_AddConfiguration(IDirectManipulationViewport2* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->AddConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_RemoveConfiguration(IDirectManipulationViewport2* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->RemoveConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_ActivateConfiguration(IDirectManipulationViewport2* This,DIRECTMANIPULATION_CONFIGURATION configuration) {
+    return This->lpVtbl->ActivateConfiguration(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetManualGesture(IDirectManipulationViewport2* This,DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration) {
+    return This->lpVtbl->SetManualGesture(This,configuration);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetChaining(IDirectManipulationViewport2* This,DIRECTMANIPULATION_MOTION_TYPES enabledTypes) {
+    return This->lpVtbl->SetChaining(This,enabledTypes);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_AddEventHandler(IDirectManipulationViewport2* This,HWND window,IDirectManipulationViewportEventHandler *eventHandler,DWORD *cookie) {
+    return This->lpVtbl->AddEventHandler(This,window,eventHandler,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_RemoveEventHandler(IDirectManipulationViewport2* This,DWORD cookie) {
+    return This->lpVtbl->RemoveEventHandler(This,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetInputMode(IDirectManipulationViewport2* This,DIRECTMANIPULATION_INPUT_MODE mode) {
+    return This->lpVtbl->SetInputMode(This,mode);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_SetUpdateMode(IDirectManipulationViewport2* This,DIRECTMANIPULATION_INPUT_MODE mode) {
+    return This->lpVtbl->SetUpdateMode(This,mode);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_Stop(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_Abandon(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->Abandon(This);
+}
+/*** IDirectManipulationViewport2 methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewport2_AddBehavior(IDirectManipulationViewport2* This,IUnknown *behavior,DWORD *cookie) {
+    return This->lpVtbl->AddBehavior(This,behavior,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_RemoveBehavior(IDirectManipulationViewport2* This,DWORD cookie) {
+    return This->lpVtbl->RemoveBehavior(This,cookie);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewport2_RemoveAllBehaviors(IDirectManipulationViewport2* This) {
+    return This->lpVtbl->RemoveAllBehaviors(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationViewport2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationViewportEventHandler interface
+ */
+#ifndef __IDirectManipulationViewportEventHandler_INTERFACE_DEFINED__
+#define __IDirectManipulationViewportEventHandler_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationViewportEventHandler, 0x952121da, 0xd69f, 0x45f9, 0xb0,0xf9, 0xf2,0x39,0x44,0x32,0x1a,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("952121da-d69f-45f9-b0f9-f23944321a6d")
+IDirectManipulationViewportEventHandler : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnViewportStatusChanged(
+        IDirectManipulationViewport *viewport,
+        DIRECTMANIPULATION_STATUS current,
+        DIRECTMANIPULATION_STATUS previous) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnViewportUpdated(
+        IDirectManipulationViewport *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnContentUpdated(
+        IDirectManipulationViewport *viewport,
+        IDirectManipulationContent *content) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationViewportEventHandler, 0x952121da, 0xd69f, 0x45f9, 0xb0,0xf9, 0xf2,0x39,0x44,0x32,0x1a,0x6d)
+#endif
+#else
+typedef struct IDirectManipulationViewportEventHandlerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationViewportEventHandler *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationViewportEventHandler *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationViewportEventHandler *This);
+
+    /*** IDirectManipulationViewportEventHandler methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnViewportStatusChanged)(
+        IDirectManipulationViewportEventHandler *This,
+        IDirectManipulationViewport *viewport,
+        DIRECTMANIPULATION_STATUS current,
+        DIRECTMANIPULATION_STATUS previous);
+
+    HRESULT (STDMETHODCALLTYPE *OnViewportUpdated)(
+        IDirectManipulationViewportEventHandler *This,
+        IDirectManipulationViewport *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *OnContentUpdated)(
+        IDirectManipulationViewportEventHandler *This,
+        IDirectManipulationViewport *viewport,
+        IDirectManipulationContent *content);
+
+    END_INTERFACE
+} IDirectManipulationViewportEventHandlerVtbl;
+
+interface IDirectManipulationViewportEventHandler {
+    CONST_VTBL IDirectManipulationViewportEventHandlerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationViewportEventHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationViewportEventHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationViewportEventHandler_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationViewportEventHandler methods ***/
+#define IDirectManipulationViewportEventHandler_OnViewportStatusChanged(This,viewport,current,previous) (This)->lpVtbl->OnViewportStatusChanged(This,viewport,current,previous)
+#define IDirectManipulationViewportEventHandler_OnViewportUpdated(This,viewport) (This)->lpVtbl->OnViewportUpdated(This,viewport)
+#define IDirectManipulationViewportEventHandler_OnContentUpdated(This,viewport,content) (This)->lpVtbl->OnContentUpdated(This,viewport,content)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewportEventHandler_QueryInterface(IDirectManipulationViewportEventHandler* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationViewportEventHandler_AddRef(IDirectManipulationViewportEventHandler* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationViewportEventHandler_Release(IDirectManipulationViewportEventHandler* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationViewportEventHandler methods ***/
+static FORCEINLINE HRESULT IDirectManipulationViewportEventHandler_OnViewportStatusChanged(IDirectManipulationViewportEventHandler* This,IDirectManipulationViewport *viewport,DIRECTMANIPULATION_STATUS current,DIRECTMANIPULATION_STATUS previous) {
+    return This->lpVtbl->OnViewportStatusChanged(This,viewport,current,previous);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewportEventHandler_OnViewportUpdated(IDirectManipulationViewportEventHandler* This,IDirectManipulationViewport *viewport) {
+    return This->lpVtbl->OnViewportUpdated(This,viewport);
+}
+static FORCEINLINE HRESULT IDirectManipulationViewportEventHandler_OnContentUpdated(IDirectManipulationViewportEventHandler* This,IDirectManipulationViewport *viewport,IDirectManipulationContent *content) {
+    return This->lpVtbl->OnContentUpdated(This,viewport,content);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationViewportEventHandler_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationManager2 interface
+ */
+#ifndef __IDirectManipulationManager2_INTERFACE_DEFINED__
+#define __IDirectManipulationManager2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationManager2, 0xfa1005e9, 0x3d16, 0x484c, 0xbf,0xc9, 0x62,0xb6,0x1e,0x56,0xec,0x4e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fa1005e9-3d16-484c-bfc9-62b61e56ec4e")
+IDirectManipulationManager2 : public IDirectManipulationManager
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateBehavior(
+        REFCLSID clsid,
+        REFIID riid,
+        void **obj) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationManager2, 0xfa1005e9, 0x3d16, 0x484c, 0xbf,0xc9, 0x62,0xb6,0x1e,0x56,0xec,0x4e)
+#endif
+#else
+typedef struct IDirectManipulationManager2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationManager2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationManager2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationManager2 *This);
+
+    /*** IDirectManipulationManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *Activate)(
+        IDirectManipulationManager2 *This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *Deactivate)(
+        IDirectManipulationManager2 *This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterHitTestTarget)(
+        IDirectManipulationManager2 *This,
+        HWND window,
+        HWND hittest,
+        DIRECTMANIPULATION_HITTEST_TYPE type);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessInput)(
+        IDirectManipulationManager2 *This,
+        const MSG *msg,
+        WINBOOL *handled);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateManager)(
+        IDirectManipulationManager2 *This,
+        REFIID riid,
+        void **obj);
+
+    HRESULT (STDMETHODCALLTYPE *CreateViewport)(
+        IDirectManipulationManager2 *This,
+        IDirectManipulationFrameInfoProvider *frame,
+        HWND window,
+        REFIID riid,
+        void **obj);
+
+    HRESULT (STDMETHODCALLTYPE *CreateContent)(
+        IDirectManipulationManager2 *This,
+        IDirectManipulationFrameInfoProvider *frame,
+        REFCLSID clsid,
+        REFIID riid,
+        void **obj);
+
+    /*** IDirectManipulationManager2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateBehavior)(
+        IDirectManipulationManager2 *This,
+        REFCLSID clsid,
+        REFIID riid,
+        void **obj);
+
+    END_INTERFACE
+} IDirectManipulationManager2Vtbl;
+
+interface IDirectManipulationManager2 {
+    CONST_VTBL IDirectManipulationManager2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationManager2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationManager2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationManager2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationManager methods ***/
+#define IDirectManipulationManager2_Activate(This,window) (This)->lpVtbl->Activate(This,window)
+#define IDirectManipulationManager2_Deactivate(This,window) (This)->lpVtbl->Deactivate(This,window)
+#define IDirectManipulationManager2_RegisterHitTestTarget(This,window,hittest,type) (This)->lpVtbl->RegisterHitTestTarget(This,window,hittest,type)
+#define IDirectManipulationManager2_ProcessInput(This,msg,handled) (This)->lpVtbl->ProcessInput(This,msg,handled)
+#define IDirectManipulationManager2_GetUpdateManager(This,riid,obj) (This)->lpVtbl->GetUpdateManager(This,riid,obj)
+#define IDirectManipulationManager2_CreateViewport(This,frame,window,riid,obj) (This)->lpVtbl->CreateViewport(This,frame,window,riid,obj)
+#define IDirectManipulationManager2_CreateContent(This,frame,clsid,riid,obj) (This)->lpVtbl->CreateContent(This,frame,clsid,riid,obj)
+/*** IDirectManipulationManager2 methods ***/
+#define IDirectManipulationManager2_CreateBehavior(This,clsid,riid,obj) (This)->lpVtbl->CreateBehavior(This,clsid,riid,obj)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationManager2_QueryInterface(IDirectManipulationManager2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationManager2_AddRef(IDirectManipulationManager2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationManager2_Release(IDirectManipulationManager2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationManager methods ***/
+static FORCEINLINE HRESULT IDirectManipulationManager2_Activate(IDirectManipulationManager2* This,HWND window) {
+    return This->lpVtbl->Activate(This,window);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_Deactivate(IDirectManipulationManager2* This,HWND window) {
+    return This->lpVtbl->Deactivate(This,window);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_RegisterHitTestTarget(IDirectManipulationManager2* This,HWND window,HWND hittest,DIRECTMANIPULATION_HITTEST_TYPE type) {
+    return This->lpVtbl->RegisterHitTestTarget(This,window,hittest,type);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_ProcessInput(IDirectManipulationManager2* This,const MSG *msg,WINBOOL *handled) {
+    return This->lpVtbl->ProcessInput(This,msg,handled);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_GetUpdateManager(IDirectManipulationManager2* This,REFIID riid,void **obj) {
+    return This->lpVtbl->GetUpdateManager(This,riid,obj);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_CreateViewport(IDirectManipulationManager2* This,IDirectManipulationFrameInfoProvider *frame,HWND window,REFIID riid,void **obj) {
+    return This->lpVtbl->CreateViewport(This,frame,window,riid,obj);
+}
+static FORCEINLINE HRESULT IDirectManipulationManager2_CreateContent(IDirectManipulationManager2* This,IDirectManipulationFrameInfoProvider *frame,REFCLSID clsid,REFIID riid,void **obj) {
+    return This->lpVtbl->CreateContent(This,frame,clsid,riid,obj);
+}
+/*** IDirectManipulationManager2 methods ***/
+static FORCEINLINE HRESULT IDirectManipulationManager2_CreateBehavior(IDirectManipulationManager2* This,REFCLSID clsid,REFIID riid,void **obj) {
+    return This->lpVtbl->CreateBehavior(This,clsid,riid,obj);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationManager2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationPrimaryContent interface
+ */
+#ifndef __IDirectManipulationPrimaryContent_INTERFACE_DEFINED__
+#define __IDirectManipulationPrimaryContent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationPrimaryContent, 0xc12851e4, 0x1698, 0x4625, 0xb9,0xb1, 0x7c,0xa3,0xec,0x18,0x63,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c12851e4-1698-4625-b9b1-7ca3ec18630b")
+IDirectManipulationPrimaryContent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetSnapInterval(
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        float interval,
+        float offset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSnapPoints(
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        const float *points,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSnapType(
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        DIRECTMANIPULATION_SNAPPOINT_TYPE type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSnapCoordinate(
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,
+        float origin) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoomBoundaries(
+        float minimum,
+        float maximum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHorizontalAlignment(
+        DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVerticalAlignment(
+        DIRECTMANIPULATION_VERTICALALIGNMENT alignment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInertiaEndTransform(
+        float *matrix,
+        DWORD count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCenterPoint(
+        float *x,
+        float *y) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationPrimaryContent, 0xc12851e4, 0x1698, 0x4625, 0xb9,0xb1, 0x7c,0xa3,0xec,0x18,0x63,0x0b)
+#endif
+#else
+typedef struct IDirectManipulationPrimaryContentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationPrimaryContent *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationPrimaryContent *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationPrimaryContent *This);
+
+    /*** IDirectManipulationPrimaryContent methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetSnapInterval)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        float interval,
+        float offset);
+
+    HRESULT (STDMETHODCALLTYPE *SetSnapPoints)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        const float *points,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *SetSnapType)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        DIRECTMANIPULATION_SNAPPOINT_TYPE type);
+
+    HRESULT (STDMETHODCALLTYPE *SetSnapCoordinate)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_MOTION_TYPES motion,
+        DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,
+        float origin);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoomBoundaries)(
+        IDirectManipulationPrimaryContent *This,
+        float minimum,
+        float maximum);
+
+    HRESULT (STDMETHODCALLTYPE *SetHorizontalAlignment)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetVerticalAlignment)(
+        IDirectManipulationPrimaryContent *This,
+        DIRECTMANIPULATION_VERTICALALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *GetInertiaEndTransform)(
+        IDirectManipulationPrimaryContent *This,
+        float *matrix,
+        DWORD count);
+
+    HRESULT (STDMETHODCALLTYPE *GetCenterPoint)(
+        IDirectManipulationPrimaryContent *This,
+        float *x,
+        float *y);
+
+    END_INTERFACE
+} IDirectManipulationPrimaryContentVtbl;
+
+interface IDirectManipulationPrimaryContent {
+    CONST_VTBL IDirectManipulationPrimaryContentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationPrimaryContent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationPrimaryContent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationPrimaryContent_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationPrimaryContent methods ***/
+#define IDirectManipulationPrimaryContent_SetSnapInterval(This,motion,interval,offset) (This)->lpVtbl->SetSnapInterval(This,motion,interval,offset)
+#define IDirectManipulationPrimaryContent_SetSnapPoints(This,motion,points,count) (This)->lpVtbl->SetSnapPoints(This,motion,points,count)
+#define IDirectManipulationPrimaryContent_SetSnapType(This,motion,type) (This)->lpVtbl->SetSnapType(This,motion,type)
+#define IDirectManipulationPrimaryContent_SetSnapCoordinate(This,motion,coordinate,origin) (This)->lpVtbl->SetSnapCoordinate(This,motion,coordinate,origin)
+#define IDirectManipulationPrimaryContent_SetZoomBoundaries(This,minimum,maximum) (This)->lpVtbl->SetZoomBoundaries(This,minimum,maximum)
+#define IDirectManipulationPrimaryContent_SetHorizontalAlignment(This,alignment) (This)->lpVtbl->SetHorizontalAlignment(This,alignment)
+#define IDirectManipulationPrimaryContent_SetVerticalAlignment(This,alignment) (This)->lpVtbl->SetVerticalAlignment(This,alignment)
+#define IDirectManipulationPrimaryContent_GetInertiaEndTransform(This,matrix,count) (This)->lpVtbl->GetInertiaEndTransform(This,matrix,count)
+#define IDirectManipulationPrimaryContent_GetCenterPoint(This,x,y) (This)->lpVtbl->GetCenterPoint(This,x,y)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_QueryInterface(IDirectManipulationPrimaryContent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationPrimaryContent_AddRef(IDirectManipulationPrimaryContent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationPrimaryContent_Release(IDirectManipulationPrimaryContent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationPrimaryContent methods ***/
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetSnapInterval(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_MOTION_TYPES motion,float interval,float offset) {
+    return This->lpVtbl->SetSnapInterval(This,motion,interval,offset);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetSnapPoints(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_MOTION_TYPES motion,const float *points,DWORD count) {
+    return This->lpVtbl->SetSnapPoints(This,motion,points,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetSnapType(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_MOTION_TYPES motion,DIRECTMANIPULATION_SNAPPOINT_TYPE type) {
+    return This->lpVtbl->SetSnapType(This,motion,type);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetSnapCoordinate(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_MOTION_TYPES motion,DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,float origin) {
+    return This->lpVtbl->SetSnapCoordinate(This,motion,coordinate,origin);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetZoomBoundaries(IDirectManipulationPrimaryContent* This,float minimum,float maximum) {
+    return This->lpVtbl->SetZoomBoundaries(This,minimum,maximum);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetHorizontalAlignment(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment) {
+    return This->lpVtbl->SetHorizontalAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_SetVerticalAlignment(IDirectManipulationPrimaryContent* This,DIRECTMANIPULATION_VERTICALALIGNMENT alignment) {
+    return This->lpVtbl->SetVerticalAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_GetInertiaEndTransform(IDirectManipulationPrimaryContent* This,float *matrix,DWORD count) {
+    return This->lpVtbl->GetInertiaEndTransform(This,matrix,count);
+}
+static FORCEINLINE HRESULT IDirectManipulationPrimaryContent_GetCenterPoint(IDirectManipulationPrimaryContent* This,float *x,float *y) {
+    return This->lpVtbl->GetCenterPoint(This,x,y);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationPrimaryContent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectManipulationCompositor2 interface
+ */
+#ifndef __IDirectManipulationCompositor2_INTERFACE_DEFINED__
+#define __IDirectManipulationCompositor2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectManipulationCompositor2, 0xd38c7822, 0xf1cb, 0x43cb, 0xb4,0xb9, 0xac,0x0c,0x76,0x7a,0x41,0x2e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d38c7822-f1cb-43cb-b4b9-ac0c767a412e")
+IDirectManipulationCompositor2 : public IDirectManipulationCompositor
+{
+    virtual HRESULT STDMETHODCALLTYPE AddContentWithCrossProcessChaining(
+        IDirectManipulationPrimaryContent *content,
+        IUnknown *device,
+        IUnknown *parentVisual,
+        IUnknown *childVisual) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectManipulationCompositor2, 0xd38c7822, 0xf1cb, 0x43cb, 0xb4,0xb9, 0xac,0x0c,0x76,0x7a,0x41,0x2e)
+#endif
+#else
+typedef struct IDirectManipulationCompositor2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectManipulationCompositor2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectManipulationCompositor2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectManipulationCompositor2 *This);
+
+    /*** IDirectManipulationCompositor methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddContent)(
+        IDirectManipulationCompositor2 *This,
+        IDirectManipulationContent *content,
+        IUnknown *device,
+        IUnknown *parent,
+        IUnknown *child);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveContent)(
+        IDirectManipulationCompositor2 *This,
+        IDirectManipulationContent *content);
+
+    HRESULT (STDMETHODCALLTYPE *SetUpdateManager)(
+        IDirectManipulationCompositor2 *This,
+        IDirectManipulationUpdateManager *manager);
+
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IDirectManipulationCompositor2 *This);
+
+    /*** IDirectManipulationCompositor2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddContentWithCrossProcessChaining)(
+        IDirectManipulationCompositor2 *This,
+        IDirectManipulationPrimaryContent *content,
+        IUnknown *device,
+        IUnknown *parentVisual,
+        IUnknown *childVisual);
+
+    END_INTERFACE
+} IDirectManipulationCompositor2Vtbl;
+
+interface IDirectManipulationCompositor2 {
+    CONST_VTBL IDirectManipulationCompositor2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectManipulationCompositor2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectManipulationCompositor2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectManipulationCompositor2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectManipulationCompositor methods ***/
+#define IDirectManipulationCompositor2_AddContent(This,content,device,parent,child) (This)->lpVtbl->AddContent(This,content,device,parent,child)
+#define IDirectManipulationCompositor2_RemoveContent(This,content) (This)->lpVtbl->RemoveContent(This,content)
+#define IDirectManipulationCompositor2_SetUpdateManager(This,manager) (This)->lpVtbl->SetUpdateManager(This,manager)
+#define IDirectManipulationCompositor2_Flush(This) (This)->lpVtbl->Flush(This)
+/*** IDirectManipulationCompositor2 methods ***/
+#define IDirectManipulationCompositor2_AddContentWithCrossProcessChaining(This,content,device,parentVisual,childVisual) (This)->lpVtbl->AddContentWithCrossProcessChaining(This,content,device,parentVisual,childVisual)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_QueryInterface(IDirectManipulationCompositor2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectManipulationCompositor2_AddRef(IDirectManipulationCompositor2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectManipulationCompositor2_Release(IDirectManipulationCompositor2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectManipulationCompositor methods ***/
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_AddContent(IDirectManipulationCompositor2* This,IDirectManipulationContent *content,IUnknown *device,IUnknown *parent,IUnknown *child) {
+    return This->lpVtbl->AddContent(This,content,device,parent,child);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_RemoveContent(IDirectManipulationCompositor2* This,IDirectManipulationContent *content) {
+    return This->lpVtbl->RemoveContent(This,content);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_SetUpdateManager(IDirectManipulationCompositor2* This,IDirectManipulationUpdateManager *manager) {
+    return This->lpVtbl->SetUpdateManager(This,manager);
+}
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_Flush(IDirectManipulationCompositor2* This) {
+    return This->lpVtbl->Flush(This);
+}
+/*** IDirectManipulationCompositor2 methods ***/
+static FORCEINLINE HRESULT IDirectManipulationCompositor2_AddContentWithCrossProcessChaining(IDirectManipulationCompositor2* This,IDirectManipulationPrimaryContent *content,IUnknown *device,IUnknown *parentVisual,IUnknown *childVisual) {
+    return This->lpVtbl->AddContentWithCrossProcessChaining(This,content,device,parentVisual,childVisual);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectManipulationCompositor2_INTERFACE_DEFINED__ */
+
+#ifndef __DirectManipulation_LIBRARY_DEFINED__
+#define __DirectManipulation_LIBRARY_DEFINED__
+
+DEFINE_GUID(LIBID_DirectManipulation, 0x9fbedf98, 0xf6d8, 0x4e3b, 0xb4,0x88, 0xfa,0x66,0xdb,0xf5,0xe9,0xf3);
+
+/*****************************************************************************
+ * DirectManipulationManager coclass
+ */
+
+DEFINE_GUID(CLSID_DirectManipulationManager, 0x54e211b6, 0x3650, 0x4f75, 0x83,0x34, 0xfa,0x35,0x95,0x98,0xe1,0xc5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("54e211b6-3650-4f75-8334-fa359598e1c5") DirectManipulationManager;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DirectManipulationManager, 0x54e211b6, 0x3650, 0x4f75, 0x83,0x34, 0xfa,0x35,0x95,0x98,0xe1,0xc5)
+#endif
+#endif
+
+/*****************************************************************************
+ * DirectManipulationSharedManager coclass
+ */
+
+DEFINE_GUID(CLSID_DirectManipulationSharedManager, 0x99793286, 0x77cc, 0x4b57, 0x96,0xdb, 0x3b,0x35,0x4f,0x6f,0x9f,0xb5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("99793286-77cc-4b57-96db-3b354f6f9fb5") DirectManipulationSharedManager;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DirectManipulationSharedManager, 0x99793286, 0x77cc, 0x4b57, 0x96,0xdb, 0x3b,0x35,0x4f,0x6f,0x9f,0xb5)
+#endif
+#endif
+
+/*****************************************************************************
+ * DCompManipulationCompositor coclass
+ */
+
+DEFINE_GUID(CLSID_DCompManipulationCompositor, 0x79dea627, 0xa08a, 0x43ac, 0x8e,0xf5, 0x69,0x00,0xb9,0x29,0x91,0x26);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("79dea627-a08a-43ac-8ef5-6900b9299126") DCompManipulationCompositor;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DCompManipulationCompositor, 0x79dea627, 0xa08a, 0x43ac, 0x8e,0xf5, 0x69,0x00,0xb9,0x29,0x91,0x26)
+#endif
+#endif
+
+/*****************************************************************************
+ * DirectManipulationViewport coclass
+ */
+
+DEFINE_GUID(CLSID_DirectManipulationViewport, 0x34e211b6, 0x3650, 0x4f75, 0x83,0x34, 0xfa,0x35,0x95,0x98,0xe1,0xc5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("34e211b6-3650-4f75-8334-fa359598e1c5") DirectManipulationViewport;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DirectManipulationViewport, 0x34e211b6, 0x3650, 0x4f75, 0x83,0x34, 0xfa,0x35,0x95,0x98,0xe1,0xc5)
+#endif
+#endif
+
+#endif /* __DirectManipulation_LIBRARY_DEFINED__ */
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __directmanipulation_h__ */
diff --git a/mingw-w64-headers/include/directmanipulation.idl b/mingw-w64-headers/include/directmanipulation.idl
new file mode 100644
index 0000000..f8bd55c
--- /dev/null
+++ b/mingw-w64-headers/include/directmanipulation.idl
@@ -0,0 +1,429 @@
+/*
+ * Copyright 2019 Alistair Leslie-Hughes
+ *
+ * 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 "oaidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#if 0")
+typedef void* HWND;
+cpp_quote("#endif")
+
+interface IDirectManipulationViewportEventHandler;
+
+typedef enum DIRECTMANIPULATION_HITTEST_TYPE
+{
+    DIRECTMANIPULATION_HITTEST_TYPE_ASYNCHRONOUS     = 0x00000000,
+    DIRECTMANIPULATION_HITTEST_TYPE_SYNCHRONOUS      = 0x00000001,
+    DIRECTMANIPULATION_HITTEST_TYPE_AUTO_SYNCHRONOUS = 0x00000002
+} DIRECTMANIPULATION_HITTEST_TYPE;
+
+typedef enum DIRECTMANIPULATION_STATUS
+{
+    DIRECTMANIPULATION_BUILDING,
+    DIRECTMANIPULATION_ENABLED,
+    DIRECTMANIPULATION_DISABLED,
+    DIRECTMANIPULATION_RUNNING,
+    DIRECTMANIPULATION_INERTIA,
+    DIRECTMANIPULATION_READY,
+    DIRECTMANIPULATION_SUSPENDED
+} DIRECTMANIPULATION_STATUS;
+
+typedef enum DIRECTMANIPULATION_VIEWPORT_OPTIONS
+{
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_DEFAULT              = 0x00000000,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_AUTODISABLE          = 0x00000001,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE         = 0x00000002,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT                = 0x00000004,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_EXPLICITHITTEST      = 0x00000008,
+    DIRECTMANIPULATION_VIEWPORT_OPTIONS_DISABLEPIXELSNAPPING = 0x00000010,
+} DIRECTMANIPULATION_VIEWPORT_OPTIONS;
+
+typedef enum DIRECTMANIPULATION_CONFIGURATION
+{
+    DIRECTMANIPULATION_CONFIGURATION_NONE                = 0x00000000,
+    DIRECTMANIPULATION_CONFIGURATION_INTERACTION         = 0x00000001,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_X       = 0x00000002,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_Y       = 0x00000004,
+    DIRECTMANIPULATION_CONFIGURATION_SCALING             = 0x00000010,
+    DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_INERTIA = 0x00000020,
+    DIRECTMANIPULATION_CONFIGURATION_SCALING_INERTIA     = 0x00000080,
+    DIRECTMANIPULATION_CONFIGURATION_RAILS_X             = 0x00000100,
+    DIRECTMANIPULATION_CONFIGURATION_RAILS_Y             = 0x00000200,
+} DIRECTMANIPULATION_CONFIGURATION;
+
+typedef enum DIRECTMANIPULATION_GESTURE_CONFIGURATION
+{
+    DIRECTMANIPULATION_GESTURE_NONE                   = 0x00000000,
+    DIRECTMANIPULATION_GESTURE_DEFAULT                = 0x00000000,
+    DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_VERTICAL   = 0x00000008,
+    DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_HORIZONTAL = 0x00000010,
+    DIRECTMANIPULATION_GESTURE_PINCH_ZOOM             = 0x00000020,
+} DIRECTMANIPULATION_GESTURE_CONFIGURATION;
+
+typedef enum DIRECTMANIPULATION_MOTION_TYPES
+{
+    DIRECTMANIPULATION_MOTION_NONE       = 0x00000000,
+    DIRECTMANIPULATION_MOTION_TRANSLATEX = 0x00000001,
+    DIRECTMANIPULATION_MOTION_TRANSLATEY = 0x00000002,
+    DIRECTMANIPULATION_MOTION_ZOOM       = 0x00000004,
+    DIRECTMANIPULATION_MOTION_CENTERX    = 0x00000010,
+    DIRECTMANIPULATION_MOTION_CENTERY    = 0x00000020,
+    DIRECTMANIPULATION_MOTION_ALL        = DIRECTMANIPULATION_MOTION_TRANSLATEX | DIRECTMANIPULATION_MOTION_TRANSLATEY |
+                                           DIRECTMANIPULATION_MOTION_ZOOM | DIRECTMANIPULATION_MOTION_CENTERX |
+                                           DIRECTMANIPULATION_MOTION_CENTERY
+} DIRECTMANIPULATION_MOTION_TYPES;
+
+typedef enum DIRECTMANIPULATION_SNAPPOINT_TYPE
+{
+    DIRECTMANIPULATION_SNAPPOINT_MANDATORY,
+    DIRECTMANIPULATION_SNAPPOINT_OPTIONAL,
+    DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE,
+    DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE
+} DIRECTMANIPULATION_SNAPPOINT_TYPE;
+
+typedef enum DIRECTMANIPULATION_SNAPPOINT_COORDINATE
+{
+    DIRECTMANIPULATION_COORDINATE_BOUNDARY  = 0x00000000,
+    DIRECTMANIPULATION_COORDINATE_ORIGIN    = 0x00000001,
+    DIRECTMANIPULATION_COORDINATE_MIRRORED  = 0x00000010
+} DIRECTMANIPULATION_SNAPPOINT_COORDINATE;
+
+typedef enum DIRECTMANIPULATION_HORIZONTALALIGNMENT
+{
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE         = 0x00000000,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT         = 0x00000001,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER       = 0x00000002,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT        = 0x00000004,
+    DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER = 0x00000008
+} DIRECTMANIPULATION_HORIZONTALALIGNMENT;
+
+typedef enum DIRECTMANIPULATION_VERTICALALIGNMENT
+{
+    DIRECTMANIPULATION_VERTICALALIGNMENT_NONE         = 0x00000000,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_TOP          = 0x00000001,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER       = 0x00000002,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM       = 0x00000004,
+    DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER = 0x00000008
+} DIRECTMANIPULATION_VERTICALALIGNMENT;
+
+typedef enum DIRECTMANIPULATION_INPUT_MODE
+{
+    DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC,
+    DIRECTMANIPULATION_INPUT_MODE_MANUAL
+} DIRECTMANIPULATION_INPUT_MODE;
+
+[
+    local,
+    object,
+    uuid(fb759dba-6f4c-4c01-874e-19c8a05907f9),
+    pointer_default(unique)
+]
+interface IDirectManipulationFrameInfoProvider : IUnknown
+{
+    HRESULT GetNextFrameInfo([out] ULONGLONG *time, [out] ULONGLONG *process, [out] ULONGLONG *composition);
+}
+
+[
+    local,
+    object,
+    uuid(fbf5d3b4-70c7-4163-9322-5a6f660d6fbc),
+    pointer_default(unique)
+]
+interface IDirectManipulationManager : IUnknown
+{
+    HRESULT Activate([in] HWND window);
+
+    HRESULT Deactivate([in] HWND window);
+
+    HRESULT RegisterHitTestTarget([in] HWND window, [in] HWND hittest, [in] DIRECTMANIPULATION_HITTEST_TYPE type);
+
+    HRESULT ProcessInput([in] const MSG *msg, [out, retval] BOOL *handled);
+
+    HRESULT GetUpdateManager([in] REFIID riid, [out, iid_is(riid), retval,] void **obj);
+
+    HRESULT CreateViewport([in] IDirectManipulationFrameInfoProvider *frame, [in] HWND window,
+                           [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
+
+    HRESULT CreateContent([in] IDirectManipulationFrameInfoProvider *frame, [in] REFCLSID clsid,
+                          [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
+}
+
+[
+    local,
+    object,
+    uuid(b89962cb-3d89-442b-bb58-5098fa0f9f16),
+    pointer_default(unique)
+]
+interface IDirectManipulationContent : IUnknown
+{
+    HRESULT GetContentRect([out] RECT *size);
+
+    HRESULT SetContentRect([in] const RECT *size);
+
+    HRESULT GetViewport([in] REFIID riid, [out, iid_is(riid)] void **object);
+
+    HRESULT GetTag([in] REFIID riid, [out, iid_is(riid)] void **object, [out] UINT32 *id);
+
+    HRESULT SetTag([in, unique] IUnknown *object, [in] UINT32 id);
+
+    HRESULT GetOutputTransform([out] float *matrix, [in] DWORD count);
+
+    HRESULT GetContentTransform([out] float *matrix, [in] DWORD count);
+
+    HRESULT SyncContentTransform([in] const float *matrix, [in] DWORD count);
+}
+
+[
+    local,
+    object,
+    uuid(790b6337-64f8-4ff5-a269-b32bc2af27a7),
+    pointer_default(unique)
+]
+interface IDirectManipulationUpdateHandler : IUnknown
+{
+    HRESULT Update();
+}
+
+[
+    local,
+    object,
+    uuid(b0ae62fd-be34-46e7-9caa-d361facbb9cc),
+    pointer_default(unique)
+]
+interface IDirectManipulationUpdateManager : IUnknown
+{
+    HRESULT RegisterWaitHandleCallback([in] HANDLE handle, [in] IDirectManipulationUpdateHandler *handler,
+                                       [out] DWORD *cookie);
+
+    HRESULT UnregisterWaitHandleCallback([in] DWORD cookie);
+
+    HRESULT Update([in] IDirectManipulationFrameInfoProvider *provider);
+}
+
+[
+    local,
+    object,
+    uuid(537a0825-0387-4efa-b62f-71eb1f085a7e),
+    pointer_default(unique)
+]
+interface IDirectManipulationCompositor : IUnknown
+{
+    HRESULT AddContent([in] IDirectManipulationContent *content, [in] IUnknown *device,
+                       [in] IUnknown *parent, [in] IUnknown *child);
+
+    HRESULT RemoveContent([in] IDirectManipulationContent *content);
+
+    HRESULT SetUpdateManager([in] IDirectManipulationUpdateManager *manager);
+
+    HRESULT Flush();
+}
+
+[
+    local,
+    object,
+    uuid(28b85a3d-60a0-48bd-9ba1-5ce8d9ea3a6d),
+    pointer_default(unique)
+]
+interface IDirectManipulationViewport : IUnknown
+{
+    HRESULT Enable();
+
+    HRESULT Disable();
+
+    HRESULT SetContact([in] UINT32 id);
+
+    HRESULT ReleaseContact([in] UINT32 id);
+
+    HRESULT ReleaseAllContacts();
+
+    HRESULT GetStatus([out] DIRECTMANIPULATION_STATUS *status);
+
+    HRESULT GetTag([in] REFIID riid, [out, iid_is(riid)] void **object, [out] UINT32 *id);
+
+    HRESULT SetTag([in, unique] IUnknown *object, [in] UINT32 id);
+
+    HRESULT GetViewportRect([out, retval] RECT *viewport);
+
+    HRESULT SetViewportRect([in] const RECT *viewport);
+
+    HRESULT ZoomToRect([in] const float left, [in] const float top, [in] const float right,
+                        [in] const float bottom, [in] BOOL animate);
+
+    HRESULT SetViewportTransform([in] const float *matrix, [in] DWORD count);
+
+    HRESULT SyncDisplayTransform([in] const float *matrix, [in] DWORD count);
+
+    HRESULT GetPrimaryContent([in] REFIID riid, [out, iid_is(riid)] void **object);
+
+    HRESULT AddContent([in, unique] IDirectManipulationContent *content);
+
+    HRESULT RemoveContent([in, unique] IDirectManipulationContent *content);
+
+    HRESULT SetViewportOptions([in] DIRECTMANIPULATION_VIEWPORT_OPTIONS options);
+
+    HRESULT AddConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT RemoveConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT ActivateConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
+
+    HRESULT SetManualGesture([in] DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration);
+
+    HRESULT SetChaining([in] DIRECTMANIPULATION_MOTION_TYPES enabledTypes);
+
+    HRESULT AddEventHandler([in] HWND window, [in] IDirectManipulationViewportEventHandler *eventHandler,
+                        [out, retval] DWORD *cookie);
+
+    HRESULT RemoveEventHandler([in] DWORD cookie);
+
+    HRESULT SetInputMode([in] DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT SetUpdateMode([in] DIRECTMANIPULATION_INPUT_MODE mode);
+
+    HRESULT Stop();
+
+    HRESULT Abandon();
+}
+
+[
+    local,
+    object,
+    uuid(923ccaac-61e1-4385-b726-017af189882a),
+    pointer_default(unique)
+]
+interface IDirectManipulationViewport2 : IDirectManipulationViewport
+{
+    HRESULT AddBehavior([in] IUnknown *behavior, [out, retval] DWORD *cookie);
+
+    HRESULT RemoveBehavior([in] DWORD cookie);
+
+    HRESULT RemoveAllBehaviors();
+}
+
+[
+    local,
+    object,
+    uuid(952121DA-D69F-45F9-B0F9-F23944321A6D),
+    pointer_default(unique)
+]
+interface IDirectManipulationViewportEventHandler : IUnknown
+{
+    HRESULT OnViewportStatusChanged([in] IDirectManipulationViewport *viewport, [in] DIRECTMANIPULATION_STATUS current,
+                                    [in] DIRECTMANIPULATION_STATUS previous);
+
+    HRESULT OnViewportUpdated([in] IDirectManipulationViewport *viewport);
+
+    HRESULT OnContentUpdated([in] IDirectManipulationViewport *viewport, [in] IDirectManipulationContent *content);
+}
+
+[
+    local,
+    object,
+    uuid(fa1005e9-3d16-484c-bfc9-62b61e56ec4e),
+    pointer_default(unique)
+]
+interface IDirectManipulationManager2 : IDirectManipulationManager
+{
+    HRESULT CreateBehavior([in] REFCLSID clsid, [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
+}
+
+[
+    local,
+    object,
+    uuid(c12851e4-1698-4625-b9b1-7ca3ec18630b),
+    pointer_default(unique)
+]
+interface IDirectManipulationPrimaryContent : IUnknown
+{
+    HRESULT SetSnapInterval([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] float interval, [in] float offset);
+
+    HRESULT SetSnapPoints([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] const float *points, [in] DWORD count);
+
+    HRESULT SetSnapType([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_TYPE type);
+
+    HRESULT SetSnapCoordinate([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,
+                              [in] float origin);
+
+    HRESULT SetZoomBoundaries([in] float minimum, [in] float maximum);
+
+    HRESULT SetHorizontalAlignment([in] DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment);
+
+    HRESULT SetVerticalAlignment([in] DIRECTMANIPULATION_VERTICALALIGNMENT alignment);
+
+    HRESULT GetInertiaEndTransform([out] float *matrix, [in] DWORD count);
+
+    HRESULT GetCenterPoint([out] float *x, [out] float *y);
+}
+
+[
+    local,
+    object,
+    uuid(d38c7822-f1cb-43cb-b4b9-ac0c767a412e),
+    pointer_default(unique)
+]
+interface IDirectManipulationCompositor2 : IDirectManipulationCompositor
+{
+    HRESULT AddContentWithCrossProcessChaining([in] IDirectManipulationPrimaryContent *content, [in] IUnknown *device,
+                                               [in] IUnknown *parentVisual, [in] IUnknown *childVisual);
+}
+
+[
+    uuid(9fbedf98-f6d8-4e3b-b488-fa66dbf5e9f3),
+    version(1.0)
+]
+library DirectManipulation
+{
+    [
+        uuid(54e211b6-3650-4f75-8334-fa359598e1c5)
+    ]
+    coclass DirectManipulationManager
+    {
+        interface IDirectManipulationManager2;
+        [default] interface IDirectManipulationManager;
+    }
+
+    [
+        uuid(99793286-77cc-4b57-96db-3b354f6f9fb5)
+    ]
+    coclass DirectManipulationSharedManager
+    {
+        interface IDirectManipulationManager2;
+        [default] interface IDirectManipulationManager;
+    }
+
+    [
+        uuid(79dea627-a08a-43ac-8ef5-6900b9299126)
+    ]
+    coclass DCompManipulationCompositor
+    {
+        [default] interface IDirectManipulationCompositor;
+        interface IDirectManipulationCompositor2;
+        interface IDirectManipulationFrameInfoProvider;
+    }
+
+    [
+        noncreatable,
+        hidden,
+        uuid(34e211b6-3650-4f75-8334-fa359598e1c5)
+    ]
+    coclass DirectManipulationViewport
+    {
+        interface IDirectManipulationViewport2;
+        [default] interface IDirectManipulationViewport;
+    }
+}
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
index 0f5e003..253a917 100644
--- a/mingw-w64-headers/include/dxva2api.h
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -1348,7 +1348,7 @@
         const DXVA2_VideoProcessBltParams *pBltParams,
         const DXVA2_VideoSample *pSamples,
         UINT NumSamples,
-        HANDLE *pHandleCompleteIDirect3DDeviceManager9) = 0;
+        HANDLE *pHandleComplete) = 0;
 
 };
 #ifdef __CRT_UUID_DECL
@@ -1402,7 +1402,7 @@
         const DXVA2_VideoProcessBltParams *pBltParams,
         const DXVA2_VideoSample *pSamples,
         UINT NumSamples,
-        HANDLE *pHandleCompleteIDirect3DDeviceManager9);
+        HANDLE *pHandleComplete);
 
     END_INTERFACE
 } IDirectXVideoProcessorVtbl;
@@ -1423,7 +1423,7 @@
 #define IDirectXVideoProcessor_GetVideoProcessorCaps(This,pCaps) (This)->lpVtbl->GetVideoProcessorCaps(This,pCaps)
 #define IDirectXVideoProcessor_GetProcAmpRange(This,ProcAmpCap,pRange) (This)->lpVtbl->GetProcAmpRange(This,ProcAmpCap,pRange)
 #define IDirectXVideoProcessor_GetFilterPropertyRange(This,FilterSetting,pRange) (This)->lpVtbl->GetFilterPropertyRange(This,FilterSetting,pRange)
-#define IDirectXVideoProcessor_VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleCompleteIDirect3DDeviceManager9) (This)->lpVtbl->VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleCompleteIDirect3DDeviceManager9)
+#define IDirectXVideoProcessor_VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleComplete) (This)->lpVtbl->VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleComplete)
 #else
 /*** IUnknown methods ***/
 static FORCEINLINE HRESULT IDirectXVideoProcessor_QueryInterface(IDirectXVideoProcessor* This,REFIID riid,void **ppvObject) {
@@ -1451,8 +1451,8 @@
 static FORCEINLINE HRESULT IDirectXVideoProcessor_GetFilterPropertyRange(IDirectXVideoProcessor* This,UINT FilterSetting,DXVA2_ValueRange *pRange) {
     return This->lpVtbl->GetFilterPropertyRange(This,FilterSetting,pRange);
 }
-static FORCEINLINE HRESULT IDirectXVideoProcessor_VideoProcessBlt(IDirectXVideoProcessor* This,IDirect3DSurface9 *pRenderTarget,const DXVA2_VideoProcessBltParams *pBltParams,const DXVA2_VideoSample *pSamples,UINT NumSamples,HANDLE *pHandleCompleteIDirect3DDeviceManager9) {
-    return This->lpVtbl->VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleCompleteIDirect3DDeviceManager9);
+static FORCEINLINE HRESULT IDirectXVideoProcessor_VideoProcessBlt(IDirectXVideoProcessor* This,IDirect3DSurface9 *pRenderTarget,const DXVA2_VideoProcessBltParams *pBltParams,const DXVA2_VideoSample *pSamples,UINT NumSamples,HANDLE *pHandleComplete) {
+    return This->lpVtbl->VideoProcessBlt(This,pRenderTarget,pBltParams,pSamples,NumSamples,pHandleComplete);
 }
 #endif
 #endif
diff --git a/mingw-w64-headers/include/dxva2api.idl b/mingw-w64-headers/include/dxva2api.idl
index fc77f5c..31cacbd 100644
--- a/mingw-w64-headers/include/dxva2api.idl
+++ b/mingw-w64-headers/include/dxva2api.idl
@@ -777,7 +777,7 @@
         [in] const DXVA2_VideoProcessBltParams* pBltParams,
         [in] const DXVA2_VideoSample* pSamples,
         [in] UINT NumSamples,
-        [out] HANDLE* pHandleCompleteIDirect3DDeviceManager9);
+        [out] HANDLE* pHandleComplete);
 }
 
 /*****************************************************************************
diff --git a/mingw-w64-headers/include/mscat.h b/mingw-w64-headers/include/mscat.h
index 05d8e12..af0201f 100644
--- a/mingw-w64-headers/include/mscat.h
+++ b/mingw-w64-headers/include/mscat.h
@@ -28,6 +28,15 @@
 extern "C" {
 #endif
 
+#define CRYPTCAT_ATTR_NAMEASCII             0x00000001
+#define CRYPTCAT_ATTR_NAMEOBJID             0x00000002
+#define CRYPTCAT_ATTR_DATAASCII             0x00010000
+#define CRYPTCAT_ATTR_DATAOBJID             0x00020000
+#define CRYPTCAT_ATTR_DATAREPLACE           0x00040000
+#define CRYPTCAT_ATTR_NO_AUTO_COMPAT_ENTRY  0x01000000
+#define CRYPTCAT_ATTR_AUTHENTICATED         0x10000000
+#define CRYPTCAT_ATTR_UNAUTHENTICATED       0x20000000
+
 #define CRYPTCAT_OPEN_CREATENEW             0x00000001
 #define CRYPTCAT_OPEN_ALWAYS                0x00000002
 #define CRYPTCAT_OPEN_EXISTING              0x00000004
@@ -131,6 +140,10 @@
 CRYPTCATATTRIBUTE * WINAPI CryptCATGetCatAttrInfo(HANDLE, LPWSTR);
 CRYPTCATMEMBER    * WINAPI CryptCATGetMemberInfo(HANDLE, LPWSTR);
 HANDLE    WINAPI CryptCATOpen(LPWSTR,DWORD,HCRYPTPROV,DWORD,DWORD);
+WINBOOL   WINAPI CryptCATPersistStore(HANDLE catalog);
+CRYPTCATATTRIBUTE * WINAPI CryptCATPutAttrInfo(HANDLE catalog, CRYPTCATMEMBER *member, WCHAR *name, DWORD flags, DWORD size, BYTE *data);
+CRYPTCATATTRIBUTE * WINAPI CryptCATPutCatAttrInfo(HANDLE catalog, WCHAR *name, DWORD flags, DWORD size, BYTE *data);
+CRYPTCATMEMBER    * WINAPI CryptCATPutMemberInfo(HANDLE catalog, WCHAR *filename, WCHAR *member, GUID *subject, DWORD version, DWORD size, BYTE *data);
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
index d8e4d2f..7e48afa 100644
--- a/mingw-w64-headers/include/netlistmgr.h
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -107,6 +107,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __INetworkEvents_FWD_DEFINED__
+#define __INetworkEvents_FWD_DEFINED__
+typedef interface INetworkEvents INetworkEvents;
+#ifdef __cplusplus
+interface INetworkEvents;
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <oaidl.h>
@@ -148,6 +156,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __INetworkConnectionEvents_FWD_DEFINED__
+#define __INetworkConnectionEvents_FWD_DEFINED__
+typedef interface INetworkConnectionEvents INetworkConnectionEvents;
+#ifdef __cplusplus
+interface INetworkConnectionEvents;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __INetworkCostManager_FWD_DEFINED__
 #define __INetworkCostManager_FWD_DEFINED__
 typedef interface INetworkCostManager INetworkCostManager;
@@ -156,6 +172,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __INetworkEvents_FWD_DEFINED__
+#define __INetworkEvents_FWD_DEFINED__
+typedef interface INetworkEvents INetworkEvents;
+#ifdef __cplusplus
+interface INetworkEvents;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __INetworkListManager_FWD_DEFINED__
 #define __INetworkListManager_FWD_DEFINED__
 typedef interface INetworkListManager INetworkListManager;
@@ -172,6 +196,16 @@
 #endif /* __cplusplus */
 #endif
 
+typedef enum NLM_NETWORK_CLASS {
+    NLM_NETWORK_IDENTIFYING = 0x1,
+    NLM_NETWORK_IDENTIFIED = 0x2,
+    NLM_NETWORK_UNIDENTIFIED = 0x3
+} NLM_NETWORK_CLASS;
+typedef enum NLM_INTERNET_CONNECTIVITY {
+    NLM_INTERNET_CONNECTIVITY_WEBHIJACK = 0x1,
+    NLM_INTERNET_CONNECTIVITY_PROXIED = 0x2,
+    NLM_INTERNET_CONNECTIVITY_CORPORATE = 0x4
+} NLM_INTERNET_CONNECTIVITY;
 typedef enum NLM_CONNECTIVITY {
     NLM_CONNECTIVITY_DISCONNECTED = 0x0,
     NLM_CONNECTIVITY_IPV4_NOTRAFFIC = 0x1,
@@ -1692,6 +1726,127 @@
 
 #endif  /* __INetwork_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * INetworkEvents interface
+ */
+#ifndef __INetworkEvents_INTERFACE_DEFINED__
+#define __INetworkEvents_INTERFACE_DEFINED__
+
+typedef enum NLM_NETWORK_PROPERTY_CHANGE {
+    NLM_NETWORK_PROPERTY_CHANGE_CONNECTION = 0x1,
+    NLM_NETWORK_PROPERTY_CHANGE_DESCRIPTION = 0x2,
+    NLM_NETWORK_PROPERTY_CHANGE_NAME = 0x4,
+    NLM_NETWORK_PROPERTY_CHANGE_ICON = 0x8,
+    NLM_NETWORK_PROPERTY_CHANGE_CATEGORY_VALUE = 0x10
+} NLM_NETWORK_PROPERTY_CHANGE;
+DEFINE_GUID(IID_INetworkEvents, 0xdcb00004, 0x570f, 0x4a9b, 0x8d,0x69, 0x19,0x9f,0xdb,0xa5,0x72,0x3b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("dcb00004-570f-4a9b-8d69-199fdba5723b")
+INetworkEvents : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE NetworkAdded(
+        GUID networkId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NetworkDeleted(
+        GUID networkId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NetworkConnectivityChanged(
+        GUID networkId,
+        NLM_CONNECTIVITY newConnectivity) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NetworkPropertyChanged(
+        GUID networkId,
+        NLM_NETWORK_PROPERTY_CHANGE flags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(INetworkEvents, 0xdcb00004, 0x570f, 0x4a9b, 0x8d,0x69, 0x19,0x9f,0xdb,0xa5,0x72,0x3b)
+#endif
+#else
+typedef struct INetworkEventsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetworkEvents *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetworkEvents *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetworkEvents *This);
+
+    /*** INetworkEvents methods ***/
+    HRESULT (STDMETHODCALLTYPE *NetworkAdded)(
+        INetworkEvents *This,
+        GUID networkId);
+
+    HRESULT (STDMETHODCALLTYPE *NetworkDeleted)(
+        INetworkEvents *This,
+        GUID networkId);
+
+    HRESULT (STDMETHODCALLTYPE *NetworkConnectivityChanged)(
+        INetworkEvents *This,
+        GUID networkId,
+        NLM_CONNECTIVITY newConnectivity);
+
+    HRESULT (STDMETHODCALLTYPE *NetworkPropertyChanged)(
+        INetworkEvents *This,
+        GUID networkId,
+        NLM_NETWORK_PROPERTY_CHANGE flags);
+
+    END_INTERFACE
+} INetworkEventsVtbl;
+
+interface INetworkEvents {
+    CONST_VTBL INetworkEventsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define INetworkEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetworkEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetworkEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** INetworkEvents methods ***/
+#define INetworkEvents_NetworkAdded(This,networkId) (This)->lpVtbl->NetworkAdded(This,networkId)
+#define INetworkEvents_NetworkDeleted(This,networkId) (This)->lpVtbl->NetworkDeleted(This,networkId)
+#define INetworkEvents_NetworkConnectivityChanged(This,networkId,newConnectivity) (This)->lpVtbl->NetworkConnectivityChanged(This,networkId,newConnectivity)
+#define INetworkEvents_NetworkPropertyChanged(This,networkId,flags) (This)->lpVtbl->NetworkPropertyChanged(This,networkId,flags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT INetworkEvents_QueryInterface(INetworkEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG INetworkEvents_AddRef(INetworkEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG INetworkEvents_Release(INetworkEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** INetworkEvents methods ***/
+static FORCEINLINE HRESULT INetworkEvents_NetworkAdded(INetworkEvents* This,GUID networkId) {
+    return This->lpVtbl->NetworkAdded(This,networkId);
+}
+static FORCEINLINE HRESULT INetworkEvents_NetworkDeleted(INetworkEvents* This,GUID networkId) {
+    return This->lpVtbl->NetworkDeleted(This,networkId);
+}
+static FORCEINLINE HRESULT INetworkEvents_NetworkConnectivityChanged(INetworkEvents* This,GUID networkId,NLM_CONNECTIVITY newConnectivity) {
+    return This->lpVtbl->NetworkConnectivityChanged(This,networkId,newConnectivity);
+}
+static FORCEINLINE HRESULT INetworkEvents_NetworkPropertyChanged(INetworkEvents* This,GUID networkId,NLM_NETWORK_PROPERTY_CHANGE flags) {
+    return This->lpVtbl->NetworkPropertyChanged(This,networkId,flags);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __INetworkEvents_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
diff --git a/mingw-w64-headers/include/netlistmgr.idl b/mingw-w64-headers/include/netlistmgr.idl
index e098f72..d12b4a5 100644
--- a/mingw-w64-headers/include/netlistmgr.idl
+++ b/mingw-w64-headers/include/netlistmgr.idl
@@ -27,10 +27,26 @@
 interface IEnumNetworkConnections;
 interface INetwork;
 interface INetworkConnection;
+interface INetworkConnectionEvents;
 interface INetworkCostManager;
+interface INetworkEvents;
 interface INetworkListManager;
 interface INetworkListManagerEvents;
 
+typedef [v1_enum] enum NLM_NETWORK_CLASS
+{
+    NLM_NETWORK_IDENTIFYING  = 0x01,
+    NLM_NETWORK_IDENTIFIED   = 0x02,
+    NLM_NETWORK_UNIDENTIFIED = 0x03
+} NLM_NETWORK_CLASS;
+
+typedef [v1_enum] enum NLM_INTERNET_CONNECTIVITY
+{
+    NLM_INTERNET_CONNECTIVITY_WEBHIJACK = 0x01,
+    NLM_INTERNET_CONNECTIVITY_PROXIED   = 0x02,
+    NLM_INTERNET_CONNECTIVITY_CORPORATE = 0x04
+} NLM_INTERNET_CONNECTIVITY;
+
 typedef [v1_enum] enum NLM_CONNECTIVITY
 {
     NLM_CONNECTIVITY_DISCONNECTED      = 0x0000,
@@ -390,3 +406,35 @@
     HRESULT SetCategory(
         [in] NLM_NETWORK_CATEGORY NewCategory);
 }
+
+[
+    object,
+    oleautomation,
+    pointer_default(unique),
+    uuid(dcb00004-570f-4a9b-8d69-199fdba5723b)
+]
+interface INetworkEvents : IUnknown
+{
+    typedef enum NLM_NETWORK_PROPERTY_CHANGE
+    {
+        NLM_NETWORK_PROPERTY_CHANGE_CONNECTION     = 0x01,
+        NLM_NETWORK_PROPERTY_CHANGE_DESCRIPTION    = 0x02,
+        NLM_NETWORK_PROPERTY_CHANGE_NAME           = 0x04,
+        NLM_NETWORK_PROPERTY_CHANGE_ICON           = 0x08,
+        NLM_NETWORK_PROPERTY_CHANGE_CATEGORY_VALUE = 0x10
+    } NLM_NETWORK_PROPERTY_CHANGE;
+
+    HRESULT NetworkAdded (
+        [in] GUID networkId);
+
+    HRESULT NetworkDeleted (
+        [in] GUID networkId);
+
+    HRESULT NetworkConnectivityChanged (
+        [in] GUID networkId,
+        [in] NLM_CONNECTIVITY newConnectivity);
+
+    HRESULT NetworkPropertyChanged(
+        [in] GUID networkId,
+        [in] NLM_NETWORK_PROPERTY_CHANGE flags);
+}