Test merge of Vista/7 experimental

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@3198 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/adhoc.h b/mingw-w64-headers/include/adhoc.h
new file mode 100644
index 0000000..fee81fa
--- /dev/null
+++ b/mingw-w64-headers/include/adhoc.h
@@ -0,0 +1,354 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ADHOC
+#define _INC_ADHOC
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum tagDOT11_ADHOC_AUTH_ALGORITHM {
+  DOT11_ADHOC_AUTH_ALGO_INVALID      = -1,
+  DOT11_ADHOC_AUTH_ALGO_80211_OPEN   = 1,
+  DOT11_ADHOC_AUTH_ALGO_RSNA_PSK     = 7 
+} DOT11_ADHOC_AUTH_ALGORITHM;
+
+typedef enum tagDOT11_ADHOC_CIPHER_ALGORITHM {
+  DOT11_ADHOC_CIPHER_ALGO_INVALID   = -1,
+  DOT11_ADHOC_CIPHER_ALGO_NONE      = 0x00,
+  DOT11_ADHOC_CIPHER_ALGO_CCMP      = 0x04,
+  DOT11_ADHOC_CIPHER_ALGO_WEP       = 0x101 
+} DOT11_ADHOC_CIPHER_ALGORITHM;
+
+typedef enum tagDOT11_ADHOC_CONNECT_FAIL_REASON {
+  DOT11_ADHOC_CONNECT_FAIL_DOMAIN_MISMATCH       = 0,
+  DOT11_ADHOC_CONNECT_FAIL_PASSPHRASE_MISMATCH   = 1,
+  DOT11_ADHOC_CONNECT_FAIL_OTHER                 = 2 
+} DOT11_ADHOC_CONNECT_FAIL_REASON;
+
+typedef enum tagDOT11_ADHOC_NETWORK_CONNECTION_STATUS {
+  DOT11_ADHOC_NETWORK_CONNECTION_STATUS_INVALID        = 0,
+  DOT11_ADHOC_NETWORK_CONNECTION_STATUS_DISCONNECTED   = 11,
+  DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTING     = 12,
+  DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTED      = 13,
+  DOT11_ADHOC_NETWORK_CONNECTION_STATUS_FORMED         = 14 
+} DOT11_ADHOC_NETWORK_CONNECTION_STATUS;
+
+typedef struct IDot11AdHocInterfaceNotificationSink IDot11AdHocInterfaceNotificationSink;
+typedef struct IDot11AdHocInterface IDot11AdHocInterface;
+typedef struct IDot11AdHocManager IDot11AdHocManager;
+typedef struct IDot11AdHocManagerNotificationSink IDot11AdHocManagerNotificationSink;
+typedef struct IDot11AdHocNetwork IDot11AdHocNetwork;
+typedef struct IEnumDot11AdHocSecuritySettings IEnumDot11AdHocSecuritySettings;
+typedef struct IEnumDot11AdHocNetworks IEnumDot11AdHocNetworks;
+typedef struct IDot11AdHocSecuritySettings IDot11AdHocSecuritySettings;
+typedef struct IEnumDot11AdHocNetworks IEnumDot11AdHocNetworks;
+typedef struct IEnumDot11AdHocInterfaces IEnumDot11AdHocInterfaces;
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocInterfaceNotificationSink
+DECLARE_INTERFACE_(IDot11AdHocInterfaceNotificationSink,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocInterfaceNotificationSink methods */
+    STDMETHOD_(HRESULT,OnConnectionStatusChange)(THIS_ DOT11_ADHOC_NETWORK_CONNECTION_STATUS eStatus) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocInterfaceNotificationSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocInterfaceNotificationSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocInterfaceNotificationSink_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocInterf
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocInterface
+DECLARE_INTERFACE_(IDot11AdHocInterface,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocInterface methods */
+    STDMETHOD_(HRESULT,GetDeviceSignature)(THIS_ GUID *pSignature) PURE;
+    STDMETHOD_(HRESULT,GetFriendlyName)(THIS_ LPWSTR *ppszName) PURE;
+    STDMETHOD_(HRESULT,IsDot11d)(THIS_ BOOLEAN *pf11d) PURE;
+    STDMETHOD_(HRESULT,IsAdHocCapable)(THIS_ BOOLEAN *pfAdHocCapable) PURE;
+    STDMETHOD_(HRESULT,IsRadioOn)(THIS_ BOOLEAN *pfIsRadioOn) PURE;
+    STDMETHOD_(HRESULT,GetActiveNetwork)(THIS_ IDot11AdHocNetwork **ppNetwork) PURE;
+    STDMETHOD_(HRESULT,GetIEnumSecuritySettings)(THIS_ IEnumDot11AdHocSecuritySettings **ppEnum) PURE;
+    STDMETHOD_(HRESULT,GetIEnumDot11AdHocNetworks)(THIS_ GUID *pFilterGuid,IEnumDot11AdHocNetworks **ppEnum) PURE;
+    STDMETHOD_(HRESULT,GetStatus)(THIS_ DOT11_ADHOC_NETWORK_CONNECTION_STATUS *pState) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocInterface_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocInterface_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocInterface_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocInterface_GetDeviceSignature(This,pSignature) (This)->lpVtbl->GetDeviceSignature(This,pSignature)
+#define IDot11AdHocInterface_GetFriendlyName(This,ppszName) (This)->lpVtbl->GetFriendlyName(This,ppszName)
+#define IDot11AdHocInterface_IsDot11d(This,pf11d) (This)->lpVtbl->IsDot11d(This,pf11d)
+#define IDot11AdHocInterface_IsAdHocCapable(This,pfAdHocCapable) (This)->lpVtbl->IsAdHocCapable(This,pfAdHocCapable)
+#define IDot11AdHocInterface_IsRadioOn(This,pfIsRadioOn) (This)->lpVtbl->IsRadioOn(This,pfIsRadioOn)
+#define IDot11AdHocInterface_GetActiveNetwork(This,ppNetwork) (This)->lpVtbl->GetActiveNetwork(This,ppNetwork)
+#define IDot11AdHocInterface_GetIEnumSecuritySettings(This,ppEnum) (This)->lpVtbl->GetIEnumSecuritySettings(This,ppEnum)
+#define IDot11AdHocInterface_GetIEnumDot11AdHocNetworks(This,pFilterGuid,ppEnum) (This)->lpVtbl->GetIEnumDot11AdHocNetworks(This,pFilterGuid,ppEnum)
+#define IDot11AdHocInterface_GetStatus(This,pState) (This)->lpVtbl->GetStatus(This,pState)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocManager
+DECLARE_INTERFACE_(IDot11AdHocManager,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocManager methods */
+    STDMETHOD_(HRESULT,CreateNetwork)(THIS_ LPCWSTR Name,LPCWSTR Password,LONG GeographicalId,IDot11AdHocInterface *pInterface,IDot11AdHocSecuritySettings *pSecurity,GUID *pContextGuid,IDot11AdHocNetwork **pIAdHoc) PURE;
+    STDMETHOD_(HRESULT,CommitCreatedNetwork)(THIS_ IDot11AdHocNetwork *pIAdHoc,BOOLEAN fSaveProfile,BOOLEAN fMakeSavedProfileUserSpecific) PURE;
+    STDMETHOD_(HRESULT,GetIEnumDot11AdHocNetworks)(THIS_ GUID *pContextGuid,IEnumDot11AdHocNetworks **ppEnum) PURE;
+    STDMETHOD_(HRESULT,GetIEnumDot11AdHocInterfaces)(THIS_ IEnumDot11AdHocInterfaces **ppEnum) PURE;
+    STDMETHOD_(HRESULT,GetNetwork)(THIS_ GUID *NetworkSignature,IDot11AdHocNetwork **pNetwork) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocManager_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocManager_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocManager_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocManager_CreateNetwork(This,Name,Password,GeographicalId,pInterface,pSecurity,pContextGuid,pIAdHoc) (This)->lpVtbl->CreateNetwork(This,Name,Password,GeographicalId,pInterface,pSecurity,pContextGuid,pIAdHoc)
+#define IDot11AdHocManager_CommitCreatedNetwork(This,pIAdHoc,fSaveProfile,fMakeSavedProfileUserSpecific) (This)->lpVtbl->CommitCreatedNetwork(This,pIAdHoc,fSaveProfile,fMakeSavedProfileUserSpecific)
+#define IDot11AdHocManager_GetIEnumDot11AdHocNetworks(This,pContextGuid,ppEnum) (This)->lpVtbl->GetIEnumDot11AdHocNetworks(This,pContextGuid,ppEnum)
+#define IDot11AdHocManager_GetIEnumDot11AdHocInterfaces(This,ppEnum) (This)->lpVtbl->GetIEnumDot11AdHocInterfaces(This,ppEnum)
+#define IDot11AdHocManager_GetNetwork(This,NetworkSignature,pNetwork) (This)->lpVtbl->GetNetwork(This,NetworkSignature,pNetwork)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocManagerNotificationSink
+DECLARE_INTERFACE_(IDot11AdHocManagerNotificationSink,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocManagerNotificationSink methods */
+    STDMETHOD_(HRESULT,OnNetworkAdd)(THIS_ IDot11AdHocNetwork *pIAdHocNetwork) PURE;
+    STDMETHOD_(HRESULT,OnNetworkRemove)(THIS_ GUID *Signature) PURE;
+    STDMETHOD_(HRESULT,OnInterfaceAdd)(THIS_ IDot11AdHocInterface *pIAdHocInterface) PURE;
+    STDMETHOD_(HRESULT,OnInterfaceRemove)(THIS_ GUID *Signature) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocManagerNotificationSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocManagerNotificationSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocManagerNotificationSink_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocManagerNotificationSink_OnNetworkAdd(This,pIAdHocNetwork) (This)->lpVtbl->OnNetworkAdd(This,pIAdHocNetwork)
+#define IDot11AdHocManagerNotificationSink_OnNetworkRemove(This,Signature) (This)->lpVtbl->OnNetworkRemove(This,Signature)
+#define IDot11AdHocManagerNotificationSink_OnInterfaceAdd(This,pIAdHocInterface) (This)->lpVtbl->OnInterfaceAdd(This,pIAdHocInterface)
+#define IDot11AdHocManagerNotificationSink_OnInterfaceRemove(This,Signature) (This)->lpVtbl->OnInterfaceRemove(This,Signature)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocNetwork
+DECLARE_INTERFACE_(IDot11AdHocNetwork,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocNetwork methods */
+    STDMETHOD_(HRESULT,GetStatus)(THIS_ DOT11_ADHOC_NETWORK_CONNECTION_STATUS *eStatus) PURE;
+    STDMETHOD_(HRESULT,GetSSID)(THIS_ LPWSTR *ppszwSSID) PURE;
+    STDMETHOD_(HRESULT,HasProfile)(THIS_ BOOLEAN *pf11d) PURE;
+    STDMETHOD_(HRESULT,GetProfileName)(THIS_ LPWSTR *ppszwProfileName) PURE;
+    STDMETHOD_(HRESULT,DeleteProfile)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetSignalQuality)(THIS_ ULONG *puStrengthValue,ULONG *puStrengthMax) PURE;
+    STDMETHOD_(HRESULT,GetSecuritySetting)(THIS_ IDot11AdHocSecuritySettings **pAdHocSecuritySetting) PURE;
+    STDMETHOD_(HRESULT,GetContextGuid)(THIS_ GUID *pContextGuid) PURE;
+    STDMETHOD_(HRESULT,GetSignature)(THIS_ GUID *pSignature) PURE;
+    STDMETHOD_(HRESULT,GetInterface)(THIS_ IDot11AdHocInterface **pAdHocInterface) PURE;
+    STDMETHOD_(HRESULT,Connect)(THIS_ LPCWSTR Passphrase,LONG GeographicalId,BOOLEAN fSaveProfile,BOOLEAN fMakeSavedProfileUserSpecific) PURE;
+    STDMETHOD_(HRESULT,Disconnect)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocNetwork_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocNetwork_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocNetwork_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocNetwork_GetStatus(This,eStatus) (This)->lpVtbl->GetStatus(This,eStatus)
+#define IDot11AdHocNetwork_GetSSID(This,ppszwSSID) (This)->lpVtbl->GetSSID(This,ppszwSSID)
+#define IDot11AdHocNetwork_HasProfile(This,pf11d) (This)->lpVtbl->HasProfile(This,pf11d)
+#define IDot11AdHocNetwork_GetProfileName(This,ppszwProfileName) (This)->lpVtbl->GetProfileName(This,ppszwProfileName)
+#define IDot11AdHocNetwork_DeleteProfile() (This)->lpVtbl->DeleteProfile(This)
+#define IDot11AdHocNetwork_GetSignalQuality(This,puStrengthValue,puStrengthMax) (This)->lpVtbl->GetSignalQuality(This,puStrengthValue,puStrengthMax)
+#define IDot11AdHocNetwork_GetSecuritySetting(This,pAdHocSecuritySetting) (This)->lpVtbl->GetSecuritySetting(This,pAdHocSecuritySetting)
+#define IDot11AdHocNetwork_GetContextGuid(This,pContextGuid) (This)->lpVtbl->GetContextGuid(This,pContextGuid)
+#define IDot11AdHocNetwork_GetSignature(This,pSignature) (This)->lpVtbl->GetSignature(This,pSignature)
+#define IDot11AdHocNetwork_GetInterface(This,pAdHocInterface) (This)->lpVtbl->GetInterface(This,pAdHocInterface)
+#define IDot11AdHocNetwork_Connect(This,Passphrase,GeographicalId,fSaveProfile,fMakeSavedProfileUserSpecific) (This)->lpVtbl->Connect(This,Passphrase,GeographicalId,fSaveProfile,fMakeSavedProfileUserSpecific)
+#define IDot11AdHocNetwork_Disconnect() (This)->lpVtbl->Disconnect(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocNetworkNotificationSink
+DECLARE_INTERFACE_(IDot11AdHocNetworkNotificationSink,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocNetworkNotificationSink methods */
+    STDMETHOD_(HRESULT,OnStatusChange)(THIS_ DOT11_ADHOC_NETWORK_CONNECTION_STATUS eStatus) PURE;
+    STDMETHOD_(HRESULT,OnConnectFail)(THIS_ DOT11_ADHOC_CONNECT_FAIL_REASON eFailReason) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocNetworkNotificationSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocNetworkNotificationSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocNetworkNotificationSink_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocNetworkNotificationSink_OnStatusChange(This,eStatus) (This)->lpVtbl->OnStatusChange(This,eStatus)
+#define IDot11AdHocNetworkNotificationSink_OnConnectFail(This,eFailReason) (This)->lpVtbl->OnConnectFail(This,eFailReason)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDot11AdHocSecuritySettings
+DECLARE_INTERFACE_(IDot11AdHocSecuritySettings,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDot11AdHocSecuritySettings methods */
+    STDMETHOD_(HRESULT,GetDot11AuthAlgorithm)(THIS_ DOT11_ADHOC_AUTH_ALGORITHM *pAuth) PURE;
+    STDMETHOD_(HRESULT,GetDot11CipherAlgorithm)(THIS_ DOT11_ADHOC_CIPHER_ALGORITHM *pCipher) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDot11AdHocSecuritySettings_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDot11AdHocSecuritySettings_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDot11AdHocSecuritySettings_Release(This) (This)->pVtbl->Release(This)
+#define IDot11AdHocSecuritySettings_GetDot11AuthAlgorithm(This,pAuth) (This)->lpVtbl->GetDot11AuthAlgorithm(This,pAuth)
+#define IDot11AdHocSecuritySettings_GetDot11CipherAlgorithm(This,pCipher) (This)->lpVtbl->GetDot11CipherAlgorithm(This,pCipher)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IEnumDot11AdHocInterfaces
+DECLARE_INTERFACE_(IEnumDot11AdHocInterfaces,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IEnumDot11AdHocInterfaces methods */
+    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cElt,IDot11AdHocInterface **rgElt,ULONG *pcEltFetched) PURE;
+    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cElt) PURE;
+    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumDot11AdHocInterfaces **ppEnum) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IEnumDot11AdHocInterfaces_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumDot11AdHocInterfaces_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IEnumDot11AdHocInterfaces_Release(This) (This)->pVtbl->Release(This)
+#define IEnumDot11AdHocInterfaces_Next(This,cElt,rgElt,pcEltFetched) (This)->lpVtbl->Next(This,cElt,rgElt,pcEltFetched)
+#define IEnumDot11AdHocInterfaces_Skip(This,cElt) (This)->lpVtbl->Skip(This,cElt)
+#define IEnumDot11AdHocInterfaces_Reset() (This)->lpVtbl->Reset(This)
+#define IEnumDot11AdHocInterfaces_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IEnumDot11AdHocNetworks
+DECLARE_INTERFACE_(IEnumDot11AdHocNetworks,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IEnumDot11AdHocNetworks methods */
+    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cElt,IDot11AdHocNetwork **rgElt,ULONG *pcEltFetched) PURE;
+    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cElt) PURE;
+    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumDot11AdHocNetworks **ppEnum) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IEnumDot11AdHocNetworks_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumDot11AdHocNetworks_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IEnumDot11AdHocNetworks_Release(This) (This)->pVtbl->Release(This)
+#define IEnumDot11AdHocNetworks_Next(This,cElt,rgElt,pcEltFetched) (This)->lpVtbl->Next(This,cElt,rgElt,pcEltFetched)
+#define IEnumDot11AdHocNetworks_Skip(This,cElt) (This)->lpVtbl->Skip(This,cElt)
+#define IEnumDot11AdHocNetworks_Reset() (This)->lpVtbl->Reset(This)
+#define IEnumDot11AdHocNetworks_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IEnumDot11AdHocSecuritySettings
+DECLARE_INTERFACE_(IEnumDot11AdHocSecuritySettings,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IEnumDot11AdHocSecuritySettings methods */
+    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cElt,IDot11AdHocSecuritySettings **rgElt,ULONG *pcEltFetched) PURE;
+    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cElt) PURE;
+    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumDot11AdHocSecuritySettings **ppEnum) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IEnumDot11AdHocSecuritySettings_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumDot11AdHocSecuritySettings_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IEnumDot11AdHocSecuritySettings_Release(This) (This)->pVtbl->Release(This)
+#define IEnumDot11AdHocSecuritySettings_Next(This,cElt,rgElt,pcEltFetched) (This)->lpVtbl->Next(This,cElt,rgElt,pcEltFetched)
+#define IEnumDot11AdHocSecuritySettings_Skip(This,cElt) (This)->lpVtbl->Skip(This,cElt)
+#define IEnumDot11AdHocSecuritySettings_Reset() (This)->lpVtbl->Reset(This)
+#define IEnumDot11AdHocSecuritySettings_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_ADHOC*/
diff --git a/mingw-w64-headers/include/atacct.h b/mingw-w64-headers/include/atacct.h
new file mode 100644
index 0000000..56ec4ed
--- /dev/null
+++ b/mingw-w64-headers/include/atacct.h
@@ -0,0 +1,21 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ATACCT
+#define _INC_ATACCT
+
+HRESULT GetNetScheduleAccountInformation(
+  LPCWSTR pwszServerName,
+  DWORD ccAccount,
+  WCHAR wszAccount[]
+);
+
+HRESULT SetNetScheduleAccountInformation(
+  LPCWSTR pwszServerName,
+  LPCWSTR pwszAccount,
+  LPCWSTR pwszPassword
+);
+
+#endif /*_INC_ATACCT*/
diff --git a/mingw-w64-headers/include/audioapotypes.h b/mingw-w64-headers/include/audioapotypes.h
new file mode 100644
index 0000000..5df0ad6
--- /dev/null
+++ b/mingw-w64-headers/include/audioapotypes.h
@@ -0,0 +1,31 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_AUDIOAPOTYPES
+#define _INC_AUDIOAPOTYPES
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum APO_BUFFER_FLAGS {
+  BUFFER_INVALID   = 0,
+  BUFFER_VALID     = 1,
+  BUFFER_SILENT    = 2 
+} APO_BUFFER_FLAGS;
+
+typedef struct APO_CONNECTION_PROPERTY {
+  UINT_PTR         pBuffer;
+  UINT32           u32ValidFrameCount;
+  APO_BUFFER_FLAGS u32BufferFlags;
+  UINT32           u32Signature;
+} APO_CONNECTION_PROPERTY;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_AUDIOAPOTYPES*/
diff --git a/mingw-w64-headers/include/audioengineendpoint.h b/mingw-w64-headers/include/audioengineendpoint.h
new file mode 100644
index 0000000..a0cad61
--- /dev/null
+++ b/mingw-w64-headers/include/audioengineendpoint.h
@@ -0,0 +1,49 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_AUDIOENGINEENDPOINT
+#define _INC_AUDIOENGINEENDPOINT
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum AE_POSITION_FLAGS {
+  POSITION_INVALID         = 0,
+  POSITION_DISCONTINUOUS   = 1,
+  POSITION_CONTINUOUS      = 2,
+  POSITION_QPC_ERROR       = 4 
+} AE_POSITION_FLAGS;
+
+typedef struct AE_CURRENT_POSITION {
+  UINT64            u64DevicePosition;
+  UINT64            u64StreamPosition;
+  UINT64            u64PaddingFrames;
+  HNSTIME           hnsQPCPosition;
+  FLOAT32           f32FramesPerSecond;
+  AE_POSITION_FLAGS Flag;
+} AE_CURRENT_POSITION, *PAE_CURRENT_POSITION;
+
+typedef struct _AUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS {
+  UINT32       u32Size;
+  LONGLONG     hConnection;
+  BOOL         bIsRtCapable;
+  HNSTIME      hnsBufferDuration;
+  HNSTIME      hnsPeriod;
+  UINT32       u32LatencyCoefficient;
+  WAVEFORMATEX wfxDeviceFormat;
+} AUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS, *PAUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS;
+
+typedef struct _AUDIO_ENDPOINT_SHARED_CREATE_PARAMS {
+  UINT32 u32Size;
+  UINT32 u32TSSessionId;
+} AUDIO_ENDPOINT_SHARED_CREATE_PARAMS, *PAUDIO_ENDPOINT_SHARED_CREATE_PARAMS;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_AUDIOENGINEENDPOINT*/
diff --git a/mingw-w64-headers/include/avrt.h b/mingw-w64-headers/include/avrt.h
new file mode 100644
index 0000000..97231c0
--- /dev/null
+++ b/mingw-w64-headers/include/avrt.h
@@ -0,0 +1,97 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_AVRT
+#define _INC_AVRT
+
+#if (_WIN32_WINNT >= 0x0600)
+#define AVRT_PRIORITY_CRITICAL 2
+#define AVRT_PRIORITY_HIGH     1
+#define AVRT_PRIORITY_LOW      -1
+#define AVRT_PRIORITY_NORMAL   0
+
+#define AvSetMmThreadCharacteristics __MINGW_NAME_AW(AvSetMmThreadCharacteristics)
+#define AvSetMmMaxThreadCharacteristics __MINGW_NAME_AW(AvSetMmMaxThreadCharacteristics)
+#define AvRtCreateThreadOrderingGroupEx __MINGW_NAME_AW(AvRtCreateThreadOrderingGroupEx)
+
+WINBOOL WINAPI AvQuerySystemResponsiveness(
+  HANDLE AvrtHandle,
+  PULONG SystemResponsivenessValue
+);
+
+HANDLE WINAPI AvSetMmThreadCharacteristicsA(
+  LPCSTR TaskName,
+  LPDWORD TaskIndex
+);
+
+HANDLE WINAPI AvSetMmThreadCharacteristicsW(
+  LPCWSTR TaskName,
+  LPDWORD TaskIndex
+);
+
+WINBOOL WINAPI AvRevertMmThreadCharacteristics(
+  HANDLE AvrtHandle
+);
+
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(
+  LPCSTR FirstTask,
+  LPCSTR SecondTask,
+  LPDWORD TaskIndex
+);
+
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(
+  LPCWSTR FirstTask,
+  LPCWSTR SecondTask,
+  LPDWORD TaskIndex
+);
+
+WINBOOL WINAPI AvSetMmThreadPriority(
+  HANDLE AvrtHandle,
+  AVRT_PRIORITY Priority
+);
+
+WINBOOL WINAPI AvRtCreateThreadOrderingGroup(
+  PHANDLE Context,
+  PLARGE_INTEGER Period,
+  GUID *ThreadOrderingGuid,
+  PLARGE_INTEGER Timeout
+);
+
+WINBOOL WINAPI AvRtCreateThreadOrderingGroupExA(
+  PHANDLE Context,
+  PLARGE_INTEGER Period,
+  GUID *ThreadOrderingGuid,
+  PLARGE_INTEGER Timeout,
+  LPCSTR TaskName
+);
+
+WINBOOL WINAPI AvRtCreateThreadOrderingGroupExW(
+  PHANDLE Context,
+  PLARGE_INTEGER Period,
+  GUID *ThreadOrderingGuid,
+  PLARGE_INTEGER Timeout,
+  LPCWSTR TaskName
+);
+
+WINBOOL WINAPI AvRtDeleteThreadOrderingGroup(
+  HANDLE Context
+);
+
+WINBOOL WINAPI AvRtJoinThreadOrderingGroup(
+  PHANDLE Context,
+  GUID *ThreadOrderingGuid,
+  WINBOOL Before
+);
+
+WINBOOL WINAPI AvRtLeaveThreadOrderingGroup(
+  HANDLE Context
+);
+
+WINBOOL WINAPI AvRtWaitOnThreadOrderingGroup(
+  HANDLE Context
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_AVRT*/
diff --git a/mingw-w64-headers/include/bcrypt.h b/mingw-w64-headers/include/bcrypt.h
new file mode 100644
index 0000000..4faa7e9
--- /dev/null
+++ b/mingw-w64-headers/include/bcrypt.h
@@ -0,0 +1,650 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_BCRYPT
+#define _INC_BCRYPT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifndef _NTDEF_
+  typedef LONG NTSTATUS,*PNTSTATUS;
+#endif
+
+#define BCRYPT_CIPHER_OPERATION                 0x00000001
+#define BCRYPT_HASH_OPERATION                   0x00000002
+#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION  0x00000004
+#define BCRYPT_SECRET_AGREEMENT_OPERATION       0x00000008
+#define BCRYPT_SIGNATURE_OPERATION              0x00000010
+#define BCRYPT_RNG_OPERATION                    0x00000020
+
+#define BCRYPT_KEY_DATA_BLOB_MAGIC              0x4d42444b
+#define BCRYPT_KEY_DATA_BLOB_VERSION1           1
+
+#define BCRYPT_DH_PARAMETERS_MAGIC              0x4d504844
+
+#define BCRYPT_DSA_PUBLIC_MAGIC                 0x42505344
+#define BCRYPT_DSA_PRIVATE_MAGIC                0x56505344
+
+#define BCRYPT_DSA_PARAMETERS_MAGIC             0x4d505344
+
+#define BCRYPT_ALGORITHM_NAME                   L"AlgorithmName"
+#define BCRYPT_AUTH_TAG_LENGTH                  L"AuthTagLength"
+#define BCRYPT_BLOCK_LENGTH                     L"BlockLength"
+#define BCRYPT_BLOCK_SIZE_LIST                  L"BlockSizeList"
+#define BCRYPT_CHAINING_MODE                    L"ChainingMode"
+#define BCRYPT_CHAIN_MODE_CBC                   L"ChainingModeCBC"
+#define BCRYPT_CHAIN_MODE_CCM                   L"ChainingModeCCM"
+#define BCRYPT_CHAIN_MODE_CFB                   L"ChainingModeCFB"
+#define BCRYPT_CHAIN_MODE_ECB                   L"ChainingModeECB"
+#define BCRYPT_CHAIN_MODE_GCM                   L"ChainingModeGCM"
+#define BCRYPT_CHAIN_MODE_NA                    L"ChainingModeN/A"
+#define BCRYPT_DH_PARAMETERS                    L"DHParameters"
+#define BCRYPT_DSA_PARAMETERS                   L"DSAParameters"
+#define BCRYPT_EFFECTIVE_KEY_LENGTH             L"EffectiveKeyLength"
+#define BCRYPT_HASH_BLOCK_LENGTH                L"HashBlockLength"
+#define BCRYPT_HASH_LENGTH                      L"HashDigestLength"
+#define BCRYPT_HASH_OID_LIST                    L"HashOIDList"
+#define BCRYPT_INITIALIZATION_VECTOR            L"IV"
+#define BCRYPT_KEY_LENGTH                       L"KeyLength"
+#define BCRYPT_KEY_LENGTHS                      L"KeyLengths"
+#define BCRYPT_KEY_OBJECT_LENGTH                L"KeyObjectLength"
+#define BCRYPT_KEY_STRENGTH                     L"KeyStrength"
+#define BCRYPT_OBJECT_LENGTH                    L"ObjectLength"
+#define BCRYPT_PADDING_SCHEMES                  L"PaddingSchemes"
+#define BCRYPT_SUPPORTED_PAD_ROUTER             0x00000001
+#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC          0x00000002
+#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG          0x00000004
+#define BCRYPT_SUPPORTED_PAD_OAEP               0x00000008
+#define BCRYPT_SUPPORTED_PAD_PSS                0x00000010
+#define BCRYPT_PROVIDER_HANDLE                  L"ProviderHandle"
+#define BCRYPT_SIGNATURE_LENGTH                 L"SignatureLength"
+
+#define KDF_HASH_ALGORITHM                      0
+#define KDF_SECRET_PREPEND                      1
+#define KDF_SECRET_APPEND                       2
+#define KDF_HMAC_KEY                            3
+#define KDF_TLS_PRF_LABEL                       4
+#define KDF_TLS_PRF_SEED                        5
+#define KDF_SECRET_HANDLE                       6
+
+#define BCRYPT_KDF_HASH (L"HASH")
+#define BCRYPT_KDF_HASH (L"HASH")
+#define BCRYPT_KDF_TLS_PRF (L"TLS_PRF")
+#define BCRYPT_KDF_SP80056A_CONCAT (L"SP800_56A_CONCAT")
+
+#define CRYPT_ALL_FUNCTIONS 1
+#define CRYPT_ALL_PROVIDERS 2
+
+typedef LPVOID BCRYPT_KEY_HANDLE;
+typedef LPVOID BCRYPT_ALG_HANDLE;
+typedef LPVOID BCRYPT_HASH_HANDLE;
+typedef LPVOID BCRYPT_SECRET_HANDLE;
+typedef LPVOID BCRYPT_HANDLE;
+
+typedef struct _BCRYPT_ALGORITHM_IDENTIFIER {
+  LPWSTR pszName;
+  ULONG  dwClass;
+  ULONG  dwFlags;
+} BCRYPT_ALGORITHM_IDENTIFIER;
+
+typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO {
+  ULONG     cbSize;
+  ULONG     dwInfoVersion;
+  PUCHAR    pbNonce;
+  ULONG     cbNonce;
+  PUCHAR    pbAuthData;
+  ULONG     cbAuthData;
+  PUCHAR    pbTag;
+  ULONG     cbTag;
+  PUCHAR    pbMacContext;
+  ULONG     cbMacContext;
+  ULONG     cbAAD;
+  ULONGLONG cbData;
+  ULONG     dwFlags;
+} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO;
+
+typedef struct _BCRYPT_DH_KEY_BLOB {
+  ULONG dwMagic;
+  ULONG cbKey;
+} BCRYPT_DH_KEY_BLOB, *PBCRYPT_DH_KEY_BLOB;
+
+typedef struct _BCRYPT_DH_PARAMETER_HEADER {
+  ULONG cbLength;
+  ULONG dwMagic;
+  ULONG cbKeyLength;
+} BCRYPT_DH_PARAMETER_HEADER;
+
+typedef struct _BCRYPT_DSA_KEY_BLOB {
+  ULONG dwMagic;
+  ULONG cbKey;
+  UCHAR Count[4];
+  UCHAR Seed[20];
+  UCHAR q[20];
+} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB;
+
+typedef struct _BCRYPT_DSA_PARAMETER_HEADER {
+  ULONG cbLength;
+  ULONG dwMagic;
+  ULONG cbKeyLength;
+  UCHAR Count[4];
+  UCHAR Seed[20];
+  UCHAR q[20];
+} BCRYPT_DSA_PARAMETER_HEADER, *PBCRYPT_DSA_PARAMETER_HEADER;
+
+typedef struct _BCRYPT_ECCKEY_BLOB {
+  ULONG Magic;
+  ULONG cbKey;
+} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;
+
+typedef struct _BCRYPT_INTERFACE_VERSION {
+  USHORT MajorVersion;
+  USHORT MinorVersion;
+} BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION;
+
+typedef struct _BCRYPT_KEY_BLOB {
+  ULONG Magic;
+} BCRYPT_KEY_BLOB;
+
+typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER {
+  ULONG dwMagic;
+  ULONG dwVersion;
+  ULONG cbKeyData;
+} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;
+
+typedef struct __BCRYPT_KEY_LENGTHS_STRUCT {
+  ULONG dwMinLength;
+  ULONG dwMaxLength;
+  ULONG dwIncrement;
+} BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT;
+
+typedef struct _BCRYPT_OAEP_PADDING_INFO {
+  LPCWSTR pszAlgId;
+  PUCHAR  pbLabel;
+  ULONG   cbLabel;
+} BCRYPT_OAEP_PADDING_INFO;
+
+typedef struct _BCRYPT_OID {
+  ULONG  cbOID;
+  PUCHAR pbOID;
+} BCRYPT_OID;
+
+typedef struct _BCRYPT_OID_LIST {
+  ULONG      dwOIDCount;
+  BCRYPT_OID *pOIDs;
+} BCRYPT_OID_LIST;
+
+typedef struct _BCRYPT_PKCS1_PADDING_INFO {
+  LPCWSTR pszAlgId;
+} BCRYPT_PKCS1_PADDING_INFO;
+
+typedef struct _BCRYPT_PROVIDER_NAME {
+  LPWSTR pszProviderName;
+} BCRYPT_PROVIDER_NAME;
+
+typedef struct _BCRYPT_PSS_PADDING_INFO {
+  LPCWSTR pszAlgId;
+  ULONG   cbSalt;
+} BCRYPT_PSS_PADDING_INFO;
+
+typedef struct _BCRYPT_RSAKEY_BLOB {
+  ULONG Magic;
+  ULONG BitLength;
+  ULONG cbPublicExp;
+  ULONG cbModulus;
+  ULONG cbPrime1;
+  ULONG cbPrime2;
+} BCRYPT_RSAKEY_BLOB;
+
+typedef struct _BCryptBuffer {
+  ULONG cbBuffer;
+  ULONG BufferType;
+  PVOID pvBuffer;
+} BCryptBuffer, *PBCryptBuffer;
+
+typedef struct _BCryptBufferDesc {
+  ULONG         ulVersion;
+  ULONG         cBuffers;
+  PBCryptBuffer pBuffers;
+} BCryptBufferDesc, *PBCryptBufferDesc;
+
+typedef struct _CRYPT_CONTEXTS {
+  ULONG cContexts;
+  PWSTR rgpszContexts;
+} CRYPT_CONTEXTS, *PCRYPT_CONTEXTS;
+
+typedef struct _CRYPT_CONTEXT_CONFIG {
+  ULONG dwFlags;
+} CRYPT_CONTEXT_CONFIG, *PCRYPT_CONTEXT_CONFIG;
+
+typedef struct _CRYPT_CONTEXT_FUNCTIONS {
+  ULONG cFunctions;
+  PWSTR rgpszFunctions;
+} CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS;
+
+typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG {
+  ULONG dwFlags;
+} CRYPT_CONTEXT_FUNCTION_CONFIG, *PCRYPT_CONTEXT_FUNCTION_CONFIG;
+
+typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS {
+  ULONG cProviders;
+  PWSTR *rgpszProviders;
+} CRYPT_CONTEXT_FUNCTION_PROVIDERS, *PCRYPT_CONTEXT_FUNCTION_PROVIDERS;
+
+typedef struct _CRYPT_INTERFACE_REG {
+  ULONG dwInterface;
+  ULONG dwFlags;
+  ULONG cFunctions;
+  PWSTR *rgpszFunctions;
+} CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG;
+
+typedef struct _CRYPT_IMAGE_REG {
+  PWSTR                pszImage;
+  ULONG                cInterfaces;
+  PCRYPT_INTERFACE_REG *rgpInterfaces;
+} CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG;
+
+typedef struct _CRYPT_IMAGE_REF {
+  PWSTR pszImage;
+  ULONG dwFlags;
+} CRYPT_IMAGE_REF, *PCRYPT_IMAGE_REF;
+
+typedef struct _CRYPT_PROPERTY_REF {
+  PWSTR  pszProperty;
+  ULONG  cbValue;
+  PUCHAR pbValue;
+} CRYPT_PROPERTY_REF, *PCRYPT_PROPERTY_REF;
+
+typedef struct _CRYPT_PROVIDERS {
+  ULONG cProviders;
+  PWSTR *rgpszProviders;
+} CRYPT_PROVIDERS, *PCRYPT_PROVIDERS;
+
+typedef struct _CRYPT_PROVIDER_REG {
+  ULONG            cAliases;
+  PWSTR            *rgpszAliases;
+  PCRYPT_IMAGE_REG pUM;
+  PCRYPT_IMAGE_REG pKM;
+} CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG;
+
+typedef struct _CRYPT_PROVIDER_REF {
+  ULONG               dwInterface;
+  PWSTR               pszFunction;
+  PWSTR               pszProvider;
+  ULONG               cProperties;
+  PCRYPT_PROPERTY_REF *rgpProperties;
+  PCRYPT_IMAGE_REF    pUM;
+  PCRYPT_IMAGE_REF    pKM;
+} CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF;
+
+typedef struct _CRYPT_PROVIDER_REFS {
+  ULONG               cProviders;
+  PCRYPT_PROVIDER_REF *rgpProviders;
+} CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS;
+
+NTSTATUS WINAPI BCryptAddContextFunction(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  ULONG dwPosition
+);
+
+NTSTATUS WINAPI BCryptCloseAlgorithmProvider(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptConfigureContext(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  PCRYPT_CONTEXT_CONFIG pConfig
+);
+
+NTSTATUS WINAPI BCryptConfigureContextFunction(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  PCRYPT_CONTEXT_FUNCTION_CONFIG pConfig
+);
+
+NTSTATUS WINAPI BCryptCreateContext(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  PCRYPT_CONTEXT_CONFIG pConfig
+);
+
+NTSTATUS WINAPI BCryptCreateHash(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  BCRYPT_HASH_HANDLE *phHash,
+  PUCHAR pbHashObject,
+  ULONG cbHashObject,
+  PUCHAR pbSecret,
+  ULONG cbSecret,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptDecrypt(
+  BCRYPT_KEY_HANDLE hKey,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  VOID *pPaddingInfo,
+  PUCHAR pbIV,
+  ULONG cbIV,
+  PUCHAR pbOutput,
+  ULONG cbOutput,
+  ULONG *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptDeleteContext(
+  ULONG dwTable,
+  LPCWSTR pszContext
+);
+
+NTSTATUS WINAPI BCryptDeriveKey(
+  BCRYPT_SECRET_HANDLE hSharedSecret,
+  LPCWSTR pwszKDF,
+  BCryptBufferDesc *pParameterList,
+  PUCHAR pbDerivedKey,
+  ULONG cbDerivedKey,
+  ULONG *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptDestroyHash(
+  BCRYPT_HASH_HANDLE hHash
+);
+
+NTSTATUS WINAPI BCryptDestroyKey(
+  BCRYPT_KEY_HANDLE hKey
+);
+
+NTSTATUS WINAPI BCryptDuplicateHash(
+  BCRYPT_HASH_HANDLE hHash,
+  BCRYPT_HASH_HANDLE *phNewHash,
+  PUCHAR pbHashObject,
+  ULONG cbHashObject,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptDuplicateKey(
+  BCRYPT_KEY_HANDLE hKey,
+  BCRYPT_KEY_HANDLE *phNewKey,
+  PUCHAR pbKeyObject,
+  ULONG cbKeyObject,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptEnumAlgorithms(
+  ULONG dwAlgOperations,
+  ULONG *pAlgCount,
+  BCRYPT_ALGORITHM_IDENTIFIER **ppAlgList,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptEnumContexts(
+  ULONG dwTable,
+  ULONG *pcbBuffer,
+  PCRYPT_CONTEXTS *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptEnumContextFunctions(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  ULONG *pcbBuffer,
+  PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptEnumContextFunctionProviders(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  ULONG *pcbBuffer,
+  PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptEnumProviders(
+  LPCWSTR pszAlgId,
+  ULONG *pImplCount,
+  BCRYPT_PROVIDER_NAME **ppImplList,
+  ULONG dwFlags
+);
+NTSTATUS WINAPI BCryptEnumRegisteredProviders(
+  ULONG *pcbBuffer,
+  PCRYPT_PROVIDERS *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptEncrypt(
+  BCRYPT_KEY_HANDLE hKey,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  VOID *pPaddingInfo,
+  PUCHAR pbIV,
+  ULONG cbIV,
+  PUCHAR pbOutput,
+  ULONG cbOutput,
+  ULONG *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptExportKey(
+  BCRYPT_KEY_HANDLE hKey,
+  BCRYPT_KEY_HANDLE hExportKey,
+  LPCWSTR pszBlobType,
+  PUCHAR pbOutput,
+  ULONG cbOutput,
+  ULONG *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptFinishHash(
+  BCRYPT_HASH_HANDLE hHash,
+  PUCHAR pbOutput,
+  ULONG cbOutput,
+  ULONG dwFlags
+);
+VOID WINAPI BCryptFreeBuffer(
+  PVOID pvBuffer
+);
+
+NTSTATUS WINAPI BCryptGenerateKeyPair(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  BCRYPT_KEY_HANDLE *phKey,
+  ULONG dwLength,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptGenerateSymmetricKey(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  BCRYPT_KEY_HANDLE *phKey,
+  PUCHAR pbKeyObject,
+  ULONG cbKeyObject,
+  PUCHAR pbSecret,
+  ULONG cbSecret,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptGenRandom(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  PUCHAR pbBuffer,
+  ULONG cbBuffer,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(
+  BOOLEAN *pfEnabled
+);
+
+NTSTATUS WINAPI BCryptGetProperty(
+  BCRYPT_HANDLE hObject,
+  LPCWSTR pszProperty,
+  PUCHAR pbOutput,
+  ULONG cbOutput,
+  ULONG *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptHashData(
+  BCRYPT_HASH_HANDLE hHash,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptImportKey(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  BCRYPT_KEY_HANDLE hImportKey,
+  LPCWSTR pszBlobType,
+  BCRYPT_KEY_HANDLE *phKey,
+  PUCHAR pbKeyObject,
+  ULONG cbKeyObject,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptImportKeyPair(
+  BCRYPT_ALG_HANDLE hAlgorithm,
+  BCRYPT_KEY_HANDLE hImportKey,
+  LPCWSTR pszBlobType,
+  BCRYPT_KEY_HANDLE *phKey,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptFinalizeKeyPair(
+  BCRYPT_KEY_HANDLE hKey,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptOpenAlgorithmProvider(
+  BCRYPT_ALG_HANDLE *phAlgorithm,
+  LPCWSTR pszAlgId,
+  LPCWSTR pszImplementation,
+  DWORD dwFlags
+);
+
+NTSTATUS WINAPI BCryptQueryContextConfiguration(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG *pcbBuffer,
+  PCRYPT_CONTEXT_CONFIG *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptQueryContextFunctionConfiguration(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  ULONG *pcbBuffer,
+  PCRYPT_CONTEXT_FUNCTION_CONFIG *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptQueryContextFunctionProperty(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  LPCWSTR pszProperty,
+  ULONG *pcbValue,
+  PUCHAR *ppbValue
+);
+
+NTSTATUS WINAPI BCryptQueryProviderRegistration(
+  LPCWSTR pszProvider,
+  ULONG dwMode,
+  ULONG dwInterface,
+  ULONG *pcbBuffer,
+  PCRYPT_PROVIDER_REG *ppBuffer
+);
+
+/* Kernel mode
+NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
+  PRKEVENT phEvent
+);
+
+NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
+  PRKEVENT hEvent
+);
+*/
+
+NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
+  HANDLE *phEvent
+);
+
+NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
+  HANDLE hEvent
+);
+
+NTSTATUS WINAPI BCryptRemoveContextFunction(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction
+);
+
+NTSTATUS WINAPI BCryptResolveProviders(
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  LPCWSTR pszProvider,
+  ULONG dwMode,
+  ULONG dwFlags,
+  ULONG *pcbBuffer,
+  PCRYPT_PROVIDER_REFS *ppBuffer
+);
+
+NTSTATUS WINAPI BCryptSecretAgreement(
+  BCRYPT_KEY_HANDLE hPrivKey,
+  BCRYPT_KEY_HANDLE hPubKey,
+  BCRYPT_SECRET_HANDLE *phSecret,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptSetContextFunctionProperty(
+  ULONG dwTable,
+  LPCWSTR pszContext,
+  ULONG dwInterface,
+  LPCWSTR pszFunction,
+  LPCWSTR pszProperty,
+  ULONG cbValue,
+  PUCHAR pbValue
+);
+
+NTSTATUS WINAPI BCryptSetProperty(
+  BCRYPT_HANDLE hObject,
+  LPCWSTR pszProperty,
+  PUCHAR pbInput,
+  ULONG cbInput,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptSignHash(
+  BCRYPT_KEY_HANDLE hKey,
+  VOID *pPaddingInfo,
+  PBYTE pbInput,
+  DWORD cbInput,
+  PBYTE pbOutput,
+  DWORD cbOutput,
+  DWORD *pcbResult,
+  ULONG dwFlags
+);
+
+NTSTATUS WINAPI BCryptVerifySignature(
+  BCRYPT_KEY_HANDLE hKey,
+  VOID *pPaddingInfo,
+  PUCHAR pbHash,
+  ULONG cbHash,
+  PUCHAR pbSignature,
+  ULONG cbSignature,
+  ULONG dwFlags
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_BCRYPT*/
diff --git a/mingw-w64-headers/include/bluetoothapis.h b/mingw-w64-headers/include/bluetoothapis.h
new file mode 100644
index 0000000..a433e17
--- /dev/null
+++ b/mingw-w64-headers/include/bluetoothapis.h
@@ -0,0 +1,431 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_BLUETOOTHAPIS
+#define _INC_BLUETOOTHAPIS
+
+#include <_mingw.h>
+#include <bthsdpdef.h>
+
+#define BLUETOOTH_MAX_NAME_SIZE 248
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPVOID HBLUETOOTH_DEVICE_FIND;
+
+typedef struct _BLUETOOTH_ADDRESS {
+  __MINGW_EXTENSION union {
+    BTH_ADDR ullLong;
+    BYTE     rgBytes[6];
+  };
+} BLUETOOTH_ADDRESS;
+
+typedef struct _BLUETOOTH_COD_PAIRS {
+  ULONG   ulCODMask;
+  LPCWSTR pcszDescription;
+} BLUETOOTH_COD_PAIRS;
+
+typedef struct _BLUETOOTH_DEVICE_INFO {
+  DWORD             dwSize;
+  BLUETOOTH_ADDRESS Address;
+  ULONG             ulClassofDevice;
+  WINBOOL           fConnected;
+  WINBOOL           fRemembered;
+  WINBOOL           fAuthenticated;
+  SYSTEMTIME        stLastSeen;
+  SYSTEMTIME        stLastUsed;
+  WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
+} BLUETOOTH_DEVICE_INFO, *PBLUETOOTH_DEVICE_INFO;
+
+typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {
+  DWORD     dwSize;
+  WINBOOL   fReturnAuthenticated;
+  WINBOOL   fReturnRemembered;
+  WINBOOL   fReturnUnknown;
+  WINBOOL   fReturnConnected;
+  WINBOOL   fIssueInquiry;
+  UCHAR     cTimeoutMultiplier;
+  HANDLE    hRadio;
+} BLUETOOTH_DEVICE_SEARCH_PARAMS;
+
+typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {
+  DWORD dwSize;
+} BLUETOOTH_FIND_RADIO_PARAMS;
+
+typedef struct {
+  DWORD             dwSize;
+  BLUETOOTH_ADDRESS address;
+  WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
+  ULONG             ulClassofDevice;
+  USHORT            lmpSubversion;
+  USHORT            manufacturer;
+} BLUETOOTH_RADIO_INFO;
+
+typedef struct _BTH_DEVICE_INFO {
+  ULONG    flags;
+  BTH_ADDR address;
+  BTH_COD  classOfDevice;
+  CHAR     name[BTH_MAX_NAME_SIZE];
+} BTH_DEVICE_INFO, *PBTH_DEVICE_INFO;
+
+typedef struct _BTH_HCI_EVENT_INFO {
+  BTH_ADDR bthAddress;
+  UCHAR    connectionType;
+  UCHAR    connected;
+} BTH_HCI_EVENT_INFO, *PBTH_HCI_EVENT_INFO;
+
+typedef enum _BLUETOOTH_AUTHENTICATION_METHOD {
+  BLUETOOTH_AUTHENTICATION_METHOD_LEGACY                 = 0x1,
+  BLUETOOTH_AUTHENTICATION_METHOD_OOB,
+  BLUETOOTH_AUTHENTICATION_METHOD_NUMERIC_COMPARISON,
+  BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY_NOTIFICATION,
+  BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY
+} BLUETOOTH_AUTHENTICATION_METHOD;
+
+typedef enum _BLUETOOTH_IO_CAPABILITY {
+  BLUETOOTH_IO_CAPABILITY_DISPLAYONLY       = 0x00,
+  BLUETOOTH_IO_CAPABILITY_DISPLAYYESNO      = 0x01,
+  BLUETOOTH_IO_CAPABILITY_KEYBOARDONLY      = 0x02,
+  BLUETOOTH_IO_CAPABILITY_NOINPUTNOOUTPUT   = 0x03,
+  BLUETOOTH_IO_CAPABILITY_UNDEFINED         = 0xff
+} BLUETOOTH_IO_CAPABILITY;
+
+typedef enum _AUTHENTICATION_REQUIREMENTS {
+  MITMProtectionNotRequired                 = 0x00,
+  MITMProtectionRequired                    = 0x01,
+  MITMProtectionNotRequiredBonding          = 0x02,
+  MITMProtectionRequiredBonding             = 0x03,
+  MITMProtectionNotRequiredGeneralBonding   = 0x04,
+  MITMProtectionRequiredGeneralBonding      = 0x05,
+  MITMProtectionNotDefined                  = 0xff
+} AUTHENTICATION_REQUIREMENTS;
+
+typedef struct _BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS {
+  BLUETOOTH_DEVICE_INFO                 deviceInfo;
+  BLUETOOTH_AUTHENTICATION_METHOD       authenticationMethod;
+  BLUETOOTH_IO_CAPABILITY               ioCapability;
+  BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirements;
+  __MINGW_EXTENSION union {
+    ULONG Numeric_Value;
+    ULONG Passkey;
+  } ;
+} BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS, *PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS;
+
+typedef struct _BLUETOOTH_AUTHENTICATE_RESPONSE {
+  BLUETOOTH_ADDRESS               bthAddressRemote;
+  BLUETOOTH_AUTHENTICATION_METHOD authMethod;
+  __MINGW_EXTENSION union {
+    BLUETOOTH_PIN_INFO                pinInfo;
+    BLUETOOTH_OOB_DATA                oobInfo;
+    BLUETOOTH_NUMERIC_COMPARISON_INFO numericCompInfo;
+    BLUETOOTH_PASSKEY_INFO            passkeyInfo;
+  };
+  UCHAR                           negativeResponse;
+} BLUETOOTH_AUTHENTICATE_RESPONSE, *PBLUETOOTH_AUTHENTICATE_RESPONSE;
+
+typedef struct _SPD_ELEMENT_DATA {
+  SDP_TYPE         type;
+  SDP_SPECIFICTYPE specificType;
+  __MINGW_EXTENSION union {
+    SDP_LARGE_INTEGER_16  int128;
+    LONGLONG              int64;
+    LONG                  int32;
+    SHORT                 int16;
+    CHAR                  int8;
+    SDP_ULARGE_INTEGER_16 uint128;
+    ULONGLONG             uint64;
+    ULONG                 uint32;
+    USHORT                uint16;
+    UCHAR                 uint8;
+    UCHAR                 booleanVal;
+    GUID                  uuid128;
+    ULONG                 uuid32;
+    USHORT                uuid16;
+    __MINGW_EXTENSION struct {
+      LPBYTE value;
+      ULONG  length;
+    } string;
+    __MINGW_EXTENSION struct {
+      LPBYTE value;
+      ULONG  length;
+    } url;
+    __MINGW_EXTENSION struct {
+      LPBYTE value;
+      ULONG  length;
+    } sequence;
+    __MINGW_EXTENSION struct {
+      LPBYTE value;
+      ULONG  length;
+    } alternative;
+  } data;
+} SDP_ELEMENT_DATA, *PSDP_ELEMENT_DATA;
+
+typedef struct _SDP_STRING_TYPE_DATA {
+  USHORT encoding;
+  USHORT mibeNum;
+  USHORT attributeID;
+} SDP_STRING_TYPE_DATA, *PSDP_STRING_TYPE_DATA;
+
+typedef struct _BLUETOOTH_AUTHENTICATE_RESPONSE {
+  BLUETOOTH_ADDRESS               bthAddressRemote;
+  BLUETOOTH_AUTHENTICATION_METHOD authMethod;
+  __MINGW_EXTENSION union {
+    BLUETOOTH_PIN_INFO                pinInfo;
+    BLUETOOTH_OOB_DATA                oobInfo;
+    BLUETOOTH_NUMERIC_COMPARISON_INFO numericCompInfo;
+    BLUETOOTH_PASSKEY_INFO            passkeyInfo;
+  };
+  UCHAR                           negativeResponse;
+} BLUETOOTH_AUTHENTICATE_RESPONSE, *PBLUETOOTH_AUTHENTICATE_RESPONSE;
+
+#define BTH_MAX_PIN_SIZE 16
+typedef struct _BLUETOOTH_PIN_INFO {
+  UCHAR pin[BTH_MAX_PIN_SIZE];
+  UCHAR pinLength;
+} BLUETOOTH_PIN_INFO, *PBLUETOOTH_PIN_INFO;
+
+typedef struct _BLUETOOTH_PASSKEY_INFO {
+  ULONG passkey;
+} BLUETOOTH_PASSKEY_INFO, *PBLUETOOTH_PASSKEY_INFO;
+
+typedef struct _BLUETOOTH_OOB_DATA_INFO {
+  UCHAR C[16];
+  UCHAR R[16];
+} BLUETOOTH_OOB_DATA_INFO, *PBLUETOOTH_OOB_DATA_INFO;
+
+typedef struct _BLUETOOTH_NUMERIC_COMPARISON_INFO {
+  ULONG NumericValue;
+} BLUETOOTH_NUMERIC_COMPARISON_INFO, *PBLUETOOTH_NUMERIC_COMPARISON_INFO;
+
+typedef WINBOOL (*PFN_DEVICE_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
+typedef WINBOOL (*CALLBACK PFN_AUTHENTICATION_CALLBACK_EX)(LPVOID pvParam,PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams);
+typedef WINBOOL (*PFN_AUTHENTICATION_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
+typedef WINBOOL (*PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(ULONG uAttribId,LPBYTE pValueStream,ULONG cbStreamSize,LPVOID pvParam);
+
+typedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS {
+  DWORD                  dwSize;
+  ULONG                  cNumOfClasses;
+  BLUETOOTH_COD_PAIRS    *prgClassOfDevices;
+  LPWSTR                 pszInfo;
+  HWND                   hwndParent;
+  BOOL                   fForceAuthentication;
+  BOOL                   fShowAuthenticated;
+  BOOL                   fShowRemembered;
+  BOOL                   fShowUnknown;
+  BOOL                   fAddNewDeviceWizard;
+  BOOL                   fSkipServicesPage;
+  PFN_DEVICE_CALLBACK    pfnDeviceCallback;
+  LPVOID                 pvParam;
+  DWORD                  cNumDevices;
+  PBLUETOOTH_DEVICE_INFO pDevices;
+} BLUETOOTH_SELECT_DEVICE_PARAMS;
+
+DWORD WINAPI BluetoothAuthenticateMultipleDevices(
+    HWND hwndParent,
+    HANDLE hRadio,
+    DWORD cDevices,
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+HRESULT WINAPI BluetoothAuthenticateDeviceEx(
+  HWND hwndParentIn,
+  HANDLE hRadioIn,
+  BLUETOOTH_DEVICE_INFO *pbtdiInout,
+  PBTH_OOB_DATA pbtOobData,
+  BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirement
+);
+
+WINBOOL WINAPI BluetoothDisplayDeviceProperties(
+    HWND hwndParent,
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+WINBOOL WINAPI BluetoothEnableDiscovery(
+    HANDLE hRadio,
+    WINBOOL fEnabled
+);
+
+WINBOOL WINAPI BluetoothEnableIncomingConnections(
+    HANDLE hRadio,
+    WINBOOL fEnabled
+);
+
+DWORD WINAPI BluetoothEnumerateInstalledServices(
+    HANDLE hRadio,
+    BLUETOOTH_DEVICE_INFO *pbtdi,
+    DWORD *pcServices,
+    GUID *pGuidServices
+);
+
+WINBOOL WINAPI BluetoothFindDeviceClose(
+    HBLUETOOTH_DEVICE_FIND hFind
+);
+
+HBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(
+    BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp,
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+HBLUETOOTH_RADIO_FIND WINAPI BluetoothFindFirstRadio(
+  BLUETOOTH_FIND_RADIO_PARAMS *pbtfrp,
+  HANDLE *phRadio
+);
+
+WINBOOL WINAPI BluetoothFindNextDevice(
+    HBLUETOOTH_DEVICE_FIND hFind,
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+WINBOOL WINAPI BluetoothFindNextRadio(
+  HBLUETOOTH_RADIO_FIND hFind,
+  HANDLE *phRadio
+);
+
+WINBOOL WINAPI BluetoothFindRadioClose(
+    HBLUETOOTH_RADIO_FIND hFind
+);
+
+DWORD WINAPI BluetoothGetDeviceInfo(
+    HANDLE hRadio,
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+DWORD WINAPI BluetoothGetRadioInfo(
+    HANDLE hRadio,
+    PBLUETOOTH_RADIO_INFO pRadioInfo
+);
+
+WINBOOL WINAPI BluetoothIsDiscoverable(
+    HANDLE hRadio
+);
+
+WINBOOL WINAPI BluetoothIsConnectable(
+    HANDLE hRadio
+);
+
+DWORD WINAPI BluetoothRegisterForAuthentication(
+    BLUETOOTH_DEVICE_INFO *pbtdi,
+    HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandle,
+    PFN_AUTHENTICATION_CALLBACK pfnCallback,
+    PVOID pvParam
+);
+
+HRESULT WINAPI BluetoothRegisterForAuthenticationEx(
+  const BLUETOOTH_DEVICE_INFO *pbtdiln,
+  HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandleOut,
+  PFN_AUTHENTICATION_CALLBACK_EX pfnCallbackIn,
+  PVOID pvParam
+);
+
+DWORD WINAPI BluetoothRemoveDevice(
+    BLUETOOTH_ADDRESS *pAddress
+);
+
+WINBOOL WINAPI BluetoothSdpEnumAttributes(
+    LPBYTE pSDPStream,
+    ULONG cbStreamSize,
+    PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
+    LPVOID pvParam
+);
+
+DWORD WINAPI BluetoothSdpGetAttributeValue(
+  LPBYTE pRecordStream,
+  ULONG cbRecordLength,
+  USHORT usAttributeId,
+  PSDP_ELEMENT_DATA pAttributeData
+);
+
+DWORD WINAPI BluetoothSdpGetContainerElementData(
+  LPBYTE pContainerStream,
+  ULONG cbContainerLength,
+  HBLUETOOTH_CONTAINER_ELEMENT *pElement,
+  PSDP_ELEMENT_DATA pData
+);
+
+DWORD BluetoothSdpGetElementData(
+  LPBYTE pSdpStream,
+  ULONG cbSpdStreamLength,
+  PSDP_ELEMENT_DATA pData
+);
+
+DWORD BluetoothSdpGetString(
+  LPBYTE pRecordStream,
+  ULONG cbRecordLength,
+  PSDP_STRING_DATA_TYPE pStringData,
+  USHORT usStringOffset,
+  PWCHAR pszString,
+  PULONG pcchStringLength
+);
+
+WINBOOL WINAPI BluetoothSelectDevices(
+    BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
+);
+
+WINBOOL WINAPI BluetoothSelectDevicesFree(
+    BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
+);
+
+DWORD WINAPI BluetoothSendAuthenticationResponse(
+    HANDLE hRadio,
+    BLUETOOTH_DEVICE_INFO *pbtdi,
+    LPWSTR pszPasskey
+);
+
+HRESULT WINAPI BluetoothSendAuthenticationResponseEx(
+  HANDLE hRadioIn,
+  PBLUETOOTH_AUTHENTICATE_RESPONSE pauthResponse
+);
+
+DWORD WINAPI BluetoothSetLocalServiceInfo(
+  HANDLE hRadioIn,
+  const GUID *pClassGuid,
+  ULONG ulInstance,
+  const BLUETOOTH_LOCAL_SERVICE_INFO *pServiceInfoIn
+);
+
+DWORD WINAPI BluetoothSetServiceState(
+    HANDLE hRadio,
+    BLUETOOTH_DEVICE_INFO *pbtdi,
+    GUID *pGuidService,
+    DWORD dwServiceFlags
+);
+
+WINBOOL WINAPI BluetoothUnregisterAuthentication(
+    HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle
+);
+
+DWORD WINAPI BluetoothUpdateDeviceRecord(
+    BLUETOOTH_DEVICE_INFO *pbtdi
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct _BLUETOOTH_LOCAL_SERVICE_INFO {
+  BOOL              Enabled;
+  BLUETOOTH_ADDRESS btAddr;
+  WCHAR             szName[BLUETOOTH_MAX_SERVICE_NAME_SIZE];
+  WCHAR             szDeviceString[BLUETOOTH_DEVICE_NAME_SIZE];
+} BLUETOOTH_LOCAL_SERVICE_INFO;
+
+typedef enum AUTHENTICATION_REQUIREMENTS {
+  MITMProtectionNotRequired                 = 0x00,
+  MITMProtectionRequired                    = 0x01,
+  MITMProtectionNotRequiredBonding          = 0x02,
+  MITMProtectionRequiredBonding             = 0x03,
+  MITMProtectionNotRequiredGeneralBonding   = 0x04,
+  MITMProtectionRequiredGeneralBonding      = 0x05,
+  MITMProtectionNotDefined                  = 0xff
+} AUTHENTICATION_REQUIREMENTS;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_BLUETOOTHAPIS*/
+
diff --git a/mingw-w64-headers/include/bthsdpdef.h b/mingw-w64-headers/include/bthsdpdef.h
new file mode 100644
index 0000000..19340b9
--- /dev/null
+++ b/mingw-w64-headers/include/bthsdpdef.h
@@ -0,0 +1,39 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_BTHSDPDEF
+#define _INC_BTHSDPDEF
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef union SdpQueryUuidUnion {
+  GUID   uuid128;
+  ULONG  uuid32;
+  USHORT uuid16;
+} SdpQueryUuidUnion;
+
+typedef struct _SdpAttributeRange {
+  USHORT minAttribute;
+  USHORT maxAttribute;
+} SdpAttributeRange;
+
+typedef struct _SdpQueryUuid {
+  SdpQueryUuidUnion u;
+  USHORT            uuidType;
+} SdpQueryUuid;
+
+typedef struct _BTH_L2CAP_EVENT_INFO {
+  BTH_ADDR bthAddress;
+  USHORT   psm;
+  UCHAR    connected;
+  UCHAR    initiated;
+} BTH_L2CAP_EVENT_INFO, *PBTH_L2CAP_EVENT_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*_INC_BTHSDPDEF*/
diff --git a/mingw-w64-headers/include/cardmod.h b/mingw-w64-headers/include/cardmod.h
new file mode 100644
index 0000000..0575a20
--- /dev/null
+++ b/mingw-w64-headers/include/cardmod.h
@@ -0,0 +1,414 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_CARDMOD
+#define _INC_CARDMOD
+#include <wincrypt.h>
+
+#define CARD_BUFFER_SIZE_ONLY 0x20000000
+#define CARD_PADDING_INFO_PRESENT 0x40000000
+
+#define CARD_PADDING_NONE  0
+#define CARD_PADDING_PKCS1 1
+#define CARD_PADDING_PSS   4
+
+#define CARD_CREATE_CONTAINER_KEY_GEN 1
+#define CARD_CREATE_CONTAINER_KEY_IMPORT 2
+
+#define AT_KEYEXCHANGE 1
+#define AT_SIGNATURE   2
+#define AT_ECDSA_P256  3
+#define AT_ECDSA_P384  4
+#define AT_ECDSA_P521  5
+#define AT_ECDHE_P256  6
+#define AT_ECDHE_P384  7
+#define AT_ECDHE_P521  8
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _CARD_DIRECTORY_ACCESS_CONDITION {
+  DInvalidAc                = 0, /*Fixme: Should be InvalidAc, conflict with CARD_FILE_ACCESS_CONDITION*/
+  UserCreateDeleteDirAc    = 1,
+  AdminCreateDeleteDirAc   = 2 
+} CARD_DIRECTORY_ACCESS_CONDITION;
+
+typedef enum _CARD_FILE_ACCESS_CONDITION {
+  FInvalidAc                  = 0, /*Fixme: Should be InvalidAc, conflict with CARD_DIRECTORY_ACCESS_CONDITION*/
+  EveryoneReadUserWriteAc    = 1,
+  UserWriteExecuteAc         = 2,
+  EveryoneReadAdminWriteAc   = 3,
+  UnknownAc                  = 4 
+} CARD_FILE_ACCESS_CONDITION;
+
+typedef struct _CARD_SIGNING_INFO {
+  DWORD  dwVersion;
+  BYTE   bContainerIndex;
+  DWORD  dwKeySpec;
+  DWORD  dwSigningFlags;
+  ALG_ID aiHashAlg;
+  PBYTE  pbData;
+  DWORD  cbData;
+  PBYTE  pbSignedData;
+  DWORD  cbSignedData;
+  LPVOID pPaddingInfo;
+  DWORD  dwPaddingType;
+} CARD_SIGNING_INFO, *PCARD_SIGNING_INFO;
+
+typedef struct _CARD_CAPABILITIES {
+  DWORD   dwVersion;
+  WINBOOL fCertificateCompression;
+  WINBOOL fKeyGen;
+} CARD_CAPABILITIES, *PCARD_CAPABILITIES;
+
+typedef struct _CONTAINER_INFO {
+  DWORD dwVersion;
+  DWORD dwReserved;
+  DWORD cbSigPublicKey;
+  PBYTE pbSigPublicKey;
+  DWORD cbKeyExPublicKey;
+  PBYTE pbKeyExPublicKey;
+} CONTAINER_INFO, *PCONTAINER_INFO;
+
+typedef LPVOID ( WINAPI *PFN_CSP_ALLOC )(SIZE_T Size);
+typedef LPVOID ( WINAPI *PFN_CSP_REALLOC )(LPVOID Address,SIZE_T Size);
+typedef VOID ( WINAPI *PFN_CSP_FREE )(LPVOID Address);
+typedef DWORD ( WINAPI *PFN_CSP_CACHE_ADD_FILE )(
+  PVOID pvCacheContext,
+  LPWSTR wszTag,
+  DWORD dwFlags,
+  PBYTE pbData,
+  DWORD cbData
+);
+
+typedef DWORD ( WINAPI *PFN_CSP_CACHE_LOOKUP_FILE )(
+  PVOID pvCacheContext,
+  LPWSTR wszTag,
+  DWORD dwFlags,
+  PBYTE *ppbData,
+  PDWORD pcbData
+);
+
+typedef DWORD ( WINAPI *PFN_CSP_CACHE_DELETE_FILE )(
+  PVOID pvCacheContext,
+  LPWSTR wszTag,
+  DWORD dwFlags
+);
+
+typedef DWORD ( WINAPI *PFN_CSP_PAD_DATA )(
+  PCARD_SIGNING_INFO pSigningInfo,
+  DWORD cbMaxWidth,
+  DWORD *pcbPaddedBuffer,
+  PBYTE *ppbPaddedBuffer
+);
+
+typedef struct _CARD_DERIVE_KEY {
+  DWORD   dwVersion;
+  DWORD   dwFlags;
+  LPCWSTR pwszKDF;
+  BYTE    bSecretAgreementIndex;
+  PVOID   pParameterList;
+  PUCHAR  pbDerivedKey;
+  DWORD   cbDerivedKey;
+} CARD_DERIVE_KEY, *PCARD_DERIVE_KEY;
+
+typedef struct _CARD_FILE_INFO {
+  DWORD                      dwVersion;
+  DWORD                      cbFileSize;
+  CARD_FILE_ACCESS_CONDITION AccessCondition;
+} CARD_FILE_INFO, *PCARD_FILE_INFO;
+
+typedef struct _CARD_FREE_SPACE_INFO {
+  DWORD dwVersion;
+  DWORD dwBytesAvailable;
+  DWORD dwKeyContainersAvailable;
+  DWORD dwMaxKeyContainers;
+} CARD_FREE_SPACE_INFO, *PCARD_FREE_SPACE_INFO;
+
+typedef struct _CARD_RSA_DECRYPT_INFO {
+  DWORD dwVersion;
+  BYTE  bContainerIndex;
+  DWORD dwKeySpec;
+  PBYTE pbData;
+  DWORD cbData;
+} CARD_RSA_DECRYPT_INFO, *PCARD_RSA_DECRYPT_INFO;
+
+typedef struct _CARD_DH_AGREEMENT_INFO {
+  DWORD dwVersion;
+  BYTE  bContainerIndex;
+  DWORD dwFlags;
+  DWORD dwPublicKey;
+  PBYTE pbPublicKey;
+  PBYTE pbReserved;
+  DWORD cbReserved;
+  BYTE  bSecretAgreementIndex;
+} CARD_DH_AGREEMENT_INFO, *PCARD_DH_AGREEMENT_INFO;
+
+typedef struct _CARD_KEY_SIZES {
+  DWORD dwVersion;
+  DWORD dwMinimumBitlen;
+  DWORD dwMaximumBitlen;
+  DWORD dwIncrementalBitlen;
+} CARD_KEY_SIZES, *PCARD_KEY_SIZES;
+
+typedef struct _CARD_DATA *PCARD_DATA;
+
+typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTEXT)(
+  PCARD_DATA pCardData
+);
+
+typedef DWORD (WINAPI *PFN_CARD_QUERY_CAPABILITIES)(
+  PCARD_DATA pCardData,
+  PCARD_CAPABILITIES pCardCapabilities
+);
+
+typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTAINER)(
+  PCARD_DATA pCardData,
+  BYTE bContainerIndex,
+  DWORD dwReserved
+);
+
+typedef DWORD (WINAPI *PFN_CARD_CREATE_CONTAINER)(
+  PCARD_DATA pCardData,
+  BYTE bContainerIndex,
+  DWORD dwFlags,
+  DWORD dwKeySpec,
+  DWORD dwKeySize,
+  PBYTE pbKeyData
+);
+
+typedef DWORD (WINAPI *PFN_CARD_GET_CONTAINER_INFO)(
+  PCARD_DATA pCardData,
+  BYTE bContainerIndex,
+  DWORD dwFlags,
+  PCONTAINER_INFO pContainerInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_PIN)(
+  PCARD_DATA pCardData,
+  LPWSTR pwszUserId,
+  PBYTE pbPin,
+  DWORD cbPin,
+  PDWORD pcAttemptsRemaining
+);
+
+typedef DWORD (WINAPI *PFN_CARD_GET_CHALLENGE)(
+  PCARD_DATA pCardData,
+  PBYTE *ppbChallengeData,
+  PDWORD pcbChallengeData
+);
+
+typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_CHALLENGE)(
+  PCARD_DATA pCardData,
+  PBYTE pbResponseData,
+  DWORD cbResponseData,
+  PDWORD pcAttemptsRemaining
+);
+
+typedef DWORD (WINAPI *PFN_CARD_UNBLOCK_PIN)(
+  PCARD_DATA pCardData,
+  LPWSTR pwszUserId,
+  PBYTE pbAuthenticationData,
+  DWORD cbAuthenticationData,
+  PBYTE pbNewPinData,
+  DWORD cbNewPinData,
+  DWORD cRetryCount,
+  DWORD dwFlags
+);
+
+typedef DWORD (WINAPI *PFN_CARD_CHANGE_AUTHENTICATOR)(
+  PCARD_DATA pCardData,
+  LPWSTR pwszUserId,
+  PBYTE pbCurrentAuthenticator,
+  DWORD cbCurrentAuthenticator,
+  PBYTE pbNewAuthenticator,
+  DWORD cbNewAuthenticator,
+  DWORD cRetryCount,
+  DWORD dwFlags,
+  PDWORD pcAttemptsRemaining
+);
+
+typedef DWORD (WINAPI *PFN_CARD_DEAUTHENTICATE)(
+  PCARD_DATA pCardData,
+  LPWSTR pwszUserId,
+  DWORD dwFlags
+);
+
+typedef DWORD (WINAPI *PFN_CARD_CREATE_DIRECTORY)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectory,
+  CARD_DIRECTORY_ACCESS_CONDITION AccessCondition
+);
+
+typedef DWORD (WINAPI *PFN_CARD_DELETE_DIRECTORY)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName
+);
+
+typedef DWORD (WINAPI *PFN_CARD_CREATE_FILE)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR pszFileName,
+  DWORD cbInitialCreationSize,
+  CARD_FILE_ACCESS_CONDITION AccessCondition
+);
+
+typedef DWORD (WINAPI *PFN_CARD_READ_FILE)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR pszFileName,
+  DWORD dwFlags,
+  PBYTE *ppbData,
+  PDWORD pcbData
+);
+
+typedef DWORD (WINAPI *PFN_CARD_WRITE_FILE)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR pszFileName,
+  DWORD dwFlags,
+  PBYTE pbData,
+  DWORD cbData
+);
+
+typedef DWORD (WINAPI *PFN_CARD_DELETE_FILE)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR pszFileName,
+  DWORD dwFlags
+);
+
+typedef DWORD (WINAPI *PFN_CARD_ENUM_FILES)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR *pmszFileNames,
+  LPDWORD pdwcbFileName,
+  DWORD dwFlags
+);
+
+typedef DWORD (WINAPI *PFN_CARD_GET_FILE_INFO)(
+  PCARD_DATA pCardData,
+  LPSTR pszDirectoryName,
+  LPSTR pszFileName,
+  PCARD_FILE_INFO pCardFileInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_QUERY_FREE_SPACE)(
+  PCARD_DATA pCardData,
+  DWORD dwFlags,
+  PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_QUERY_KEY_SIZES)(
+  PCARD_DATA pCardData,
+  DWORD dwKeySpec,
+  DWORD dwFlags,
+  PCARD_KEY_SIZES pKeySizes
+);
+
+typedef DWORD (WINAPI *PFN_CARD_SIGN_DATA)(
+  PCARD_DATA pCardData,
+  PCARD_SIGNING_INFO pInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_RSA_DECRYPT)(
+  PCARD_DATA pCardData,
+  PCARD_RSA_DECRYPT_INFO pInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_CONSTRUCT_DH_AGREEMENT)(
+  PCARD_DATA pCardData,
+  PCARD_DH_AGREEMENT_INFO pAgreementInfo
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef DWORD (WINAPI *PFN_CARD_DERIVE_KEY)(
+  PCARD_DATA pCardData,
+  PCARD_DERIVE_KEY pAgreementInfo
+);
+
+typedef DWORD (WINAPI *PFN_CARD_DESTROY_DH_AGREEMENT)(
+  PCARD_DATA pCardData,
+  BYTE bSecretAgreementIndex,
+  DWORD dwFlags
+);
+
+typedef DWORD (WINAPI *PFN_CSP_GET_DH_AGREEMENT)(
+  PCARD_DATA pCardData,
+  PVOID hSecretAgreement,
+  BYTE *pbSecretAgreementIndex,
+  DWORD dwFlags
+);
+
+#else
+typedef LPVOID PFN_CARD_DERIVE_KEY;
+typedef LPVOID PFN_CARD_DESTROY_DH_AGREEMENT;
+typedef LPVOID PFN_CSP_GET_DH_AGREEMENT;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+typedef struct _CARD_DATA {
+  DWORD                           dwVersion;
+  PBYTE                           pbAtr;
+  DWORD                           cbAtr;
+  LPWSTR                          pwszCardName;
+  PFN_CSP_ALLOC                   pfnCspAlloc;
+  PFN_CSP_REALLOC                 pfnCspReAlloc;
+  PFN_CSP_FREE                    pfnCspFree;
+  PFN_CSP_CACHE_ADD_FILE          pfnCspCacheAddFile;
+  PFN_CSP_CACHE_LOOKUP_FILE       pfnCspCacheLookupFile;
+  PFN_CSP_CACHE_DELETE_FILE       pfnCspCacheDeleteFile;
+  PVOID                           pvCacheContext;
+  PFN_CSP_PAD_DATA                pfnCspPadData;
+  SCARDCONTEXT                    hSCardCtx;
+  SCARDHANDLE                     hScard;
+  PVOID                           pvVendorSpecific;
+  PFN_CARD_DELETE_CONTEXT         pfnCardDeleteContext;
+  PFN_CARD_QUERY_CAPABILITIES     pfnCardQueryCapabilities;
+  PFN_CARD_DELETE_CONTAINER       pfnCardDeleteContainer;
+  PFN_CARD_CREATE_CONTAINER       pfnCardCreateContainer;
+  PFN_CARD_GET_CONTAINER_INFO     pfnCardGetContainerInfo;
+  PFN_CARD_AUTHENTICATE_PIN       pfnCardAuthenticatePin;
+  PFN_CARD_GET_CHALLENGE          pfnCardGetChallenge;
+  PFN_CARD_AUTHENTICATE_CHALLENGE pfnCardAuthenticateChallenge;
+  PFN_CARD_UNBLOCK_PIN            pfnCardUnblockPin;
+  PFN_CARD_CHANGE_AUTHENTICATOR   pfnCardChangeAuthenticator;
+  PFN_CARD_DEAUTHENTICATE         pfnCardDeauthenticate;
+  PFN_CARD_CREATE_DIRECTORY       pfnCardCreateDirectory;
+  PFN_CARD_DELETE_DIRECTORY       pfnCardDeleteDirectory;
+  LPVOID                          pvUnused3;
+  LPVOID                          pvUnused4;
+  PFN_CARD_CREATE_FILE            pfnCardCreateFile;
+  PFN_CARD_READ_FILE              pfnCardReadFile;
+  PFN_CARD_WRITE_FILE             pfnCardWriteFile;
+  PFN_CARD_DELETE_FILE            pfnCardDeleteFile;
+  PFN_CARD_ENUM_FILES             pfnCardEnumFiles;
+  PFN_CARD_GET_FILE_INFO          pfnCardGetFileInfo;
+  PFN_CARD_QUERY_FREE_SPACE       pfnCardQueryFreeSpace;
+  PFN_CARD_QUERY_KEY_SIZES        pfnCardQueryKeySizes;
+  PFN_CARD_SIGN_DATA              pfnCardSignData;
+  PFN_CARD_RSA_DECRYPT            pfnCardRSADecrypt;
+  PFN_CARD_CONSTRUCT_DH_AGREEMENT pfnCardConstructDHAgreement;
+  PFN_CARD_DERIVE_KEY             pfnCardDeriveKey;
+  PFN_CARD_DESTROY_DH_AGREEMENT   pfnCardDestroyDHAgreement;
+  PFN_CSP_GET_DH_AGREEMENT        pfnCspGetDHAgreement;
+} CARD_DATA, *PCARD_DATA;
+
+DWORD WINAPI CardAcquireContext(
+  PCARD_DATA pCardData,
+  DWORD dwFlags
+);
+
+DWORD WINAPI CardDeleteContainer(
+  PCARD_DATA pCardData,
+  BYTE bContainerIndex,
+  DWORD dwReserved
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*_INC_CARDMOD*/
diff --git a/mingw-w64-headers/include/casetup.h b/mingw-w64-headers/include/casetup.h
new file mode 100644
index 0000000..60d6134
--- /dev/null
+++ b/mingw-w64-headers/include/casetup.h
@@ -0,0 +1,59 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CASETUP
+#define _INC_CASETUP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum _CASetupProperty {
+  ENUM_SETUPPROP_INVALID              = -1,
+  ENUM_SETUPPROP_CATYPE               = 0,
+  ENUM_SETUPPROP_CAKEYINFORMATION     = 1,
+  ENUM_SETUPPROP_INTERACTIVE          = 2,
+  ENUM_SETUPPROP_CANAME               = 3,
+  ENUM_SETUPPROP_CADSSUFFIX           = 4,
+  ENUM_SETUPPROP_VALIDITYPERIOD       = 5,
+  ENUM_SETUPPROP_VALIDITYPERIODUNIT   = 6,
+  ENUM_SETUPPROP_EXPIRATIONDATE       = 7,
+  ENUM_SETUPPROP_PRESERVEDATABASE     = 8,
+  ENUM_SETUPPROP_DATABASEDIRECTORY    = 9,
+  ENUM_SETUPPROP_LOGDIRECTORY         = 10,
+  ENUM_SETUPPROP_SHAREDFOLDER         = 11,
+  ENUM_SETUPPROP_PARENTCAMACHINE      = 12,
+  ENUM_SETUPPROP_PARENTCANAME         = 13,
+  ENUM_SETUPPROP_REQUESTFILE          = 14,
+  ENUM_SETUPPROP_WEBCAMACHINE         = 15,
+  ENUM_SETUPPROP_WEBCANAME            = 16
+} CASetupProperty;
+
+typedef enum _MSCEPSetupProperty {
+  ENUM_CEPSETUPPROP_USELOCALSYSTEM           = 0,
+  ENUM_CEPSETUPPROP_USECHALLENGE             = 1,
+  ENUM_CEPSETUPPROP_RANAME_CN                = 2,
+  ENUM_CEPSETUPPROP_RANAME_EMAIL             = 3,
+  ENUM_CEPSETUPPROP_RANAME_COMPANY           = 4,
+  ENUM_CEPSETUPPROP_RANAME_DEPT              = 5,
+  ENUM_CEPSETUPPROP_RANAME_CITY              = 6,
+  ENUM_CEPSETUPPROP_RANAME_STATE             = 7,
+  ENUM_CEPSETUPPROP_RANAME_COUNTRY           = 8,
+  ENUM_CEPSETUPPROP_SIGNINGKEYINFORMATION    = 9,
+  ENUM_CEPSETUPPROP_EXCHANGEKEYINFORMATION   = 10,
+  ENUM_CEPSETUPPROP_CAINFORMATION            = 11,
+  ENUM_CEPSETUPPROP_MSCEPURL                 = 12,
+  ENUM_CEPSETUPPROP_CHALLENGEURL             = 13
+} MSCEPSetupProperty;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_CASETUP*/
diff --git a/mingw-w64-headers/include/certca.h b/mingw-w64-headers/include/certca.h
new file mode 100644
index 0000000..5417cf2
--- /dev/null
+++ b/mingw-w64-headers/include/certca.h
@@ -0,0 +1,15 @@
+#ifndef _INC_CERTCA
+#define _INC_CERTCA
+
+typedef enum  {
+  ENUM_PERIOD_INVALID   = -1,
+  ENUM_PERIOD_SECONDS   = 0,
+  ENUM_PERIOD_MINUTES,
+  ENUM_PERIOD_HOURS,
+  ENUM_PERIOD_DAYS,
+  ENUM_PERIOD_WEEKS,
+  ENUM_PERIOD_MONTHS,
+  ENUM_PERIOD_YEARS 
+} ENUM_PERIOD;
+
+#endif /*_INC_CERTCA*/
diff --git a/mingw-w64-headers/include/certenroll.h b/mingw-w64-headers/include/certenroll.h
new file mode 100644
index 0000000..61daac0
--- /dev/null
+++ b/mingw-w64-headers/include/certenroll.h
@@ -0,0 +1,912 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CERTENROLL
+#define _INC_CERTENROLL
+
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  typedef enum AlgorithmFlags {
+    AlgorithmFlagsNone   = 0x00000000,
+    AlgorithmFlagsWrap   = 0x00000001 
+  } AlgorithmFlags;
+
+  typedef enum AlgorithmOperationFlags {
+    XCN_NCRYPT_NO_OPERATION                      = 0,
+    XCN_NCRYPT_CIPHER_OPERATION                  = 0x1,
+    XCN_NCRYPT_HASH_OPERATION                    = 0x2,
+    XCN_NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION   = 0x4,
+    XCN_NCRYPT_SECRET_AGREEMENT_OPERATION        = 0x8,
+    XCN_NCRYPT_SIGNATURE_OPERATION               = 0x10,
+    XCN_NCRYPT_RNG_OPERATION                     = 0x20,
+    XCN_NCRYPT_ANY_ASYMMETRIC_OPERATION          = ( ( 0x4 | 0x8 )  | 0x10 ),
+    XCN_NCRYPT_PREFER_SIGNATURE_ONLY_OPERATION   = 0x00200000,
+    XCN_NCRYPT_PREFER_NON_SIGNATURE_OPERATION    = 0x00400000,
+    XCN_NCRYPT_EXACT_MATCH_OPERATION             = 0x00800000,
+    XCN_NCRYPT_PREFERENCE_MASK_OPERATION         = 0x00e00000 
+  } AlgorithmOperationFlags;
+
+  typedef enum AlgorithmType {
+    XCN_BCRYPT_UNKNOWN_INTERFACE                 = 0,
+    XCN_BCRYPT_SIGNATURE_INTERFACE               = 0x5,
+    XCN_BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE   = 0x3,
+    XCN_BCRYPT_CIPHER_INTERFACE                  = 0x1,
+    XCN_BCRYPT_HASH_INTERFACE                    = 0x2,
+    XCN_BCRYPT_SECRET_AGREEMENT_INTERFACE        = 0x4,
+    XCN_BCRYPT_RNG_INTERFACE                     = 0x6 
+  } AlgorithmType;
+
+  typedef enum AlternativeNameType {
+    XCN_CERT_ALT_NAME_UNKNOWN               = 0,
+    XCN_CERT_ALT_NAME_OTHER_NAME            = 1,
+    XCN_CERT_ALT_NAME_RFC822_NAME           = 2,
+    XCN_CERT_ALT_NAME_DNS_NAME              = 3,
+    XCN_CERT_ALT_NAME_DIRECTORY_NAME        = 5,
+    XCN_CERT_ALT_NAME_URL                   = 7,
+    XCN_CERT_ALT_NAME_IP_ADDRESS            = 8,
+    XCN_CERT_ALT_NAME_REGISTERED_ID         = 9,
+    XCN_CERT_ALT_NAME_GUID                  = 10,
+    XCN_CERT_ALT_NAME_USER_PRINCIPLE_NAME   = 11 
+  } AlternativeNameType;
+
+  typedef enum CERTENROLL_PROPERTYID {
+    XCN_PROPERTYID_NONE                              = 0,
+    XCN_CERT_KEY_PROV_HANDLE_PROP_ID                 = 1,
+    XCN_CERT_KEY_PROV_INFO_PROP_ID                   = 2,
+    XCN_CERT_SHA1_HASH_PROP_ID                       = 3,
+    XCN_CERT_MD5_HASH_PROP_ID                        = 4,
+    XCN_CERT_HASH_PROP_ID                            = 3,
+    XCN_CERT_KEY_CONTEXT_PROP_ID                     = 5,
+    XCN_CERT_KEY_SPEC_PROP_ID                        = 6,
+    XCN_CERT_IE30_RESERVED_PROP_ID                   = 7,
+    XCN_CERT_PUBKEY_HASH_RESERVED_PROP_ID            = 8,
+    XCN_CERT_ENHKEY_USAGE_PROP_ID                    = 9,
+    XCN_CERT_CTL_USAGE_PROP_ID                       = 9,
+    XCN_CERT_NEXT_UPDATE_LOCATION_PROP_ID            = 10,
+    XCN_CERT_FRIENDLY_NAME_PROP_ID                   = 11,
+    XCN_CERT_PVK_FILE_PROP_ID                        = 12,
+    XCN_CERT_DESCRIPTION_PROP_ID                     = 13,
+    XCN_CERT_ACCESS_STATE_PROP_ID                    = 14,
+    XCN_CERT_SIGNATURE_HASH_PROP_ID                  = 15,
+    XCN_CERT_SMART_CARD_DATA_PROP_ID                 = 16,
+    XCN_CERT_EFS_PROP_ID                             = 17,
+    XCN_CERT_FORTEZZA_DATA_PROP_ID                   = 18,
+    XCN_CERT_ARCHIVED_PROP_ID                        = 19,
+    XCN_CERT_KEY_IDENTIFIER_PROP_ID                  = 20,
+    XCN_CERT_AUTO_ENROLL_PROP_ID                     = 21,
+    XCN_CERT_PUBKEY_ALG_PARA_PROP_ID                 = 22,
+    XCN_CERT_CROSS_CERT_DIST_POINTS_PROP_ID          = 23,
+    XCN_CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID      = 24,
+    XCN_CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID     = 25,
+    XCN_CERT_ENROLLMENT_PROP_ID                      = 26,
+    XCN_CERT_DATE_STAMP_PROP_ID                      = 27,
+    XCN_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID   = 28,
+    XCN_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID           = 29,
+    XCN_CERT_EXTENDED_ERROR_INFO_PROP_ID             = 30,
+    XCN_CERT_RENEWAL_PROP_ID                         = 64,
+    XCN_CERT_ARCHIVED_KEY_HASH_PROP_ID               = 65,
+    XCN_CERT_AUTO_ENROLL_RETRY_PROP_ID               = 66,
+    XCN_CERT_AIA_URL_RETRIEVED_PROP_ID               = 67,
+    XCN_CERT_AUTHORITY_INFO_ACCESS_PROP_ID           = 68,
+    XCN_CERT_BACKED_UP_PROP_ID                       = 69,
+    XCN_CERT_OCSP_RESPONSE_PROP_ID                   = 70,
+    XCN_CERT_REQUEST_ORIGINATOR_PROP_ID              = 71,
+    XCN_CERT_SOURCE_LOCATION_PROP_ID                 = 72,
+    XCN_CERT_SOURCE_URL_PROP_ID                      = 73,
+    XCN_CERT_NEW_KEY_PROP_ID                         = 74,
+    XCN_CERT_FIRST_RESERVED_PROP_ID                  = 87,
+    XCN_CERT_LAST_RESERVED_PROP_ID                   = 0x7fff,
+    XCN_CERT_FIRST_USER_PROP_ID                      = 0x8000,
+    XCN_CERT_LAST_USER_PROP_ID                       = 0xffff,
+    XCN_CERT_STORE_LOCALIZED_NAME_PROP_ID            = 0x1000,
+    XCN_CERT_CEP_PROP_ID                             = 87 
+  } CERTENROLL_PROPERTYID;
+
+  typedef enum CERTENROLL_OBJECTID {
+    XCN_OID_NONE                                         = 0,
+    XCN_OID_RSA                                          = 1,
+    XCN_OID_PKCS                                         = 2,
+    XCN_OID_RSA_HASH                                     = 3,
+    XCN_OID_RSA_ENCRYPT                                  = 4,
+    XCN_OID_PKCS_1                                       = 5,
+    XCN_OID_PKCS_2                                       = 6,
+    XCN_OID_PKCS_3                                       = 7,
+    XCN_OID_PKCS_4                                       = 8,
+    XCN_OID_PKCS_5                                       = 9,
+    XCN_OID_PKCS_6                                       = 10,
+    XCN_OID_PKCS_7                                       = 11,
+    XCN_OID_PKCS_8                                       = 12,
+    XCN_OID_PKCS_9                                       = 13,
+    XCN_OID_PKCS_10                                      = 14,
+    XCN_OID_PKCS_12                                      = 15,
+    XCN_OID_RSA_RSA                                      = 16,
+    XCN_OID_RSA_MD2RSA                                   = 17,
+    XCN_OID_RSA_MD4RSA                                   = 18,
+    XCN_OID_RSA_MD5RSA                                   = 19,
+    XCN_OID_RSA_SHA1RSA                                  = 20,
+    XCN_OID_RSA_SETOAEP_RSA                              = 21,
+    XCN_OID_RSA_DH                                       = 22,
+    XCN_OID_RSA_data                                     = 23,
+    XCN_OID_RSA_signedData                               = 24,
+    XCN_OID_RSA_envelopedData                            = 25,
+    XCN_OID_RSA_signEnvData                              = 26,
+    XCN_OID_RSA_digestedData                             = 27,
+    XCN_OID_RSA_hashedData                               = 28,
+    XCN_OID_RSA_encryptedData                            = 29,
+    XCN_OID_RSA_emailAddr                                = 30,
+    XCN_OID_RSA_unstructName                             = 31,
+    XCN_OID_RSA_contentType                              = 32,
+    XCN_OID_RSA_messageDigest                            = 33,
+    XCN_OID_RSA_signingTime                              = 34,
+    XCN_OID_RSA_counterSign                              = 35,
+    XCN_OID_RSA_challengePwd                             = 36,
+    XCN_OID_RSA_unstructAddr                             = 37,
+    XCN_OID_RSA_extCertAttrs                             = 38,
+    XCN_OID_RSA_certExtensions                           = 39,
+    XCN_OID_RSA_SMIMECapabilities                        = 40,
+    XCN_OID_RSA_preferSignedData                         = 41,
+    XCN_OID_RSA_SMIMEalg                                 = 42,
+    XCN_OID_RSA_SMIMEalgESDH                             = 43,
+    XCN_OID_RSA_SMIMEalgCMS3DESwrap                      = 44,
+    XCN_OID_RSA_SMIMEalgCMSRC2wrap                       = 45,
+    XCN_OID_RSA_MD2                                      = 46,
+    XCN_OID_RSA_MD4                                      = 47,
+    XCN_OID_RSA_MD5                                      = 48,
+    XCN_OID_RSA_RC2CBC                                   = 49,
+    XCN_OID_RSA_RC4                                      = 50,
+    XCN_OID_RSA_DES_EDE3_CBC                             = 51,
+    XCN_OID_RSA_RC5_CBCPad                               = 52,
+    XCN_OID_ANSI_X942                                    = 53,
+    XCN_OID_ANSI_X942_DH                                 = 54,
+    XCN_OID_X957                                         = 55,
+    XCN_OID_X957_DSA                                     = 56,
+    XCN_OID_X957_SHA1DSA                                 = 57,
+    XCN_OID_DS                                           = 58,
+    XCN_OID_DSALG                                        = 59,
+    XCN_OID_DSALG_CRPT                                   = 60,
+    XCN_OID_DSALG_HASH                                   = 61,
+    XCN_OID_DSALG_SIGN                                   = 62,
+    XCN_OID_DSALG_RSA                                    = 63,
+    XCN_OID_OIW                                          = 64,
+    XCN_OID_OIWSEC                                       = 65,
+    XCN_OID_OIWSEC_md4RSA                                = 66,
+    XCN_OID_OIWSEC_md5RSA                                = 67,
+    XCN_OID_OIWSEC_md4RSA2                               = 68,
+    XCN_OID_OIWSEC_desECB                                = 69,
+    XCN_OID_OIWSEC_desCBC                                = 70,
+    XCN_OID_OIWSEC_desOFB                                = 71,
+    XCN_OID_OIWSEC_desCFB                                = 72,
+    XCN_OID_OIWSEC_desMAC                                = 73,
+    XCN_OID_OIWSEC_rsaSign                               = 74,
+    XCN_OID_OIWSEC_dsa                                   = 75,
+    XCN_OID_OIWSEC_shaDSA                                = 76,
+    XCN_OID_OIWSEC_mdc2RSA                               = 77,
+    XCN_OID_OIWSEC_shaRSA                                = 78,
+    XCN_OID_OIWSEC_dhCommMod                             = 79,
+    XCN_OID_OIWSEC_desEDE                                = 80,
+    XCN_OID_OIWSEC_sha                                   = 81,
+    XCN_OID_OIWSEC_mdc2                                  = 82,
+    XCN_OID_OIWSEC_dsaComm                               = 83,
+    XCN_OID_OIWSEC_dsaCommSHA                            = 84,
+    XCN_OID_OIWSEC_rsaXchg                               = 85,
+    XCN_OID_OIWSEC_keyHashSeal                           = 86,
+    XCN_OID_OIWSEC_md2RSASign                            = 87,
+    XCN_OID_OIWSEC_md5RSASign                            = 88,
+    XCN_OID_OIWSEC_sha1                                  = 89,
+    XCN_OID_OIWSEC_dsaSHA1                               = 90,
+    XCN_OID_OIWSEC_dsaCommSHA1                           = 91,
+    XCN_OID_OIWSEC_sha1RSASign                           = 92,
+    XCN_OID_OIWDIR                                       = 93,
+    XCN_OID_OIWDIR_CRPT                                  = 94,
+    XCN_OID_OIWDIR_HASH                                  = 95,
+    XCN_OID_OIWDIR_SIGN                                  = 96,
+    XCN_OID_OIWDIR_md2                                   = 97,
+    XCN_OID_OIWDIR_md2RSA                                = 98,
+    XCN_OID_INFOSEC                                      = 99,
+    XCN_OID_INFOSEC_sdnsSignature                        = 100,
+    XCN_OID_INFOSEC_mosaicSignature                      = 101,
+    XCN_OID_INFOSEC_sdnsConfidentiality                  = 102,
+    XCN_OID_INFOSEC_mosaicConfidentiality                = 103,
+    XCN_OID_INFOSEC_sdnsIntegrity                        = 104,
+    XCN_OID_INFOSEC_mosaicIntegrity                      = 105,
+    XCN_OID_INFOSEC_sdnsTokenProtection                  = 106,
+    XCN_OID_INFOSEC_mosaicTokenProtection                = 107,
+    XCN_OID_INFOSEC_sdnsKeyManagement                    = 108,
+    XCN_OID_INFOSEC_mosaicKeyManagement                  = 109,
+    XCN_OID_INFOSEC_sdnsKMandSig                         = 110,
+    XCN_OID_INFOSEC_mosaicKMandSig                       = 111,
+    XCN_OID_INFOSEC_SuiteASignature                      = 112,
+    XCN_OID_INFOSEC_SuiteAConfidentiality                = 113,
+    XCN_OID_INFOSEC_SuiteAIntegrity                      = 114,
+    XCN_OID_INFOSEC_SuiteATokenProtection                = 115,
+    XCN_OID_INFOSEC_SuiteAKeyManagement                  = 116,
+    XCN_OID_INFOSEC_SuiteAKMandSig                       = 117,
+    XCN_OID_INFOSEC_mosaicUpdatedSig                     = 118,
+    XCN_OID_INFOSEC_mosaicKMandUpdSig                    = 119,
+    XCN_OID_INFOSEC_mosaicUpdatedInteg                   = 120,
+    XCN_OID_COMMON_NAME                                  = 121,
+    XCN_OID_SUR_NAME                                     = 122,
+    XCN_OID_DEVICE_SERIAL_NUMBER                         = 123,
+    XCN_OID_COUNTRY_NAME                                 = 124,
+    XCN_OID_LOCALITY_NAME                                = 125,
+    XCN_OID_STATE_OR_PROVINCE_NAME                       = 126,
+    XCN_OID_STREET_ADDRESS                               = 127,
+    XCN_OID_ORGANIZATION_NAME                            = 128,
+    XCN_OID_ORGANIZATIONAL_UNIT_NAME                     = 129,
+    XCN_OID_TITLE                                        = 130,
+    XCN_OID_DESCRIPTION                                  = 131,
+    XCN_OID_SEARCH_GUIDE                                 = 132,
+    XCN_OID_BUSINESS_CATEGORY                            = 133,
+    XCN_OID_POSTAL_ADDRESS                               = 134,
+    XCN_OID_POSTAL_CODE                                  = 135,
+    XCN_OID_POST_OFFICE_BOX                              = 136,
+    XCN_OID_PHYSICAL_DELIVERY_OFFICE_NAME                = 137,
+    XCN_OID_TELEPHONE_NUMBER                             = 138,
+    XCN_OID_TELEX_NUMBER                                 = 139,
+    XCN_OID_TELETEXT_TERMINAL_IDENTIFIER                 = 140,
+    XCN_OID_FACSIMILE_TELEPHONE_NUMBER                   = 141,
+    XCN_OID_X21_ADDRESS                                  = 142,
+    XCN_OID_INTERNATIONAL_ISDN_NUMBER                    = 143,
+    XCN_OID_REGISTERED_ADDRESS                           = 144,
+    XCN_OID_DESTINATION_INDICATOR                        = 145,
+    XCN_OID_PREFERRED_DELIVERY_METHOD                    = 146,
+    XCN_OID_PRESENTATION_ADDRESS                         = 147,
+    XCN_OID_SUPPORTED_APPLICATION_CONTEXT                = 148,
+    XCN_OID_MEMBER                                       = 149,
+    XCN_OID_OWNER                                        = 150,
+    XCN_OID_ROLE_OCCUPANT                                = 151,
+    XCN_OID_SEE_ALSO                                     = 152,
+    XCN_OID_USER_PASSWORD                                = 153,
+    XCN_OID_USER_CERTIFICATE                             = 154,
+    XCN_OID_CA_CERTIFICATE                               = 155,
+    XCN_OID_AUTHORITY_REVOCATION_LIST                    = 156,
+    XCN_OID_CERTIFICATE_REVOCATION_LIST                  = 157,
+    XCN_OID_CROSS_CERTIFICATE_PAIR                       = 158,
+    XCN_OID_GIVEN_NAME                                   = 159,
+    XCN_OID_INITIALS                                     = 160,
+    XCN_OID_DN_QUALIFIER                                 = 161,
+    XCN_OID_DOMAIN_COMPONENT                             = 162,
+    XCN_OID_PKCS_12_FRIENDLY_NAME_ATTR                   = 163,
+    XCN_OID_PKCS_12_LOCAL_KEY_ID                         = 164,
+    XCN_OID_PKCS_12_KEY_PROVIDER_NAME_ATTR               = 165,
+    XCN_OID_LOCAL_MACHINE_KEYSET                         = 166,
+    XCN_OID_PKCS_12_EXTENDED_ATTRIBUTES                  = 167,
+    XCN_OID_KEYID_RDN                                    = 168,
+    XCN_OID_AUTHORITY_KEY_IDENTIFIER                     = 169,
+    XCN_OID_KEY_ATTRIBUTES                               = 170,
+    XCN_OID_CERT_POLICIES_95                             = 171,
+    XCN_OID_KEY_USAGE_RESTRICTION                        = 172,
+    XCN_OID_SUBJECT_ALT_NAME                             = 173,
+    XCN_OID_ISSUER_ALT_NAME                              = 174,
+    XCN_OID_BASIC_CONSTRAINTS                            = 175,
+    XCN_OID_KEY_USAGE                                    = 176,
+    XCN_OID_PRIVATEKEY_USAGE_PERIOD                      = 177,
+    XCN_OID_BASIC_CONSTRAINTS2                           = 178,
+    XCN_OID_CERT_POLICIES                                = 179,
+    XCN_OID_ANY_CERT_POLICY                              = 180,
+    XCN_OID_AUTHORITY_KEY_IDENTIFIER2                    = 181,
+    XCN_OID_SUBJECT_KEY_IDENTIFIER                       = 182,
+    XCN_OID_SUBJECT_ALT_NAME2                            = 183,
+    XCN_OID_ISSUER_ALT_NAME2                             = 184,
+    XCN_OID_CRL_REASON_CODE                              = 185,
+    XCN_OID_REASON_CODE_HOLD                             = 186,
+    XCN_OID_CRL_DIST_POINTS                              = 187,
+    XCN_OID_ENHANCED_KEY_USAGE                           = 188,
+    XCN_OID_CRL_NUMBER                                   = 189,
+    XCN_OID_DELTA_CRL_INDICATOR                          = 190,
+    XCN_OID_ISSUING_DIST_POINT                           = 191,
+    XCN_OID_FRESHEST_CRL                                 = 192,
+    XCN_OID_NAME_CONSTRAINTS                             = 193,
+    XCN_OID_POLICY_MAPPINGS                              = 194,
+    XCN_OID_LEGACY_POLICY_MAPPINGS                       = 195,
+    XCN_OID_POLICY_CONSTRAINTS                           = 196,
+    XCN_OID_RENEWAL_CERTIFICATE                          = 197,
+    XCN_OID_ENROLLMENT_NAME_VALUE_PAIR                   = 198,
+    XCN_OID_ENROLLMENT_CSP_PROVIDER                      = 199,
+    XCN_OID_OS_VERSION                                   = 200,
+    XCN_OID_ENROLLMENT_AGENT                             = 201,
+    XCN_OID_PKIX                                         = 202,
+    XCN_OID_PKIX_PE                                      = 203,
+    XCN_OID_AUTHORITY_INFO_ACCESS                        = 204,
+    XCN_OID_BIOMETRIC_EXT                                = 205,
+    XCN_OID_LOGOTYPE_EXT                                 = 206,
+    XCN_OID_CERT_EXTENSIONS                              = 207,
+    XCN_OID_NEXT_UPDATE_LOCATION                         = 208,
+    XCN_OID_REMOVE_CERTIFICATE                           = 209,
+    XCN_OID_CROSS_CERT_DIST_POINTS                       = 210,
+    XCN_OID_CTL                                          = 211,
+    XCN_OID_SORTED_CTL                                   = 212,
+    XCN_OID_SERIALIZED                                   = 213,
+    XCN_OID_NT_PRINCIPAL_NAME                            = 214,
+    XCN_OID_PRODUCT_UPDATE                               = 215,
+    XCN_OID_ANY_APPLICATION_POLICY                       = 216,
+    XCN_OID_AUTO_ENROLL_CTL_USAGE                        = 217,
+    XCN_OID_ENROLL_CERTTYPE_EXTENSION                    = 218,
+    XCN_OID_CERT_MANIFOLD                                = 219,
+    XCN_OID_CERTSRV_CA_VERSION                           = 220,
+    XCN_OID_CERTSRV_PREVIOUS_CERT_HASH                   = 221,
+    XCN_OID_CRL_VIRTUAL_BASE                             = 222,
+    XCN_OID_CRL_NEXT_PUBLISH                             = 223,
+    XCN_OID_KP_CA_EXCHANGE                               = 224,
+    XCN_OID_KP_KEY_RECOVERY_AGENT                        = 225,
+    XCN_OID_CERTIFICATE_TEMPLATE                         = 226,
+    XCN_OID_ENTERPRISE_OID_ROOT                          = 227,
+    XCN_OID_RDN_DUMMY_SIGNER                             = 228,
+    XCN_OID_APPLICATION_CERT_POLICIES                    = 229,
+    XCN_OID_APPLICATION_POLICY_MAPPINGS                  = 230,
+    XCN_OID_APPLICATION_POLICY_CONSTRAINTS               = 231,
+    XCN_OID_ARCHIVED_KEY_ATTR                            = 232,
+    XCN_OID_CRL_SELF_CDP                                 = 233,
+    XCN_OID_REQUIRE_CERT_CHAIN_POLICY                    = 234,
+    XCN_OID_ARCHIVED_KEY_CERT_HASH                       = 235,
+    XCN_OID_ISSUED_CERT_HASH                             = 236,
+    XCN_OID_DS_EMAIL_REPLICATION                         = 237,
+    XCN_OID_REQUEST_CLIENT_INFO                          = 238,
+    XCN_OID_ENCRYPTED_KEY_HASH                           = 239,
+    XCN_OID_CERTSRV_CROSSCA_VERSION                      = 240,
+    XCN_OID_NTDS_REPLICATION                             = 241,
+    XCN_OID_SUBJECT_DIR_ATTRS                            = 242,
+    XCN_OID_PKIX_KP                                      = 243,
+    XCN_OID_PKIX_KP_SERVER_AUTH                          = 244,
+    XCN_OID_PKIX_KP_CLIENT_AUTH                          = 245,
+    XCN_OID_PKIX_KP_CODE_SIGNING                         = 246,
+    XCN_OID_PKIX_KP_EMAIL_PROTECTION                     = 247,
+    XCN_OID_PKIX_KP_IPSEC_END_SYSTEM                     = 248,
+    XCN_OID_PKIX_KP_IPSEC_TUNNEL                         = 249,
+    XCN_OID_PKIX_KP_IPSEC_USER                           = 250,
+    XCN_OID_PKIX_KP_TIMESTAMP_SIGNING                    = 251,
+    XCN_OID_PKIX_KP_OCSP_SIGNING                         = 252,
+    XCN_OID_PKIX_OCSP_NOCHECK                            = 253,
+    XCN_OID_IPSEC_KP_IKE_INTERMEDIATE                    = 254,
+    XCN_OID_KP_CTL_USAGE_SIGNING                         = 255,
+    XCN_OID_KP_TIME_STAMP_SIGNING                        = 256,
+    XCN_OID_SERVER_GATED_CRYPTO                          = 257,
+    XCN_OID_SGC_NETSCAPE                                 = 258,
+    XCN_OID_KP_EFS                                       = 259,
+    XCN_OID_EFS_RECOVERY                                 = 260,
+    XCN_OID_WHQL_CRYPTO                                  = 261,
+    XCN_OID_NT5_CRYPTO                                   = 262,
+    XCN_OID_OEM_WHQL_CRYPTO                              = 263,
+    XCN_OID_EMBEDDED_NT_CRYPTO                           = 264,
+    XCN_OID_ROOT_LIST_SIGNER                             = 265,
+    XCN_OID_KP_QUALIFIED_SUBORDINATION                   = 266,
+    XCN_OID_KP_KEY_RECOVERY                              = 267,
+    XCN_OID_KP_DOCUMENT_SIGNING                          = 268,
+    XCN_OID_KP_LIFETIME_SIGNING                          = 269,
+    XCN_OID_KP_MOBILE_DEVICE_SOFTWARE                    = 270,
+    XCN_OID_KP_SMART_DISPLAY                             = 271,
+    XCN_OID_KP_CSP_SIGNATURE                             = 272,
+    XCN_OID_DRM                                          = 273,
+    XCN_OID_DRM_INDIVIDUALIZATION                        = 274,
+    XCN_OID_LICENSES                                     = 275,
+    XCN_OID_LICENSE_SERVER                               = 276,
+    XCN_OID_KP_SMARTCARD_LOGON                           = 277,
+    XCN_OID_YESNO_TRUST_ATTR                             = 278,
+    XCN_OID_PKIX_POLICY_QUALIFIER_CPS                    = 279,
+    XCN_OID_PKIX_POLICY_QUALIFIER_USERNOTICE             = 280,
+    XCN_OID_CERT_POLICIES_95_QUALIFIER1                  = 281,
+    XCN_OID_PKIX_ACC_DESCR                               = 282,
+    XCN_OID_PKIX_OCSP                                    = 283,
+    XCN_OID_PKIX_CA_ISSUERS                              = 284,
+    XCN_OID_VERISIGN_PRIVATE_6_9                         = 285,
+    XCN_OID_VERISIGN_ONSITE_JURISDICTION_HASH            = 286,
+    XCN_OID_VERISIGN_BITSTRING_6_13                      = 287,
+    XCN_OID_VERISIGN_ISS_STRONG_CRYPTO                   = 288,
+    XCN_OID_NETSCAPE                                     = 289,
+    XCN_OID_NETSCAPE_CERT_EXTENSION                      = 290,
+    XCN_OID_NETSCAPE_CERT_TYPE                           = 291,
+    XCN_OID_NETSCAPE_BASE_URL                            = 292,
+    XCN_OID_NETSCAPE_REVOCATION_URL                      = 293,
+    XCN_OID_NETSCAPE_CA_REVOCATION_URL                   = 294,
+    XCN_OID_NETSCAPE_CERT_RENEWAL_URL                    = 295,
+    XCN_OID_NETSCAPE_CA_POLICY_URL                       = 296,
+    XCN_OID_NETSCAPE_SSL_SERVER_NAME                     = 297,
+    XCN_OID_NETSCAPE_COMMENT                             = 298,
+    XCN_OID_NETSCAPE_DATA_TYPE                           = 299,
+    XCN_OID_NETSCAPE_CERT_SEQUENCE                       = 300,
+    XCN_OID_CT_PKI_DATA                                  = 301,
+    XCN_OID_CT_PKI_RESPONSE                              = 302,
+    XCN_OID_PKIX_NO_SIGNATURE                            = 303,
+    XCN_OID_CMC                                          = 304,
+    XCN_OID_CMC_STATUS_INFO                              = 305,
+    XCN_OID_CMC_IDENTIFICATION                           = 306,
+    XCN_OID_CMC_IDENTITY_PROOF                           = 307,
+    XCN_OID_CMC_DATA_RETURN                              = 308,
+    XCN_OID_CMC_TRANSACTION_ID                           = 309,
+    XCN_OID_CMC_SENDER_NONCE                             = 310,
+    XCN_OID_CMC_RECIPIENT_NONCE                          = 311,
+    XCN_OID_CMC_ADD_EXTENSIONS                           = 312,
+    XCN_OID_CMC_ENCRYPTED_POP                            = 313,
+    XCN_OID_CMC_DECRYPTED_POP                            = 314,
+    XCN_OID_CMC_LRA_POP_WITNESS                          = 315,
+    XCN_OID_CMC_GET_CERT                                 = 316,
+    XCN_OID_CMC_GET_CRL                                  = 317,
+    XCN_OID_CMC_REVOKE_REQUEST                           = 318,
+    XCN_OID_CMC_REG_INFO                                 = 319,
+    XCN_OID_CMC_RESPONSE_INFO                            = 320,
+    XCN_OID_CMC_QUERY_PENDING                            = 321,
+    XCN_OID_CMC_ID_POP_LINK_RANDOM                       = 322,
+    XCN_OID_CMC_ID_POP_LINK_WITNESS                      = 323,
+    XCN_OID_CMC_ID_CONFIRM_CERT_ACCEPTANCE               = 324,
+    XCN_OID_CMC_ADD_ATTRIBUTES                           = 325,
+    XCN_OID_LOYALTY_OTHER_LOGOTYPE                       = 326,
+    XCN_OID_BACKGROUND_OTHER_LOGOTYPE                    = 327,
+    XCN_OID_PKIX_OCSP_BASIC_SIGNED_RESPONSE              = 328,
+    XCN_OID_PKCS_7_DATA                                  = 329,
+    XCN_OID_PKCS_7_SIGNED                                = 330,
+    XCN_OID_PKCS_7_ENVELOPED                             = 331,
+    XCN_OID_PKCS_7_SIGNEDANDENVELOPED                    = 332,
+    XCN_OID_PKCS_7_DIGESTED                              = 333,
+    XCN_OID_PKCS_7_ENCRYPTED                             = 334,
+    XCN_OID_PKCS_9_CONTENT_TYPE                          = 335,
+    XCN_OID_PKCS_9_MESSAGE_DIGEST                        = 336,
+    XCN_OID_CERT_PROP_ID_PREFIX                          = 337,
+    XCN_OID_CERT_KEY_IDENTIFIER_PROP_ID                  = 338,
+    XCN_OID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID   = 339,
+    XCN_OID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID           = 340,
+    XCN_OID_CERT_MD5_HASH_PROP_ID                        = 341,
+    XCN_OID_RSA_SHA256RSA                                = 342,
+    XCN_OID_RSA_SHA384RSA                                = 343,
+    XCN_OID_RSA_SHA512RSA                                = 344,
+    XCN_OID_NIST_sha256                                  = 345,
+    XCN_OID_NIST_sha384                                  = 346,
+    XCN_OID_NIST_sha512                                  = 347,
+    XCN_OID_RSA_MGF1                                     = 348,
+    XCN_OID_ECC_PUBLIC_KEY                               = 349,
+    XCN_OID_RSA_SSA_PSS                                  = 353,
+    XCN_OID_ECDSA_SHA1                                   = 354,
+    XCN_OID_ECDSA_SPECIFIED                              = 354 
+  } CERTENROLL_OBJECTID;
+
+  typedef enum EnrollmentCAProperty {
+    CAPropCommonName           = 1,
+    CAPropDistinguishedName    = 2,
+    CAPropSanitizedName        = 3,
+    CAPropSanitizedShortName   = 4,
+    CAPropDNSName              = 5,
+    CAPropCertificateTypes     = 6,
+    CAPropCertificate          = 7,
+    CAPropDescription          = 8,
+    CAPropWebServers           = 9,
+    CAPropSiteName             = 10,
+    CAPropSecurity             = 11,
+    CAPropRenewalOnly          = 12 
+  } EnrollmentCAProperty;
+
+  typedef enum EncodingType {
+    XCN_CRYPT_STRING_BASE64HEADER          = 0,
+    XCN_CRYPT_STRING_BASE64                = 0x1,
+    XCN_CRYPT_STRING_BINARY                = 0x2,
+    XCN_CRYPT_STRING_BASE64REQUESTHEADER   = 0x3,
+    XCN_CRYPT_STRING_HEX                   = 0x4,
+    XCN_CRYPT_STRING_HEXASCII              = 0x5,
+    XCN_CRYPT_STRING_BASE64_ANY            = 0x6,
+    XCN_CRYPT_STRING_ANY                   = 0x7,
+    XCN_CRYPT_STRING_HEX_ANY               = 0x8,
+    XCN_CRYPT_STRING_BASE64X509CRLHEADER   = 0x9,
+    XCN_CRYPT_STRING_HEXADDR               = 0xa,
+    XCN_CRYPT_STRING_HEXASCIIADDR          = 0xb,
+    XCN_CRYPT_STRING_HEXRAW                = 0xc,
+    XCN_CRYPT_STRING_NOCRLF                = 0x40000000,
+    XCN_CRYPT_STRING_NOCR                  = 0x80000000 
+  } EncodingType;
+
+  typedef enum CommitTemplateFlags {
+    CommitFlagSaveTemplateGenerateOID     = 1,
+    CommitFlagSaveTemplateUseCurrentOID   = 2,
+    CommitFlagSaveTemplateOverwrite       = 3,
+    CommitFlagDeleteTemplate              = 4 
+  } CommitTemplateFlags;
+
+  typedef enum EnrollmentDisplayStatus {
+    DisplayNo    = 0,
+    DisplayYes   = 1 
+  } EnrollmentDisplayStatus;
+
+  typedef enum EnrollmentEnrollStatus {
+    Enrolled                             = 0x00000001,
+    EnrollPended                         = 0x00000002,
+    EnrollUIDeferredEnrollmentRequired   = 0x00000004,
+    EnrollError                          = 0x00000010,
+    EnrollUnknown                        = 0x00000020,
+    EnrollSkipped                        = 0x00000040,
+    EnrollDenied                         = 0x00000100 
+  } EnrollmentEnrollStatus;
+
+#ifdef (_WIN32_WINNT >= 0x0601)
+  enum EnrollmentPolicyFlags {
+    DisableGroupPolicyList   = 0x2,
+    DisableUserServerList    = 0x4 
+  };
+
+  typedef enum EnrollmentPolicyServerPropertyFlags {
+    DefaultNone           = 0x00000000,
+    DefaultPolicyServer   = 0x00000001 
+  } EnrollmentPolicyServerPropertyFlags;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  typedef enum EnrollmentSelectionStatus {
+    SelectedNo    = 0,
+    SelectedYes   = 1 
+  } EnrollmentSelectionStatus;
+
+#ifdef (_WIN32_WINNT >= 0x0601)
+
+  typedef enum EnrollmentTemplateProperty {
+    TemplatePropCommonName              = 1,
+    TemplatePropFriendlyName            = 2,
+    TemplatePropEKUs                    = 3,
+    TemplatePropCryptoProviders         = 4,
+    TemplatePropMajorRevision           = 5,
+    TemplatePropDescription             = 6,
+    TemplatePropKeySpec                 = 7,
+    TemplatePropSchemaVersion           = 8,
+    TemplatePropMinorRevision           = 9,
+    TemplatePropRASignatureCount        = 10,
+    TemplatePropMinimumKeySize          = 11,
+    TemplatePropOID                     = 12,
+    TemplatePropSupersede               = 13,
+    TemplatePropRACertificatePolicies   = 14,
+    TemplatePropRAEKUs                  = 15,
+    TemplatePropCertificatePolicies     = 16,
+    TemplatePropV1ApplicationPolicy     = 17,
+    TemplatePropAsymmetricAlgorithm     = 18,
+    TemplatePropKeySecurityDescriptor   = 19,
+    TemplatePropSymmetricAlgorithm      = 20,
+    TemplatePropSymmetricKeyLength      = 21,
+    TemplatePropHashAlgorithm           = 22,
+    TemplatePropEnrollmentFlags         = 23,
+    TemplatePropSubjectNameFlags        = 24,
+    TemplatePropPrivateKeyFlags         = 25,
+    TemplatePropGeneralFlags            = 26,
+    TemplatePropSecurityDescriptor      = 27,
+    TemplatePropExtensions              = 28,
+    TemplatePropValidityPeriod          = 29,
+    TemplatePropRenewalPeriod           = 30 
+  } EnrollmentTemplateProperty;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  typedef enum InnerRequestLevel {
+    LevelInnermost   = 0,
+    LevelNext        = 1 
+  } InnerRequestLevel;
+
+  typedef enum InstallResponseRestrictionFlags {
+    AllowNone                   = 0x00000000,
+    AllowNoOutstandingRequest   = 0x00000001,
+    AllowUntrustedCertificate   = 0x00000002,
+    AllowUntrustedRoot          = 0x00000004 
+  } InstallResponseRestrictionFlags;
+
+  typedef enum KeyIdentifierHashAlgorithm {
+    SKIHashDefault    = 0,
+    SKIHashSha1       = 1,
+    SKIHashCapiSha1   = 2 
+  } KeyIdentifierHashAlgorithm;
+
+  typedef enum ObjectIdGroupId {
+    XCN_CRYPT_ANY_GROUP_ID                 = 0,
+    XCN_CRYPT_HASH_ALG_OID_GROUP_ID        = 1,
+    XCN_CRYPT_ENCRYPT_ALG_OID_GROUP_ID     = 2,
+    XCN_CRYPT_PUBKEY_ALG_OID_GROUP_ID      = 3,
+    XCN_CRYPT_SIGN_ALG_OID_GROUP_ID        = 4,
+    XCN_CRYPT_RDN_ATTR_OID_GROUP_ID        = 5,
+    XCN_CRYPT_EXT_OR_ATTR_OID_GROUP_ID     = 6,
+    XCN_CRYPT_ENHKEY_USAGE_OID_GROUP_ID    = 7,
+    XCN_CRYPT_POLICY_OID_GROUP_ID          = 8,
+    XCN_CRYPT_TEMPLATE_OID_GROUP_ID        = 9,
+    XCN_CRYPT_LAST_OID_GROUP_ID            = 9,
+    XCN_CRYPT_FIRST_ALG_OID_GROUP_ID       = 1,
+    XCN_CRYPT_LAST_ALG_OID_GROUP_ID        = 4,
+    XCN_CRYPT_OID_DISABLE_SEARCH_DS_FLAG   = 0x80000000,
+    XCN_CRYPT_KEY_LENGTH_MASK              = 0xffff0000 
+  } ObjectIdGroupId;
+
+  typedef enum ObjectIdPublicKeyFlags {
+    XCN_CRYPT_OID_INFO_PUBKEY_ANY                = 0,
+    XCN_CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG      = 0x80000000,
+    XCN_CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG   = 0x40000000 
+  } ObjectIdPublicKeyFlags;
+
+  typedef enum PFXExportOptions {
+    PFXExportEEOnly          = 0,
+    PFXExportChainNoRoot     = 1,
+    PFXExportChainWithRoot   = 2 
+  } PFXExportOptions;
+
+  typedef enum Pkcs10AllowedSignatureTypes {
+    AllowedKeySignature    = 0x1,
+    AllowedNullSignature   = 0x2 
+  } Pkcs10AllowedSignatureTypes;
+
+  typedef enum PolicyQualifierType {
+    PolicyQualifierTypeUnknown      = 0,
+    PolicyQualifierTypeUrl          = 1,
+    PolicyQualifierTypeUserNotice   = 2 
+  } PolicyQualifierType;
+
+  typedef enum PolicyServerUrlFlags {
+    PsfNone                    = 0,
+    PsfLocationGroupPolicy     = 1,
+    PsfLocationRegistry        = 2,
+    PsfUseClientId             = 4,
+    PsfAutoEnrollmentEnabled   = 16,
+    PsfAllowUnTrustedCA        = 32 
+  } PolicyServerUrlFlags;
+
+#ifdef (_WIN32_WINNT >= 0x0601)
+
+  typedef enum PolicyServerUrlPropertyID {
+    PsPolicyID       = 0,
+    PsFriendlyName   = 1 
+  } PolicyServerUrlPropertyID;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  typedef enum RequestClientInfoClientId {
+    ClientIdNone             = 0,
+    ClientIdXEnroll2003      = 1,
+    ClientIdAutoEnroll2003   = 2,
+    ClientIdWizard2003       = 3,
+    ClientIdCertReq2003      = 4,
+    ClientIdDefaultRequest   = 5,
+    ClientIdAutoEnroll       = 6,
+    ClientIdRequestWizard    = 7,
+    ClientIdEOBO             = 8,
+    ClientIdCertReq          = 9,
+    ClientIdTest             = 10,
+    ClientIdUserStart        = 1000 
+  } RequestClientInfoClientId;
+
+#ifdef (_WIN32_WINNT >= 0x0601)
+
+  typedef enum WebEnrollmentFlags {
+    EnrollPrompt   = 0x00000001 
+  } WebEnrollmentFlags;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  typedef enum WebSecurityLevel {
+    LevelUnsafe   = 0,
+    LevelSafe     = 1 
+  } WebSecurityLevel;
+
+  typedef enum X500NameFlags {
+    XCN_CERT_NAME_STR_NONE                        = 0,
+    XCN_CERT_SIMPLE_NAME_STR                      = 1,
+    XCN_CERT_OID_NAME_STR                         = 2,
+    XCN_CERT_X500_NAME_STR                        = 3,
+    XCN_CERT_XML_NAME_STR                         = 4,
+    XCN_CERT_NAME_STR_SEMICOLON_FLAG              = 0x40000000,
+    XCN_CERT_NAME_STR_NO_PLUS_FLAG                = 0x20000000,
+    XCN_CERT_NAME_STR_NO_QUOTING_FLAG             = 0x10000000,
+    XCN_CERT_NAME_STR_CRLF_FLAG                   = 0x8000000,
+    XCN_CERT_NAME_STR_COMMA_FLAG                  = 0x4000000,
+    XCN_CERT_NAME_STR_REVERSE_FLAG                = 0x2000000,
+    XCN_CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG       = 0x10000,
+    XCN_CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG     = 0x20000,
+    XCN_CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG    = 0x40000,
+    XCN_CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG     = 0x80000,
+    XCN_CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG   = 0x100000 
+  } X500NameFlags;
+
+  typedef enum X509CertificateEnrollmentContext {
+    ContextUser                        = 0x1,
+    ContextMachine                     = 0x2,
+    ContextAdministratorForceMachine   = 0x3 
+  } X509CertificateEnrollmentContext;
+
+#ifdef (_WIN32_WINNT >= 0x0601)
+
+  typedef enum X509CertificateTemplateEnrollmentFlag {
+    EnrollmentIncludeSymmetricAlgorithms                  = CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS,
+    EnrollmentPendAllRequests                             = CT_FLAG_PEND_ALL_REQUESTS,
+    EnrollmentPublishToKRAContainer                       = CT_FLAG_PUBLISH_TO_KRA_CONTAINER,
+    EnrollmentPublishToDS                                 = CT_FLAG_PUBLISH_TO_DS,
+    EnrollmentAutoEnrollmentCheckUserDSCertificate        = CT_FLAG_AUTO_ENROLLMENT_CHECK_USER_DS_CERTIFICATE,
+    EnrollmentAutoEnrollment                              = CT_FLAG_AUTO_ENROLLMENT,
+    EnrollmentDomainAuthenticationNotRequired             = CT_FLAG_DOMAIN_AUTHENTICATION_NOT_REQUIRED,
+    EnrollmentPreviousApprovalValidateReenrollment        = CT_FLAG_PREVIOUS_APPROVAL_VALIDATE_REENROLLMENT,
+    EnrollmentUserInteractionRequired                     = CT_FLAG_USER_INTERACTION_REQUIRED,
+    EnrollmentAddTemplateName                             = CT_FLAG_ADD_TEMPLATE_NAME,
+    EnrollmentRemoveInvalidCertificateFromPersonalStore   = CT_FLAG_REMOVE_INVALID_CERTIFICATE_FROM_PERSONAL_STORE,
+    EnrollmentAllowEnrollOnBehalfOf                       = CT_FLAG_ALLOW_ENROLL_ON_BEHALF_OF,
+    EnrollmentAddOCSPNoCheck                              = CT_FLAG_ADD_OCSP_NOCHECK,
+    EnrollmentReuseKeyOnFullSmartCard                     = CT_FLAG_ENABLE_KEY_REUSE_ON_NT_TOKEN_KEYSET_STORAGE_FULL,
+    EnrollmentNoRevocationInfoInCerts                     = CT_FLAG_NOREVOCATIONINFOINISSUEDCERTS,
+    EnrollmentIncludeBasicConstraintsForEECerts           = CT_FLAG_INCLUDE_BASIC_CONSTRAINTS_FOR_EE_CERTS 
+  } X509CertificateTemplateEnrollmentFlag;
+
+  typedef enum X509CertificateTemplateGeneralFlag {
+    GeneralMachineType    = CT_FLAG_MACHINE_TYPE,
+    GeneralCA             = CT_FLAG_IS_CA,
+    GeneralCrossCA        = CT_FLAG_IS_CROSS_CA,
+    GeneralDefault        = CT_FLAG_IS_DEFAULT,
+    GeneralModified       = CT_FLAG_IS_MODIFIED,
+    GeneralDonotPersist   = CT_FLAG_DONOTPERSISTINDB 
+  } X509CertificateTemplateGeneralFlag;
+
+  typedef enum X509CertificateTemplatePrivateKeyFlag {
+    PrivateKeyRequireArchival                      = CT_FLAG_REQUIRE_PRIVATE_KEY_ARCHIVAL,
+    PrivateKeyExportable                           = CT_FLAG_EXPORTABLE_KEY,
+    PrivateKeyRequireStrongKeyProtection           = CT_FLAG_STRONG_KEY_PROTECTION_REQUIRED,
+    PrivateKeyRequireAlternateSignatureAlgorithm   = CT_FLAG_REQUIRE_ALTERNATE_SIGNATURE_ALGORITHM 
+  } X509CertificateTemplatePrivateKeyFlag;
+
+  typedef enum X509CertificateTemplateSubjectNameFlag {
+    SubjectNameEnrolleeSupplies                    = CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT,
+    SubjectNameRequireDirectoryPath                = CT_FLAG_SUBJECT_REQUIRE_DIRECTORY_PATH,
+    SubjectNameRequireCommonName                   = CT_FLAG_SUBJECT_REQUIRE_COMMON_NAME,
+    SubjectNameRequireEmail                        = CT_FLAG_SUBJECT_REQUIRE_EMAIL,
+    SubjectNameRequireDNS                          = CT_FLAG_SUBJECT_REQUIRE_DNS_AS_CN,
+    SubjectNameAndAlternativeNameOldCertSupplies   = CT_FLAG_OLD_CERT_SUPPLIES_SUBJECT_AND_ALT_NAME,
+    SubjectAlternativeNameEnrolleeSupplies         = CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT_ALT_NAME,
+    SubjectAlternativeNameRequireDirectoryGUID     = CT_FLAG_SUBJECT_ALT_REQUIRE_DIRECTORY_GUID,
+    SubjectAlternativeNameRequireUPN               = CT_FLAG_SUBJECT_ALT_REQUIRE_UPN,
+    SubjectAlternativeNameRequireEmail             = CT_FLAG_SUBJECT_ALT_REQUIRE_EMAIL,
+    SubjectAlternativeNameRequireSPN               = CT_FLAG_SUBJECT_ALT_REQUIRE_SPN,
+    SubjectAlternativeNameRequireDNS               = CT_FLAG_SUBJECT_ALT_REQUIRE_DNS,
+    SubjectAlternativeNameRequireDomainDNS         = CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS 
+  } X509CertificateTemplateSubjectNameFlag;
+
+  typedef enum X509EnrollmentPolicyExportFlags {
+    ExportTemplates   = 0x1,
+    ExportOIDs        = 0x2,
+    ExportCAs         = 0x4 
+  } X509EnrollmentPolicyExportFlags;
+
+  typedef enum X509EnrollmentPolicyLoadOption {
+    LoadOptionDefault                = 0,
+    LoadOptionCacheOnly              = 1,
+    LoadOptionReload                 = 2,
+    LoadOptionRegisterForADChanges   = 4 
+  } X509EnrollmentPolicyLoadOption;
+
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  typedef enum X509KeySpec {
+    XCN_AT_NONE          = 0,
+    XCN_AT_KEYEXCHANGE   = 1,
+    XCN_AT_SIGNATURE     = 2 
+  } X509KeySpec;
+
+  typedef enum X509KeyUsageFlags {
+    XCN_CERT_NO_KEY_USAGE                  = 0,
+    XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE   = 0x80,
+    XCN_CERT_NON_REPUDIATION_KEY_USAGE     = 0x40,
+    XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE    = 0x20,
+    XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE   = 0x10,
+    XCN_CERT_KEY_AGREEMENT_KEY_USAGE       = 0x8,
+    XCN_CERT_KEY_CERT_SIGN_KEY_USAGE       = 0x4,
+    XCN_CERT_OFFLINE_CRL_SIGN_KEY_USAGE    = 0x2,
+    XCN_CERT_CRL_SIGN_KEY_USAGE            = 0x2,
+    XCN_CERT_ENCIPHER_ONLY_KEY_USAGE       = 0x1,
+    XCN_CERT_DECIPHER_ONLY_KEY_USAGE       = ( 0x80 << 8 ) 
+  } X509KeyUsageFlags;
+
+  typedef enum X509PrivateKeyExportFlags {
+    XCN_NCRYPT_ALLOW_EXPORT_NONE                = 0,
+    XCN_NCRYPT_ALLOW_EXPORT_FLAG                = 0x1,
+    XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG      = 0x2,
+    XCN_NCRYPT_ALLOW_ARCHIVING_FLAG             = 0x4,
+    XCN_NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG   = 0x8 
+  } X509PrivateKeyExportFlags;
+
+  typedef enum X509PrivateKeyProtection {
+    XCN_NCRYPT_UI_NO_PROTECTION_FLAG           = 0,
+    XCN_NCRYPT_UI_PROTECT_KEY_FLAG             = 0x1,
+    XCN_NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG   = 0x2 
+  } X509PrivateKeyProtection;
+
+  typedef enum X509RequestType {
+    TypeAny           = 0,
+    TypePkcs10        = 1,
+    TypePkcs7         = 2,
+    TypeCmc           = 3,
+    TypeCertificate   = 4 
+  } X509RequestType;
+
+  typedef enum X509RequestInheritOptions {
+    InheritDefault                  = 0x00000000,
+    InheritNewDefaultKey            = 0x00000001,
+    InheritNewSimilarKey            = 0x00000002,
+    InheritPrivateKey               = 0x00000003,
+    InheritPublicKey                = 0x00000004,
+    InheritKeyMask                  = 0x0000000f,
+    InheritNone                     = 0x00000010,
+    InheritRenewalCertificateFlag   = 0x00000020,
+    InheritTemplateFlag             = 0x00000040,
+    InheritSubjectFlag              = 0x00000080,
+    InheritExtensionsFlag           = 0x00000100,
+    InheritSubjectAltNameFlag       = 0x00000200,
+    InheritValidityPeriodFlag       = 0x00000400 
+  } X509RequestInheritOptions;
+
+  typedef enum X509ProviderType {
+    XCN_PROV_NONE            = 0,
+    XCN_PROV_RSA_FULL        = 1,
+    XCN_PROV_RSA_SIG         = 2,
+    XCN_PROV_DSS             = 3,
+    XCN_PROV_FORTEZZA        = 4,
+    XCN_PROV_MS_EXCHANGE     = 5,
+    XCN_PROV_SSL             = 6,
+    XCN_PROV_RSA_SCHANNEL    = 12,
+    XCN_PROV_DSS_DH          = 13,
+    XCN_PROV_EC_ECDSA_SIG    = 14,
+    XCN_PROV_EC_ECNRA_SIG    = 15,
+    XCN_PROV_EC_ECDSA_FULL   = 16,
+    XCN_PROV_EC_ECNRA_FULL   = 17,
+    XCN_PROV_DH_SCHANNEL     = 18,
+    XCN_PROV_SPYRUS_LYNKS    = 20,
+    XCN_PROV_RNG             = 21,
+    XCN_PROV_INTEL_SEC       = 22,
+    XCN_PROV_REPLACE_OWF     = 23,
+    XCN_PROV_RSA_AES         = 24 
+  } X509ProviderType;
+
+  typedef enum X509PrivateKeyVerify {
+    VerifyNone              = 0,
+    VerifySilent            = 1,
+    VerifySmartCardNone     = 2,
+    VerifySmartCardSilent   = 3,
+    VerifyAllowUI           = 4 
+  } X509PrivateKeyVerify;
+
+  typedef enum X509PrivateKeyUsageFlags {
+    XCN_NCRYPT_ALLOW_USAGES_NONE          = 0,
+    XCN_NCRYPT_ALLOW_DECRYPT_FLAG         = 0x1,
+    XCN_NCRYPT_ALLOW_SIGNING_FLAG         = 0x2,
+    XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG   = 0x4,
+    XCN_NCRYPT_ALLOW_ALL_USAGES           = 0xffffff 
+  } X509PrivateKeyUsageFlags;
+  
+  typedef enum EncodingType {
+  XCN_CRYPT_STRING_BASE64HEADER          = 0,
+  XCN_CRYPT_STRING_BASE64                = 0x1,
+  XCN_CRYPT_STRING_BINARY                = 0x2,
+  XCN_CRYPT_STRING_BASE64REQUESTHEADER   = 0x3,
+  XCN_CRYPT_STRING_HEX                   = 0x4,
+  XCN_CRYPT_STRING_HEXASCII              = 0x5,
+  XCN_CRYPT_STRING_BASE64_ANY            = 0x6,
+  XCN_CRYPT_STRING_ANY                   = 0x7,
+  XCN_CRYPT_STRING_HEX_ANY               = 0x8,
+  XCN_CRYPT_STRING_BASE64X509CRLHEADER   = 0x9,
+  XCN_CRYPT_STRING_HEXADDR               = 0xa,
+  XCN_CRYPT_STRING_HEXASCIIADDR          = 0xb,
+  XCN_CRYPT_STRING_HEXRAW                = 0xc,
+  XCN_CRYPT_STRING_NOCRLF                = 0x40000000,
+  XCN_CRYPT_STRING_NOCR                  = 0x80000000 
+} EncodingType;
+
+typedef enum EnrollmentDisplayStatus {
+  DisplayNo    = 0,
+  DisplayYes   = 1 
+} EnrollmentDisplayStatus;
+
+typedef enum EnrollmentEnrollStatus {
+  Enrolled                             = 0x00000001,
+  EnrollPended                         = 0x00000002,
+  EnrollUIDeferredEnrollmentRequired   = 0x00000004,
+  EnrollError                          = 0x00000010,
+  EnrollUnknown                        = 0x00000020,
+  EnrollSkipped                        = 0x00000040,
+  EnrollDenied                         = 0x00000100 
+} EnrollmentEnrollStatus;
+
+typedef enum EnrollmentSelectionStatus {
+  SelectedNo    = 0,
+  SelectedYes   = 1 
+} EnrollmentSelectionStatus;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CERTENROLL*/
diff --git a/mingw-w64-headers/include/clfs.h b/mingw-w64-headers/include/clfs.h
new file mode 100644
index 0000000..461e6b6
--- /dev/null
+++ b/mingw-w64-headers/include/clfs.h
@@ -0,0 +1,162 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CLFS
+#define _INC_CLFS
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum  {
+  ClfsContextNone       = 0x00,
+  ClfsContextUndoNext,
+  ClfsContextPrevious,
+  ClfsContextForward 
+} CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE;
+
+typedef enum _CLFS_IOSTATS_CLASS {
+  ClfsIoStatsDefault   = 0x0000,
+  ClfsIoStatsMax       = 0xFFFF 
+} CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS;
+
+typedef enum _CLFS_LOG_ARCHIVE_MODE {
+  ClfsLogArchiveEnabled    = 0x01,
+  ClfsLogArchiveDisabled   = 0x02 
+} CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE;
+
+typedef enum _CLFS_RECORD_TYPE {
+  ClfsDataRecord = 0x01,
+  ClfsRestartRecord = 0x02,
+  ClfsClientRecord = 0x3F 
+} CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE;
+
+typedef union _CLFS_LSN {
+  ULONGLONG Internal;
+} CLFS_LSN, *PCLFS_LSN;
+
+/*http://msdn.microsoft.com/en-us/library/bb540355%28VS.85%29.aspx*/
+typedef enum _CLFS_SCAN_MODE {
+  CLFS_SCAN_INIT = 0x01,
+  CLFS_SCAN_FORWARD = 0x02,
+  CLFS_SCAN_BACKWARD = 0x04,
+  CLFS_SCAN_CLOSE = 0x08,
+  CLFS_SCAN_INITIALIZED = 0x10,
+  CLFS_SCAN_BUFFERED = 0x20
+} CLFS_SCAN_MODE;
+
+/* enum guessed from http://msdn.microsoft.com/en-us/library/bb540336%28VS.85%29.aspx */
+typedef enum _CLFS_CONTAINER_STATE {
+  ClfsContainerInitializing,
+  ClfsContainerInactive,
+  ClfsContainerActive,
+  ClfsContainerActivePendingDelete,
+  ClfsContainerPendingArchive,
+  ClfsContainerPendingArchiveAndDelete
+} CLFS_CONTAINER_STATE;
+typedef DWORD CLFS_CONTAINER_ID;
+
+/* Goes in wdm.h */
+typedef struct _CLFS_CONTAINER_INFORMATION {
+  ULONG                FileAttributes;
+  ULONGLONG            CreationTime;
+  ULONGLONG            LastAccessTime;
+  ULONGLONG            LastWriteTime;
+  LONGLONG             ContainerSize;
+  ULONG                FileNameActualLength;
+  ULONG                FileNameLength;
+  WCHAR                FileName[MAX_PATH];
+  CLFS_CONTAINER_STATE State;
+  CLFS_CONTAINER_ID    PhysicalContainerId;
+  CLFS_CONTAINER_ID    LogicalContainerId;
+} CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION;
+/**/
+
+typedef struct _CLFS_IO_STATISTICS_HEADER {
+  UCHAR              ubMajorVersion;
+  UCHAR              ubMinorVersion;
+  CLFS_IOSTATS_CLASS eStatsClass;
+  USHORT             cbLength;
+  ULONG              coffData;
+} CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER;
+
+typedef struct _CLFS_ARCHIVE_DESCRIPTOR {
+  ULONGLONG                  coffLow;
+  ULONGLONG                  coffHigh;
+  CLFS_CONTAINER_INFORMATION infoContainer;
+} CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR;
+
+typedef struct _CLFS_INFORMATION {
+  LONGLONG  TotalAvailable;
+  LONGLONG  CurrentAvailable;
+  LONGLONG  TotalReservation;
+  ULONGLONG BaseFileSize;
+  ULONGLONG ContainerSize;
+  ULONG     TotalContainers;
+  ULONG     FreeContainers;
+  ULONG     TotalClients;
+  ULONG     Attributes;
+  ULONG     FlushThreshold;
+  ULONG     SectorSize;
+  CLFS_LSN  MinArchiveTailLsn;
+  CLFS_LSN  BaseLsn;
+  CLFS_LSN  LastFlushedLsn;
+  CLFS_LSN  LastLsn;
+  CLFS_LSN  RestartLsn;
+  GUID      Identity;
+} CLFS_INFORMATION, *PCLFS_INFORMATION, **PPCLFS_INFORMATION;
+
+typedef struct _CLFS_IO_STATISTICS {
+  CLFS_IO_STATISTICS_HEADER hdrIoStats;
+  ULONGLONG                 cFlush;
+  ULONGLONG                 cbFlush;
+  ULONGLONG                 cMetaFlush;
+  ULONGLONG                 cbMetaFlush;
+} CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS;
+
+typedef struct _CLFS_NODE_ID {
+  ULONG cType;
+  ULONG cbNode;
+} CLFS_NODE_ID, *PCLFS_NODE_ID;
+
+typedef struct _CLFS_SCAN_CONTEXT {
+  CLFS_NODE_ID                cidNode;
+  HANDLE                      hLog;
+  ULONG                       cIndex;
+  ULONG                       cContainers;
+  ULONG                       cContainersReturned;
+  CLFS_SCAN_MODE              eScanMode;
+  PCLFS_CONTAINER_INFORMATION pinfoContainer;
+} CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT;
+
+typedef struct _CLFS_WRITE_ENTRY {
+  PVOID Buffer;
+  ULONG ByteLength;
+} CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY;
+
+WINBOOL WINAPI LsnEqual(
+  const CLFS_LSN *plsn1,
+  const CLFS_LSN *plsn2
+);
+
+WINBOOL WINAPI LsnGreater(
+  const CLFS_LSN *plsn1,
+  const CLFS_LSN *plsn2
+);
+
+WINBOOL WINAPI LsnLess(
+  const CLFS_LSN *plsn1,
+  const CLFS_LSN *plsn2
+);
+
+WINBOOL WINAPI LsnNull(
+  const CLFS_LSN *plsn
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CLFS*/
diff --git a/mingw-w64-headers/include/clfsmgmt.h b/mingw-w64-headers/include/clfsmgmt.h
new file mode 100644
index 0000000..ccdbe57
--- /dev/null
+++ b/mingw-w64-headers/include/clfsmgmt.h
@@ -0,0 +1,131 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CLFSMGMT
+#define _INC_CLFSMGMT
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _CLFS_MGMT_POLICY_TYPE {
+  ClfsMgmtPolicyMaximumSize             = 0x0,
+  ClfsMgmtPolicyMinimumSize             = 0x1,
+  ClfsMgmtPolicyNewContainerSize        = 0x2,
+  ClfsMgmtPolicyGrowthRate              = 0x3,
+  ClfsMgmtPolicyLogTail                 = 0x4,
+  ClfsMgmtPolicyAutoShrink              = 0x5,
+  ClfsMgmtPolicyAutoGrow                = 0x6,
+  ClfsMgmtPolicyNewContainerPrefix      = 0x7,
+  ClfsMgmtPolicyNewContainerSuffix      = 0x8,
+  ClfsMgmtPolicyNewContainerExtension 
+} CLFS_MGMT_POLICY_TYPE, *PCLFS_MGMT_POLICY_TYPE;
+
+typedef enum _CLFS_MGMT_NOTIFICATION_TYPE {
+  ClfsMgmtAdvanceTailNotification = 0,
+  ClfsMgmtLogFullHandlerNotification,
+  ClfsMgmtLogUnpinnedNotification,
+  ClfsMgmtLogWriteNotification
+} CLFS_MGMT_NOTIFICATION_TYPE;
+
+typedef struct _CLFS_MGMT_NOTIFICATION {
+  CLFS_MGMT_NOTIFICATION_TYPE Notification;
+  CLFS_LSN                    Lsn;
+  USHORT                      LogIsPinned;
+} CLFS_MGMT_NOTIFICATION, *PCLFS_MGMT_NOTIFICATION;
+
+typedef struct _CLFS_MGMT_POLICY {
+  ULONG Version;
+  ULONG LengthInBytes;
+  ULONG PolicyFlags;
+  CLFS_MGMT_POLICY_TYPE PolicyType;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      ULONG Containers;
+    } MaximumSize;
+    __MINGW_EXTENSION struct {
+      ULONG Containers;
+    } MinimumSize;
+    __MINGW_EXTENSION struct {
+      ULONG SizeInBytes;
+    } NewContainerSize;
+    __MINGW_EXTENSION struct {
+      ULONG AbsoluteGrowthInContainers;
+      ULONG RelativeGrowthPercentage;
+    } GrowthRate;
+    __MINGW_EXTENSION struct {
+      ULONG MinimumAvailablePercentage;
+      ULONG MinimumAvailableContainers;
+    } LogTail;
+    __MINGW_EXTENSION struct {
+      ULONG Percentage;
+    } AutoShrink;
+    __MINGW_EXTENSION struct {
+      ULONG Enabled;
+    } AutoGrow;
+    __MINGW_EXTENSION struct {
+      USHORT PrefixLengthInBytes;
+      WCHAR PrefixString[1];
+    } NewContainerPrefix;
+    __MINGW_EXTENSION struct {
+      ULONGLONG NextContainerSuffix;
+    } NewContainerSuffix;
+    __MINGW_EXTENSION struct {
+      USHORT ExtensionLengthInBytes;
+      WCHAR ExtensionString[1];
+    } NewContainerExtension;
+  } PolicyParameters;
+} CLFS_MGMT_POLICY,  *PCLFS_MGMT_POLICY;
+
+/* Conflict with CLFS_MGMT_POLICY_TYPE
+typedef struct _ClfsMgmtPolicyAutoGrow {
+  ULONG Enabled;
+} ClfsMgmtPolicyAutoGrow;
+
+typedef struct _ClfsMgmtPolicyAutoShrink {
+  ULONG Percentage;
+} ClfsMgmtPolicyAutoShrink;
+
+typedef struct _ClfsMgmtPolicyGrowthRate {
+  ULONG AbsoluteGrowthInContainers;
+  ULONG RelativeGrowthPercentage;
+} ClfsMgmtPolicyGrowthRate;
+
+typedef struct _ClfsMgmtPolicyLogTail {
+  ULONG MinimumAvailablePercentage;
+  ULONG MinimumAvailableContainers;
+} ClfsMgmtPolicyLogTail;
+
+typedef struct _ClfsMgmtPolicyMinimumSize {
+  ULONG Containers;
+} ClfsMgmtPolicyMinimumSize;
+
+typedef struct _ClfsMgmtPolicyMaximumSize {
+  ULONG Containers;
+} ClfsMgmtPolicyMaximumSize;
+
+typedef struct _ClfsMgmtPolicyNewContainerExtension {
+  ULONG ExtensionLengthInBytes;
+  WCHAR ExtensionString[1];
+} ClfsMgmtPolicyNewContainerExtension, *PClfsMgmtPolicyNewContainerExtension;
+
+typedef struct _ClfsMgmtPolicyNewContainerPrefix {
+  USHORT PrefixLengthInBytes;
+  WCHAR  PrefixString[1];
+} ClfsMgmtPolicyNewContainerPrefix;
+
+typedef struct _ClfsMgmtPolicyNewContainerSize {
+  ULONG SizeInBytes;
+} ClfsMgmtPolicyNewContainerSize;
+
+typedef struct _ClfsMgmtPolicyNewContainerSuffix {
+  ULONGLONG NextContainerSuffix;
+} ClfsMgmtPolicyNewContainerSuffix, *PClfsMgmtPolicyNewContainerSuffix;
+*/
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CLFSMGMT*/
diff --git a/mingw-w64-headers/include/clfsmgmtw32.h b/mingw-w64-headers/include/clfsmgmtw32.h
new file mode 100644
index 0000000..16ea5f7
--- /dev/null
+++ b/mingw-w64-headers/include/clfsmgmtw32.h
@@ -0,0 +1,78 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CLFSMGMTW32
+#define _INC_CLFSMGMTW32
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef VOID (CALLBACK * PLOG_UNPINNED_CALLBACK )(
+  HANDLE hLogFile,
+  PVOID pvClientContext
+);
+
+typedef VOID (CALLBACK * PLOG_FULL_HANDLER_CALLBACK )(
+  HANDLE  hLogFile,
+  DWORD   dwError,
+  WINBOOL fLogIsPinned,
+  PVOID   pvClientContext
+);
+
+typedef VOID (CALLBACK * PLOG_TAIL_ADVANCE_CALLBACK )(
+  HANDLE hLogFile,
+  CLFS_LSN lsnTarget,
+  PVOID pvClientContext
+);
+
+typedef struct _LOG_MANAGEMENT_CALLBACKS {
+  PVOID                      CallbackContext;
+  PLOG_TAIL_ADVANCE_CALLBACK AdvanceTailCallback;
+  PLOG_FULL_HANDLER_CALLBACK LogFullHandlerCallback;
+  PLOG_UNPINNED_CALLBACK     LogUnpinnedCallback;
+} LOG_MANAGEMENT_CALLBACKS, *PLOG_MANAGEMENT_CALLBACKS;
+
+WINBOOL WINAPI HandleLogFull(
+  HANDLE hLog
+);
+
+WINBOOL WINAPI RegisterManageableLogClient(
+  HANDLE hLog,
+  PLOG_MANAGEMENT_CALLBACKS pCallbacks
+);
+
+WINBOOL WINAPI ReadLogNotification(
+  HANDLE hLog,
+  PCLFS_MGMT_NOTIFICATION pNotification,
+  LPOVERLAPPED lpOverlapped
+);
+
+WINBOOL WINAPI LogTailAdvanceFailure(
+  HANDLE hLog,
+  DWORD dwReason
+);
+
+WINBOOL WINAPI RegisterForLogWriteNotification(
+  HANDLE hLog,
+  ULONG cbThreshold,
+  WINBOOL fEnable
+);
+
+WINBOOL WINAPI RemoveLogPolicy(
+  HANDLE hLog,
+  CLFS_MANAGEMENT_POLICY_TYPE ePolicyType
+);
+
+WINBOOL WINAPI SetLogFileSizeWithPolicy(
+  HANDLE hLog,
+  PULONGLONG pDesiredSize,
+  PULONGLONG pResultingSize
+);
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CLFSMGMTW32*/
diff --git a/mingw-w64-headers/include/clfsw32.h b/mingw-w64-headers/include/clfsw32.h
new file mode 100644
index 0000000..c458c16
--- /dev/null
+++ b/mingw-w64-headers/include/clfsw32.h
@@ -0,0 +1,329 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CLFSW32
+#define _INC_CLFSW32
+#include <clfs.h>
+#include <clfsmgmt.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef PVOID (* CLFS_BLOCK_ALLOCATION) (ULONG cbBufferSize, PVOID pvUserContext);
+typedef void  (* CLFS_BLOCK_DEALLOCATION) (PVOID pvBuffer, PVOID pvUserContext);
+typedef LPVOID PFILE;
+typedef LPVOID CLFS_PRINT_RECORD_ROUTINE; /*Unknown Callback*/
+
+WINBOOL WINAPI AdvanceLogBase(PVOID pvMarshal,PCLFS_LSN plsnBase,ULONG fFlags,LPOVERLAPPED pOverlapped);
+
+WINBOOL WINAPI AlignReservedLog(PVOID pvMarshal,ULONG cReservedRecords,LONGLONG rgcbReservation,PLONGLONG pcbAlignReservation);
+WINBOOL WINAPI AllocReservedLog(PVOID pvMarshal,ULONG cReservedRecords,PLONGLONG pcbAdjustment);
+
+WINBOOL WINAPI AddLogContainer(HANDLE hLog,PULONGLONG pcbContainer,LPWSTR pwszContainerPath,LPVOID pReserved);
+WINBOOL WINAPI AddLogContainerSet(HANDLE hLog,USHORT cContainers,PULONGLONG pcbContainer,LPWSTR *rgwszContainerPath,PVOID Reserved);
+WINBOOL WINAPI CloseAndResetLogFile(HANDLE hLog);
+
+WINBOOL WINAPI CreateLogContainerScanContext(
+  HANDLE hLog,
+  ULONG cFromContainer,
+  ULONG cContainers,
+  CLFS_SCAN_MODE eScanMode,
+  PCLFS_SCAN_CONTEXT pcxScan,
+  LPOVERLAPPED pOverlapped
+);
+
+HANDLE WINAPI CreateLogFile(
+  LPCWSTR pszLogFileName,
+  ACCESS_MASK fDesiredAccess,
+  DWORD dwShareMode,
+  LPSECURITY_ATTRIBUTES psaLogFile,
+  ULONG fCreateDisposition,
+  ULONG fFlagsAndAttributes
+);
+
+WINBOOL WINAPI ScanLogContainers(
+  PCLFS_SCAN_CONTEXT pcxScan,
+  CLFS_SCAN_MODE eScanMode,
+  LPVOID pReserved
+);
+
+WINBOOL WINAPI CreateLogMarshallingArea(
+  HANDLE hLog,
+  CLFS_BLOCK_ALLOCATION pfnAllocBuffer,
+  CLFS_BLOCK_DEALLOCATION pfnFreeBuffer,
+  PVOID   pvBlockAllocContext,
+  ULONG cbMarshallingBuffer,
+  ULONG  cMaxWriteBuffers,
+  ULONG cMaxReadBuffers,
+  PVOID *ppvMarshal
+);
+
+WINBOOL WINAPI DeleteLogMarshallingArea(
+  PVOID pvMarshal
+);
+
+WINBOOL WINAPI DeleteLogByHandle(
+  HANDLE hLog
+);
+
+WINBOOL WINAPI DeleteLogFile(
+  LPCWSTR pszLogFileName,
+  PVOID pvReserved
+);
+
+WINBOOL WINAPI DeregisterManageableLogClient(
+  HANDLE hLog
+);
+
+WINBOOL WINAPI DumpLogRecords(
+  PWSTR pwszLogFileName,
+  CLFS_RECORD_TYPE fRecordType,
+  PCLFS_LSN plsnStart,
+  PCLFS_LSN plsnEnd,
+  PFILE pstrmOut,
+  CLFS_PRINT_RECORD_ROUTINE pfnPrintRecord,
+  CLFS_BLOCK_ALLOCATION pfnAllocBlock,
+  CLFS_BLOCK_DEALLOCATION pfnFreeBlock,
+  PVOID   pvBlockAllocContext,
+  ULONG cbBlock,
+  ULONG cMaxBlocks
+);
+
+WINBOOL WINAPI ReadLogRecord(
+  PVOID pvMarshal,
+  PCLFS_LSN plsnFirst,
+  CLFS_CONTEXT_MODE eContextMode,
+  PVOID *ppvReadBuffer,
+  PULONG pcbReadBuffer,
+  PCLFS_RECORD_TYPE peRecordType,
+  PCLFS_LSN plsnUndoNext,
+  PCLFS_LSN plsnPrevious,
+  PVOID *ppvReadContext,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI ReadNextLogRecord(
+  PVOID pvReadContext,
+  PVOID *ppvBuffer,
+  PULONG pcbBuffer,
+  PCLFS_RECORD_TYPE peRecordType,
+  PCLFS_LSN plsnUser,
+  PCLFS_LSN plsnUndoNext,
+  PCLFS_LSN plsnPrevious,
+  PCLFS_LSN plsnRecord,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI FlushLogBuffers(
+  PVOID pvMarshal,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI FlushLogToLsn(
+  PVOID pvMarshalContext,
+  PCLFS_LSN plsnFlush,
+  PCLFS_LSN plsnLastFlushed,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI FreeReservedLog(
+  PVOID pvMarshal,
+  ULONG cReservedRecords,
+  PLONGLONG pcbAdjustment
+);
+
+WINBOOL WINAPI GetLogContainerName(
+  HANDLE hLog,
+  CLFS_CONTAINER_ID cidLogicalContainer,
+  LPCWSTR pwstrContainerName,
+  ULONG cLenContainerName,
+  PULONG pcActualLenContainerName
+);
+
+WINBOOL WINAPI GetLogFileInformation(
+  HANDLE hLog,
+  PCLFS_INFORMATION pinfoBuffer,
+  PULONG cbBuffer
+);
+
+WINBOOL WINAPI GetLogIoStatistics(
+  HANDLE hLog,
+  PVOID pvStatsBuffer,
+  ULONG cbStatsBuffer,
+  CLFS_IOSTATS_CLASS eStatsClass,
+  PULONG pcbStatsWritten
+);
+
+typedef LPVOID CLFS_LOG_ARCHIVE_CONTEXT;
+typedef CLFS_LOG_ARCHIVE_CONTEXT *PCLFS_LOG_ARCHIVE_CONTEXT;
+
+WINBOOL WINAPI GetNextLogArchiveExtent(
+  CLFS_LOG_ARCHIVE_CONTEXT pvArchiveContext,
+  CLFS_ARCHIVE_DESCRIPTOR rgadExtent[],
+  ULONG cDescriptors,
+  PULONG pcDescriptorsReturned
+);
+
+WINBOOL WINAPI PrepareLogArchive(
+  HANDLE hLog,
+  PWSTR pszBaseLogFileName,
+  ULONG cLen,
+  const PCLFS_LSN plsnLow,
+  const PCLFS_LSN plsnHigh,
+  PULONG pcActualLength,
+  PULONGLONG poffBaseLogFileData,
+  PULONGLONG pcbBaseLogFileLength,
+  PCLFS_LSN plsnBase,
+  PCLFS_LSN plsnLast,
+  PCLFS_LSN plsnCurrentArchiveTail,
+  PCLFS_LOG_ARCHIVE_CONTEXT ppvArchiveContext
+);
+
+WINBOOL WINAPI TerminateLogArchive(
+  CLFS_LOG_ARCHIVE_CONTEXT pvArchiveContext
+);
+
+ULONG WINAPI LsnBlockOffset(
+  const CLFS_LSN *plsn
+);
+
+CLFS_CONTAINER_ID WINAPI LsnContainer(
+  const CLFS_LSN *plsn
+);
+
+CLFS_LSN WINAPI LsnCreate(
+  CLFS_CONTAINER_ID cidContainer,
+  ULONG offBlock,
+  ULONG cRecord
+);
+
+ULONG WINAPI LsnRecordSequence(
+  const CLFS_LSN *plsn
+);
+
+WINBOOL WINAPI PrepareLogArchive(
+  HANDLE hLog,
+  PWSTR pszBaseLogFileName,
+  ULONG cLen,
+  const PCLFS_LSN plsnLow,
+  const PCLFS_LSN plsnHigh,
+  PULONG pcActualLength,
+  PULONGLONG poffBaseLogFileData,
+  PULONGLONG pcbBaseLogFileLength,
+  PCLFS_LSN plsnBase,
+  PCLFS_LSN plsnLast,
+  PCLFS_LSN plsnCurrentArchiveTail,
+  PCLFS_LOG_ARCHIVE_CONTEXT ppvArchiveContext
+);
+
+WINBOOL WINAPI QueryLogPolicy(
+  HANDLE hLog,
+  CLFS_MGMT_POLICY_TYPE ePolicyType,
+  PCLFS_MGMT_POLICY pPolicyBuffer,
+  PULONG pcbPolicyBuffer
+);
+
+WINBOOL WINAPI ReadLogArchiveMetadata(
+  CLFS_LOG_ARCHIVE_CONTEXT pvArchiveContext,
+  ULONG cbOffset,
+  ULONG cbBytesToRead,
+  PBYTE pbReadBuffer,
+  PULONG pcbBytesRead
+);
+
+WINBOOL WINAPI ReadLogRestartArea(
+  PVOID pvMarshal,
+  PVOID *ppvRestartBuffer,
+  PULONG pcbRestartBuffer,
+  PCLFS_LSN plsn,
+  PVOID *ppvContext,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI ReadPreviousLogRestartArea(
+  PVOID pvReadContext,
+  PVOID *ppvRestartBuffer,
+  PULONG pcbRestartBuffer,
+  PCLFS_LSN plsnRestart,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI RemoveLogContainer(
+  HANDLE hLog,
+  LPWSTR pwszContainerPath,
+  WINBOOL fForce,
+  LPVOID pReserved
+);
+
+WINBOOL WINAPI RemoveLogContainerSet(
+  HANDLE hLog,
+  USHORT cContainers,
+  LPWSTR *rgwszContainerPath,
+  WINBOOL fForce,
+  LPVOID pReserved
+);
+
+WINBOOL WINAPI ReserveAndAppendLog(
+  PVOID pvMarshal,
+  PCLFS_WRITE_ENTRY rgWriteEntries,
+  ULONG cWriteEntries,
+  PCLFS_LSN plsnUndoNext,
+  PCLFS_LSN plsnPrevious,
+  ULONG cReserveRecords,
+  LONGLONG rgcbReservation[],
+  ULONG fFlags,
+  PCLFS_LSN plsn,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI ReserveAndAppendLogAligned(
+  PVOID pvMarshal,
+  PCLFS_WRITE_ENTRY rgWriteEntries,
+  ULONG cWriteEntries,
+  ULONG cbEntryAlignment,
+  PCLFS_LSN plsnUndoNext,
+  PCLFS_LSN plsnPrevious,
+  ULONG cReserveRecords,
+  LONGLONG rgcbReservation[],
+  ULONG fFlags,
+  PCLFS_LSN plsn,
+  LPOVERLAPPED overlapped
+);
+
+WINBOOL WINAPI SetEndOfLog(
+  HANDLE hLog,
+  PCLFS_LSN plsnEnd,
+  LPOVERLAPPED lpOverlapped
+);
+
+WINBOOL WINAPI SetLogArchiveMode(
+  HANDLE hLog,
+  CLFS_LOG_ARCHIVE_MODE eMode
+);
+
+WINBOOL WINAPI SetLogArchiveTail(
+  HANDLE hLog,
+  PCLFS_LSN plsnArchiveTail,
+  LPVOID pReserved
+);
+
+WINBOOL WINAPI TerminateReadLog(
+  PVOID pvCursorContext
+);
+
+WINBOOL WINAPI ValidateLog(
+  LPCWSTR pszLogFileName,
+  LPSECURITY_ATTRIBUTES psaLogFile,
+  PCLFS_INFORMATION pinfoBuffer,
+  PULONG pcbBuffer
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_CLFSW32*/
diff --git a/mingw-w64-headers/include/clusapi.h b/mingw-w64-headers/include/clusapi.h
index e8af49e..46570e6 100644
--- a/mingw-w64-headers/include/clusapi.h
+++ b/mingw-w64-headers/include/clusapi.h
@@ -1407,6 +1407,36 @@
   HGROUP hGroup
 );
 
+typedef enum _FILESHARE_CHANGE_ENUM {
+  FILESHARE_CHANGE_NONE     = 0,
+  FILESHARE_CHANGE_ADD      = 1,
+  FILESHARE_CHANGE_DEL      = 2,
+  FILESHARE_CHANGE_MODIFY   = 3 
+} FILESHARE_CHANGE_ENUM;
+
+#define NNLEN       80                  // Net name length (share name)
+
+typedef struct _FILESHARE_CHANGE {
+  FILESHARE_CHANGE_ENUM Change;
+  WCHAR                 ShareName[NNLEN+4];
+} FILESHARE_CHANGE, *PFILESHARE_CHANGE;
+
+typedef struct _FILESHARE_CHANGE_LIST {
+  DWORD            NumEntries;
+  FILESHARE_CHANGE ChangeEntry[];
+} FILESHARE_CHANGE_LIST, *PFILESHARE_CHANGE_LIST;
+
+DWORD WINAPI GetClusterResourceDependencyExpression(
+  HRESOURCE hResource,
+  LPWSTR lpszDependencyExpression,
+  LPDWORD lpcchDependencyExpression
+);
+
+DWORD WINAPI SetClusterResourceDependencyExpression(
+  HRESOURCE hResource,
+  LPCWSTR lpszDependencyExpression
+);
+
 #endif /* (_WIN32_WINNT >= 0x0600) */
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/codecapi.h b/mingw-w64-headers/include/codecapi.h
new file mode 100644
index 0000000..a79c064
--- /dev/null
+++ b/mingw-w64-headers/include/codecapi.h
@@ -0,0 +1,42 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CODECAPI
+#define _INC_CODECAPI
+
+#if (_WIN32_WINNT >= 0x0601)
+  enum eAVEncH264VLevel {
+    eAVEncH264VLevel1     = 10,
+    eAVEncH264VLevel1_b   = 11,
+    eAVEncH264VLevel1_1   = 11,
+    eAVEncH264VLevel1_2   = 12,
+    eAVEncH264VLevel1_3   = 13,
+    eAVEncH264VLevel2     = 20,
+    eAVEncH264VLevel2_1   = 21,
+    eAVEncH264VLevel2_2   = 22,
+    eAVEncH264VLevel3     = 30,
+    eAVEncH264VLevel3_1   = 31,
+    eAVEncH264VLevel3_2   = 32,
+    eAVEncH264VLevel4     = 40,
+    eAVEncH264VLevel4_1   = 41,
+    eAVEncH264VLevel4_2   = 42,
+    eAVEncH264VLevel5     = 50,
+    eAVEncH264VLevel5_1   = 51 
+  };
+
+  enum eAVEncH264VProfile {
+    eAVEncH264VProfile_unknown    = 0,
+    eAVEncH264VProfile_Simple     = 66,
+    eAVEncH264VProfile_Base       = 66,
+    eAVEncH264VProfile_Main       = 77,
+    eAVEncH264VProfile_High       = 100,
+    eAVEncH264VProfile_422        = 122,
+    eAVEncH264VProfile_High10     = 110,
+    eAVEncH264VProfile_444        = 144,
+    eAVEncH264VProfile_Extended   = 88 
+  };
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_CODECAPI*/
diff --git a/mingw-w64-headers/include/credssp.h b/mingw-w64-headers/include/credssp.h
new file mode 100644
index 0000000..b0605cb
--- /dev/null
+++ b/mingw-w64-headers/include/credssp.h
@@ -0,0 +1,40 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CREDSSP
+#define _INC_CREDSSP
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _CREDSSP_SUBMIT_TYPE {
+  CredsspPasswordCreds         = 2,
+  CredsspSchannelCreds         = 4,
+  CredsspCertificateCreds      = 13,
+  CredsspSubmitBufferBoth      = 50,
+  CredsspSubmitBufferBothOld   = 51
+} CREDSPP_SUBMIT_TYPE;
+
+typedef struct _CREDSSP_CRED {
+  CREDSPP_SUBMIT_TYPE Type;
+  PVOID               pSchannelCred;
+  PVOID               pSpnegoCred;
+} CREDSSP_CRED, *PCREDSSP_CRED;
+
+typedef struct _SecPkgContext_ClientCreds {
+  ULONG  AuthBufferLen;
+  PUCHAR AuthBuffer;
+} SecPkgContext_ClientCreds, *PSecPkgContext_ClientCreds;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_CREDSSP*/
diff --git a/mingw-w64-headers/include/cscapi.h b/mingw-w64-headers/include/cscapi.h
new file mode 100644
index 0000000..9ae03da
--- /dev/null
+++ b/mingw-w64-headers/include/cscapi.h
@@ -0,0 +1,27 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CSCAPI
+#define _INC_CSCAPI
+#include <windows.h>
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD OfflineFilesEnable(
+  WINBOOL bEnable,
+  WINBOOL *pbRebootRequired
+);
+DWORD OfflineFilesQueryStatus(
+  WINBOOL *pbActive,
+  WINBOOL *pbEnabled
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CSCAPI*/
diff --git a/mingw-w64-headers/include/cscobj.h b/mingw-w64-headers/include/cscobj.h
new file mode 100644
index 0000000..4b6b7da
--- /dev/null
+++ b/mingw-w64-headers/include/cscobj.h
@@ -0,0 +1,213 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_CSCOBJ
+#define _INC_CSCOBJ
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _OFFLINEFILES_CACHING_MODE {
+  OFFLINEFILES_CACHING_MODE_NONE              = 0,
+  OFFLINEFILES_CACHING_MODE_NOCACHING         = 1,
+  OFFLINEFILES_CACHING_MODE_MANUAL            = 2,
+  OFFLINEFILES_CACHING_MODE_AUTO_DOC          = 3,
+  OFFLINEFILES_CACHING_MODE_AUTO_PROGANDDOC   = 4 
+} OFFLINEFILES_CACHING_MODE;
+
+typedef enum _OFFLINEFILES_COMPARE {
+  OFFLINEFILES_COMPARE_EQ    = 0,
+  OFFLINEFILES_COMPARE_NEQ   = 1,
+  OFFLINEFILES_COMPARE_LT    = 2,
+  OFFLINEFILES_COMPARE_GT    = 3,
+  OFFLINEFILES_COMPARE_LTE   = 4,
+  OFFLINEFILES_COMPARE_GTE   = 5 
+} OFFLINEFILES_COMPARE;
+
+typedef enum _OFFLINEFILES_CONNECT_STATE {
+  OFFLINEFILES_CONNECT_STATE_UNKNOWN                       = 0,
+  OFFLINEFILES_CONNECT_STATE_OFFLINE                       = 1,
+  OFFLINEFILES_CONNECT_STATE_ONLINE                        = 2,
+  OFFLINEFILES_CONNECT_STATE_TRANSPARENTLY_CACHED          = 3,
+  OFFLINEFILES_CONNECT_STATE_PARTLY_TRANSPARENTLY_CACHED   = 4 
+} OFFLINEFILES_CONNECT_STATE;
+
+typedef enum _OFFLINEFILES_EVENTS {
+  OFFLINEFILES_EVENT_CACHEMOVED                   = 0,
+  OFFLINEFILES_EVENT_CACHEISFULL                  = 1,
+  OFFLINEFILES_EVENT_CACHEISCORRUPTED             = 2,
+  OFFLINEFILES_EVENT_ENABLED                      = 3,
+  OFFLINEFILES_EVENT_ENCRYPTIONCHANGED            = 4,
+  OFFLINEFILES_EVENT_SYNCBEGIN                    = 5,
+  OFFLINEFILES_EVENT_SYNCFILERESULT               = 6,
+  OFFLINEFILES_EVENT_SYNCCONFLICTRECADDED         = 7,
+  OFFLINEFILES_EVENT_SYNCCONFLICTRECUPDATED       = 8,
+  OFFLINEFILES_EVENT_SYNCCONFLICTRECREMOVED       = 9,
+  OFFLINEFILES_EVENT_SYNCEND                      = 10,
+  OFFLINEFILES_EVENT_BACKGROUNDSYNCBEGIN          = 11,
+  OFFLINEFILES_EVENT_BACKGROUNDSYNCEND            = 12,
+  OFFLINEFILES_EVENT_NETTRANSPORTARRIVED          = 13,
+  OFFLINEFILES_EVENT_NONETTRANSPORTS              = 14,
+  OFFLINEFILES_EVENT_ITEMDISCONNECTED             = 15,
+  OFFLINEFILES_EVENT_ITEMRECONNECTED              = 16,
+  OFFLINEFILES_EVENT_ITEMAVAILABLEOFFLINE         = 17,
+  OFFLINEFILES_EVENT_ITEMNOTAVAILABLEOFFLINE      = 18,
+  OFFLINEFILES_EVENT_ITEMPINNED                   = 19,
+  OFFLINEFILES_EVENT_ITEMNOTPINNED                = 20,
+  OFFLINEFILES_EVENT_ITEMMODIFIED                 = 21,
+  OFFLINEFILES_EVENT_ITEMADDEDTOCACHE             = 22,
+  OFFLINEFILES_EVENT_ITEMDELETEDFROMCACHE         = 23,
+  OFFLINEFILES_EVENT_ITEMRENAMED                  = 24,
+  OFFLINEFILES_EVENT_DATALOST                     = 25,
+  OFFLINEFILES_EVENT_PING                         = 26,
+  OFFLINEFILES_EVENT_ITEMRECONNECTBEGIN           = 27,
+  OFFLINEFILES_EVENT_ITEMRECONNECTEND             = 28,
+  OFFLINEFILES_EVENT_CACHEEVICTBEGIN              = 29,
+  OFFLINEFILES_EVENT_CACHEEVICTEND                = 30,
+  OFFLINEFILES_EVENT_POLICYCHANGEDETECTED         = 31,
+  OFFLINEFILES_EVENT_PREFERENCECHANGEDETECTED     = 32,
+  OFFLINEFILES_EVENT_SETTINGSCHANGESAPPLIED       = 33,
+  OFFLINEFILES_EVENT_TRANSPARENTCACHEITEMNOTIFY   = 34,
+  OFFLINEFILES_EVENT_PREFETCHFILEBEGIN            = 35,
+  OFFLINEFILES_EVENT_PREFETCHFILEEND              = 36 
+} OFFLINEFILES_EVENTS;
+
+typedef enum _OFFLINEFILES_ITEM_COPY {
+  OFFLINEFILES_ITEM_COPY_LOCAL      = 0,
+  OFFLINEFILES_ITEM_COPY_REMOTE     = 1,
+  OFFLINEFILES_ITEM_COPY_ORIGINAL   = 2 
+} OFFLINEFILES_ITEM_COPY;
+
+typedef enum _OFFLINEFILES_ITEM_TIME {
+  OFFLINEFILES_ITEM_TIME_CREATION     = 0,
+  OFFLINEFILES_ITEM_TIME_LASTACCESS   = 1,
+  OFFLINEFILES_ITEM_TIME_LASTWRITE    = 2 
+} OFFLINEFILES_ITEM_TIME;
+
+typedef enum _OFFLINEFILES_ITEM_TYPE {
+  OFFLINEFILES_ITEM_TYPE_FILE        = 0,
+  OFFLINEFILES_ITEM_TYPE_DIRECTORY   = 1,
+  OFFLINEFILES_ITEM_TYPE_SHARE       = 2,
+  OFFLINEFILES_ITEM_TYPE_SERVER      = 3 
+} OFFLINEFILES_ITEM_TYPE;
+
+typedef enum _OFFLINEFILES_OFFLINE_REASON {
+  OFFLINEFILES_OFFLINE_REASON_UNKNOWN                 = 0,
+  OFFLINEFILES_OFFLINE_REASON_NOT_APPLICABLE          = 1,
+  OFFLINEFILES_OFFLINE_REASON_CONNECTION_FORCED       = 2,
+  OFFLINEFILES_OFFLINE_REASON_CONNECTION_SLOW         = 3,
+  OFFLINEFILES_OFFLINE_REASON_CONNECTION_ERROR        = 4,
+  OFFLINEFILES_OFFLINE_REASON_ITEM_VERSION_CONFLICT   = 5,
+  OFFLINEFILES_OFFLINE_REASON_ITEM_SUSPENDED          = 6 
+} OFFLINEFILES_OFFLINE_REASON;
+
+typedef enum _OFFLINEFILES_OP_RESPONSE {
+  OFFLINEFILES_OP_CONTINUE   = 0,
+  OFFLINEFILES_OP_RETRY      = 1,
+  OFFLINEFILES_OP_ABORT      = 2 
+} OFFLINEFILES_OP_RESPONSE;
+
+typedef enum _OFFLINEFILES_PATHFILTER_MATCH {
+  OFFLINEFILES_PATHFILTER_SELF               = 0,
+  OFFLINEFILES_PATHFILTER_CHILD              = 1,
+  OFFLINEFILES_PATHFILTER_DESCENDENT         = 2,
+  OFFLINEFILES_PATHFILTER_SELFORCHILD        = 3,
+  OFFLINEFILES_PATHFILTER_SELFORDESCENDENT   = 4 
+} OFFLINEFILES_PATHFILTER_MATCH;
+
+typedef enum _OFFLINEFILES_SETTING_VALUE_TYPE {
+  OFFLINEFILES_SETTING_VALUE_UI4                    = 0,
+  OFFLINEFILES_SETTING_VALUE_BSTR                   = 1,
+  OFFLINEFILES_SETTING_VALUE_BSTR_DBLNULTERM        = 2,
+  OFFLINEFILES_SETTING_VALUE_2DIM_ARRAY_BSTR_UI4    = 3,
+  OFFLINEFILES_SETTING_VALUE_2DIM_ARRAY_BSTR_BSTR   = 4 
+} OFFLINEFILES_SETTING_VALUE_TYPE;
+
+typedef enum _OFFLINEFILES_SYNC_CONFLICT_RESOLVE {
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_NONE             = 0,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_KEEPLOCAL        = 1,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_KEEPREMOTE       = 2,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_KEEPALLCHANGES   = 3,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_KEEPLATEST       = 4,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_LOG              = 5,
+  OFFLINEFILES_SYNC_CONFLICT_RESOLVE_SKIP             = 6,
+  OFFLINEFILES_SYNC_CONFLICT_ABORT                    = 7 
+} OFFLINEFILES_SYNC_CONFLICT_RESOLVE;
+
+typedef enum _OFFLINEFILES_SYNC_OPERATION {
+  OFFLINEFILES_SYNC_OPERATION_CREATE_COPY_ON_SERVER   = 0,
+  OFFLINEFILES_SYNC_OPERATION_CREATE_COPY_ON_CLIENT   = 1,
+  OFFLINEFILES_SYNC_OPERATION_SYNC_TO_SERVER          = 2,
+  OFFLINEFILES_SYNC_OPERATION_SYNC_TO_CLIENT          = 3,
+  OFFLINEFILES_SYNC_OPERATION_DELETE_SERVER_COPY      = 4,
+  OFFLINEFILES_SYNC_OPERATION_DELETE_CLIENT_COPY      = 5,
+  OFFLINEFILES_SYNC_OPERATION_PIN                     = 6,
+  OFFLINEFILES_SYNC_OPERATION_PREPARE                 = 7 
+} OFFLINEFILES_SYNC_OPERATION;
+
+typedef enum _OFFLINEFILES_SYNC_STATE {
+  OFFLINEFILES_SYNC_STATE_Stable                                               = 0,
+  OFFLINEFILES_SYNC_STATE_FileOnClient_DirOnServer                             = 1,
+  OFFLINEFILES_SYNC_STATE_FileOnClient_NoServerCopy                            = 2,
+  OFFLINEFILES_SYNC_STATE_DirOnClient_FileOnServer                             = 3,
+  OFFLINEFILES_SYNC_STATE_DirOnClient_FileChangedOnServer                      = 4,
+  OFFLINEFILES_SYNC_STATE_DirOnClient_NoServerCopy                             = 5,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_NoServerCopy                     = 6,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_FileChangedOnServer              = 7,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_DirChangedOnServer               = 8,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_FileOnServer                     = 9,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_DirOnServer                      = 10,
+  OFFLINEFILES_SYNC_STATE_FileCreatedOnClient_DeletedOnServer                  = 11,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnClient_ChangedOnServer                  = 12,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnClient_DirOnServer                      = 13,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnClient_DirChangedOnServer               = 14,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnClient_DeletedOnServer                  = 15,
+  OFFLINEFILES_SYNC_STATE_FileSparseOnClient_ChangedOnServer                   = 16,
+  OFFLINEFILES_SYNC_STATE_FileSparseOnClient_DeletedOnServer                   = 17,
+  OFFLINEFILES_SYNC_STATE_FileSparseOnClient_DirOnServer                       = 18,
+  OFFLINEFILES_SYNC_STATE_FileSparseOnClient_DirChangedOnServer                = 19,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_NoServerCopy                      = 20,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_DirOnServer                       = 21,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_FileOnServer                      = 22,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_FileChangedOnServer               = 23,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_DirChangedOnServer                = 24,
+  OFFLINEFILES_SYNC_STATE_DirCreatedOnClient_DeletedOnServer                   = 25,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnClient_FileOnServer                      = 26,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnClient_FileChangedOnServer               = 27,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnClient_ChangedOnServer                   = 28,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnClient_DeletedOnServer                   = 29,
+  OFFLINEFILES_SYNC_STATE_NoClientCopy_FileOnServer                            = 30,
+  OFFLINEFILES_SYNC_STATE_NoClientCopy_DirOnServer                             = 31,
+  OFFLINEFILES_SYNC_STATE_NoClientCopy_FileChangedOnServer                     = 32,
+  OFFLINEFILES_SYNC_STATE_NoClientCopy_DirChangedOnServer                      = 33,
+  OFFLINEFILES_SYNC_STATE_DeletedOnClient_FileOnServer                         = 34,
+  OFFLINEFILES_SYNC_STATE_DeletedOnClient_DirOnServer                          = 35,
+  OFFLINEFILES_SYNC_STATE_DeletedOnClient_FileChangedOnServer                  = 36,
+  OFFLINEFILES_SYNC_STATE_DeletedOnClient_DirChangedOnServer                   = 37,
+  OFFLINEFILES_SYNC_STATE_FileSparseOnClient                                   = 38,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnClient                                  = 39,
+  OFFLINEFILES_SYNC_STATE_FileRenamedOnClient                                  = 40,
+  OFFLINEFILES_SYNC_STATE_DirSparseOnClient                                    = 41,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnClient                                   = 42,
+  OFFLINEFILES_SYNC_STATE_DirRenamedOnClient                                   = 43,
+  OFFLINEFILES_SYNC_STATE_FileChangedOnServer                                  = 44,
+  OFFLINEFILES_SYNC_STATE_FileRenamedOnServer                                  = 45,
+  OFFLINEFILES_SYNC_STATE_FileDeletedOnServer                                  = 46,
+  OFFLINEFILES_SYNC_STATE_DirChangedOnServer                                   = 47,
+  OFFLINEFILES_SYNC_STATE_DirRenamedOnServer                                   = 48,
+  OFFLINEFILES_SYNC_STATE_DirDeletedOnServer                                   = 49,
+  OFFLINEFILES_SYNC_STATE_FileReplacedAndDeletedOnClient_FileOnServer          = 50,
+  OFFLINEFILES_SYNC_STATE_FileReplacedAndDeletedOnClient_FileChangedOnServer   = 51,
+  OFFLINEFILES_SYNC_STATE_FileReplacedAndDeletedOnClient_DirOnServer           = 52,
+  OFFLINEFILES_SYNC_STATE_FileReplacedAndDeletedOnClient_DirChangedOnServer    = 53 
+} OFFLINEFILES_SYNC_STATE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_CSCOBJ*/
+
diff --git a/mingw-w64-headers/include/d2d1.h b/mingw-w64-headers/include/d2d1.h
new file mode 100644
index 0000000..547a93c
--- /dev/null
+++ b/mingw-w64-headers/include/d2d1.h
@@ -0,0 +1,2053 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+
+ * d2d1.h - Header file for the Direct2D API
+ * No original Microsoft headers were used in the creation of this
+ * file.
+ *API docs available at: http://msdn.microsoft.com/en-us/library/dd372349%28v=VS.85%29.aspx
+ */
+
+#ifndef _D2D1_H
+#define _D2D1_H
+
+#include <objbase.h>
+
+#include <d2dbasetypes.h>
+#include <d2derr.h>
+
+#ifndef _COM_interface
+#define _COM_interface struct
+#endif
+
+typedef UINT64 D2D1_TAG;
+
+#define D2D1_DEFAULT_FLATTENING_TOLERANCE 0.25f
+#define D2D1_INVALID_TAG ULONGLONG_MAX
+
+/* enumerations */
+
+/* todo - remove when d3d10 headers become available */
+typedef enum D3D10_FEATURE_LEVEL1 {
+  D3D10_FEATURE_LEVEL_10_0   = 0xa000,
+  D3D10_FEATURE_LEVEL_10_1   = 0xa100,
+  D3D10_FEATURE_LEVEL_9_1    = 0x9100,
+  D3D10_FEATURE_LEVEL_9_2    = 0x9200,
+  D3D10_FEATURE_LEVEL_9_3    = 0x9300 
+} D3D10_FEATURE_LEVEL1;
+/* */
+
+/* todo - remove when dxgi.h becomes available */
+typedef enum DXGI_FORMAT {
+  DXGI_FORMAT_UNKNOWN                      = 0,
+  DXGI_FORMAT_R32G32B32A32_TYPELESS        = 1,
+  DXGI_FORMAT_R32G32B32A32_FLOAT           = 2,
+  DXGI_FORMAT_R32G32B32A32_UINT            = 3,
+  DXGI_FORMAT_R32G32B32A32_SINT            = 4,
+  DXGI_FORMAT_R32G32B32_TYPELESS           = 5,
+  DXGI_FORMAT_R32G32B32_FLOAT              = 6,
+  DXGI_FORMAT_R32G32B32_UINT               = 7,
+  DXGI_FORMAT_R32G32B32_SINT               = 8,
+  DXGI_FORMAT_R16G16B16A16_TYPELESS        = 9,
+  DXGI_FORMAT_R16G16B16A16_FLOAT           = 10,
+  DXGI_FORMAT_R16G16B16A16_UNORM           = 11,
+  DXGI_FORMAT_R16G16B16A16_UINT            = 12,
+  DXGI_FORMAT_R16G16B16A16_SNORM           = 13,
+  DXGI_FORMAT_R16G16B16A16_SINT            = 14,
+  DXGI_FORMAT_R32G32_TYPELESS              = 15,
+  DXGI_FORMAT_R32G32_FLOAT                 = 16,
+  DXGI_FORMAT_R32G32_UINT                  = 17,
+  DXGI_FORMAT_R32G32_SINT                  = 18,
+  DXGI_FORMAT_R32G8X24_TYPELESS            = 19,
+  DXGI_FORMAT_D32_FLOAT_S8X24_UINT         = 20,
+  DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS     = 21,
+  DXGI_FORMAT_X32_TYPELESS_G8X24_UINT      = 22,
+  DXGI_FORMAT_R10G10B10A2_TYPELESS         = 23,
+  DXGI_FORMAT_R10G10B10A2_UNORM            = 24,
+  DXGI_FORMAT_R10G10B10A2_UINT             = 25,
+  DXGI_FORMAT_R11G11B10_FLOAT              = 26,
+  DXGI_FORMAT_R8G8B8A8_TYPELESS            = 27,
+  DXGI_FORMAT_R8G8B8A8_UNORM               = 28,
+  DXGI_FORMAT_R8G8B8A8_UNORM_SRGB          = 29,
+  DXGI_FORMAT_R8G8B8A8_UINT                = 30,
+  DXGI_FORMAT_R8G8B8A8_SNORM               = 31,
+  DXGI_FORMAT_R8G8B8A8_SINT                = 32,
+  DXGI_FORMAT_R16G16_TYPELESS              = 33,
+  DXGI_FORMAT_R16G16_FLOAT                 = 34,
+  DXGI_FORMAT_R16G16_UNORM                 = 35,
+  DXGI_FORMAT_R16G16_UINT                  = 36,
+  DXGI_FORMAT_R16G16_SNORM                 = 37,
+  DXGI_FORMAT_R16G16_SINT                  = 38,
+  DXGI_FORMAT_R32_TYPELESS                 = 39,
+  DXGI_FORMAT_D32_FLOAT                    = 40,
+  DXGI_FORMAT_R32_FLOAT                    = 41,
+  DXGI_FORMAT_R32_UINT                     = 42,
+  DXGI_FORMAT_R32_SINT                     = 43,
+  DXGI_FORMAT_R24G8_TYPELESS               = 44,
+  DXGI_FORMAT_D24_UNORM_S8_UINT            = 45,
+  DXGI_FORMAT_R24_UNORM_X8_TYPELESS        = 46,
+  DXGI_FORMAT_X24_TYPELESS_G8_UINT         = 47,
+  DXGI_FORMAT_R8G8_TYPELESS                = 48,
+  DXGI_FORMAT_R8G8_UNORM                   = 49,
+  DXGI_FORMAT_R8G8_UINT                    = 50,
+  DXGI_FORMAT_R8G8_SNORM                   = 51,
+  DXGI_FORMAT_R8G8_SINT                    = 52,
+  DXGI_FORMAT_R16_TYPELESS                 = 53,
+  DXGI_FORMAT_R16_FLOAT                    = 54,
+  DXGI_FORMAT_D16_UNORM                    = 55,
+  DXGI_FORMAT_R16_UNORM                    = 56,
+  DXGI_FORMAT_R16_UINT                     = 57,
+  DXGI_FORMAT_R16_SNORM                    = 58,
+  DXGI_FORMAT_R16_SINT                     = 59,
+  DXGI_FORMAT_R8_TYPELESS                  = 60,
+  DXGI_FORMAT_R8_UNORM                     = 61,
+  DXGI_FORMAT_R8_UINT                      = 62,
+  DXGI_FORMAT_R8_SNORM                     = 63,
+  DXGI_FORMAT_R8_SINT                      = 64,
+  DXGI_FORMAT_A8_UNORM                     = 65,
+  DXGI_FORMAT_R1_UNORM                     = 66,
+  DXGI_FORMAT_R9G9B9E5_SHAREDEXP           = 67,
+  DXGI_FORMAT_R8G8_B8G8_UNORM              = 68,
+  DXGI_FORMAT_G8R8_G8B8_UNORM              = 69,
+  DXGI_FORMAT_BC1_TYPELESS                 = 70,
+  DXGI_FORMAT_BC1_UNORM                    = 71,
+  DXGI_FORMAT_BC1_UNORM_SRGB               = 72,
+  DXGI_FORMAT_BC2_TYPELESS                 = 73,
+  DXGI_FORMAT_BC2_UNORM                    = 74,
+  DXGI_FORMAT_BC2_UNORM_SRGB               = 75,
+  DXGI_FORMAT_BC3_TYPELESS                 = 76,
+  DXGI_FORMAT_BC3_UNORM                    = 77,
+  DXGI_FORMAT_BC3_UNORM_SRGB               = 78,
+  DXGI_FORMAT_BC4_TYPELESS                 = 79,
+  DXGI_FORMAT_BC4_UNORM                    = 80,
+  DXGI_FORMAT_BC4_SNORM                    = 81,
+  DXGI_FORMAT_BC5_TYPELESS                 = 82,
+  DXGI_FORMAT_BC5_UNORM                    = 83,
+  DXGI_FORMAT_BC5_SNORM                    = 84,
+  DXGI_FORMAT_B5G6R5_UNORM                 = 85,
+  DXGI_FORMAT_B5G5R5A1_UNORM               = 86,
+  DXGI_FORMAT_B8G8R8A8_UNORM               = 87,
+  DXGI_FORMAT_B8G8R8X8_UNORM               = 88,
+  DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM   = 89,
+  DXGI_FORMAT_B8G8R8A8_TYPELESS            = 90,
+  DXGI_FORMAT_B8G8R8A8_UNORM_SRGB          = 91,
+  DXGI_FORMAT_B8G8R8X8_TYPELESS            = 92,
+  DXGI_FORMAT_B8G8R8X8_UNORM_SRGB          = 93,
+  DXGI_FORMAT_BC6H_TYPELESS                = 94,
+  DXGI_FORMAT_BC6H_UF16                    = 95,
+  DXGI_FORMAT_BC6H_SF16                    = 96,
+  DXGI_FORMAT_BC7_TYPELESS                 = 97,
+  DXGI_FORMAT_BC7_UNORM                    = 98,
+  DXGI_FORMAT_BC7_UNORM_SRGB               = 99,
+  DXGI_FORMAT_FORCE_UINT                   = 0xffffffffUL 
+} DXGI_FORMAT, *LPDXGI_FORMAT;
+/* */
+
+/* todo - remove other temporary defines for unavailable interfaces */
+#define IWICBitmapSource void
+#define IDWriteRenderingParams void
+#define IDXGISurface void
+#define IWICBitmap void
+#define IDWriteTextFormat void
+#define IDWriteTextLayout void
+#define IDWriteFontFace void
+/* */
+
+/* todo - remove when dwrite headers becomes available */
+typedef enum DWRITE_MEASURING_MODE {
+  DWRITE_MEASURING_MODE_NATURAL,
+  DWRITE_MEASURING_MODE_GDI_CLASSIC,
+  DWRITE_MEASURING_MODE_GDI_NATURAL 
+} DWRITE_MEASURING_MODE;
+
+typedef struct DWRITE_GLYPH_OFFSET {
+  FLOAT advanceOffset;
+  FLOAT ascenderOffset;
+} DWRITE_GLYPH_OFFSET;
+
+typedef struct DWRITE_GLYPH_RUN {
+  IDWriteFontFace           *fontFace;
+  FLOAT                     fontEmSize;
+  UINT32                    glyphCount;
+  const short               *glyphIndices;
+  const FLOAT               *glyphAdvances;
+  const DWRITE_GLYPH_OFFSET *glyphOffsets;
+  BOOL                      isSideways;
+  UINT32                    bidiLevel;
+} DWRITE_GLYPH_RUN;
+/* */
+
+typedef enum  {
+  D2D1_ALPHA_MODE_UNKNOWN         = 0,
+  D2D1_ALPHA_MODE_PREMULTIPLIED   = 1,
+  D2D1_ALPHA_MODE_STRAIGHT        = 2,
+  D2D1_ALPHA_MODE_IGNORE          = 3 
+} D2D1_ALPHA_MODE;
+
+typedef enum  {
+  D2D1_ANTIALIAS_MODE_PER_PRIMITIVE   = 0,
+  D2D1_ANTIALIAS_MODE_ALIASED         = 1 
+} D2D1_ANTIALIAS_MODE;
+
+typedef enum  {
+  D2D1_ARC_SIZE_SMALL   = 0,
+  D2D1_ARC_SIZE_LARGE   = 1 
+} D2D1_ARC_SIZE;
+
+typedef enum  {
+  D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR   = 0,
+  D2D1_BITMAP_INTERPOLATION_MODE_LINEAR             = 1 
+} D2D1_BITMAP_INTERPOLATION_MODE;
+
+typedef enum  {
+  D2D1_CAP_STYLE_FLAT       = 0,
+  D2D1_CAP_STYLE_SQUARE     = 1,
+  D2D1_CAP_STYLE_ROUND      = 2,
+  D2D1_CAP_STYLE_TRIANGLE   = 3 
+} D2D1_CAP_STYLE;
+
+typedef enum  {
+  D2D1_COMBINE_MODE_UNION       = 0,
+  D2D1_COMBINE_MODE_INTERSECT   = 1,
+  D2D1_COMBINE_MODE_XOR         = 2,
+  D2D1_COMBINE_MODE_EXCLUDE     = 3 
+} D2D1_COMBINE_MODE;
+
+typedef enum  {
+  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE             = 0x00000000,
+  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE   = 0x00000001 
+} D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS;
+
+typedef enum  {
+  D2D1_DASH_STYLE_SOLID          = 0,
+  D2D1_DASH_STYLE_DASH           = 1,
+  D2D1_DASH_STYLE_DOT            = 2,
+  D2D1_DASH_STYLE_DASH_DOT       = 3,
+  D2D1_DASH_STYLE_DASH_DOT_DOT   = 4,
+  D2D1_DASH_STYLE_CUSTOM         = 5 
+} D2D1_DASH_STYLE;
+
+typedef enum  {
+  D2D1_DC_INITIALIZE_MODE_COPY    = 0,
+  D2D1_DC_INITIALIZE_MODE_CLEAR   = 1 
+} D2D1_DC_INITIALIZE_MODE;
+
+typedef enum  {
+  D2D1_DEBUG_LEVEL_NONE          = 0,
+  D2D1_DEBUG_LEVEL_ERROR         = 1,
+  D2D1_DEBUG_LEVEL_WARNING       = 2,
+  D2D1_DEBUG_LEVEL_INFORMATION   = 3 
+} D2D1_DEBUG_LEVEL;
+
+typedef enum  {
+  D2D1_DRAW_TEXT_OPTIONS_NO_SNAP   = 0x00000001,
+  D2D1_DRAW_TEXT_OPTIONS_CLIP      = 0x00000002,
+  D2D1_DRAW_TEXT_OPTIONS_NONE      = 0x00000000 
+} D2D1_DRAW_TEXT_OPTIONS;
+
+typedef enum  {
+  D2D1_EXTEND_MODE_CLAMP    = 0,
+  D2D1_EXTEND_MODE_WRAP     = 1,
+  D2D1_EXTEND_MODE_MIRROR   = 2 
+} D2D1_EXTEND_MODE;
+
+typedef enum  {
+  D2D1_FACTORY_TYPE_SINGLE_THREADED   = 0,
+  D2D1_FACTORY_TYPE_MULTI_THREADED    = 1 
+} D2D1_FACTORY_TYPE;
+
+typedef enum  {
+  D2D1_FEATURE_LEVEL_DEFAULT   = 0,
+  D2D1_FEATURE_LEVEL_9         = D3D10_FEATURE_LEVEL_9_1,
+  D2D1_FEATURE_LEVEL_10        = D3D10_FEATURE_LEVEL_10_0 
+} D2D1_FEATURE_LEVEL;
+
+typedef enum  {
+  D2D1_FIGURE_BEGIN_FILLED   = 0,
+  D2D1_FIGURE_BEGIN_HOLLOW   = 1 
+} D2D1_FIGURE_BEGIN;
+
+typedef enum  {
+  D2D1_FIGURE_END_OPEN     = 0,
+  D2D1_FIGURE_END_CLOSED   = 1 
+} D2D1_FIGURE_END;
+
+typedef enum  {
+  D2D1_FILL_MODE_ALTERNATE   = 0,
+  D2D1_FILL_MODE_WINDING     = 1 
+} D2D1_FILL_MODE;
+
+typedef enum  {
+  D2D1_GAMMA_2_2   = 0,
+  D2D1_GAMMA_1_0   = 1 
+} D2D1_GAMMA;
+
+typedef enum  {
+  D2D1_GEOMETRY_RELATION_UNKNOWN        = 0,
+  D2D1_GEOMETRY_RELATION_DISJOINT       = 1,
+  D2D1_GEOMETRY_RELATION_IS_CONTAINED   = 2,
+  D2D1_GEOMETRY_RELATION_CONTAINS       = 3,
+  D2D1_GEOMETRY_RELATION_OVERLAP        = 4 
+} D2D1_GEOMETRY_RELATION;
+
+typedef enum  {
+  D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES   = 0,
+  D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES              = 1 
+} D2D1_GEOMETRY_SIMPLIFICATION_OPTION;
+
+typedef enum  {
+  D2D1_LAYER_OPTIONS_NONE                       = 0x00000000,
+  D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE   = 0x00000001 
+} D2D1_LAYER_OPTIONS;
+
+typedef enum  {
+  D2D1_LINE_JOIN_MITER            = 0,
+  D2D1_LINE_JOIN_BEVEL            = 1,
+  D2D1_LINE_JOIN_ROUND            = 2,
+  D2D1_LINE_JOIN_MITER_OR_BEVEL   = 3 
+} D2D1_LINE_JOIN;
+
+typedef enum  {
+  D2D1_OPACITY_MASK_CONTENT_GRAPHICS              = 0,
+  D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL          = 1,
+  D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE   = 2 
+} D2D1_OPACITY_MASK_CONTENT;
+
+typedef enum  {
+  D2D1_PATH_SEGMENT_NONE                    = 0x00000000,
+  D2D1_PATH_SEGMENT_FORCE_UNSTROKED         = 0x00000001,
+  D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN   = 0x00000002 
+} D2D1_PATH_SEGMENT;
+
+typedef enum  {
+  D2D1_PRESENT_OPTIONS_NONE              = 0x00000000,
+  D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS   = 0x00000001,
+  D2D1_PRESENT_OPTIONS_IMMEDIATELY       = 0x00000002 
+} D2D1_PRESENT_OPTIONS;
+
+typedef enum  {
+  D2D1_RENDER_TARGET_TYPE_DEFAULT     = 0,
+  D2D1_RENDER_TARGET_TYPE_SOFTWARE    = 1,
+  D2D1_RENDER_TARGET_TYPE_HARDWARE    = 2 
+} D2D1_RENDER_TARGET_TYPE;
+
+typedef enum  {
+  D2D1_RENDER_TARGET_USAGE_NONE                    = 0x00000000,
+  D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING   = 0x00000001,
+  D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE          = 0x00000002 
+} D2D1_RENDER_TARGET_USAGE;
+
+typedef enum  {
+  D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE   = 0,
+  D2D1_SWEEP_DIRECTION_CLOCKWISE           = 1 
+} D2D1_SWEEP_DIRECTION;
+
+typedef enum  {
+  D2D1_TEXT_ANTIALIAS_MODE_DEFAULT     = 0,
+  D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE   = 1,
+  D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE   = 2,
+  D2D1_TEXT_ANTIALIAS_MODE_ALIASED     = 3 
+} D2D1_TEXT_ANTIALIAS_MODE;
+
+typedef enum  {
+  D2D1_WINDOW_STATE_NONE       = 0x0000000,
+  D2D1_WINDOW_STATE_OCCLUDED   = 0x0000001 
+} D2D1_WINDOW_STATE;
+
+/* this is a hack so we can use forward declares in C (easier than reordering interfaces) */
+#if !defined(__cplusplus)
+#undef DECLARE_INTERFACE
+#define DECLARE_INTERFACE(iface) struct iface { struct iface##Vtbl *lpVtbl; }; typedef struct iface##Vtbl iface##Vtbl; struct iface##Vtbl
+#endif
+
+/* interface forward declares */
+
+typedef _COM_interface ID2D1Bitmap ID2D1Bitmap;
+typedef _COM_interface ID2D1BitmapBrush ID2D1BitmapBrush;
+typedef _COM_interface ID2D1BitmapRenderTarget ID2D1BitmapRenderTarget;
+typedef _COM_interface ID2D1Brush ID2D1Brush;
+typedef _COM_interface ID2D1DCRenderTarget ID2D1DCRenderTarget;
+typedef _COM_interface ID2D1DrawingStateBlock ID2D1DrawingStateBlock;
+typedef _COM_interface ID2D1EllipseGeometry ID2D1EllipseGeometry;
+typedef _COM_interface ID2D1Factory ID2D1Factory;
+typedef _COM_interface ID2D1GdiInteropRenderTarget ID2D1GdiInteropRenderTarget;
+typedef _COM_interface ID2D1Geometry ID2D1Geometry;
+typedef _COM_interface ID2D1GeometryGroup ID2D1GeometryGroup;
+typedef _COM_interface ID2D1GeometrySink ID2D1GeometrySink;
+typedef _COM_interface ID2D1GradientStopCollection ID2D1GradientStopCollection;
+typedef _COM_interface ID2D1HwndRenderTarget ID2D1HwndRenderTarget;
+typedef _COM_interface ID2D1Layer ID2D1Layer;
+typedef _COM_interface ID2D1LinearGradientBrush ID2D1LinearGradientBrush;
+typedef _COM_interface ID2D1Mesh ID2D1Mesh;
+typedef _COM_interface ID2D1PathGeometry ID2D1PathGeometry;
+typedef _COM_interface ID2D1RadialGradientBrush ID2D1RadialGradientBrush;
+typedef _COM_interface ID2D1RectangleGeometry ID2D1RectangleGeometry;
+typedef _COM_interface ID2D1RenderTarget ID2D1RenderTarget;
+typedef _COM_interface ID2D1Resource ID2D1Resource;
+typedef _COM_interface ID2D1RoundedRectangleGeometry ID2D1RoundedRectangleGeometry;
+typedef _COM_interface ID2D1SimplifiedGeometrySink ID2D1SimplifiedGeometrySink;
+typedef _COM_interface ID2D1SolidColorBrush ID2D1SolidColorBrush;
+typedef _COM_interface ID2D1StrokeStyle ID2D1StrokeStyle;
+typedef _COM_interface ID2D1TessellationSink ID2D1TessellationSink;
+typedef _COM_interface ID2D1TransformedGeometry ID2D1TransformedGeometry;
+
+/* structures */
+
+typedef struct D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;
+
+typedef struct D2D1_ARC_SEGMENT D2D1_ARC_SEGMENT;
+typedef struct D2D1_BEZIER_SEGMENT D2D1_BEZIER_SEGMENT;
+typedef struct D2D1_BITMAP_BRUSH_PROPERTIES D2D1_BITMAP_BRUSH_PROPERTIES;
+typedef struct D2D1_BITMAP_PROPERTIES D2D1_BITMAP_PROPERTIES;
+typedef struct D2D1_BRUSH_PROPERTIES D2D1_BRUSH_PROPERTIES;
+typedef struct D2D1_DRAWING_STATE_DESCRIPTION D2D1_DRAWING_STATE_DESCRIPTION;
+typedef struct D2D1_ELLIPSE D2D1_ELLIPSE;
+typedef struct D2D1_FACTORY_OPTIONS D2D1_FACTORY_OPTIONS;
+typedef struct D2D1_GRADIENT_STOP D2D1_GRADIENT_STOP;
+typedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES D2D1_HWND_RENDER_TARGET_PROPERTIES;
+typedef struct D2D1_LAYER_PARAMETERS D2D1_LAYER_PARAMETERS;
+typedef struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES;
+typedef struct D2D1_PIXEL_FORMAT D2D1_PIXEL_FORMAT;
+typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT D2D1_QUADRATIC_BEZIER_SEGMENT;
+typedef struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES;
+typedef struct D2D1_RENDER_TARGET_PROPERTIES D2D1_RENDER_TARGET_PROPERTIES;
+typedef struct D2D1_ROUNDED_RECT D2D1_ROUNDED_RECT;
+typedef struct D2D1_STROKE_STYLE_PROPERTIES D2D1_STROKE_STYLE_PROPERTIES;
+typedef struct D2D1_TRIANGLE D2D1_TRIANGLE;
+
+struct D2D1_ARC_SEGMENT {
+  D2D1_POINT_2F        point;
+  D2D1_SIZE_F          size;
+  FLOAT                rotationAngle;
+  D2D1_SWEEP_DIRECTION sweepDirection;
+  D2D1_ARC_SIZE        arcSize;
+};
+
+struct D2D1_BEZIER_SEGMENT {
+  D2D1_POINT_2F point1;
+  D2D1_POINT_2F point2;
+  D2D1_POINT_2F point3;
+};
+
+struct D2D1_BITMAP_BRUSH_PROPERTIES {
+  D2D1_EXTEND_MODE               extendModeX;
+  D2D1_EXTEND_MODE               extendModeY;
+  D2D1_BITMAP_INTERPOLATION_MODE interpolationMode;
+};
+
+struct D2D1_PIXEL_FORMAT {
+  DXGI_FORMAT     format;
+  D2D1_ALPHA_MODE alphaMode;
+};
+
+struct D2D1_BITMAP_PROPERTIES {
+  D2D1_PIXEL_FORMAT pixelFormat;
+  FLOAT             dpiX;
+  FLOAT             dpiY;
+};
+
+struct D2D1_BRUSH_PROPERTIES {
+  FLOAT             opacity;
+  D2D1_MATRIX_3X2_F transform;
+};
+
+struct D2D1_DRAWING_STATE_DESCRIPTION {
+  D2D1_ANTIALIAS_MODE      antialiasMode;
+  D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;
+  D2D1_TAG                 tag1;
+  D2D1_TAG                 tag2;
+  D2D1_MATRIX_3X2_F        transform;
+};
+
+struct D2D1_ELLIPSE {
+  D2D1_POINT_2F point;
+  FLOAT         radiusX;
+  FLOAT         radiusY;
+};
+
+struct D2D1_FACTORY_OPTIONS {
+  D2D1_DEBUG_LEVEL debugLevel;
+};
+
+struct D2D1_GRADIENT_STOP {
+  FLOAT        position;
+  D2D1_COLOR_F color;
+};
+
+struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
+  HWND                 hwnd;
+  D2D1_SIZE_U          pixelSize;
+  D2D1_PRESENT_OPTIONS presentOptions;
+};
+
+struct D2D1_LAYER_PARAMETERS {
+  D2D1_RECT_F         contentBounds;
+  ID2D1Geometry       *geometricMask;
+  D2D1_ANTIALIAS_MODE maskAntialiasMode;
+  D2D1_MATRIX_3X2_F   maskTransform;
+  FLOAT               opacity;
+  ID2D1Brush          *opacityBrush;
+  D2D1_LAYER_OPTIONS  layerOptions;
+};
+
+struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
+  D2D1_POINT_2F startPoint;
+  D2D1_POINT_2F endPoint;
+};
+
+struct D2D1_QUADRATIC_BEZIER_SEGMENT {
+  D2D1_POINT_2F point1;
+  D2D1_POINT_2F point2;
+};
+
+struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
+  D2D1_POINT_2F center;
+  D2D1_POINT_2F gradientOriginOffset;
+  FLOAT         radiusX;
+  FLOAT         radiusY;
+};
+
+struct D2D1_RENDER_TARGET_PROPERTIES {
+  D2D1_RENDER_TARGET_TYPE  type;
+  D2D1_PIXEL_FORMAT        pixelFormat;
+  FLOAT                    dpiX;
+  FLOAT                    dpiY;
+  D2D1_RENDER_TARGET_USAGE usage;
+  D2D1_FEATURE_LEVEL       minLevel;
+};
+
+struct D2D1_ROUNDED_RECT {
+  D2D1_RECT_F rect;
+  FLOAT       radiusX;
+  FLOAT       radiusY;
+};
+
+struct D2D1_STROKE_STYLE_PROPERTIES {
+  D2D1_CAP_STYLE  startCap;
+  D2D1_CAP_STYLE  endCap;
+  D2D1_CAP_STYLE  dashCap;
+  D2D1_LINE_JOIN  lineJoin;
+  FLOAT           miterLimit;
+  D2D1_DASH_STYLE dashStyle;
+  FLOAT           dashOffset;
+};
+
+struct D2D1_TRIANGLE {
+  D2D1_POINT_2F point1;
+  D2D1_POINT_2F point2;
+  D2D1_POINT_2F point3;
+};
+
+/* interfaces */
+
+/**
+ * Header generated from msdn for the purposes of allowing 
+ * 3rd party compiler compatibility with the Microsoft API 
+ */
+#undef INTERFACE
+#define INTERFACE ID2D1Resource
+DECLARE_INTERFACE_(ID2D1Resource, IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Resource_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Resource_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Resource_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Resource_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+
+#define INTERFACE ID2D1Brush
+DECLARE_INTERFACE_(ID2D1Brush, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Brush methods */
+  STDMETHOD_(FLOAT, GetOpacity)(THIS) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(void, SetOpacity)(THIS_ FLOAT opacity) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Brush_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Brush_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Brush_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Brush_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1Brush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
+#define ID2D1Brush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1Brush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
+#define ID2D1Brush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+
+#define INTERFACE ID2D1Bitmap
+DECLARE_INTERFACE_(ID2D1Bitmap, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Bitmap methods */
+  STDMETHOD(CopyFromBitmap)(THIS_ D2D1_POINT_2U *destPoint, ID2D1Bitmap *bitmap, D2D1_RECT_U *srcRect) PURE;
+  STDMETHOD(CopyFromRenderTarget)(THIS_ D2D1_POINT_2U *destPoint, ID2D1RenderTarget *renderTarget, D2D1_RECT_U *srcRect) PURE;
+  STDMETHOD(CopyFromMemory)(THIS_ D2D1_RECT_U *dstRect, void *srcData, UINT32 pitch) PURE;
+  STDMETHOD_(void, GetDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Bitmap_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Bitmap_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Bitmap_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Bitmap_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1Bitmap_CopyFromBitmap(this,A,B,C) (this)->lpVtbl->CopyFromBitmap(this,A,B,C)
+#define ID2D1Bitmap_CopyFromRenderTarget(this,A,B,C) (this)->lpVtbl->CopyFromRenderTarget(this,A,B,C)
+#define ID2D1Bitmap_CopyFromMemory(this,A,B,C) (this)->lpVtbl->CopyFromMemory(this,A,B,C)
+#define ID2D1Bitmap_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
+#define ID2D1Bitmap_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
+#define ID2D1Bitmap_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
+#define ID2D1Bitmap_GetSize(this) (this)->lpVtbl->GetSize(this)
+
+#define INTERFACE ID2D1BitmapBrush
+DECLARE_INTERFACE_(ID2D1BitmapBrush, ID2D1Brush)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Brush methods */
+  STDMETHOD_(FLOAT, GetOpacity)(THIS) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(void, SetOpacity)(THIS_ FLOAT opacity) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1BitmapBrush methods */
+  STDMETHOD_(void, GetBitmap)(THIS_ ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeX)(THIS) PURE;
+  STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeY)(THIS) PURE;
+  STDMETHOD_(D2D1_BITMAP_INTERPOLATION_MODE, GetInterpolationMode)(THIS) PURE;
+  STDMETHOD_(void, SetBitmap)(THIS_ ID2D1Bitmap *bitmap) PURE;
+  STDMETHOD_(void, SetExtendModeX)(THIS_ D2D1_EXTEND_MODE extendModeX) PURE;
+  STDMETHOD_(void, SetExtendModeY)(THIS_ D2D1_EXTEND_MODE extendModeY) PURE;
+  STDMETHOD_(void, SetInterpolationMode)(THIS_ D2D1_BITMAP_INTERPOLATION_MODE interpolationMode) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1BitmapBrush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
+#define ID2D1BitmapBrush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1BitmapBrush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
+#define ID2D1BitmapBrush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1BitmapBrush_GetBitmap(this,A) (this)->lpVtbl->GetBitmap(this,A)
+#define ID2D1BitmapBrush_GetExtendModeX(this) (this)->lpVtbl->GetExtendModeX(this)
+#define ID2D1BitmapBrush_GetExtendModeY(this) (this)->lpVtbl->GetExtendModeY(this)
+#define ID2D1BitmapBrush_GetInterpolationMode(this) (this)->lpVtbl->GetInterpolationMode(this)
+#define ID2D1BitmapBrush_SetBitmap(this,A) (this)->lpVtbl->SetBitmap(this,A)
+#define ID2D1BitmapBrush_SetExtendModeX(this,A) (this)->lpVtbl->SetExtendModeX(this,A)
+#define ID2D1BitmapBrush_SetExtendModeY(this,A) (this)->lpVtbl->SetExtendModeY(this,A)
+#define ID2D1BitmapBrush_SetInterpolationMode(this,A) (this)->lpVtbl->SetInterpolationMode(this,A)
+
+#define INTERFACE ID2D1RenderTarget
+DECLARE_INTERFACE_(ID2D1RenderTarget, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1RenderTarget methods */
+  STDMETHOD_(void, BeginDraw)(THIS) PURE;
+  STDMETHOD_(void, Clear)(THIS_ D2D1_COLOR_F *clearColor) PURE;
+  STDMETHOD(CreateBitmap)(THIS_ D2D1_SIZE_U size, void *srcData, UINT32 pitch, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateBitmapBrush)(THIS_ ID2D1Bitmap *bitmap, ID2D1BitmapBrush **bitmapBrush) PURE;
+  STDMETHOD(CreateBitmapFromWicBitmap)(THIS_ IWICBitmapSource *wicBitmapSource, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateCompatibleRenderTarget)(THIS_ ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
+  STDMETHOD(CreateGradientStopCollection)(THIS_ D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD(CreateLayer)(THIS_ ID2D1Layer **layer) PURE;
+  STDMETHOD(CreateLinearGradientBrush)(THIS_ D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
+  STDMETHOD(CreateMesh)(THIS_ ID2D1Mesh **mesh) PURE;
+  STDMETHOD(CreateRadialGradientBrush)(THIS_ D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
+  STDMETHOD(CreateSharedBitmap)(THIS_ REFIID riid, void *data, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateSolidColorBrush)(THIS_ D2D1_COLOR_F *color, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
+  STDMETHOD_(void, DrawBitmap)(THIS_ ID2D1Bitmap *bitmap, D2D1_RECT_F *destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode , D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, DrawEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGlyphRun)(THIS_ D2D1_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawLine)(THIS_ D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawText)(THIS_ WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options , DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawTextLayout)(THIS_ D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options) PURE;
+  STDMETHOD(EndDraw)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(void, FillEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush) PURE;
+  STDMETHOD_(void, FillMesh)(THIS_ ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillOpacityMask)(THIS_ ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, D2D1_RECT_F *destinationRectangle, D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, FillRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
+  STDMETHOD(Flush)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD_(UINT32, GetMaximumBitmapSize)(THIS) PURE;
+  STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+  STDMETHOD_(void, GetTags)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetTextRenderingParams)(THIS_ IDWriteRenderingParams **textRenderingParams) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(BOOL, IsSupported)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) PURE;
+  STDMETHOD_(void, PopAxisAlignedClip)(THIS) PURE;
+  STDMETHOD_(void, PopLayer)(THIS) PURE;
+  STDMETHOD_(void, PushAxisAlignedClip)(THIS_ D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, PushLayer)(THIS_ D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
+  STDMETHOD_(void, RestoreDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SaveDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SetAntialiasMode)(THIS_ D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, SetDpi)(THIS_ FLOAT dpiX, FLOAT dpiY) PURE;
+  STDMETHOD_(void, SetTags)(THIS_ D2D1_TAG tag1, D2D1_TAG tag2) PURE;
+  STDMETHOD_(void, SetTextAntialiasMode)(THIS_ D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
+  STDMETHOD_(void, SetTextRenderingParams)(THIS_ IDWriteRenderingParams *textRenderingParams) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1RenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1RenderTarget_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1RenderTarget_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1RenderTarget_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1RenderTarget_BeginDraw(this) (this)->lpVtbl->BeginDraw(this)
+#define ID2D1RenderTarget_Clear(this,A) (this)->lpVtbl->Clear(this,A)
+#define ID2D1RenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
+#define ID2D1RenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
+#define ID2D1RenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B)
+#define ID2D1RenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
+#define ID2D1RenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
+#define ID2D1RenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
+#define ID2D1RenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
+#define ID2D1RenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
+#define ID2D1RenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
+#define ID2D1RenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->CreateSharedBitmap(this,A,B,C,D)
+#define ID2D1RenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->CreateSolidColorBrush(this,A,B,C)
+#define ID2D1RenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->DrawBitmap(this,A,B,C,D,E)
+#define ID2D1RenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->DrawEllipse(this,A,B,C,D)
+#define ID2D1RenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->DrawGeometry(this,A,B,C,D)
+#define ID2D1RenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->DrawGlyphRun(this,A,B,C,D)
+#define ID2D1RenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->DrawLine(this,A,B,C,D,E)
+#define ID2D1RenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRectangle(this,A,B,C,D)
+#define ID2D1RenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRoundedRectangle(this,A,B,C,D)
+#define ID2D1RenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->DrawText(this,A,B,C,D,E,F,G)
+#define ID2D1RenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->DrawTextLayout(this,A,B,C,D)
+#define ID2D1RenderTarget_EndDraw(this,A,B) (this)->lpVtbl->EndDraw(this,A,B)
+#define ID2D1RenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->FillEllipse(this,A,B)
+#define ID2D1RenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->FillGeometry(this,A,B,C)
+#define ID2D1RenderTarget_FillMesh(this,A,B) (this)->lpVtbl->FillMesh(this,A,B)
+#define ID2D1RenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->FillOpacityMask(this,A,B,C,D,E)
+#define ID2D1RenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->FillRectangle(this,A,B)
+#define ID2D1RenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->FillRoundedRectangle(this,A,B)
+#define ID2D1RenderTarget_Flush(this,A,B) (this)->lpVtbl->Flush(this,A,B)
+#define ID2D1RenderTarget_GetAntialiasMode(this) (this)->lpVtbl->GetAntialiasMode(this)
+#define ID2D1RenderTarget_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
+#define ID2D1RenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->GetMaximumBitmapSize(this)
+#define ID2D1RenderTarget_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
+#define ID2D1RenderTarget_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
+#define ID2D1RenderTarget_GetSize(this) (this)->lpVtbl->GetSize(this)
+#define ID2D1RenderTarget_GetTags(this,A,B) (this)->lpVtbl->GetTags(this,A,B)
+#define ID2D1RenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->GetTextAntialiasMode(this)
+#define ID2D1RenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
+#define ID2D1RenderTarget_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1RenderTarget_IsSupported(this,A) (this)->lpVtbl->IsSupported(this,A)
+#define ID2D1RenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->PopAxisAlignedClip(this)
+#define ID2D1RenderTarget_PopLayer(this) (this)->lpVtbl->PopLayer(this)
+#define ID2D1RenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->PushAxisAlignedClip(this,A,B)
+#define ID2D1RenderTarget_PushLayer(this,A,B) (this)->lpVtbl->PushLayer(this,A,B)
+#define ID2D1RenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->RestoreDrawingState(this,A)
+#define ID2D1RenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->SaveDrawingState(this,A)
+#define ID2D1RenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->SetAntialiasMode(this,A)
+#define ID2D1RenderTarget_SetDpi(this,A,B) (this)->lpVtbl->SetDpi(this,A,B)
+#define ID2D1RenderTarget_SetTags(this,A,B) (this)->lpVtbl->SetTags(this,A,B)
+#define ID2D1RenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->SetTextAntialiasMode(this,A)
+#define ID2D1RenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
+#define ID2D1RenderTarget_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+
+
+#define INTERFACE ID2D1Geometry
+DECLARE_INTERFACE_(ID2D1Geometry, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Geometry_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Geometry_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Geometry_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Geometry_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1Geometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1Geometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1Geometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1Geometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1Geometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1Geometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1Geometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1Geometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1Geometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1Geometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1Geometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1Geometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1Geometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+
+#define INTERFACE ID2D1BitmapRenderTarget
+DECLARE_INTERFACE_(ID2D1BitmapRenderTarget, ID2D1RenderTarget)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1RenderTarget methods */
+  STDMETHOD_(void, BeginDraw)(THIS) PURE;
+  STDMETHOD_(void, Clear)(THIS_ D2D1_COLOR_F *clearColor) PURE;
+  STDMETHOD(CreateBitmap)(THIS_ D2D1_SIZE_U size, void *srcData, UINT32 pitch, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateBitmapBrush)(THIS_ ID2D1Bitmap *bitmap, ID2D1BitmapBrush **bitmapBrush) PURE;
+  STDMETHOD(CreateBitmapFromWicBitmap)(THIS_ IWICBitmapSource *wicBitmapSource, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateCompatibleRenderTarget)(THIS_ ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
+  STDMETHOD(CreateGradientStopCollection)(THIS_ D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD(CreateLayer)(THIS_ ID2D1Layer **layer) PURE;
+  STDMETHOD(CreateLinearGradientBrush)(THIS_ D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
+  STDMETHOD(CreateMesh)(THIS_ ID2D1Mesh **mesh) PURE;
+  STDMETHOD(CreateRadialGradientBrush)(THIS_ D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
+  STDMETHOD(CreateSharedBitmap)(THIS_ REFIID riid, void *data, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateSolidColorBrush)(THIS_ D2D1_COLOR_F *color, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
+  STDMETHOD_(void, DrawBitmap)(THIS_ ID2D1Bitmap *bitmap, D2D1_RECT_F *destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode, D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, DrawEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGlyphRun)(THIS_ D2D1_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawLine)(THIS_ D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawText)(THIS_ WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options , DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawTextLayout)(THIS_ D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options) PURE;
+  STDMETHOD(EndDraw)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(void, FillEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush) PURE;
+  STDMETHOD_(void, FillMesh)(THIS_ ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillOpacityMask)(THIS_ ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, D2D1_RECT_F *destinationRectangle, D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, FillRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
+  STDMETHOD(Flush)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD_(UINT32, GetMaximumBitmapSize)(THIS) PURE;
+  STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+  STDMETHOD_(void, GetTags)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetTextRenderingParams)(THIS_ IDWriteRenderingParams **textRenderingParams) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(BOOL, IsSupported)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) PURE;
+  STDMETHOD_(void, PopAxisAlignedClip)(THIS) PURE;
+  STDMETHOD_(void, PopLayer)(THIS) PURE;
+  STDMETHOD_(void, PushAxisAlignedClip)(THIS_ D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, PushLayer)(THIS_ D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
+  STDMETHOD_(void, RestoreDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SaveDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SetAntialiasMode)(THIS_ D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, SetDpi)(THIS_ FLOAT dpiX, FLOAT dpiY) PURE;
+  STDMETHOD_(void, SetTags)(THIS_ D2D1_TAG tag1, D2D1_TAG tag2) PURE;
+  STDMETHOD_(void, SetTextAntialiasMode)(THIS_ D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
+  STDMETHOD_(void, SetTextRenderingParams)(THIS_ IDWriteRenderingParams *textRenderingParams) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1BitmapRenderTarget methods */
+  STDMETHOD(GetBitmap)(THIS_ ID2D1Bitmap **bitmap) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1BitmapRenderTarget_BeginDraw(this) (this)->lpVtbl->BeginDraw(this)
+#define ID2D1BitmapRenderTarget_Clear(this,A) (this)->lpVtbl->Clear(this,A)
+#define ID2D1BitmapRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
+#define ID2D1BitmapRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
+#define ID2D1BitmapRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B)
+#define ID2D1BitmapRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
+#define ID2D1BitmapRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
+#define ID2D1BitmapRenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
+#define ID2D1BitmapRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
+#define ID2D1BitmapRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->CreateSharedBitmap(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->CreateSolidColorBrush(this,A,B,C)
+#define ID2D1BitmapRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->DrawBitmap(this,A,B,C,D,E)
+#define ID2D1BitmapRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->DrawEllipse(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->DrawGeometry(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->DrawGlyphRun(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->DrawLine(this,A,B,C,D,E)
+#define ID2D1BitmapRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRectangle(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRoundedRectangle(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->DrawText(this,A,B,C,D,E,F,G)
+#define ID2D1BitmapRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->DrawTextLayout(this,A,B,C,D)
+#define ID2D1BitmapRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->EndDraw(this,A,B)
+#define ID2D1BitmapRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->FillEllipse(this,A,B)
+#define ID2D1BitmapRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->FillGeometry(this,A,B,C)
+#define ID2D1BitmapRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->FillMesh(this,A,B)
+#define ID2D1BitmapRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->FillOpacityMask(this,A,B,C,D,E)
+#define ID2D1BitmapRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->FillRectangle(this,A,B)
+#define ID2D1BitmapRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->FillRoundedRectangle(this,A,B)
+#define ID2D1BitmapRenderTarget_Flush(this,A,B) (this)->lpVtbl->Flush(this,A,B)
+#define ID2D1BitmapRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->GetAntialiasMode(this)
+#define ID2D1BitmapRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
+#define ID2D1BitmapRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->GetMaximumBitmapSize(this)
+#define ID2D1BitmapRenderTarget_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
+#define ID2D1BitmapRenderTarget_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
+#define ID2D1BitmapRenderTarget_GetSize(this) (this)->lpVtbl->GetSize(this)
+#define ID2D1BitmapRenderTarget_GetTags(this,A,B) (this)->lpVtbl->GetTags(this,A,B)
+#define ID2D1BitmapRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->GetTextAntialiasMode(this)
+#define ID2D1BitmapRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
+#define ID2D1BitmapRenderTarget_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1BitmapRenderTarget_IsSupported(this,A) (this)->lpVtbl->IsSupported(this,A)
+#define ID2D1BitmapRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->PopAxisAlignedClip(this)
+#define ID2D1BitmapRenderTarget_PopLayer(this) (this)->lpVtbl->PopLayer(this)
+#define ID2D1BitmapRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->PushAxisAlignedClip(this,A,B)
+#define ID2D1BitmapRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->PushLayer(this,A,B)
+#define ID2D1BitmapRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->RestoreDrawingState(this,A)
+#define ID2D1BitmapRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->SaveDrawingState(this,A)
+#define ID2D1BitmapRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->SetAntialiasMode(this,A)
+#define ID2D1BitmapRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->SetDpi(this,A,B)
+#define ID2D1BitmapRenderTarget_SetTags(this,A,B) (this)->lpVtbl->SetTags(this,A,B)
+#define ID2D1BitmapRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->SetTextAntialiasMode(this,A)
+#define ID2D1BitmapRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
+#define ID2D1BitmapRenderTarget_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1BitmapRenderTarget_GetBitmap(this,A) (this)->lpVtbl->GetBitmap(this,A)
+
+#define INTERFACE ID2D1DCRenderTarget
+DECLARE_INTERFACE_(ID2D1DCRenderTarget, ID2D1RenderTarget)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1RenderTarget methods */
+  STDMETHOD_(void, BeginDraw)(THIS) PURE;
+  STDMETHOD_(void, Clear)(THIS_ D2D1_COLOR_F *clearColor) PURE;
+  STDMETHOD(CreateBitmap)(THIS_ D2D1_SIZE_U size, void *srcData, UINT32 pitch, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateBitmapBrush)(THIS_ ID2D1Bitmap *bitmap, ID2D1BitmapBrush **bitmapBrush) PURE;
+  STDMETHOD(CreateBitmapFromWicBitmap)(THIS_ IWICBitmapSource *wicBitmapSource, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateCompatibleRenderTarget)(THIS_ ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
+  STDMETHOD(CreateGradientStopCollection)(THIS_ D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD(CreateLayer)(THIS_ ID2D1Layer **layer) PURE;
+  STDMETHOD(CreateLinearGradientBrush)(THIS_ D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
+  STDMETHOD(CreateMesh)(THIS_ ID2D1Mesh **mesh) PURE;
+  STDMETHOD(CreateRadialGradientBrush)(THIS_ D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
+  STDMETHOD(CreateSharedBitmap)(THIS_ REFIID riid, void *data, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateSolidColorBrush)(THIS_ D2D1_COLOR_F *color, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
+  STDMETHOD_(void, DrawBitmap)(THIS_ ID2D1Bitmap *bitmap, D2D1_RECT_F *destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode , D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, DrawEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGlyphRun)(THIS_ D2D1_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawLine)(THIS_ D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawText)(THIS_ WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options , DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawTextLayout)(THIS_ D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options) PURE;
+  STDMETHOD(EndDraw)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(void, FillEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush) PURE;
+  STDMETHOD_(void, FillMesh)(THIS_ ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillOpacityMask)(THIS_ ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, D2D1_RECT_F *destinationRectangle, D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, FillRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
+  STDMETHOD(Flush)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD_(UINT32, GetMaximumBitmapSize)(THIS) PURE;
+  STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+  STDMETHOD_(void, GetTags)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetTextRenderingParams)(THIS_ IDWriteRenderingParams **textRenderingParams) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(BOOL, IsSupported)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) PURE;
+  STDMETHOD_(void, PopAxisAlignedClip)(THIS) PURE;
+  STDMETHOD_(void, PopLayer)(THIS) PURE;
+  STDMETHOD_(void, PushAxisAlignedClip)(THIS_ D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, PushLayer)(THIS_ D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
+  STDMETHOD_(void, RestoreDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SaveDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SetAntialiasMode)(THIS_ D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, SetDpi)(THIS_ FLOAT dpiX, FLOAT dpiY) PURE;
+  STDMETHOD_(void, SetTags)(THIS_ D2D1_TAG tag1, D2D1_TAG tag2) PURE;
+  STDMETHOD_(void, SetTextAntialiasMode)(THIS_ D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
+  STDMETHOD_(void, SetTextRenderingParams)(THIS_ IDWriteRenderingParams *textRenderingParams) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1DCRenderTarget methods */
+  STDMETHOD(BindDC)(THIS_ HDC hDC, RECT *pSubRect) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1DCRenderTarget_BeginDraw(this) (this)->lpVtbl->BeginDraw(this)
+#define ID2D1DCRenderTarget_Clear(this,A) (this)->lpVtbl->Clear(this,A)
+#define ID2D1DCRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
+#define ID2D1DCRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
+#define ID2D1DCRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B)
+#define ID2D1DCRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
+#define ID2D1DCRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
+#define ID2D1DCRenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
+#define ID2D1DCRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
+#define ID2D1DCRenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
+#define ID2D1DCRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
+#define ID2D1DCRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->CreateSharedBitmap(this,A,B,C,D)
+#define ID2D1DCRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->CreateSolidColorBrush(this,A,B,C)
+#define ID2D1DCRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->DrawBitmap(this,A,B,C,D,E)
+#define ID2D1DCRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->DrawEllipse(this,A,B,C,D)
+#define ID2D1DCRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->DrawGeometry(this,A,B,C,D)
+#define ID2D1DCRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->DrawGlyphRun(this,A,B,C,D)
+#define ID2D1DCRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->DrawLine(this,A,B,C,D,E)
+#define ID2D1DCRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRectangle(this,A,B,C,D)
+#define ID2D1DCRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRoundedRectangle(this,A,B,C,D)
+#define ID2D1DCRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->DrawText(this,A,B,C,D,E,F,G)
+#define ID2D1DCRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->DrawTextLayout(this,A,B,C,D)
+#define ID2D1DCRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->EndDraw(this,A,B)
+#define ID2D1DCRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->FillEllipse(this,A,B)
+#define ID2D1DCRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->FillGeometry(this,A,B,C)
+#define ID2D1DCRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->FillMesh(this,A,B)
+#define ID2D1DCRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->FillOpacityMask(this,A,B,C,D,E)
+#define ID2D1DCRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->FillRectangle(this,A,B)
+#define ID2D1DCRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->FillRoundedRectangle(this,A,B)
+#define ID2D1DCRenderTarget_Flush(this,A,B) (this)->lpVtbl->Flush(this,A,B)
+#define ID2D1DCRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->GetAntialiasMode(this)
+#define ID2D1DCRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
+#define ID2D1DCRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->GetMaximumBitmapSize(this)
+#define ID2D1DCRenderTarget_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
+#define ID2D1DCRenderTarget_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
+#define ID2D1DCRenderTarget_GetSize(this) (this)->lpVtbl->GetSize(this)
+#define ID2D1DCRenderTarget_GetTags(this,A,B) (this)->lpVtbl->GetTags(this,A,B)
+#define ID2D1DCRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->GetTextAntialiasMode(this)
+#define ID2D1DCRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
+#define ID2D1DCRenderTarget_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1DCRenderTarget_IsSupported(this,A) (this)->lpVtbl->IsSupported(this,A)
+#define ID2D1DCRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->PopAxisAlignedClip(this)
+#define ID2D1DCRenderTarget_PopLayer(this) (this)->lpVtbl->PopLayer(this)
+#define ID2D1DCRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->PushAxisAlignedClip(this,A,B)
+#define ID2D1DCRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->PushLayer(this,A,B)
+#define ID2D1DCRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->RestoreDrawingState(this,A)
+#define ID2D1DCRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->SaveDrawingState(this,A)
+#define ID2D1DCRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->SetAntialiasMode(this,A)
+#define ID2D1DCRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->SetDpi(this,A,B)
+#define ID2D1DCRenderTarget_SetTags(this,A,B) (this)->lpVtbl->SetTags(this,A,B)
+#define ID2D1DCRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->SetTextAntialiasMode(this,A)
+#define ID2D1DCRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
+#define ID2D1DCRenderTarget_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1DCRenderTarget_BindDC(this,A,B) (this)->lpVtbl->BindDC(this,A,B)
+
+#define INTERFACE ID2D1DrawingStateBlock
+DECLARE_INTERFACE_(ID2D1DrawingStateBlock, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1DrawingStateBlock methods */
+  STDMETHOD_(void, GetDescription)(THIS_ D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) PURE;
+  STDMETHOD_(void, GetTextRenderingParams)(THIS_ IDWriteRenderingParams **textRenderingParams) PURE;
+  STDMETHOD_(void, SetDescription)(THIS_ D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) PURE;
+  STDMETHOD_(void, SetTextRenderingParams)(THIS_ IDWriteRenderingParams *textRenderingParams) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1DrawingStateBlock_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1DrawingStateBlock_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1DrawingStateBlock_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1DrawingStateBlock_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1DrawingStateBlock_GetDescription(this,A) (this)->lpVtbl->GetDescription(this,A)
+#define ID2D1DrawingStateBlock_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
+#define ID2D1DrawingStateBlock_SetDescription(this,A) (this)->lpVtbl->SetDescription(this,A)
+#define ID2D1DrawingStateBlock_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
+
+#define INTERFACE ID2D1SimplifiedGeometrySink
+DECLARE_INTERFACE_(ID2D1SimplifiedGeometrySink, IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1SimplifiedGeometrySink methods */
+  STDMETHOD_(void, AddBeziers)(THIS_ D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
+  STDMETHOD_(void, AddLines)(THIS_ D2D1_POINT_2F *points, UINT pointsCount) PURE;
+  STDMETHOD_(void, BeginFigure)(THIS_ D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) PURE;
+  STDMETHOD(Close)(THIS) PURE;
+  STDMETHOD_(void, EndFigure)(THIS_ D2D1_FIGURE_END figureEnd) PURE;
+  STDMETHOD_(void, SetFillMode)(THIS_ D2D1_FILL_MODE fillMode) PURE;
+  STDMETHOD_(void, SetSegmentFlags)(THIS_ D2D1_PATH_SEGMENT vertexFlags) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1SimplifiedGeometrySink_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1SimplifiedGeometrySink_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1SimplifiedGeometrySink_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1SimplifiedGeometrySink_AddBeziers(this,A,B) (this)->lpVtbl->AddBeziers(this,A,B)
+#define ID2D1SimplifiedGeometrySink_AddLines(this,A,B) (this)->lpVtbl->AddLines(this,A,B)
+#define ID2D1SimplifiedGeometrySink_BeginFigure(this,A,B) (this)->lpVtbl->BeginFigure(this,A,B)
+#define ID2D1SimplifiedGeometrySink_Close(this) (this)->lpVtbl->Close(this)
+#define ID2D1SimplifiedGeometrySink_EndFigure(this,A) (this)->lpVtbl->EndFigure(this,A)
+#define ID2D1SimplifiedGeometrySink_SetFillMode(this,A) (this)->lpVtbl->SetFillMode(this,A)
+#define ID2D1SimplifiedGeometrySink_SetSegmentFlags(this,A) (this)->lpVtbl->SetSegmentFlags(this,A)
+
+#define INTERFACE ID2D1EllipseGeometry
+DECLARE_INTERFACE_(ID2D1EllipseGeometry, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1EllipseGeometry methods */
+  STDMETHOD_(void, GetEllipse)(THIS_ D2D1_ELLIPSE *ellipse) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1EllipseGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1EllipseGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1EllipseGeometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1EllipseGeometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1EllipseGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1EllipseGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1EllipseGeometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1EllipseGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1EllipseGeometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1EllipseGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1EllipseGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1EllipseGeometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1EllipseGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1EllipseGeometry_GetEllipse(this,A) (this)->lpVtbl->GetEllipse(this,A)
+
+#define INTERFACE ID2D1Factory
+DECLARE_INTERFACE_(ID2D1Factory, IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Factory methods */
+  STDMETHOD(CreateDCRenderTarget)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1DCRenderTarget **dcRenderTarget) PURE;
+  STDMETHOD(CreateDrawingStateBlock)(THIS_ D2D1_DRAWING_STATE_DESCRIPTION *drawingStateDescription, IDWriteRenderingParams *textRenderingParams, ID2D1DrawingStateBlock **drawingStateBlock) PURE;
+  STDMETHOD(CreateDxgiSurfaceRenderTarget)(THIS_ IDXGISurface *dxgiSurface, D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
+  STDMETHOD(CreateEllipseGeometry)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1EllipseGeometry **ellipseGeometry) PURE;
+  STDMETHOD(CreateGeometryGroup)(THIS_ D2D1_FILL_MODE fillMode, ID2D1Geometry **geometries, UINT geometriesCount, ID2D1GeometryGroup **geometryGroup) PURE;
+  STDMETHOD(CreateHwndRenderTarget)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, D2D1_HWND_RENDER_TARGET_PROPERTIES *hwndRenderTargetProperties, ID2D1HwndRenderTarget **hwndRenderTarget) PURE;
+  STDMETHOD(CreatePathGeometry)(THIS_ ID2D1PathGeometry **pathGeometry) PURE;
+  STDMETHOD(CreateRectangleGeometry)(THIS_ D2D1_RECT_F *rectangle, ID2D1RectangleGeometry **rectangleGeometry) PURE;
+  STDMETHOD(CreateRoundedRectangleGeometry)(THIS_ D2D1_ROUNDED_RECT *roundedRectangle, ID2D1RoundedRectangleGeometry **roundedRectangleGeometry) PURE;
+  STDMETHOD(CreateStrokeStyle)(THIS_ D2D1_STROKE_STYLE_PROPERTIES *strokeStyleProperties, FLOAT *dashes, UINT dashesCount, ID2D1StrokeStyle **strokeStyle) PURE;
+  STDMETHOD(CreateTransformedGeometry)(THIS_ ID2D1Geometry *sourceGeometry, D2D1_MATRIX_3X2_F *transform, ID2D1TransformedGeometry **transformedGeometry) PURE;
+  STDMETHOD(CreateWicBitmapRenderTarget)(THIS_ IWICBitmap *target, D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
+  STDMETHOD_(void, GetDesktopDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD(ReloadSystemMetrics)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Factory_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Factory_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Factory_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Factory_CreateDCRenderTarget(this,A,B) (this)->lpVtbl->CreateDCRenderTarget(this,A,B)
+#define ID2D1Factory_CreateDrawingStateBlock(this,A,B,C) (this)->lpVtbl->CreateDrawingStateBlock(this,A,B,C)
+#define ID2D1Factory_CreateDxgiSurfaceRenderTarget(this,A,B,C) (this)->lpVtbl->CreateDxgiSurfaceRenderTarget(this,A,B,C)
+#define ID2D1Factory_CreateEllipseGeometry(this,A,B) (this)->lpVtbl->CreateEllipseGeometry(this,A,B)
+#define ID2D1Factory_CreateGeometryGroup(this,A,B,C,D) (this)->lpVtbl->CreateGeometryGroup(this,A,B,C,D)
+#define ID2D1Factory_CreateHwndRenderTarget(this,A,B,C) (this)->lpVtbl->CreateHwndRenderTarget(this,A,B,C)
+#define ID2D1Factory_CreatePathGeometry(this,A) (this)->lpVtbl->CreatePathGeometry(this,A)
+#define ID2D1Factory_CreateRectangleGeometry(this,A,B) (this)->lpVtbl->CreateRectangleGeometry(this,A,B)
+#define ID2D1Factory_CreateRoundedRectangleGeometry(this,A,B) (this)->lpVtbl->CreateRoundedRectangleGeometry(this,A,B)
+#define ID2D1Factory_CreateStrokeStyle(this,A,B,C,D) (this)->lpVtbl->CreateStrokeStyle(this,A,B,C,D)
+#define ID2D1Factory_CreateTransformedGeometry(this,A,B,C) (this)->lpVtbl->CreateTransformedGeometry(this,A,B,C)
+#define ID2D1Factory_CreateWicBitmapRenderTarget(this,A,B,C) (this)->lpVtbl->CreateWicBitmapRenderTarget(this,A,B,C)
+#define ID2D1Factory_GetDesktopDpi(this,A,B) (this)->lpVtbl->GetDesktopDpi(this,A,B)
+#define ID2D1Factory_ReloadSystemMetrics(this) (this)->lpVtbl->ReloadSystemMetrics(this)
+
+#define INTERFACE ID2D1GdiInteropRenderTarget
+DECLARE_INTERFACE_(ID2D1GdiInteropRenderTarget, IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1GdiInteropRenderTarget methods */
+  STDMETHOD(GetDC)(THIS_ D2D1_DC_INITIALIZE_MODE mode, HDC *hdc) PURE;
+  STDMETHOD(ReleaseDC)(THIS_ RECT *update) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1GdiInteropRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1GdiInteropRenderTarget_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1GdiInteropRenderTarget_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1GdiInteropRenderTarget_GetDC(this,A,B) (this)->lpVtbl->GetDC(this,A,B)
+#define ID2D1GdiInteropRenderTarget_ReleaseDC(this,A) (this)->lpVtbl->ReleaseDC(this,A)
+
+#define INTERFACE ID2D1GeometryGroup
+DECLARE_INTERFACE_(ID2D1GeometryGroup, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1GeometryGroup methods */
+  STDMETHOD_(D2D1_FILL_MODE, GetFillMode)(THIS) PURE;
+  STDMETHOD_(void, GetSourceGeometries)(THIS_ ID2D1Geometry **geometries, UINT geometriesCount) PURE;
+  STDMETHOD_(UINT32, GetSourceGeometryCount)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1GeometryGroup_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1GeometryGroup_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1GeometryGroup_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1GeometryGroup_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1GeometryGroup_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1GeometryGroup_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1GeometryGroup_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1GeometryGroup_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1GeometryGroup_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1GeometryGroup_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1GeometryGroup_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1GeometryGroup_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1GeometryGroup_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1GeometryGroup_GetFillMode(this) (this)->lpVtbl->GetFillMode(this)
+#define ID2D1GeometryGroup_GetSourceGeometries(this,A,B) (this)->lpVtbl->GetSourceGeometries(this,A,B)
+#define ID2D1GeometryGroup_GetSourceGeometryCount(this) (this)->lpVtbl->GetSourceGeometryCount(this)
+
+#define INTERFACE ID2D1GeometrySink
+DECLARE_INTERFACE_(ID2D1GeometrySink, ID2D1SimplifiedGeometrySink)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1SimplifiedGeometrySink methods */
+  STDMETHOD_(void, AddBeziers)(THIS_ D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
+  STDMETHOD_(void, AddLines)(THIS_ D2D1_POINT_2F *points, UINT pointsCount) PURE;
+  STDMETHOD_(void, BeginFigure)(THIS_ D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) PURE;
+  STDMETHOD(Close)(THIS) PURE;
+  STDMETHOD_(void, EndFigure)(THIS_ D2D1_FIGURE_END figureEnd) PURE;
+  STDMETHOD_(void, SetFillMode)(THIS_ D2D1_FILL_MODE fillMode) PURE;
+  STDMETHOD_(void, SetSegmentFlags)(THIS_ D2D1_PATH_SEGMENT vertexFlags) PURE;
+
+  /* ID2D1GeometrySink methods */
+  STDMETHOD_(void, AddArc)(THIS_ D2D1_ARC_SEGMENT *arc) PURE;
+  STDMETHOD_(void, AddBezier)(THIS_ D2D1_BEZIER_SEGMENT *bezier) PURE;
+  STDMETHOD_(void, AddLine)(THIS_ D2D1_POINT_2F point) PURE;
+  STDMETHOD_(void, AddQuadraticBezier)(THIS_ D2D1_QUADRATIC_BEZIER_SEGMENT *bezier) PURE;
+  STDMETHOD_(void, AddQuadraticBeziers)(THIS_ D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, UINT bezierCount) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1GeometrySink_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1GeometrySink_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1GeometrySink_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1GeometrySink_AddBeziers(this,A,B) (this)->lpVtbl->AddBeziers(this,A,B)
+#define ID2D1GeometrySink_AddLines(this,A,B) (this)->lpVtbl->AddLines(this,A,B)
+#define ID2D1GeometrySink_BeginFigure(this,A,B) (this)->lpVtbl->BeginFigure(this,A,B)
+#define ID2D1GeometrySink_Close(this) (this)->lpVtbl->Close(this)
+#define ID2D1GeometrySink_EndFigure(this,A) (this)->lpVtbl->EndFigure(this,A)
+#define ID2D1GeometrySink_SetFillMode(this,A) (this)->lpVtbl->SetFillMode(this,A)
+#define ID2D1GeometrySink_SetSegmentFlags(this,A) (this)->lpVtbl->SetSegmentFlags(this,A)
+#define ID2D1GeometrySink_AddArc(this,A) (this)->lpVtbl->AddArc(this,A)
+#define ID2D1GeometrySink_AddBezier(this,A) (this)->lpVtbl->AddBezier(this,A)
+#define ID2D1GeometrySink_AddLine(this,A) (this)->lpVtbl->AddLine(this,A)
+#define ID2D1GeometrySink_AddQuadraticBezier(this,A) (this)->lpVtbl->AddQuadraticBezier(this,A)
+#define ID2D1GeometrySink_AddQuadraticBeziers(this,A,B) (this)->lpVtbl->AddQuadraticBeziers(this,A,B)
+
+#define INTERFACE ID2D1GradientStopCollection
+DECLARE_INTERFACE_(ID2D1GradientStopCollection, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1GradientStopCollection methods */
+  STDMETHOD_(D2D1_GAMMA, GetColorInterpolationGamma)(THIS) PURE;
+  STDMETHOD_(D2D1_EXTEND_MODE, GetExtendMode)(THIS) PURE;
+  STDMETHOD_(UINT32, GetGradientStopCount)(THIS) PURE;
+  STDMETHOD_(void, GetGradientStops)(THIS_ D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1GradientStopCollection_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1GradientStopCollection_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1GradientStopCollection_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1GradientStopCollection_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1GradientStopCollection_GetColorInterpolationGamma(this) (this)->lpVtbl->GetColorInterpolationGamma(this)
+#define ID2D1GradientStopCollection_GetExtendMode(this) (this)->lpVtbl->GetExtendMode(this)
+#define ID2D1GradientStopCollection_GetGradientStopCount(this) (this)->lpVtbl->GetGradientStopCount(this)
+#define ID2D1GradientStopCollection_GetGradientStops(this,A,B) (this)->lpVtbl->GetGradientStops(this,A,B)
+
+#define INTERFACE ID2D1HwndRenderTarget
+DECLARE_INTERFACE_(ID2D1HwndRenderTarget, ID2D1RenderTarget)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1RenderTarget methods */
+  STDMETHOD_(void, BeginDraw)(THIS) PURE;
+  STDMETHOD_(void, Clear)(THIS_ D2D1_COLOR_F *clearColor) PURE;
+  STDMETHOD(CreateBitmap)(THIS_ D2D1_SIZE_U size, void *srcData, UINT32 pitch, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateBitmapBrush)(THIS_ ID2D1Bitmap *bitmap, ID2D1BitmapBrush **bitmapBrush) PURE;
+  STDMETHOD(CreateBitmapFromWicBitmap)(THIS_ IWICBitmapSource *wicBitmapSource, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateCompatibleRenderTarget)(THIS_ ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
+  STDMETHOD(CreateGradientStopCollection)(THIS_ D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD(CreateLayer)(THIS_ ID2D1Layer **layer) PURE;
+  STDMETHOD(CreateLinearGradientBrush)(THIS_ D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
+  STDMETHOD(CreateMesh)(THIS_ ID2D1Mesh **mesh) PURE;
+  STDMETHOD(CreateRadialGradientBrush)(THIS_ D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
+  STDMETHOD(CreateSharedBitmap)(THIS_ REFIID riid, void *data, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
+  STDMETHOD(CreateSolidColorBrush)(THIS_ D2D1_COLOR_F *color, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
+  STDMETHOD_(void, DrawBitmap)(THIS_ ID2D1Bitmap *bitmap, D2D1_RECT_F *destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode , D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, DrawEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawGlyphRun)(THIS_ D2D1_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawLine)(THIS_ D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
+  STDMETHOD_(void, DrawText)(THIS_ WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options , DWRITE_MEASURING_MODE measuringMode) PURE;
+  STDMETHOD_(void, DrawTextLayout)(THIS_ D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options) PURE;
+  STDMETHOD(EndDraw)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(void, FillEllipse)(THIS_ D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillGeometry)(THIS_ ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush) PURE;
+  STDMETHOD_(void, FillMesh)(THIS_ ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillOpacityMask)(THIS_ ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, D2D1_RECT_F *destinationRectangle, D2D1_RECT_F *sourceRectangle) PURE;
+  STDMETHOD_(void, FillRectangle)(THIS_ D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
+  STDMETHOD_(void, FillRoundedRectangle)(THIS_ D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
+  STDMETHOD(Flush)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetDpi)(THIS_ FLOAT *dpiX, FLOAT *dpiY) PURE;
+  STDMETHOD_(UINT32, GetMaximumBitmapSize)(THIS) PURE;
+  STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(THIS) PURE;
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+  STDMETHOD_(void, GetTags)(THIS_ D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
+  STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(THIS) PURE;
+  STDMETHOD_(void, GetTextRenderingParams)(THIS_ IDWriteRenderingParams **textRenderingParams) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(BOOL, IsSupported)(THIS_ D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) PURE;
+  STDMETHOD_(void, PopAxisAlignedClip)(THIS) PURE;
+  STDMETHOD_(void, PopLayer)(THIS) PURE;
+  STDMETHOD_(void, PushAxisAlignedClip)(THIS_ D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, PushLayer)(THIS_ D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
+  STDMETHOD_(void, RestoreDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SaveDrawingState)(THIS_ ID2D1DrawingStateBlock *drawingStateBlock) PURE;
+  STDMETHOD_(void, SetAntialiasMode)(THIS_ D2D1_ANTIALIAS_MODE antialiasMode) PURE;
+  STDMETHOD_(void, SetDpi)(THIS_ FLOAT dpiX, FLOAT dpiY) PURE;
+  STDMETHOD_(void, SetTags)(THIS_ D2D1_TAG tag1, D2D1_TAG tag2) PURE;
+  STDMETHOD_(void, SetTextAntialiasMode)(THIS_ D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
+  STDMETHOD_(void, SetTextRenderingParams)(THIS_ IDWriteRenderingParams *textRenderingParams) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1HwndRenderTarget methods */
+  STDMETHOD_(D2D1_WINDOW_STATE, CheckWindowState)(THIS) PURE;
+  STDMETHOD_(HWND, GetHwnd)(THIS) PURE;
+  STDMETHOD(Resize)(THIS_ D2D1_SIZE_U *pixelSize) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1HwndRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1HwndRenderTarget_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1HwndRenderTarget_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1HwndRenderTarget_BeginDraw(this) (this)->lpVtbl->BeginDraw(this)
+#define ID2D1HwndRenderTarget_Clear(this,A) (this)->lpVtbl->Clear(this,A)
+#define ID2D1HwndRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
+#define ID2D1HwndRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
+#define ID2D1HwndRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B)
+#define ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
+#define ID2D1HwndRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
+#define ID2D1HwndRenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
+#define ID2D1HwndRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
+#define ID2D1HwndRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->CreateSharedBitmap(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->CreateSolidColorBrush(this,A,B,C)
+#define ID2D1HwndRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->DrawBitmap(this,A,B,C,D,E)
+#define ID2D1HwndRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->DrawEllipse(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->DrawGeometry(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->DrawGlyphRun(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->DrawLine(this,A,B,C,D,E)
+#define ID2D1HwndRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRectangle(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRoundedRectangle(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->DrawText(this,A,B,C,D,E,F,G)
+#define ID2D1HwndRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->DrawTextLayout(this,A,B,C,D)
+#define ID2D1HwndRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->EndDraw(this,A,B)
+#define ID2D1HwndRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->FillEllipse(this,A,B)
+#define ID2D1HwndRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->FillGeometry(this,A,B,C)
+#define ID2D1HwndRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->FillMesh(this,A,B)
+#define ID2D1HwndRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->FillOpacityMask(this,A,B,C,D,E)
+#define ID2D1HwndRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->FillRectangle(this,A,B)
+#define ID2D1HwndRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->FillRoundedRectangle(this,A,B)
+#define ID2D1HwndRenderTarget_Flush(this,A,B) (this)->lpVtbl->Flush(this,A,B)
+#define ID2D1HwndRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->GetAntialiasMode(this)
+#define ID2D1HwndRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
+#define ID2D1HwndRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->GetMaximumBitmapSize(this)
+#define ID2D1HwndRenderTarget_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
+#define ID2D1HwndRenderTarget_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
+#define ID2D1HwndRenderTarget_GetSize(this) (this)->lpVtbl->GetSize(this)
+#define ID2D1HwndRenderTarget_GetTags(this,A,B) (this)->lpVtbl->GetTags(this,A,B)
+#define ID2D1HwndRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->GetTextAntialiasMode(this)
+#define ID2D1HwndRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
+#define ID2D1HwndRenderTarget_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1HwndRenderTarget_IsSupported(this,A) (this)->lpVtbl->IsSupported(this,A)
+#define ID2D1HwndRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->PopAxisAlignedClip(this)
+#define ID2D1HwndRenderTarget_PopLayer(this) (this)->lpVtbl->PopLayer(this)
+#define ID2D1HwndRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->PushAxisAlignedClip(this,A,B)
+#define ID2D1HwndRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->PushLayer(this,A,B)
+#define ID2D1HwndRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->RestoreDrawingState(this,A)
+#define ID2D1HwndRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->SaveDrawingState(this,A)
+#define ID2D1HwndRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->SetAntialiasMode(this,A)
+#define ID2D1HwndRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->SetDpi(this,A,B)
+#define ID2D1HwndRenderTarget_SetTags(this,A,B) (this)->lpVtbl->SetTags(this,A,B)
+#define ID2D1HwndRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->SetTextAntialiasMode(this,A)
+#define ID2D1HwndRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
+#define ID2D1HwndRenderTarget_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1HwndRenderTarget_CheckWindowState(this) (this)->lpVtbl->CheckWindowState(this)
+#define ID2D1HwndRenderTarget_GetHwnd(this) (this)->lpVtbl->GetHwnd(this)
+#define ID2D1HwndRenderTarget_Resize(this,A) (this)->lpVtbl->Resize(this,A)
+
+#define INTERFACE ID2D1Layer
+DECLARE_INTERFACE_(ID2D1Layer, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Layer methods */
+  STDMETHOD_(D2D1_SIZE_F, GetSize)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Layer_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Layer_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Layer_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Layer_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1Layer_GetSize(this) (this)->lpVtbl->GetSize(this)
+
+#define INTERFACE ID2D1LinearGradientBrush
+DECLARE_INTERFACE_(ID2D1LinearGradientBrush, ID2D1Brush)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Brush methods */
+  STDMETHOD_(FLOAT, GetOpacity)(THIS) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(void, SetOpacity)(THIS_ FLOAT opacity) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1LinearGradientBrush methods */
+  STDMETHOD_(D2D1_POINT_2F, GetEndPoint)(THIS) PURE;
+  STDMETHOD_(void, GetGradientStopCollection)(THIS_ ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD_(D2D1_POINT_2F, GetStartPoint)(THIS) PURE;
+  STDMETHOD_(void, SetEndPoint)(THIS_ D2D1_POINT_2F endPoint) PURE;
+  STDMETHOD_(void, SetStartPoint)(THIS_ D2D1_POINT_2F startPoint) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1LinearGradientBrush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
+#define ID2D1LinearGradientBrush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1LinearGradientBrush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
+#define ID2D1LinearGradientBrush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1LinearGradientBrush_GetEndPoint(this) (this)->lpVtbl->GetEndPoint(this)
+#define ID2D1LinearGradientBrush_GetGradientStopCollection(this,A) (this)->lpVtbl->GetGradientStopCollection(this,A)
+#define ID2D1LinearGradientBrush_GetStartPoint(this) (this)->lpVtbl->GetStartPoint(this)
+#define ID2D1LinearGradientBrush_SetEndPoint(this,A) (this)->lpVtbl->SetEndPoint(this,A)
+#define ID2D1LinearGradientBrush_SetStartPoint(this,A) (this)->lpVtbl->SetStartPoint(this,A)
+
+#define INTERFACE ID2D1Mesh
+DECLARE_INTERFACE_(ID2D1Mesh, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Mesh methods */
+  STDMETHOD(Open)(THIS_ ID2D1TessellationSink **tessellationSink) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1Mesh_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1Mesh_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1Mesh_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1Mesh_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1Mesh_Open(this,A) (this)->lpVtbl->Open(this,A)
+
+#define INTERFACE ID2D1PathGeometry
+DECLARE_INTERFACE_(ID2D1PathGeometry, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1PathGeometry methods */
+  STDMETHOD(GetFigureCount)(THIS_ UINT32 *count) PURE;
+  STDMETHOD(GetSegmentCount)(THIS_ UINT32 *count) PURE;
+  STDMETHOD(Open)(THIS_ ID2D1GeometrySink **geometrySink) PURE;
+  STDMETHOD(Stream)(THIS_ ID2D1GeometrySink *geometrySink) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1PathGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1PathGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1PathGeometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1PathGeometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1PathGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1PathGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1PathGeometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1PathGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1PathGeometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1PathGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1PathGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1PathGeometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1PathGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1PathGeometry_GetFigureCount(this,A) (this)->lpVtbl->GetFigureCount(this,A)
+#define ID2D1PathGeometry_GetSegmentCount(this,A) (this)->lpVtbl->GetSegmentCount(this,A)
+#define ID2D1PathGeometry_Open(this,A) (this)->lpVtbl->Open(this,A)
+#define ID2D1PathGeometry_Stream(this,A) (this)->lpVtbl->Stream(this,A)
+
+#define INTERFACE ID2D1RadialGradientBrush
+DECLARE_INTERFACE_(ID2D1RadialGradientBrush, ID2D1Brush)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Brush methods */
+  STDMETHOD_(FLOAT, GetOpacity)(THIS) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(void, SetOpacity)(THIS_ FLOAT opacity) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1RadialGradientBrush methods */
+  STDMETHOD_(D2D1_POINT_2F, GetCenter)(THIS) PURE;
+  STDMETHOD_(D2D1_POINT_2F, GetGradientOriginOffset)(THIS) PURE;
+  STDMETHOD_(void, GetGradientStopCollection)(THIS_ ID2D1GradientStopCollection **gradientStopCollection) PURE;
+  STDMETHOD_(FLOAT, GetRadiusX)(THIS) PURE;
+  STDMETHOD_(FLOAT, GetRadiusY)(THIS) PURE;
+  STDMETHOD_(void, SetCenter)(THIS_ D2D1_POINT_2F center) PURE;
+  STDMETHOD_(void, SetGradientOriginOffset)(THIS_ D2D1_POINT_2F gradientOriginOffset) PURE;
+  STDMETHOD_(void, SetRadiusX)(THIS_ FLOAT radiusX) PURE;
+  STDMETHOD_(void, SetRadiusY)(THIS_ FLOAT radiusY) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1RadialGradientBrush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
+#define ID2D1RadialGradientBrush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1RadialGradientBrush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
+#define ID2D1RadialGradientBrush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1RadialGradientBrush_GetCenter(this) (this)->lpVtbl->GetCenter(this)
+#define ID2D1RadialGradientBrush_GetGradientOriginOffset(this) (this)->lpVtbl->GetGradientOriginOffset(this)
+#define ID2D1RadialGradientBrush_GetGradientStopCollection(this,A) (this)->lpVtbl->GetGradientStopCollection(this,A)
+#define ID2D1RadialGradientBrush_GetRadiusX(this) (this)->lpVtbl->GetRadiusX(this)
+#define ID2D1RadialGradientBrush_GetRadiusY(this) (this)->lpVtbl->GetRadiusY(this)
+#define ID2D1RadialGradientBrush_SetCenter(this,A) (this)->lpVtbl->SetCenter(this,A)
+#define ID2D1RadialGradientBrush_SetGradientOriginOffset(this,A) (this)->lpVtbl->SetGradientOriginOffset(this,A)
+#define ID2D1RadialGradientBrush_SetRadiusX(this,A) (this)->lpVtbl->SetRadiusX(this,A)
+#define ID2D1RadialGradientBrush_SetRadiusY(this,A) (this)->lpVtbl->SetRadiusY(this,A)
+
+#define INTERFACE ID2D1RectangleGeometry
+DECLARE_INTERFACE_(ID2D1RectangleGeometry, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1RectangleGeometry methods */
+  STDMETHOD_(void, GetRect)(THIS_ D2D1_RECT_F *rect) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1RectangleGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1RectangleGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1RectangleGeometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1RectangleGeometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1RectangleGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1RectangleGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1RectangleGeometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1RectangleGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1RectangleGeometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1RectangleGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1RectangleGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1RectangleGeometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1RectangleGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1RectangleGeometry_GetRect(this,A) (this)->lpVtbl->GetRect(this,A)
+
+#define INTERFACE ID2D1RoundedRectangleGeometry
+DECLARE_INTERFACE_(ID2D1RoundedRectangleGeometry, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1RoundedRectangleGeometry methods */
+  STDMETHOD_(void, GetRoundedRect)(THIS_ D2D1_ROUNDED_RECT *roundedRect) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1RoundedRectangleGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1RoundedRectangleGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1RoundedRectangleGeometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1RoundedRectangleGeometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1RoundedRectangleGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1RoundedRectangleGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1RoundedRectangleGeometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1RoundedRectangleGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1RoundedRectangleGeometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1RoundedRectangleGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1RoundedRectangleGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1RoundedRectangleGeometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1RoundedRectangleGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1RoundedRectangleGeometry_GetRoundedRect(this,A) (this)->lpVtbl->GetRoundedRect(this,A)
+
+#define INTERFACE ID2D1SolidColorBrush
+DECLARE_INTERFACE_(ID2D1SolidColorBrush, ID2D1Brush)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Brush methods */
+  STDMETHOD_(FLOAT, GetOpacity)(THIS) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+  STDMETHOD_(void, SetOpacity)(THIS_ FLOAT opacity) PURE;
+  STDMETHOD_(void, SetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  /* ID2D1SolidColorBrush methods */
+  STDMETHOD_(D2D1_COLOR_F, GetColor)(THIS) PURE;
+  STDMETHOD_(void, SetColor)(THIS_ D2D1_COLOR_F *color) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1SolidColorBrush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
+#define ID2D1SolidColorBrush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+#define ID2D1SolidColorBrush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
+#define ID2D1SolidColorBrush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
+#define ID2D1SolidColorBrush_GetColor(this) (this)->lpVtbl->GetColor(this)
+#define ID2D1SolidColorBrush_SetColor(this,A) (this)->lpVtbl->SetColor(this,A)
+
+#define INTERFACE ID2D1StrokeStyle
+DECLARE_INTERFACE_(ID2D1StrokeStyle, ID2D1Resource)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1StrokeStyle methods */
+  STDMETHOD_(D2D1_CAP_STYLE, GetDashCap)(THIS) PURE;
+  STDMETHOD_(void, GetDashes)(THIS_ FLOAT *dashes, UINT dashesCount) PURE;
+  STDMETHOD_(UINT32, GetDashesCount)(THIS) PURE;
+  STDMETHOD_(FLOAT, GetDashOffset)(THIS) PURE;
+  STDMETHOD_(D2D1_DASH_STYLE, GetDashStyle)(THIS) PURE;
+  STDMETHOD_(D2D1_CAP_STYLE, GetEndCap)(THIS) PURE;
+  STDMETHOD_(D2D1_LINE_JOIN, GetLineJoin)(THIS) PURE;
+  STDMETHOD_(FLOAT, GetMiterLimit)(THIS) PURE;
+  STDMETHOD_(D2D1_CAP_STYLE, GetStartCap)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1StrokeStyle_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1StrokeStyle_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1StrokeStyle_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1StrokeStyle_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
+#define ID2D1StrokeStyle_GetDashCap(this) (this)->lpVtbl->GetDashCap(this)
+#define ID2D1StrokeStyle_GetDashes(this,A,B) (this)->lpVtbl->GetDashes(this,A,B)
+#define ID2D1StrokeStyle_GetDashesCount(this) (this)->lpVtbl->GetDashesCount(this)
+#define ID2D1StrokeStyle_GetDashOffset(this) (this)->lpVtbl->GetDashOffset(this)
+#define ID2D1StrokeStyle_GetDashStyle(this) (this)->lpVtbl->GetDashStyle(this)
+#define ID2D1StrokeStyle_GetEndCap(this) (this)->lpVtbl->GetEndCap(this)
+#define ID2D1StrokeStyle_GetLineJoin(this) (this)->lpVtbl->GetLineJoin(this)
+#define ID2D1StrokeStyle_GetMiterLimit(this) (this)->lpVtbl->GetMiterLimit(this)
+#define ID2D1StrokeStyle_GetStartCap(this) (this)->lpVtbl->GetStartCap(this)
+
+#define INTERFACE ID2D1TessellationSink
+DECLARE_INTERFACE_(ID2D1TessellationSink, IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1TessellationSink methods */
+  STDMETHOD_(void, AddTriangles)(THIS_ D2D1_TRIANGLE *triangles, UINT trianglesCount) PURE;
+  STDMETHOD(Close)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1TessellationSink_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define ID2D1TessellationSink_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define ID2D1TessellationSink_Release(this) (this)->lpVtbl->Release(this)
+#define ID2D1TessellationSink_AddTriangles(this,A,B) (this)->lpVtbl->AddTriangles(this,A,B)
+#define ID2D1TessellationSink_Close(this) (this)->lpVtbl->Close(this)
+
+#define INTERFACE ID2D1TransformedGeometry
+DECLARE_INTERFACE_(ID2D1TransformedGeometry, ID2D1Geometry)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods */
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  /* ID2D1Resource methods */
+  STDMETHOD_(void, GetFactory)(THIS_ ID2D1Factory **factory) PURE;
+
+  /* ID2D1Geometry methods */
+  STDMETHOD(CombineWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(CompareWithGeometry)(THIS_ ID2D1Geometry *inputGeometry, D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) PURE;
+  STDMETHOD(ComputeArea)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) PURE;
+  STDMETHOD(ComputeLength)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) PURE;
+  STDMETHOD(ComputePointAtLength)(THIS_ FLOAT length, D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
+  STDMETHOD(FillContainsPoint)(THIS_ D2D1_POINT_2F point, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(GetBounds)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(GetWidenedBounds)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
+  STDMETHOD(Outline)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(StrokeContainsPoint)(THIS_ D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) PURE;
+  STDMETHOD(Simplify)(THIS_ D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+  STDMETHOD(Tessellate)(THIS_ D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) PURE;
+  STDMETHOD(Widen)(THIS_ FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
+
+  /* ID2D1TransformedGeometry methods */
+  STDMETHOD_(void, GetSourceGeometry)(THIS_ ID2D1Geometry **sourceGeometry) PURE;
+  STDMETHOD_(void, GetTransform)(THIS_ D2D1_MATRIX_3X2_F *transform) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define ID2D1TransformedGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
+#define ID2D1TransformedGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
+#define ID2D1TransformedGeometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
+#define ID2D1TransformedGeometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
+#define ID2D1TransformedGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
+#define ID2D1TransformedGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
+#define ID2D1TransformedGeometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
+#define ID2D1TransformedGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
+#define ID2D1TransformedGeometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
+#define ID2D1TransformedGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
+#define ID2D1TransformedGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
+#define ID2D1TransformedGeometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
+#define ID2D1TransformedGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
+#define ID2D1TransformedGeometry_GetSourceGeometry(this,A) (this)->lpVtbl->GetSourceGeometry(this,A)
+#define ID2D1TransformedGeometry_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
+
+/* already exists in unknwn.h>
+#define INTERFACE IUnknown
+DECLARE_INTERFACE(IUnknown)
+{
+  BEGIN_INTERFACE
+
+  /* IUnknown methods /
+  STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+  STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+  END_INTERFACE
+};
+#undef INTERFACE
+
+#define IUnknown_QueryInterface(this,A,B) (this)->lpVtbl->QueryInterface(this,A,B)
+#define IUnknown_AddRef(this) (this)->lpVtbl->AddRef(this)
+#define IUnknown_Release(this) (this)->lpVtbl->Release(this)
+*/
+
+#endif /* _D2D1_H */
diff --git a/mingw-w64-headers/include/d2d1helper.h b/mingw-w64-headers/include/d2d1helper.h
new file mode 100644
index 0000000..2e03744
--- /dev/null
+++ b/mingw-w64-headers/include/d2d1helper.h
@@ -0,0 +1,21 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_D2D1HELPER
+#define _INC_D2D1HELPER
+
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+D2D1_ARC_SEGMENT ArcSegment(
+  const D2D1_POINT_2F &point,
+  const D2D1_SIZE_F &size,
+  FLOAT rotationAngle,
+  D2D1_SWEEP_DIRECTION sweepDirection,
+  D2D1_ARC_SIZE arcSize
+);
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_D2D1HELPER*/
diff --git a/mingw-w64-headers/include/d2dbasetypes.h b/mingw-w64-headers/include/d2dbasetypes.h
new file mode 100644
index 0000000..7d7e9e5
--- /dev/null
+++ b/mingw-w64-headers/include/d2dbasetypes.h
@@ -0,0 +1,76 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+
+ * d2dbasetypes.h - Header file for the Direct2D API
+ * No original Microsoft headers were used in the creation of this
+ * file.
+ *API docs available at: http://msdn.microsoft.com/en-us/library/dd372349%28v=VS.85%29.aspx
+ */
+
+#ifndef _D2DBASETYPES_H
+#define _D2DBASETYPES_H
+
+#include <d3d9types.h>
+
+typedef D3DCOLORVALUE D2D_COLOR_F;
+
+struct D2D_MATRIX_3X2_F {
+  FLOAT _11;
+  FLOAT _12;
+  FLOAT _21;
+  FLOAT _22;
+  FLOAT _31;
+  FLOAT _32;
+};
+
+struct D2D_POINT_2F {
+  FLOAT x;
+  FLOAT y;
+};
+
+struct D2D_POINT_2U {
+  UINT32 x;
+  UINT32 y;
+};
+
+struct D2D_RECT_F {
+  FLOAT left;
+  FLOAT top;
+  FLOAT right;
+  FLOAT bottom;
+};
+
+struct D2D_RECT_U {
+  UINT32 left;
+  UINT32 top;
+  UINT32 right;
+  UINT32 bottom;
+};
+
+struct D2D_SIZE_F {
+  FLOAT width;
+  FLOAT height;
+};
+
+struct D2D_SIZE_U {
+  UINT32 width;
+  UINT32 height;
+};
+
+typedef D2D_COLOR_F D2D1_COLOR_F;
+
+typedef struct D2D_POINT_2F D2D1_POINT_2F;
+
+typedef struct D2D_POINT_2U D2D1_POINT_2U;
+
+typedef struct D2D_RECT_F D2D1_RECT_F;
+
+typedef struct D2D_RECT_U D2D1_RECT_U;
+
+typedef struct D2D_SIZE_F D2D1_SIZE_F;
+
+typedef struct D2D_SIZE_U D2D1_SIZE_U;
+
+#endif /* _D2DBASETYPES_H */
diff --git a/mingw-w64-headers/include/d2derr.h b/mingw-w64-headers/include/d2derr.h
new file mode 100644
index 0000000..4964267
--- /dev/null
+++ b/mingw-w64-headers/include/d2derr.h
@@ -0,0 +1,48 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+
+ * d2derr.h - Header file for the Direct2D API
+ * No original Microsoft headers were used in the creation of this
+ * file.
+ *API docs available at: http://msdn.microsoft.com/en-us/library/dd372349%28v=VS.85%29.aspx
+ */
+
+#ifndef _D2DERR_H
+#define _D2DERR_H
+
+/* error codes */
+#define D2DERR_BAD_NUMBER 0x88990011
+#define D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED 0x88990009
+#define D2DERR_DISPLAY_STATE_INVALID 0x88990006
+#define D2DERR_EXCEEDS_MAX_BITMAP_SIZE 0x8899001D
+#define D2DERR_INCOMPATIBLE_BRUSH_TYPES 0x88990018
+#define D2DERR_INSUFFICIENT_BUFFER ERROR_INSUFFICIENT_BUFFER (Windows error)
+#define D2DERR_INTERNAL_ERROR 0x88990008
+#define D2DERR_INVALID_CALL 0x8899000A
+#define D2DERR_LAYER_ALREADY_IN_USE 0x88990013
+#define D2DERR_MAX_TEXTURE_SIZE_EXCEEDED 0x8899000F
+#define D2DERR_NO_HARDWARE_DEVICE 0x8899000B
+#define D2DERR_NOT_INITIALIZED 0x88990002
+#define D2DERR_POP_CALL_DID_NOT_MATCH_PUSH 0x88990014
+#define D2DERR_PUSH_POP_UNBALANCED 0x88990016
+#define D2DERR_RECREATE_TARGET	 0x8899000C
+#define D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT 0x88990017
+#define D2DERR_SCANNER_FAILED 0x88990004
+#define D2DERR_SCREEN_ACCESS_DENIED 0x88990005
+#define D2DERR_SHADER_COMPILE_FAILED 0x8899000E
+#define D2DERR_TARGET_NOT_GDI_COMPATIBLE 0x8899001A
+#define D2DERR_TEXT_EFFECT_IS_WRONG_TYPE 0x8899001B
+#define D2DERR_TEXT_RENDERER_NOT_RELEASED 0x8899001C
+#define D2DERR_TOO_MANY_SHADER_ELEMENTS 0x8899000D
+#define D2DERR_UNSUPPORTED_OPERATION 0x88990003
+#define D2DERR_UNSUPPORTED_PIXEL_FORMAT WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT
+#define D2DERR_UNSUPPORTED_VERSION 0x88990010
+#define D2DERR_WIN32_ERROR 0x88990019
+#define D2DERR_WRONG_FACTORY 0x88990012
+#define D2DERR_WRONG_RESOURCE_DOMAIN 0x88990015
+#define D2DERR_WRONG_STATE 0x88990001
+#define D2DERR_ZERO_VECTOR 0x88990007
+
+#endif /* _D2DERR_H */
diff --git a/mingw-w64-headers/include/davclnt.h b/mingw-w64-headers/include/davclnt.h
new file mode 100644
index 0000000..db80093
--- /dev/null
+++ b/mingw-w64-headers/include/davclnt.h
@@ -0,0 +1,139 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_DAVCLNT
+#define _INC_DAVCLNT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+#define DAV_AUTHN_SCHEME_BASIC      0x00000001
+#define DAV_AUTHN_SCHEME_NTLM       0x00000002
+#define DAV_AUTHN_SCHEME_PASSPORT   0x00000004
+#define DAV_AUTHN_SCHEME_DIGEST     0x00000008
+#define DAV_AUTHN_SCHEME_NEGOTIATE  0x00000010
+#define DAV_AUTHN_SCHEME_CERT       0x00010000
+#define DAV_AUTHN_SCHEME_FBA        0x00100000
+
+typedef DWORD OPAQUE_HANDLE;
+
+typedef enum AUTHNEXTSTEP {
+  DefaultBehavior   = 0,
+  RetryRequest      = 1,
+  CancelRequest     = 2 
+} AUTHNEXTSTEP;
+
+typedef struct _DAV_CALLBACK_AUTH_BLOB {
+  PVOID pBuffer;
+  ULONG ulSize;
+  ULONG ulType;
+}DAV_CALLBACK_AUTH_BLOB, *PDAV_CALLBACK_AUTH_BLOB;
+
+typedef struct _DAV_CALLBACK_AUTH_UNP {
+  LPWSTR pszUserName;
+  ULONG  ulUserNameLength;
+  LPWSTR pszPassword;
+  ULONG  ulPasswordLength;
+}DAV_CALLBACK_AUTH_UNP, *PDAV_CALLBACK_AUTH_UNP;
+
+typedef struct _DAV_CALLBACK_CRED {
+  DAV_CALLBACK_AUTH_BLOB AuthBlob;
+  DAV_CALLBACK_AUTH_UNP  UNPBlob;
+  WINBOOL                bAuthBlobValid;
+  WINBOOL                bSave;
+}DAV_CALLBACK_CRED, *PDAV_CALLBACK_CRED;
+
+typedef DWORD (*PFNDAVAUTHCALLBACK_FREECRED)(
+  PVOID pbuffer
+);
+
+typedef DWORD (*PFNDAVAUTHCALLBACK)(
+  LPWSTR lpwzServerName,
+  LPWSTR lpwzRemoteName,
+  DWORD dwAuthScheme,
+  DWORD dwFlags,
+  PDAV_CALLBACK_CRED pCallbackCred,
+  AUTHNEXTSTEP *NextStep,
+  PFNDAVAUTHCALLBACK_FREECRED *pFreeCred
+);
+
+OPAQUE_HANDLE WINAPI DavRegisterAuthCallback(
+  PFNDAVAUTHCALLBACK CallBack,
+  ULONG Version
+);
+
+VOID WINAPI DavUnregisterAuthCallback(
+  OPAQUE_HANDLE hCallback
+);
+
+DWORD WINAPI DavAddConnection(
+  HANDLE *ConnectionHandle,
+  LPCWSTR RemoteName,
+  LPCWSTR UserName,
+  LPCWSTR Password,
+  PBYTE ClientCert,
+  DWORD CertSize
+);
+
+DWORD WINAPI DavCancelConnectionsToServer(
+  LPWSTR lpName,
+  WINBOOL fForce
+);
+
+DWORD WINAPI DavDeleteConnection(
+  HANDLE ConnectionHandle
+);
+
+DWORD WINAPI DavFlushFile(
+  HANDLE hFile
+);
+
+DWORD WINAPI DavGetExtendedError(
+  HANDLE hFile,
+  DWORD *ExtError,
+  LPWSTR ExtErrorString,
+  DWORD *cChSize
+);
+
+DWORD WINAPI DavGetHTTPFromUNCPath(
+  LPCWSTR UncPath,
+  LPWSTR HttpPath,
+  LPDWORD lpSize
+);
+
+DWORD WINAPI DavGetTheLockOwnerOfTheFile(
+  LPCWSTR FileName,
+  PWSTR LockOwnerName,
+  PULONG LockOwnerNameLengthInBytes
+);
+
+DWORD WINAPI DavGetUNCFromHTTPPath(
+  LPCWSTR HttpPath,
+  LPWSTR UncPath,
+  LPDWORD lpSize
+);
+
+DWORD WINAPI DavInvalidateCache(
+  LPWSTR URLName
+);
+
+OPAQUE_HANDLE WINAPI DavRegisterAuthCallback(
+  PFNDAVAUTHCALLBACK CallBack,
+  ULONG Version
+);
+
+VOID WINAPI DavUnregisterAuthCallback(
+  OPAQUE_HANDLE hCallback
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_DAVCLNT*/
diff --git a/mingw-w64-headers/include/dbghelp.h b/mingw-w64-headers/include/dbghelp.h
index 894b9d6..eb35872 100644
--- a/mingw-w64-headers/include/dbghelp.h
+++ b/mingw-w64-headers/include/dbghelp.h
@@ -1133,6 +1133,7 @@
 
 #define MINIDUMP_MISC1_PROCESS_ID 0x00000001
 #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
+#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
 
   typedef struct _MINIDUMP_MISC_INFO {
     ULONG32 SizeOfInfo;
@@ -1193,7 +1194,8 @@
     ThreadWriteContext             = 0x0004,
     ThreadWriteBackingStore        = 0x0008,
     ThreadWriteInstructionWindow   = 0x0010,
-    ThreadWriteThreadData          = 0x0020
+    ThreadWriteThreadData          = 0x0020,
+    ThreadWriteThreadInfo          = 0x0040
   } THREAD_WRITE_FLAGS;
 
   typedef struct _MINIDUMP_MODULE_CALLBACK {
@@ -1218,9 +1220,15 @@
     ModuleWriteDataSeg         = 0x0002,
     ModuleWriteMiscRecord      = 0x0004,
     ModuleWriteCvRecord        = 0x0008,
-    ModuleReferencedByMemory   = 0x0010
+    ModuleReferencedByMemory   = 0x0010,
+    ModuleWriteTlsData         = 0x0020,
+    ModuleWriteCodeSegs        = 0x0040
   } MODULE_WRITE_FLAGS;
 
+  typedef enum _MINIDUMP_SECONDARY_FLAGS {
+    MiniSecondaryWithoutPowerInfo   = 0x00000001
+  } MINIDUMP_SECONDARY_FLAGS;
+
   typedef struct _MINIDUMP_CALLBACK_INPUT {
     ULONG ProcessId;
     HANDLE ProcessHandle;
@@ -1238,11 +1246,22 @@
     __MINGW_EXTENSION union {
       ULONG ModuleWriteFlags;
       ULONG ThreadWriteFlags;
+      ULONG SecondaryFlags;
       __MINGW_EXTENSION struct {
 	ULONG64 MemoryBase;
 	ULONG MemorySize;
       };
+      __MINGW_EXTENSION struct {
+	WINBOOL CheckCancel;
+	WINBOOL Cancel;
+      };
+      HANDLE Handle;
     };
+    __MINGW_EXTENSION struct {
+      MINIDUMP_MEMORY_INFO VmRegion;
+      WINBOOL Continue;
+    };
+    HRESULT Status;
   } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
 
   typedef enum _MINIDUMP_TYPE {
@@ -1257,9 +1276,68 @@
     MiniDumpFilterModulePaths                = 0x00000080,
     MiniDumpWithProcessThreadData            = 0x00000100,
     MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
-    MiniDumpWithoutOptionalData              = 0x00000400
+    MiniDumpWithoutOptionalData              = 0x00000400,
+    MiniDumpWithFullMemoryInfo               = 0x00000800,
+    MiniDumpWithThreadInfo                   = 0x00001000,
+    MiniDumpWithCodeSegs                     = 0x00002000,
+    MiniDumpWithoutAuxiliaryState            = 0x00004000,
+    MiniDumpWithFullAuxiliaryState           = 0x00008000,
+    MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
+    MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
+    MiniDumpWithTokenInformation             = 0x00040000
   } MINIDUMP_TYPE;
 
+typedef struct _MINIDUMP_MEMORY_INFO {
+  ULONG64 BaseAddress;
+  ULONG64 AllocationBase;
+  ULONG32 AllocationProtect;
+  ULONG32 __alignment1;
+  ULONG64 RegionSize;
+  ULONG32 State;
+  ULONG32 Protect;
+  ULONG32 Type;
+  ULONG32 __alignment2;
+} MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
+
+typedef struct _MINIDUMP_MISC_INFO_2 {
+  ULONG32 SizeOfInfo;
+  ULONG32 Flags1;
+  ULONG32 ProcessId;
+  ULONG32 ProcessCreateTime;
+  ULONG32 ProcessUserTime;
+  ULONG32 ProcessKernelTime;
+  ULONG32 ProcessorMaxMhz;
+  ULONG32 ProcessorCurrentMhz;
+  ULONG32 ProcessorMhzLimit;
+  ULONG32 ProcessorMaxIdleState;
+  ULONG32 ProcessorCurrentIdleState;
+} MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
+
+typedef struct _MINIDUMP_MEMORY_INFO_LIST {
+  ULONG   SizeOfHeader;
+  ULONG   SizeOfEntry;
+  ULONG64 NumberOfEntries;
+} MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
+
+typedef struct _MINIDUMP_THREAD_INFO {
+  ULONG32 ThreadId;
+  ULONG32 DumpFlags;
+  ULONG32 DumpError;
+  ULONG32 ExitStatus;
+  ULONG64 CreateTime;
+  ULONG64 ExitTime;
+  ULONG64 KernelTime;
+  ULONG64 UserTime;
+  ULONG64 StartAddress;
+  ULONG64 Affinity;
+} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
+
+typedef struct _MINIDUMP_THREAD_INFO_LIST {
+  ULONG   SizeOfHeader;
+  ULONG   SizeOfEntry;
+  ULONG64 NumberOfEntries;
+} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
+
   typedef WINBOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
 
   typedef struct _MINIDUMP_CALLBACK_INFORMATION {
diff --git a/mingw-w64-headers/include/dhcpsapi.h b/mingw-w64-headers/include/dhcpsapi.h
index 082a5ce..746f5c7 100644
--- a/mingw-w64-headers/include/dhcpsapi.h
+++ b/mingw-w64-headers/include/dhcpsapi.h
@@ -24,6 +24,11 @@
 typedef DWORD DHCP_RESUME_HANDLE;
 typedef DWORD DHCP_OPTION_ID;
 
+typedef enum _DHCP_OPTION_TYPE {
+  DhcpUnaryElementTypeOption,
+  DhcpArrayTypeOption 
+} DHCP_OPTION_TYPE, *LPDHCP_OPTION_TYPE;
+
 typedef struct _DATE_TIME {
   DWORD dwLowDateTime;
   DWORD dwHighDateTime;
@@ -159,6 +164,14 @@
   DHCP_OPTION_DATA Value;
 } DHCP_OPTION_VALUE,*LPDHCP_OPTION_VALUE;
 
+typedef struct _DHCP_OPTION {
+  DHCP_OPTION_ID   OptionID;
+  LPWSTR           OptionName;
+  LPWSTR           OptionComment;
+  DHCP_OPTION_DATA DefaultValue;
+  DHCP_OPTION_TYPE OptionType;
+} DHCP_OPTION, *LPDHCP_OPTION;
+
 DWORD WINAPI DhcpGetVersion(LPWSTR ServerIpAddress,LPDWORD MajorVersion,LPDWORD MinorVersion);
 DWORD WINAPI DhcpSetServerBindingInfo(DHCP_CONST WCHAR *ServerIpAddress,ULONG Flags,LPDHCP_BIND_ELEMENT_ARRAY BindElementInfo);
 DWORD WINAPI DhcpGetServerBindingInfo(DHCP_CONST WCHAR *ServerIpAddress,ULONG Flags,LPDHCP_BIND_ELEMENT_ARRAY *BindElementsInfo);
@@ -172,6 +185,334 @@
 DWORD WINAPI DhcpGetOptionValue(DHCP_CONST WCHAR *ServerIpAddress,DHCP_OPTION_ID OptionID,DHCP_CONST DHCP_OPTION_SCOPE_INFO *ScopeInfo,LPDHCP_OPTION_VALUE *OptionValue);
 VOID WINAPI DhcpRpcFreeMemory(PVOID BufferPointer);
 
+#define ERROR_DHCP_REGISTRY_INIT_FAILED 20000
+#define ERROR_DHCP_DATABASE_INIT_FAILED 20001
+#define ERROR_DHCP_RPC_INIT_FAILED 20002
+#define ERROR_DHCP_NETWORK_INIT_FAILED 20003
+#define ERROR_DHCP_SUBNET_EXISTS 20004
+#define ERROR_DHCP_SUBNET_NOT_PRESENT 20005
+#define ERROR_DHCP_PRIMARY_NOT_FOUND 20006
+#define ERROR_DHCP_ELEMENT_CANT_REMOVE 20007
+#define ERROR_DHCP_OPTION_EXISTS 20009
+#define ERROR_DHCP_OPTION_NOT_PRESENT 20010
+#define ERROR_DHCP_ADDRESS_NOT_AVAILABLE 20011
+#define ERROR_DHCP_RANGE_FULL 20012
+#define ERROR_DHCP_JET_ERROR 20013
+#define ERROR_DHCP_CLIENT_EXISTS 20014
+#define ERROR_DHCP_INVALID_DHCP_MESSAGE 20015
+#define ERROR_DHCP_INVALID_DHCP_CLIENT 20016
+#define ERROR_DHCP_SERVICE_PAUSED 20017
+#define ERROR_DHCP_NOT_RESERVED_CLIENT 20018
+#define ERROR_DHCP_RESERVED_CLIENT 20019
+#define ERROR_DHCP_RANGE_TOO_SMALL 20020
+#define ERROR_DHCP_IPRANGE_EXISTS 20021
+#define ERROR_DHCP_RESERVEDIP_EXISTS 20022
+#define ERROR_DHCP_INVALID_RANGE 20023
+#define ERROR_DHCP_RANGE_EXTENDED 20024
+#define ERROR_DHCP_RANGE_EXTENSION_TOO_SMALL 20025
+#define ERROR_DHCP_WARNING_RANGE_EXTENDED_LESS 20026
+#define ERROR_DHCP_JET_CONV_REQUIRED 20027
+#define ERROR_DHCP_SERVER_INVALID_BOOT_FILE_TABLE 20028
+#define ERROR_DHCP_SERVER_UNKNOWN_BOOT_FILE_NAME 20029
+#define ERROR_DHCP_SUPER_SCOPE_NAME_TOO_LONG 20030
+#define ERROR_DHCP_IP_ADDRESS_IN_USE 20032
+#define ERROR_DHCP_LOG_FILE_PATH_TOO_LONG 20033
+#define ERROR_DHCP_UNSUPPORTED_CLIENT 20034
+#define ERROR_DHCP_SERVER_INTERFACE_NOTIFICATION_EVENT 20035
+#define ERROR_DHCP_JET97_CONV_REQUIRED 20036
+#define ERROR_DHCP_ROGUE_INIT_FAILED 20037
+#define ERROR_DHCP_ROGUE_SAMSHUTDOWN 20038
+#define ERROR_DHCP_ROGUE_NOT_AUTHORIZED 20039
+#define ERROR_DHCP_ROGUE_DS_UNREACHABLE 20040
+#define ERROR_DHCP_ROGUE_DS_CONFLICT 20041
+#define ERROR_DHCP_ROGUE_NOT_OUR_ENTERPRISE 20042
+#define ERROR_DHCP_STANDALONE_IN_DS 20043
+#define ERROR_DHCP_CLASS_NOT_FOUND 20044
+#define ERROR_DHCP_CLASS_ALREADY_EXISTS 20045
+#define ERROR_DHCP_SCOPE_NAME_TOO_LONG 20046
+#define ERROR_DHCP_DEFAULT_SCOPE_EXISTS 20047
+#define ERROR_DHCP_CANT_CHANGE_ATTRIBUTE 20048
+#define ERROR_DHCP_IPRANGE_CONV_ILLEGAL 20049
+#define ERROR_DHCP_NETWORK_CHANGED 20050
+#define ERROR_DHCP_CANNOT_MODIFY_BINDINGS 20051
+#define ERROR_DHCP_SUBNET_EXISTS 20052
+#define ERROR_DHCP_MSCOPE_EXISTS 20053
+#define ERROR_DHCP_MSCOPE_RANGE_TOO_SMALL 20054
+#define ERROR_DHCP_MSCOPE_RANGE_TOO_SMALL 20054
+#define ERROR_DDS_NO_DS_AVAILABLE 20070
+#define ERROR_DDS_NO_DHCP_ROOT 20071
+#define ERROR_DDS_DHCP_SERVER_NOT_FOUND 20074
+#define ERROR_DDS_OPTION_ALREADY_EXISTS 20075
+#define ERROR_DDS_OPTION_ALREADY_EXISTS 20076
+#define ERROR_DDS_CLASS_EXISTS 20077
+#define ERROR_DDS_CLASS_DOES_NOT_EXIST 20078
+#define ERROR_DDS_SERVER_ALREADY_EXISTS 20079
+#define ERROR_DDS_SERVER_DOES_NOT_EXIST 20080
+#define ERROR_DDS_SERVER_ADDRESS_MISMATCH 20081
+#define ERROR_DDS_SUBNET_EXISTS 20082
+#define ERROR_DDS_SUBNET_HAS_DIFF_SUPER_SCOPE 20083
+#define ERROR_DDS_SUBNET_NOT_PRESENT 20084
+#define ERROR_DDS_RESERVATION_NOT_PRESENT 20085
+#define ERROR_DDS_RESERVATION_CONFLICT 20086
+#define ERROR_DDS_POSSIBLE_RANGE_CONFLICT 20087
+#define ERROR_DDS_RANGE_DOES_NOT_EXIST 20088
+
+typedef struct _DHCP_OPTION_ARRAY {
+  DWORD         NumElements;
+  LPDHCP_OPTION Options;
+} DHCP_OPTION_ARRAY, *LPDHCP_OPTION_ARRAY;
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _DHCP_BINARY_DATA {
+  DWORD DataLength;
+  BYTE* Data;
+} DHCP_BINARY_DATA, *LPDHCP_BINARY_DATA;
+
+typedef DHCP_BINARY_DATA DHCP_CLIENT_UID; 
+
+typedef enum _DHCP_OPTION_SCOPE_TYPE6 {
+  DhcpDefaultOptions6,
+  DhcpScopeOptions6,
+  DhcpReservedOptions6 
+} DHCP_OPTION_SCOPE_TYPE6;
+
+typedef struct _DHCP_ALL_OPTIONS {
+  DWORD               Flags;
+  LPDHCP_OPTION_ARRAY NonVendorOptions;
+  DWORD               NumVendorOptions;
+  __MINGW_EXTENSION struct {
+    DHCP_OPTION Option;
+    LPWSTR      VendorName;
+    LPWSTR      ClassName;
+  } *VendorOptions;
+} DHCP_ALL_OPTIONS, *LPDHCP_ALL_OPTIONS;
+
+typedef struct _DHCP_IPV6_ADDRESS {
+  ULONGULONG HighOrderBits;
+  ULONGULONG LowOrderBits;
+} DHCP_IPV6_ADDRESS, *PDHCP_IPV6_ADDRESS, *LPDHCP_IPV6_ADDRESS, DHCP_RESUME_IPV6_HANDLE;
+
+typedef struct _DHCP_ALL_OPTION_VALUES {
+  DWORD Flags;
+  DWORD NumElements;
+  __MINGW_EXTENSION struct {
+    LPWSTR                    ClassName;
+    LPWSTR                    VendorName;
+    WINBOOL                   IsVendor;
+    LPDHCP_OPTION_VALUE_ARRAY OptionsArray;
+  } *Options;
+} DHCP_ALL_OPTION_VALUES, *LPDHCP_ALL_OPTION_VALUES;
+
+typedef struct _DHCP_OPTION_SCOPE_INFO6 {
+  DHCP_OPTION_SCOPE_TYPE6 ScopeType;
+  __MINGW_EXTENSION union {
+    PVOID                DefaultScopeInfo;
+    DHCP_IPV6_ADDRESS    SubnetScopeInfo;
+    DHCP_RESERVED_SCOPE6 ReservedScopeInfo;
+  } ScopeInfo;
+} DHCP_OPTION_SCOPE_INFO6, *PDHCP_OPTION_SCOPE_INFO6, *LPDHCP_OPTION_SCOPE_INFO6;
+
+typedef struct _DHCP_OPTION_VALUE_ARRAY {
+  DWORD               NumElements;
+  LPDHCP_OPTION_VALUE Values;
+} DHCP_OPTION_VALUE_ARRAY, *LPDHCP_OPTION_VALUE_ARRAY;
+
+typedef enum _DHCP_SUBNET_ELEMENT_TYPE_V6 {
+  Dhcpv6IpRanges,
+  Dhcpv6ReservedIps,
+  Dhcpv6ExcludedIpRanges
+} DHCP_SUBNET_ELEMENT_TYPE_V6, *LPDHCP_SUBNET_ELEMENT_TYPE_V6;
+
+typedef struct _DHCP_IP_RANGE_V6 {
+  DHCP_IPV6_ADDRESS StartAddress;
+  DHCP_IPV6_ADDRESS EndAddress;
+} DHCP_IP_RANGE_V6, *LPDHCP_IP_RANGE_V6;
+
+typedef struct _DHCP_IP_RESERVATION_V6 {
+  DHCP_IPV6_ADDRESS ReservedIpAddress;
+  DHCP_CLIENT_UID* ReservedForClient;
+  DWORD InterfaceId;
+} DHCP_IP_RESERVATION_V6, *LPDHCP_IP_RESERVATION_V6;
+
+typedef struct DHCP_SUBNET_ELEMENT_DATA_V6 {
+  DHCP_SUBNET_ELEMENT_TYPE_V6 ElementType;
+    union _DHCP_SUBNET_ELEMENT_UNION_V6 {
+      DHCP_IP_RANGE_V6* IpRange;
+      DHCP_IP_RESERVATION_V6* ReservedIp;
+      DHCP_IP_RANGE_V6* ExcludeIpRange;
+  } Element;
+} DHCP_SUBNET_ELEMENT_DATA_V6, *LDHCP_SUBNET_ELEMENT_DATA_V6, *LPDHCP_SUBNET_ELEMENT_DATA_V6;
+
+typedef struct _DHCP_SUBNET_ELEMENT_INFO_ARRAY_V6 {
+  DWORD NumElements;
+  LPDHCP_SUBNET_ELEMENT_DATA_V6 Elements;
+} DHCP_SUBNET_ELEMENT_INFO_ARRAY_V6, *LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V6;
+
+typedef struct _DHCP_SUBNET_INFO_V6 {
+  DHCP_IPV6_ADDRESS SubnetAddress;
+  ULONG             Prefix;
+  USHORT            Preference;
+  LPWSTR            SubnetName;
+  LPWSTR            SubnetComment;
+  DWORD             State;
+  DWORD             ScopeId;
+} DHCP_SUBNET_INFO_V6, *PDHCP_SUBNET_INFO_V6, *LPDHCP_SUBNET_INFO_V6;
+
+DWORD DHCP_API_FUNCTION DhcpAddSubnetElementV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  LDHCP_SUBNET_ELEMENT_DATA_V6 *AddElementInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpCreateOptionV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionId,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  LPDHCP_OPTION OptionInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpDeleteSubnetV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  DHCP_FORCE_FLAG ForceFlag
+);
+
+DWORD DHCP_API_FUNCTION DhcpCreateSubnetV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  LDHCP_SUBNET_INFO_V6 *SubnetInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpEnumOptionsV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  DHCP_RESUME_HANDLE *ResumeHandle,
+  DWORD PreferredMaximum,
+  LPDHCP_OPTION_ARRAY *Options,
+  DWORD *OptionsRead,
+  DWORD *OptionsTotal
+);
+
+DWORD DHCP_API_FUNCTION DhcpEnumOptionValuesV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  DHCP_OPTION_SCOPE_INFO6 ScopeInfo,
+  DHCP_RESUME_HANDLE *ResumeHandle,
+  DWORD PreferredMaximum,
+  LPDHCP_OPTION_VALUE_ARRAY *OptionValues,
+  DWORD *OptionsRead,
+  DWORD *OptionsTotal
+);
+
+DWORD DHCP_API_FUNCTION DhcpEnumSubnetClientsV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  DHCP_RESUME_IPV6_HANDLE *ResumeHandle,
+  DWORD PreferredMaximum,
+  LPDHCP_CLIENT_INFO_ARRAY_V6 *ClientInfo,
+  DWORD *ClientsRead,
+  DWORD *ClientsTotal
+);
+
+DWORD DHCP_API_FUNCTION DhcpEnumSubnetElementsV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  DHCP_SUBNET_ELEMENT_TYPE_V6 EnumElementType,
+  DHCP_RESUME_HANDLE *ResumeHandle,
+  DWORD PreferredMaximum,
+  LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V6 *EnumElementInfo,
+  DWORD *ElementsRead,
+  DWORD *ElementsTotal
+);
+
+DWORD DHCP_API_FUNCTION DhcpEnumSubnetsV6(
+  LPWSTR ServerIpAddress,
+  DHCP_RESUME_HANDLE *ResumeHandle,
+  DWORD PreferredMaximum,
+  LPDHCPV6_IP_ARRAY *EnumInfo,
+  DWORD *ElementsRead,
+  DWORD *ElementsTotal
+);
+
+DWORD DHCP_API_FUNCTION DhcpGetAllOptionsV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  LPDHCP_ALL_OPTIONS *OptionStruct
+);
+
+DWORD DHCP_API_FUNCTION DhcpGetAllOptionValuesV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  LPDHCP_OPTION_SCOPE_INFO6 ScopeInfo,
+  LPDHCP_ALL_OPTION_VALUES *Values
+);
+
+DWORD DHCP_API_FUNCTION DhcpGetOptionInfoV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionID,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  LPDHCP_OPTION *OptionInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpGetSubnetInfoV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  LPDHCP_SUBNET_INFO_V6 *SubnetInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpRemoveOptionV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionID,
+  WCHAR *ClassName,
+  WCHAR *VendorName
+);
+
+DWORD DHCP_API_FUNCTION DhcpRemoveOptionValueV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionID,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  DHCP_OPTION_SCOPE_INFO6 ScopeInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpRemoveSubnetElementV6(
+  LPWSTR ServerIpAddress,
+  DHCP_IPV6_ADDRESS SubnetAddress,
+  LDHCP_SUBNET_ELEMENT_DATA_V6 RemoveElementInfo,
+  DHCP_FORCE_FLAG ForceFlag
+);
+
+DWORD DHCP_API_FUNCTION DhcpSetOptionInfoV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionID,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  LPDHCP_OPTION OptionInfo
+);
+
+DWORD DHCP_API_FUNCTION DhcpSetOptionValueV6(
+  LPWSTR ServerIpAddress,
+  DWORD Flags,
+  DHCP_OPTION_ID OptionId,
+  WCHAR *ClassName,
+  WCHAR *VendorName,
+  LDHCP_OPTION_SCOPE_INFO6 ScopeInfo,
+  LDHCP_OPTION_DATA OptionValue
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/dhcpv6csdk.h b/mingw-w64-headers/include/dhcpv6csdk.h
new file mode 100644
index 0000000..06f8639
--- /dev/null
+++ b/mingw-w64-headers/include/dhcpv6csdk.h
@@ -0,0 +1,95 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_DHCPV6CSDK
+#define _INC_DHCPV6CSDK
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum _StatusCode {
+  STATUS_NO_ERROR,
+  STATUS_UNSPECIFIED_FAILURE,
+  STATUS_NO_BINDING,
+  STATUS_NOPREFIX_AVAIL 
+} StatusCode;
+
+typedef struct _DHCPV6CAPI_CLASSID {
+  ULONG  Flags;
+  LPBYTE Data;
+  ULONG  nBytesData;
+} DHCPV6CAPI_CLASSID, *PDHCPV6CAPI_CLASSID, *LPDHCPV6CAPI_CLASSID;
+
+typedef struct _DHCPV6CAPI_PARAMS {
+  ULONG   Flags;
+  ULONG   OptionId;
+  WINBOOL IsVendor;
+  LPBYTE  Data;
+  DWORD   nBytesData;
+} DHCPV6CAPI_PARAMS, *PDHCPV6CAPI_PARAMS, *LPDHCPV6CAPI_PARAMS;
+
+typedef struct _DHCPV6Prefix {
+  UCHAR      prefix[16];
+  DWORD      prefixLength;
+  DWORD      preferredLifeTime;
+  DWORD      validLifeTime;
+  StatusCode status;
+} DHCPV6Prefix, *PDHCPV6Prefix, *LPDHCPV6Prefix;
+
+typedef struct _DHCPV6CAPI_PARAMS_ARRAY {
+  ULONG               nParams;
+  LPDHCPV6CAPI_PARAMS Params;
+} DHCPV6CAPI_PARAMS_ARRAY, *PDHCPV6CAPI_PARAMS_ARRAY, *LPDHCPV6CAPI_PARAMS_ARRAY;
+
+typedef struct _DHCPV6PrefixLeaseInformation {
+  DWORD          nPrefixes;
+  LPDHCPV6Prefix prefixArray;
+  DWORD          iaid;
+  time_t         T1;
+  time_t         T2;
+  time_t         MaxLeaseExpirationTime;
+  time_t         LastRenewalTime;
+  StatusCode     status;
+  LPBYTE         ServerId;
+  DWORD          ServerIdLen;
+} DHCPV6PrefixLeaseInformation, *PDHCPV6PrefixLeaseInformation, *LPDHCPV6PrefixLeaseInformation, *LPDHCPV6CAPIPrefixLeaseInformation;
+
+VOID APIENTRY Dhcpv6CApiCleanup(void);
+
+DWORD APIENTRY Dhcpv6CApiInitialize(
+  LPDWORD Version
+);
+
+DWORD APIENTRY Dhcpv6RenewPrefix(
+  LPWSTR adapterName,
+  LPDHCPV6CAPI_CLASSID classId,
+  LPDHCPV6CAPIPrefixLeaseInformation prefixleaseInfo
+);
+
+DWORD APIENTRY Dhcpv6RenewPrefix(
+  LPWSTR adapterName,
+  LPDHCPV6CAPI_CLASSID classId,
+  LPDHCPV6PrefixLeaseInformation prefixleaseInfo,
+  DWORD pdwTimeToWait,
+  DWORD bValidatePrefix
+);
+
+DWORD APIENTRY Dhcpv6RequestPrefix(
+  LPWSTR adapterName,
+  LPDHCPV6CAPI_CLASSID classId,
+  LPDHCPV6PrefixLeaseInformation prefixleaseInfo,
+  DWORD pdwTimeToWait
+);
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_DHCPV6CSDK*/
diff --git a/mingw-w64-headers/include/dssec.h b/mingw-w64-headers/include/dssec.h
new file mode 100644
index 0000000..4f656f4
--- /dev/null
+++ b/mingw-w64-headers/include/dssec.h
@@ -0,0 +1,65 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_DSSEC
+#define _INC_DSSEC
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HRESULT (WINAPI *PFNREADOBJECTSECURITY)(
+    LPCWSTR,               // Active Directory path of object
+    SECURITY_INFORMATION,  // the security information to read
+    PSECURITY_DESCRIPTOR*, // the returned security descriptor 
+    LPARAM                 // context parameter
+);
+
+typedef HRESULT (WINAPI *PFNWRITEOBJECTSECURITY)(
+    LPCWSTR,              // Active Directory path of object
+    SECURITY_INFORMATION, // the security information to write
+    PSECURITY_DESCRIPTOR, // the security descriptor to write
+    LPARAM                // context parameter
+);
+
+HRESULT WINAPI DSCreateISecurityInfoObject(
+  LPCWSTR pwszObjectPath,
+  LPCWSTR pwszObjectClass,
+  DWORD dwFlags,
+  LPSECURITYINFO *ppSI,
+  PFNREADOBJECTSECURITY pfnReadSD,
+  PFNWRITEOBJECTSECURITY pfnWriteSD,
+  LPARAM lpContext
+);
+
+HRESULT WINAPI DSCreateISecurityInfoObjectEx(
+  LPCWSTR pwszObjectPath,
+  LPCWSTR pwszObjectClass,
+  LPCWSTR pwszServer,
+  LPCWSTR pwszUserName,
+  LPCWSTR pwszPassword,
+  DWORD dwFlags,
+  LPSECURITYINFO *ppSI,
+  PFNREADOBJECTSECURITY pfnReadSD,
+  PFNWRITEOBJECTSECURITY pfnWriteSD,
+  LPARAM lpContext
+);
+
+HRESULT WINAPI DSEditSecurity(
+  HWND hwndOwner,
+  LPCWSTR pwszObjectPath,
+  LPCWSTR pwszObjectClass,
+  DWORD dwFlags,
+  LPCWSTR *pwszCaption,
+  PFNREADOBJECTSECURITY pfnReadSD,
+  PFNWRITEOBJECTSECURITY pfnWriteSD,
+  LPARAM lpContext
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_DSSEC*/
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
new file mode 100644
index 0000000..345d269
--- /dev/null
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -0,0 +1,684 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_DXVA2API
+#define _INC_DXVA2API
+#if (_WIN32_WINNT >= 0x0600)
+#include <objbase.h>
+#include <d3d9.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct IDirect3DDeviceManager9 IDirect3DDeviceManager9;
+typedef struct IDirectXVideoDecoderService IDirectXVideoDecoderService;
+
+typedef enum _DXVA2_SampleFormat {
+  DXVA2_SampleFormatMask                  = 0x00FF,
+  DXVA2_SampleUnknown                     = 0,
+  DXVA2_SampleProgressiveFrame            = 2,
+  DXVA2_SampleFieldInterleavedEvenFirst   = 3,
+  DXVA2_SampleFieldInterleavedOddFirst    = 4,
+  DXVA2_SampleFieldSingleEven             = 5,
+  DXVA2_SampleFieldSingleOdd              = 6,
+  DXVA2_SampleSubStream                   = 7 
+} DXVA2_SampleFormat;
+
+typedef enum _DXVA2_VideoChromaSubSampling {
+  DXVA2_VideoChromaSubsamplingMask                              = 0x0F,
+  DXVA2_VideoChromaSubsampling_Unknown                          = 0,
+  DXVA2_VideoChromaSubsampling_ProgressiveChroma                = 0x8,
+  DXVA2_VideoChromaSubsampling_Horizontally_Cosited             = 0x4,
+  DXVA2_VideoChromaSubsampling_Vertically_Cosited               = 0x2,
+  DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes   = 0x1,
+  DXVA2_VideoChromaSubsampling_MPEG2                            = 
+              DXVA2_VideoChromaSubsampling_Horizontally_Cosited |
+              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+  DXVA2_VideoChromaSubsampling_MPEG1                            = 
+              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+  DXVA2_VideoChromaSubsampling_DV_PAL                           = 
+              DXVA2_VideoChromaSubsampling_Horizontally_Cosited | 
+              DXVA2_VideoChromaSubsampling_Vertically_Cosited,
+  DXVA2_VideoChromaSubsampling_Cosited                          = 
+              DXVA2_VideoChromaSubsampling_Horizontally_Cosited | 
+              DXVA2_VideoChromaSubsampling_Vertically_Cosited | 
+              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes 
+} DXVA2_VideoChromaSubSampling;
+
+typedef enum _DXVA2_NominalRange {
+  DXVA2_NominalRangeMask       = 0x07,
+  DXVA2_NominalRange_Unknown   = 0,
+  DXVA2_NominalRange_Normal    = 1,
+  DXVA2_NominalRange_Wide      = 2,
+  DXVA2_NominalRange_0_255     = 1,
+  DXVA2_NominalRange_16_235    = 2,
+  DXVA2_NominalRange_48_208    = 3 
+} DXVA2_NominalRange;
+
+typedef enum _DXVA2_VideoLighting {
+  DXVA2_VideoLightingMask       = 0x0F,
+  DXVA2_VideoLighting_Unknown   = 0,
+  DXVA2_VideoLighting_bright    = 1,
+  DXVA2_VideoLighting_office    = 2,
+  DXVA2_VideoLighting_dim       = 3,
+  DXVA2_VideoLighting_dark      = 4 
+} DXVA2_VideoLighting;
+
+typedef enum _DXVA2_VideoPrimaries {
+  DXVA2_VideoPrimariesMask             = 0x001f,
+  DXVA2_VideoPrimaries_Unknown         = 0,
+  DXVA2_VideoPrimaries_reserved        = 1,
+  DXVA2_VideoPrimaries_BT709           = 2,
+  DXVA2_VideoPrimaries_BT470_2_SysM    = 3,
+  DXVA2_VideoPrimaries_BT470_2_SysBG   = 4,
+  DXVA2_VideoPrimaries_SMPTE170M       = 5,
+  DXVA2_VideoPrimaries_SMPTE240M       = 6,
+  DXVA2_VideoPrimaries_EBU3213         = 7,
+  DXVA2_VideoPrimaries_SMPTE_C         = 8 
+} DXVA2_VideoPrimaries;
+
+typedef enum _DXVA2_VideoTransferFunction {
+  DXVA2_VideoTransFuncMask       = 0x001f,
+  DXVA2_VideoTransFunc_Unknown   = 0,
+  DXVA2_VideoTransFunc_10        = 1,
+  DXVA2_VideoTransFunc_18        = 2,
+  DXVA2_VideoTransFunc_20        = 3,
+  DXVA2_VideoTransFunc_22        = 4,
+  DXVA2_VideoTransFunc_709       = 5,
+  DXVA2_VideoTransFunc_240M      = 6,
+  DXVA2_VideoTransFunc_sRGB      = 7,
+  DXVA2_VideoTransFunc_28        = 8 
+} DXVA2_VideoTransferFunction;
+
+typedef enum  {
+  DXVA2_SurfaceType_DecoderRenderTarget      = 0,
+  DXVA2_SurfaceType_ProcessorRenderTarget    = 1,
+  DXVA2_SurfaceType_D3DRenderTargetTexture   = 2 
+} DXVA2_SurfaceType;
+
+typedef enum _DXVA2_VideoTransferMatrix {
+  DXVA2_VideoTransferMatrixMask         = 0x07,
+  DXVA2_VideoTransferMatrix_Unknown     = 0,
+  DXVA2_VideoTransferMatrix_BT709       = 1,
+  DXVA2_VideoTransferMatrix_BT601       = 2,
+  DXVA2_VideoTransferMatrix_SMPTE240M   = 3 
+} DXVA2_VideoTransferMatrix;
+
+#pragma pack(push, 1)
+typedef struct _DXVA2_AYUVSample16 {
+  USHORT Cr;
+  USHORT Cb;
+  USHORT Y;
+  USHORT Alpha;
+} DXVA2_AYUVSample16;
+
+typedef struct _DXVA2_AYUVSample8 {
+  UCHAR Cr;
+  UCHAR Cb;
+  UCHAR Y;
+  UCHAR Alpha;
+} DXVA2_AYUVSample8;
+
+typedef struct _DXVA2_ConfigPictureDecode {
+  GUID   guidConfigBitstreamEncryption;
+  GUID   guidConfigMBcontrolEncryption;
+  GUID   guidConfigResidDiffEncryption;
+  UINT   ConfigBitstreamRaw;
+  UINT   ConfigMBcontrolRasterOrder;
+  UINT   ConfigResidDiffHost;
+  UINT   ConfigSpatialResid8;
+  UINT   ConfigResid8Subtraction;
+  UINT   ConfigSpatialHost8or9Clipping;
+  UINT   ConfigSpatialResidInterleaved;
+  UINT   ConfigIntraResidUnsigned;
+  UINT   ConfigResidDiffAccelerator;
+  UINT   ConfigHostInverseScan;
+  UINT   ConfigSpecificIDCT;
+  UINT   Config4GroupedCoefs;
+  UINT   ConfigMinRenderTargetBuffCount;
+  USHORT ConfigDecoderSpecific;
+} DXVA2_ConfigPictureDecode;
+
+typedef struct _DXVA2_DecodeBufferDesc {
+  DWORD CompressedBufferType;
+  UINT  BufferIndex;
+  UINT  DataOffset;
+  UINT  DataSize;
+  UINT  FirstMBaddress;
+  UINT  NumMBsInBuffer;
+  UINT  Width;
+  UINT  Height;
+  UINT  Stride;
+  UINT  ReservedBits;
+  PVOID pvPVPState;
+} DXVA2_DecodeBufferDesc;
+
+typedef struct _DXVA2_DecodeExtensionData {
+  UINT  Function;
+  PVOID pPrivateInputData;
+  UINT  PrivateInputDataSize;
+  PVOID pPrivateOutputData;
+  UINT  PrivateOutputDataSize;
+} DXVA2_DecodeExtensionData;
+
+typedef struct _DXVA2_DecodeExecuteParams {
+  UINT                      NumCompBuffers;
+  DXVA2_DecodeBufferDesc    *pCompressedBuffers;
+  DXVA2_DecodeExtensionData *pExtensionData;
+} DXVA2_DecodeExecuteParams;
+
+typedef struct {
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      UINT SampleFormat            :8;
+      UINT VideoChromaSubsampling  :4;
+      UINT NominalRange            :3;
+      UINT VideoTransferMatrix     :3;
+      UINT VideoLighting           :4;
+      UINT VideoPrimaries          :5;
+      UINT VideoTransferFunction   :5;
+    } DUMMYSTRUCTNAME;
+    UINT   value;
+  } DUMMYUNIONNAME;
+} DXVA2_ExtendedFormat;
+
+typedef struct _DXVA2_Fixed32 {
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      USHORT Fraction;
+      SHORT  Value;
+    } DUMMYSTRUCTNAME;
+    LONG   ll;
+  } DUMMYUNIONNAME;
+} DXVA2_Fixed32;
+
+typedef struct _DXVA2_FilterValues {
+  DXVA2_Fixed32 Level;
+  DXVA2_Fixed32 Threshold;
+  DXVA2_Fixed32 Radius;
+} DXVA2_FilterValues;
+
+typedef struct _DXVA2_Frequency {
+  UINT Numerator;
+  UINT Denominator;
+} DXVA2_Frequency;
+
+typedef struct _DXVA2_ProcAmpValues {
+  DXVA2_Fixed32 Brightness;
+  DXVA2_Fixed32 Contrast;
+  DXVA2_Fixed32 Hue;
+  DXVA2_Fixed32 Saturation;
+} DXVA2_ProcAmpValues;
+
+typedef struct _DXVA2_ValueRange {
+  DXVA2_Fixed32 MinValue;
+  DXVA2_Fixed32 MaxValue;
+  DXVA2_Fixed32 DefaultValue;
+  DXVA2_Fixed32 StepSize;
+} DXVA2_ValueRange;
+
+typedef struct _DXVA2_VideoDesc {
+  UINT                 SampleWidth;
+  UINT                 SampleHeight;
+  DXVA2_ExtendedFormat SampleFormat;
+  D3DFORMAT            Format;
+  DXVA2_Frequency      InputSampleFreq;
+  DXVA2_Frequency      OutputFrameFreq;
+  UINT                 UABProtectionLevel;
+  UINT                 Reserved;
+} DXVA2_VideoDesc;
+
+/* DeviceCaps
+DXVA2_VPDev_EmulatedDXVA1
+DXVA2_VPDev_HardwareDevice
+DXVA2_VPDev_SoftwareDevice
+*/
+/* DeinterlaceTechnology
+DXVA2_DeinterlaceTech_Unknown
+DXVA2_DeinterlaceTech_BOBLineReplicate
+DXVA2_DeinterlaceTech_BOBVerticalStretch
+DXVA2_DeinterlaceTech_BOBVerticalStretch4Tap
+DXVA2_DeinterlaceTech_MedianFiltering
+DXVA2_DeinterlaceTech_EdgeFiltering
+DXVA2_DeinterlaceTech_FieldAdaptive
+DXVA2_DeinterlaceTech_PixelAdaptive
+DXVA2_DeinterlaceTech_MotionVectorSteered
+DXVA2_DeinterlaceTech_InverseTelecine
+*/
+
+/* VideoProcessorOperations
+DXVA2_VideoProcess_YUV2RGB
+DXVA2_VideoProcess_StretchX
+DXVA2_VideoProcess_StretchY
+DXVA2_VideoProcess_AlphaBlend
+DXVA2_VideoProcess_SubRects
+DXVA2_VideoProcess_SubStreams
+DXVA2_VideoProcess_SubStreamsExtended
+DXVA2_VideoProcess_YUV2RGBExtended
+DXVA2_VideoProcess_AlphaBlendExtended
+DXVA2_VideoProcess_Constriction
+DXVA2_VideoProcess_NoiseFilter
+DXVA2_VideoProcess_DetailFilter
+DXVA2_VideoProcess_PlanarAlpha
+DXVA2_VideoProcess_LinearScaling
+DXVA2_VideoProcess_GammaCompensated
+DXVA2_VideoProcess_MaintainsOriginalFieldData
+*/
+
+/*NoiseFilterTechnology
+DXVA2_NoiseFilterTech_Unsupported
+DXVA2_NoiseFilterTech_Unknown
+DXVA2_NoiseFilterTech_Median
+DXVA2_NoiseFilterTech_Temporal
+DXVA2_NoiseFilterTech_BlockNoise
+DXVA2_NoiseFilterTech_MosquitoNoise
+*/
+
+/* DetailFilterTechnology
+DXVA2_DetailFilterTech_Unsupported
+DXVA2_DetailFilterTech_Unknown
+DXVA2_DetailFilterTech_Edge
+DXVA2_DetailFilterTech_Sharpening
+*/
+typedef struct _DXVA2_VideoProcessBltParams {
+  REFERENCE_TIME       TargetFrame;
+  RECT                 TargetRect;
+  SIZE                 ConstrictionSize;
+  UINT                 StreamingFlags;
+  DXVA2_AYUVSample16   BackgroundColor;
+  DXVA2_ExtendedFormat DestFormat;
+  DXVA2_ProcAmpValues  ProcAmpValues;
+  DXVA2_Fixed32        Alpha;
+  DXVA2_FilterValues   NoiseFilterLuma;
+  DXVA2_FilterValues   NoiseFilterChroma;
+  DXVA2_FilterValues   DetailFilterLuma;
+  DXVA2_FilterValues   DetailFilterChroma;
+  DWORD                DestData;
+} DXVA2_VideoProcessBltParams;
+
+typedef struct _DXVA2_VideoProcessorCaps {
+  UINT    DeviceCaps;
+  D3DPOOL InputPool;
+  UINT    NumForwardRefSamples;
+  UINT    NumBackwardRefSamples;
+  UINT    Reserved;
+  UINT    DeinterlaceTechnology;
+  UINT    ProcAmpControlCaps;
+  UINT    VideoProcessorOperations;
+  UINT    NoiseFilterTechnology;
+  UINT    DetailFilterTechnology;
+} DXVA2_VideoProcessorCaps;
+
+/* SampleData
+DXVA2_SampleData_RFF
+DXVA2_SampleData_TFF
+DXVA2_SampleData_RFF_TFF_Present
+*/
+
+typedef struct _DXVA2_VideoSample {
+  REFERENCE_TIME       Start;
+  REFERENCE_TIME       End;
+  DXVA2_ExtendedFormat SampleFormat;
+  IDirect3DSurface9*   SrcSurface;
+  RECT                 SrcRect;
+  RECT                 DstRect;
+  DXVA2_AYUVSample8    Pal[16];
+  DXVA2_Fixed32        PlanarAlpha;
+  DWORD                SampleData;
+} DXVA2_VideoSample;
+
+/* DXVA H264 */
+typedef struct {
+    __MINGW_EXTENSION union {
+        __MINGW_EXTENSION struct {
+            UCHAR Index7Bits     : 7;
+            UCHAR AssociatedFlag : 1;
+        };
+        UCHAR bPicEntry;
+    };
+} DXVA_PicEntry_H264;
+
+typedef struct {
+    USHORT  wFrameWidthInMbsMinus1;
+    USHORT  wFrameHeightInMbsMinus1;
+    DXVA_PicEntry_H264 InPic;
+    DXVA_PicEntry_H264 OutPic;
+    USHORT  PicOrderCnt_offset;
+    INT     CurrPicOrderCnt;
+    UINT    StatusReportFeedbackNumber;
+    UCHAR   model_id;
+    UCHAR   separate_colour_description_present_flag;
+    UCHAR   film_grain_bit_depth_luma_minus8;
+    UCHAR   film_grain_bit_depth_chroma_minus8;
+    UCHAR   film_grain_full_range_flag;
+    UCHAR   film_grain_colour_primaries;
+    UCHAR   film_grain_transfer_characteristics;
+    UCHAR   film_grain_matrix_coefficients;
+    UCHAR   blending_mode_id;
+    UCHAR   log2_scale_factor;
+    UCHAR   comp_model_present_flag[4];
+    UCHAR   num_intensity_intervals_minus1[4];
+    UCHAR   num_model_values_minus1[4];
+    UCHAR   intensity_interval_lower_bound[3][16];
+    UCHAR   intensity_interval_upper_bound[3][16];
+    SHORT   comp_model_value[3][16][8];
+} DXVA_FilmGrainChar_H264;
+
+/* DXVA MPEG-I/II and VC-1 */
+typedef struct _DXVA_PictureParameters {
+    USHORT  wDecodedPictureIndex;
+    USHORT  wDeblockedPictureIndex;
+    USHORT  wForwardRefPictureIndex;
+    USHORT  wBackwardRefPictureIndex;
+    USHORT  wPicWidthInMBminus1;
+    USHORT  wPicHeightInMBminus1;
+    UCHAR   bMacroblockWidthMinus1;
+    UCHAR   bMacroblockHeightMinus1;
+    UCHAR   bBlockWidthMinus1;
+    UCHAR   bBlockHeightMinus1;
+    UCHAR   bBPPminus1;
+    UCHAR   bPicStructure;
+    UCHAR   bSecondField;
+    UCHAR   bPicIntra;
+    UCHAR   bPicBackwardPrediction;
+    UCHAR   bBidirectionalAveragingMode;
+    UCHAR   bMVprecisionAndChromaRelation;
+    UCHAR   bChromaFormat;
+    UCHAR   bPicScanFixed;
+    UCHAR   bPicScanMethod;
+    UCHAR   bPicReadbackRequests;
+    UCHAR   bRcontrol;
+    UCHAR   bPicSpatialResid8;
+    UCHAR   bPicOverflowBlocks;
+    UCHAR   bPicExtrapolation;
+    UCHAR   bPicDeblocked;
+    UCHAR   bPicDeblockConfined;
+    UCHAR   bPic4MVallowed;
+    UCHAR   bPicOBMC;
+    UCHAR   bPicBinPB;
+    UCHAR   bMV_RPS;
+    UCHAR   bReservedBits;
+    USHORT  wBitstreamFcodes;
+    USHORT  wBitstreamPCEelements;
+    UCHAR   bBitstreamConcealmentNeed;
+    UCHAR   bBitstreamConcealmentMethod;
+} DXVA_PictureParameters, *LPDXVA_PictureParameters;
+
+typedef struct _DXVA_QmatrixData {
+    BYTE    bNewQmatrix[4];
+    WORD    Qmatrix[4][8 * 8];
+} DXVA_QmatrixData, *LPDXVA_QmatrixData;
+
+typedef struct _DXVA_SliceInfo {
+    USHORT  wHorizontalPosition;
+    USHORT  wVerticalPosition;
+    UINT    dwSliceBitsInBuffer;
+    UINT    dwSliceDataLocation;
+    UCHAR   bStartCodeBitOffset;
+    UCHAR   bReservedBits;
+    USHORT  wMBbitOffset;
+    USHORT  wNumberMBsInSlice;
+    USHORT  wQuantizerScaleCode;
+    USHORT  wBadSliceChopping;
+} DXVA_SliceInfo, *LPDXVA_SliceInfo;
+
+typedef struct {
+    USHORT wFrameWidthInMbsMinus1;
+    USHORT wFrameHeightInMbsMinus1;
+    DXVA_PicEntry_H264 CurrPic;
+    UCHAR  num_ref_frames;
+    __MINGW_EXTENSION union {
+        __MINGW_EXTENSION struct {
+            USHORT field_pic_flag           : 1;
+            USHORT MbaffFrameFlag           : 1;
+            USHORT residual_colour_transform_flag : 1;
+            USHORT sp_for_switch_flag       : 1;
+            USHORT chroma_format_idc        : 2;
+            USHORT RefPicFlag               : 1;
+            USHORT constrained_intra_pred_flag : 1;
+            USHORT weighted_pred_flag       : 1;
+            USHORT weighted_bipred_idc      : 2;
+            USHORT MbsConsecutiveFlag       : 1;
+            USHORT frame_mbs_only_flag      : 1;
+            USHORT transform_8x8_mode_flag  : 1;
+            USHORT MinLumaBipredSize8x8Flag : 1;
+            USHORT IntraPicFlag             : 1;
+        };
+        USHORT wBitFields;
+    };
+    UCHAR   bit_depth_luma_minus8;
+    UCHAR   bit_depth_chroma_minus8;
+    USHORT  Reserved16Bits;
+    UINT    StatusReportFeedbackNumber;
+    DXVA_PicEntry_H264 RefFrameList[16];
+    INT     CurrFieldOrderCnt[2];
+    INT     FieldOrderCntList[16][2];
+    CHAR    pic_init_qs_minus26;
+    CHAR    chroma_qp_index_offset;
+    CHAR    second_chroma_qp_index_offset;
+    UCHAR   ContinuationFlag;
+    CHAR    pic_init_qp_minus26;
+    UCHAR   num_ref_idx_l0_active_minus1;
+    UCHAR   num_ref_idx_l1_active_minus1;
+    UCHAR   Reserved8BitsA;
+    USHORT  FrameNumList[16];
+    UINT    UsedForReferenceFlags;
+    USHORT  NonExistingFrameFlags;
+    USHORT  frame_num;
+    UCHAR   log2_max_frame_num_minus4;
+    UCHAR   pic_order_cnt_type;
+    UCHAR   log2_max_pic_order_cnt_lsb_minus4;
+    UCHAR   delta_pic_order_always_zero_flag;
+    UCHAR   direct_8x8_inference_flag;
+    UCHAR   entropy_coding_mode_flag;
+    UCHAR   pic_order_present_flag;
+    UCHAR   num_slice_groups_minus1;
+    UCHAR   slice_group_map_type;
+    UCHAR   deblocking_filter_control_present_flag;
+    UCHAR   redundant_pic_cnt_present_flag;
+    UCHAR   Reserved8BitsB;
+    USHORT  slice_group_change_rate_minus1;
+    UCHAR   SliceGroupMap[810];
+} DXVA_PicParams_H264;
+
+typedef struct {
+    UCHAR   bScalingLists4x4[6][16];
+    UCHAR   bScalingLists8x8[2][64];
+} DXVA_Qmatrix_H264;
+
+typedef struct {
+    UINT    BSNALunitDataLocation;
+    UINT    SliceBytesInBuffer;
+    USHORT  wBadSliceChopping;
+    USHORT  first_mb_in_slice;
+    USHORT  NumMbsForSlice;
+    USHORT  BitOffsetToSliceData;
+    UCHAR   slice_type;
+    UCHAR   luma_log2_weight_denom;
+    UCHAR   chroma_log2_weight_denom;
+    UCHAR   num_ref_idx_l0_active_minus1;
+    UCHAR   num_ref_idx_l1_active_minus1;
+    CHAR    slice_alpha_c0_offset_div2;
+    CHAR    slice_beta_offset_div2;
+    UCHAR   Reserved8Bits;
+    DXVA_PicEntry_H264 RefPicList[2][32];
+    SHORT   Weights[2][32][3][2];
+    CHAR    slice_qs_delta;
+    CHAR    slice_qp_delta;
+    UCHAR   redundant_pic_cnt;
+    UCHAR   direct_spatial_mv_pred_flag;
+    UCHAR   cabac_init_idc;
+    UCHAR   disable_deblocking_filter_idc;
+    USHORT  slice_id;
+} DXVA_Slice_H264_Long;
+
+typedef struct {
+    UINT    BSNALunitDataLocation;
+    UINT    SliceBytesInBuffer;
+    USHORT  wBadSliceChopping;
+} DXVA_Slice_H264_Short;
+
+#pragma pack(pop)
+
+/* Constants */
+
+#define DXVA2_VideoDecoderRenderTarget 0
+#define DXVA2_VideoProcessorRenderTarget 1
+#define DXVA2_VideoSoftwareRenderTarget 2
+
+/* CompressedBufferType */
+#define DXVA2_PictureParametersBufferType 0
+#define DXVA2_MacroBlockControlBufferType 1
+#define DXVA2_ResidualDifferenceBufferType 2
+#define DXVA2_DeblockingControlBufferType 3
+#define DXVA2_InverseQuantizationMatrixBufferType 4
+#define DXVA2_SliceControlBufferType 5
+#define DXVA2_BitStreamDateBufferType 6
+#define DXVA2_MotionVectorBuffer 7
+#define DXVA2_FilmGrainBuffer 8
+
+/*Fixme: inlines?*/
+const DXVA2_Fixed32 DXVA2_Fixed32OpaqueAlpha(void);
+const DXVA2_Fixed32 DXVA2_Fixed32TransparentAlpha(void);
+float DXVA2FixedToFloat(const DXVA2_Fixed32 _fixed_);
+DXVA2_Fixed32 DXVA2FloatToFixed(const float _float_);
+
+HRESULT WINAPI DXVA2CreateDirect3DDeviceManager9(UINT *pResetToken,IDirect3DDeviceManager9 **ppDXVAManager);
+HRESULT WINAPI DXVA2CreateVideoService(IDirect3DDevice9 *pDD,REFIID riid,void **ppService);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* COM Interfaces */
+
+#undef  INTERFACE
+#define INTERFACE IDirectXVideoDecoder
+DECLARE_INTERFACE_(IDirectXVideoDecoder,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDirectXVideoDecoder methods */
+    STDMETHOD_(HRESULT,GetVideoDecoderService)(THIS_ IDirectXVideoDecoderService **ppAccelServices) PURE;
+    STDMETHOD_(HRESULT,GetCreationParameters)(THIS_ GUID *pDeviceGuid,DXVA2_VideoDesc *pVideoDesc,DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 ***pppDecoderRenderTargets,UINT *pNumSurfaces) PURE;
+    STDMETHOD_(HRESULT,GetBuffer)(THIS_ UINT BufferType,void **ppBuffer,UINT *pBufferSize) PURE;
+    STDMETHOD_(HRESULT,ReleaseBuffer)(THIS_ UINT BufferType) PURE;
+    STDMETHOD_(HRESULT,BeginFrame)(THIS_ IDirect3DSurface9 *pRenderTarget,void *pvPVPData) PURE;
+    STDMETHOD_(HRESULT,EndFrame)(THIS_ HANDLE *pHandleComplete) PURE;
+    STDMETHOD_(HRESULT,Execute)(THIS_ const DXVA2_DecodeExecuteParams *pExecuteParams) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDirectXVideoDecoder_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectXVideoDecoder_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDirectXVideoDecoder_Release(This) (This)->pVtbl->Release(This)
+#define IDirectXVideoDecoder_GetVideoDecoderService(This,ppAccelServices) (This)->lpVtbl->GetVideoDecoderService(This,ppAccelServices)
+#define IDirectXVideoDecoder_GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pppDecoderRenderTargets,pNumSurfaces) (This)->lpVtbl->GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pppDecoderRenderTargets,pNumSurfaces)
+#define IDirectXVideoDecoder_GetBuffer(This,BufferType,ppBuffer,pBufferSize) (This)->lpVtbl->GetBuffer(This,BufferType,ppBuffer,pBufferSize)
+#define IDirectXVideoDecoder_ReleaseBuffer(This,BufferType) (This)->lpVtbl->ReleaseBuffer(This,BufferType)
+#define IDirectXVideoDecoder_BeginFrame(This,pRenderTarget,pvPVPData) (This)->lpVtbl->BeginFrame(This,pRenderTarget,pvPVPData)
+#define IDirectXVideoDecoder_EndFrame(This,pHandleComplete) (This)->lpVtbl->EndFrame(This,pHandleComplete)
+#define IDirectXVideoDecoder_Execute(This,pExecuteParams) (This)->lpVtbl->Execute(This,pExecuteParams)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDirectXVideoAccelerationService
+DECLARE_INTERFACE_(IDirectXVideoAccelerationService,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDirectXVideoAccelerationService methods */
+    STDMETHOD_(HRESULT,CreateSurface)(THIS_ UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDirectXVideoAccelerationService_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectXVideoAccelerationService_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDirectXVideoAccelerationService_Release(This) (This)->pVtbl->Release(This)
+#define IDirectXVideoAccelerationService_CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle) (This)->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDirectXVideoDecoderService
+DECLARE_INTERFACE_(IDirectXVideoDecoderService,IDirectXVideoAccelerationService)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDirectXVideoAccelerationService methods */
+    STDMETHOD_(HRESULT,CreateSurface)(THIS_ UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) PURE;
+    
+    /* IDirectXVideoDecoderService methods */
+    STDMETHOD_(HRESULT,GetDecoderDeviceGuids)(THIS_ UINT *Count,GUID **pGuids) PURE;
+    STDMETHOD_(HRESULT,GetDecoderRenderTargets)(THIS_ REFGUID Guid,UINT *pCount,D3DFORMAT **pFormats) PURE;
+    STDMETHOD_(HRESULT,GetDecoderConfigurations)(THIS_ REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,IUnknown *pReserved,UINT *pCount,DXVA2_ConfigPictureDecode **ppConfigs) PURE;
+    STDMETHOD_(HRESULT,CreateVideoDecoder)(THIS_ REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 **ppDecoderRenderTargets,UINT NumSurfaces,IDirectXVideoDecoder **ppDecode) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDirectXVideoDecoderService_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectXVideoDecoderService_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDirectXVideoDecoderService_Release(This) (This)->pVtbl->Release(This)
+#define IDirectXVideoDecoderService_CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle) (This)->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle)
+#define IDirectXVideoDecoderService_GetDecoderDeviceGuids(This,Count,pGuids) (This)->lpVtbl->GetDecoderDeviceGuids(This,Count,pGuids)
+#define IDirectXVideoDecoderService_GetDecoderRenderTargets(This,Guid,pCount,pFormats) (This)->lpVtbl->GetDecoderRenderTargets(This,Guid,pCount,pFormats)
+#define IDirectXVideoDecoderService_GetDecoderConfigurations(This,Guid,pVideoDesc,pReserved,pCount,ppConfigs) (This)->lpVtbl->GetDecoderConfigurations(This,Guid,pVideoDesc,pReserved,pCount,ppConfigs)
+#define IDirectXVideoDecoderService_CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumSurfaces,ppDecode) (This)->lpVtbl->CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumSurfaces,ppDecode)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDirect3DDeviceManager9
+DECLARE_INTERFACE_(IDirect3DDeviceManager9,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDirect3DDeviceManager9 methods */
+    STDMETHOD_(HRESULT,ResetDevice)(THIS_ IDirect3DDevice9 *pDevice,UINT resetToken) PURE;
+    STDMETHOD_(HRESULT,OpenDeviceHandle)(THIS_ HANDLE *phDevice) PURE;
+    STDMETHOD_(HRESULT,CloseDeviceHandle)(THIS_ HANDLE hDevice) PURE;
+    STDMETHOD_(HRESULT,TestDevice)(THIS_ HANDLE hDevice) PURE;
+    STDMETHOD_(HRESULT,LockDevice)(THIS_ HANDLE hDevice,IDirect3DDevice9 **ppDevice,WINBOOL fBlock) PURE;
+    STDMETHOD_(HRESULT,UnlockDevice)(THIS_ HANDLE hDevice,BOOL fSaveState) PURE;
+    STDMETHOD_(HRESULT,GetVideoService)(THIS_ HANDLE hDevice,REFIID riid,void **ppService) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDirect3DDeviceManager9_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirect3DDeviceManager9_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDirect3DDeviceManager9_Release(This) (This)->pVtbl->Release(This)
+#define IDirect3DDeviceManager9_ResetDevice(This,pDevice,resetToken) (This)->lpVtbl->ResetDevice(This,pDevice,resetToken)
+#define IDirect3DDeviceManager9_OpenDeviceHandle(This,phDevice) (This)->lpVtbl->OpenDeviceHandle(This,phDevice)
+#define IDirect3DDeviceManager9_CloseDeviceHandle(This,hDevice) (This)->lpVtbl->CloseDeviceHandle(This,hDevice)
+#define IDirect3DDeviceManager9_TestDevice(This,hDevice) (This)->lpVtbl->TestDevice(This,hDevice)
+#define IDirect3DDeviceManager9_LockDevice(This,hDevice,ppDevice,fBlock) (This)->lpVtbl->LockDevice(This,hDevice,ppDevice,fBlock)
+#define IDirect3DDeviceManager9_UnlockDevice(This,hDevice,fSaveState) (This)->lpVtbl->UnlockDevice(This,hDevice,fSaveState)
+#define IDirect3DDeviceManager9_GetVideoService(This,hDevice,riid,ppService) (This)->lpVtbl->GetVideoService(This,hDevice,riid,ppService)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_DXVA2API*/
diff --git a/mingw-w64-headers/include/dxvahd.h b/mingw-w64-headers/include/dxvahd.h
new file mode 100644
index 0000000..6f96eef
--- /dev/null
+++ b/mingw-w64-headers/include/dxvahd.h
@@ -0,0 +1,450 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_DXAVHD
+#define _INC_DXAVHD
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef CALLBACK
+#define CALLBACK __stdcall
+#endif
+
+typedef struct IDXVAHD_Device IDXVAHD_Device;
+typedef struct IDXVAHD_VideoProcessor IDXVAHD_VideoProcessor;
+
+  typedef enum _DXVAHD_ALPHA_FILL_MODE {
+    DXVAHD_ALPHA_FILL_MODE_OPAQUE          = 0,
+    DXVAHD_ALPHA_FILL_MODE_BACKGROUND      = 1,
+    DXVAHD_ALPHA_FILL_MODE_DESTINATION     = 2,
+    DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM   = 3 
+  } DXVAHD_ALPHA_FILL_MODE;
+
+  typedef struct _DXVAHD_COLOR_YCbCrA {
+    FLOAT Y;
+    FLOAT Cb;
+    FLOAT Cr;
+    FLOAT A;
+  } DXVAHD_COLOR_YCbCrA;
+
+  typedef struct _DXVAHD_COLOR_RGBA {
+    FLOAT R;
+    FLOAT G;
+    FLOAT B;
+    FLOAT A;
+  } DXVAHD_COLOR_RGBA;
+
+  typedef union _DXVAHD_COLOR {
+    DXVAHD_COLOR_RGBA   RGB;
+    DXVAHD_COLOR_YCbCrA YCbCr;
+  } DXVAHD_COLOR;
+
+  typedef struct _DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA {
+    WINBOOL         YCbCr;
+    DXVAHD_COLOR BackgroundColor;
+  } DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA;
+
+typedef enum _DXVAHD_BLT_STATE {
+  DXVAHD_BLT_STATE_TARGET_RECT          = 0,
+  DXVAHD_BLT_STATE_BACKGROUND_COLOR     = 1,
+  DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE   = 2,
+  DXVAHD_BLT_STATE_ALPHA_FILL           = 3,
+  DXVAHD_BLT_STATE_CONSTRICTION         = 4,
+  DXVAHD_BLT_STATE_PRIVATE              = 1000 
+} DXVAHD_BLT_STATE;
+
+typedef enum _DXVAHD_DEVICE_CAPS {
+  DXVAHD_DEVICE_CAPS_LINEAR_SPACE              = 0x1,
+  DXVAHD_DEVICE_CAPS_xvYCC                     = 0x2,
+  DXVAHD_DEVICE_CAPS_RGB_RANGE_CONVERSION      = 0x4,
+  DXVAHD_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION   = 0x8 
+} DXVAHD_DEVICE_CAPS;
+
+typedef enum _DXVAHD_DEVICE_TYPE {
+  DXVAHD_DEVICE_TYPE_HARDWARE    = 0,
+  DXVAHD_DEVICE_TYPE_SOFTWARE    = 1,
+  DXVAHD_DEVICE_TYPE_REFERENCE   = 2,
+  DXVAHD_DEVICE_TYPE_OTHER       = 3 
+} DXVAHD_DEVICE_TYPE;
+
+typedef enum _DXVAHD_DEVICE_USAGE {
+  DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL   = 0,
+  DXVAHD_DEVICE_USAGE_OPTIMAL_SPEED     = 1,
+  DXVAHD_DEVICE_USAGE_OPTIMAL_QUALITY   = 2 
+} DXVAHD_DEVICE_USAGE;
+
+
+typedef enum _DXVAHD_FEATURE_CAPS {
+  DXVAHD_FEATURE_CAPS_ALPHA_FILL      = 0x1,
+  DXVAHD_FEATURE_CAPS_CONSTRICTION    = 0x2,
+  DXVAHD_FEATURE_CAPS_LUMA_KEY        = 0x4,
+  DXVAHD_FEATURE_CAPS_ALPHA_PALETTE   = 0x8 
+} DXVAHD_FEATURE_CAPS;
+
+typedef enum _DXVAHD_FILTER {
+  DXVAHD_FILTER_BRIGHTNESS           = 0,
+  DXVAHD_FILTER_CONTRAST             = 1,
+  DXVAHD_FILTER_HUE                  = 2,
+  DXVAHD_FILTER_SATURATION           = 3,
+  DXVAHD_FILTER_NOISE_REDUCTION      = 4,
+  DXVAHD_FILTER_EDGE_ENHANCEMENT     = 5,
+  DXVAHD_FILTER_ANAMORPHIC_SCALING   = 6 
+} DXVAHD_FILTER;
+
+typedef enum _DXVAHD_FILTER_CAPS {
+  DXVAHD_FILTER_CAPS_BRIGHTNESS           = 0x1,
+  DXVAHD_FILTER_CAPS_CONTRAST             = 0x2,
+  DXVAHD_FILTER_CAPS_HUE                  = 0x4,
+  DXVAHD_FILTER_CAPS_SATURATION           = 0x8,
+  DXVAHD_FILTER_CAPS_NOISE_REDUCTION      = 0x10,
+  DXVAHD_FILTER_CAPS_EDGE_ENHANCEMENT     = 0x20,
+  DXVAHD_FILTER_CAPS_ANAMORPHIC_SCALING   = 0x40 
+} DXVAHD_FILTER_CAPS;
+
+typedef enum _DXVAHD_FRAME_FORMAT {
+  DXVAHD_FRAME_FORMAT_PROGRESSIVE                     = 0,
+  DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST      = 1,
+  DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST   = 2 
+} DXVAHD_FRAME_FORMAT;
+
+typedef enum _DXVAHD_INPUT_FORMAT_CAPS {
+  DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED       = 0x1,
+  DXVAHD_INPUT_FORMAT_CAPS_RGB_PROCAMP          = 0x2,
+  DXVAHD_INPUT_FORMAT_CAPS_RGB_LUMA_KEY         = 0x4,
+  DXVAHD_INPUT_FORMAT_CAPS_PALETTE_INTERLACED   = 0x8 
+} DXVAHD_INPUT_FORMAT_CAPS;
+
+typedef enum _DXVAHD_ITELECINE_CAPS {
+  DXVAHD_ITELECINE_CAPS_32             = 0x1,
+  DXVAHD_ITELECINE_CAPS_22             = 0x2,
+  DXVAHD_ITELECINE_CAPS_2224           = 0x4,
+  DXVAHD_ITELECINE_CAPS_2332           = 0x8,
+  DXVAHD_ITELECINE_CAPS_32322          = 0x10,
+  DXVAHD_ITELECINE_CAPS_55             = 0x20,
+  DXVAHD_ITELECINE_CAPS_64             = 0x40,
+  DXVAHD_ITELECINE_CAPS_87             = 0x80,
+  DXVAHD_ITELECINE_CAPS_222222222223   = 0x100,
+  DXVAHD_ITELECINE_CAPS_OTHER          = 0x80000000 
+} DXVAHD_ITELECINE_CAPS;
+
+typedef enum _DXVAHD_OUTPUT_RATE {
+  DXVAHD_OUTPUT_RATE_NORMAL   = 0,
+  DXVAHD_OUTPUT_RATE_HALF     = 1,
+  DXVAHD_OUTPUT_RATE_CUSTOM   = 2 
+} DXVAHD_OUTPUT_RATE;
+
+typedef enum _DXVAHD_PROCESSOR_CAPS {
+  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BLEND                 = 0x1,
+  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BOB                   = 0x2,
+  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE              = 0x4,
+  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION   = 0x8,
+  DXVAHD_PROCESSOR_CAPS_INVERSE_TELECINE                  = 0x10,
+  DXVAHD_PROCESSOR_CAPS_FRAME_RATE_CONVERSION             = 0x20 
+} DXVAHD_PROCESSOR_CAPS;
+
+typedef enum _DXVAHD_STREAM_STATE {
+  DXVAHD_STREAM_STATE_D3DFORMAT                   = 0,
+  DXVAHD_STREAM_STATE_FRAME_FORMAT                = 1,
+  DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE           = 2,
+  DXVAHD_STREAM_STATE_OUTPUT_RATE                 = 3,
+  DXVAHD_STREAM_STATE_SOURCE_RECT                 = 4,
+  DXVAHD_STREAM_STATE_DESTINATION_RECT            = 5,
+  DXVAHD_STREAM_STATE_ALPHA                       = 6,
+  DXVAHD_STREAM_STATE_PALETTE                     = 7,
+  DXVAHD_STREAM_STATE_LUMA_KEY                    = 8,
+  DXVAHD_STREAM_STATE_ASPECT_RATIO                = 9,
+  DXVAHD_STREAM_STATE_FILTER_BRIGHTNESS           = 100,
+  DXVAHD_STREAM_STATE_FILTER_CONTRAST             = 101,
+  DXVAHD_STREAM_STATE_FILTER_HUE                  = 102,
+  DXVAHD_STREAM_STATE_FILTER_SATURATION           = 103,
+  DXVAHD_STREAM_STATE_FILTER_NOISE_REDUCTION      = 104,
+  DXVAHD_STREAM_STATE_FILTER_EDGE_ENHANCEMENT     = 105,
+  DXVAHD_STREAM_STATE_FILTER_ANAMORPHIC_SCALING   = 106,
+  DXVAHD_STREAM_STATE_PRIVATE                     = 1000 
+} DXVAHD_STREAM_STATE;
+
+typedef enum _DXVAHD_SURFACE_TYPE {
+  DXVAHD_SURFACE_TYPE_VIDEO_INPUT           = 0,
+  DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE   = 1,
+  DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT          = 2 
+} DXVAHD_SURFACE_TYPE;
+
+typedef struct _DXVAHD_VPDEVCAPS {
+  DXVAHD_DEVICE_TYPE DeviceType;
+  UINT               DeviceCaps;
+  UINT               FeatureCaps;
+  UINT               FilterCaps;
+  UINT               InputFormatCaps;
+  D3DPOOL            InputPool;
+  UINT               OutputFormatCount;
+  UINT               InputFormatCount;
+  UINT               VideoProcessorCount;
+  UINT               MaxInputStreams;
+  UINT               MaxStreamStates;
+} DXVAHD_VPDEVCAPS;
+
+typedef struct _DXVAHD_BLT_STATE_ALPHA_FILL_DATA {
+  DXVAHD_ALPHA_FILL_MODE Mode;
+  UINT                   StreamNumber;
+} DXVAHD_BLT_STATE_ALPHA_FILL_DATA;
+
+typedef struct _DXVAHD_BLT_STATE_CONSTRICTION_DATA {
+  WINBOOL Enable;
+  SIZE Size;
+} DXVAHD_BLT_STATE_CONSTRICTION_DATA;
+
+typedef struct _DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA {
+  UINT Usage  :1;
+  UINT RGB_Range  :1;
+  UINT YCbCr_Matrix  :1;
+  UINT YCbCr_xvYCC  :1;
+} DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA;
+
+typedef struct _DXVAHD_BLT_STATE_PRIVATE_DATA {
+  GUID Guid;
+  UINT DataSize;
+  void *pData;
+} DXVAHD_BLT_STATE_PRIVATE_DATA;
+
+typedef struct _DXVAHD_BLT_STATE_TARGET_RECT_DATA {
+  WINBOOL Enable;
+  RECT TargetRect;
+} DXVAHD_BLT_STATE_TARGET_RECT_DATA;
+
+typedef struct _DXVAHD_RATIONAL {
+  UINT Numerator;
+  UINT Denominator;
+} DXVAHD_RATIONAL;
+
+typedef struct _DXVAHD_CONTENT_DESC {
+  DXVAHD_FRAME_FORMAT InputFrameFormat;
+  DXVAHD_RATIONAL     InputFrameRate;
+  UINT                InputWidth;
+  UINT                InputHeight;
+  DXVAHD_RATIONAL     OutputFrameRate;
+  UINT                OutputWidth;
+  UINT                OutputHeight;
+} DXVAHD_CONTENT_DESC;
+
+typedef struct _DXVAHD_CUSTOM_RATE_DATA {
+  DXVAHD_RATIONAL CustomRate;
+  UINT            OutputFrames;
+  WINBOOL         InputInterlaced;
+  UINT            InputFramesOrFields;
+} DXVAHD_CUSTOM_RATE_DATA;
+
+typedef struct _DXVAHD_FILTER_RANGE_DATA {
+  INT   Minimum;
+  INT   Maximum;
+  INT   Default;
+  FLOAT Multiplier;
+} DXVAHD_FILTER_RANGE_DATA;
+
+typedef struct _DXVAHD_STREAM_DATA {
+  WINBOOL           Enable;
+  UINT              OutputIndex;
+  UINT              InputFrameOrField;
+  UINT              PastFrames;
+  UINT              FutureFrames;
+  IDirect3DSurface9 **ppPastSurfaces;
+  IDirect3DSurface9 *pInputSurface;
+  IDirect3DSurface9 **ppFutureSurfaces;
+} DXVAHD_STREAM_DATA;
+
+typedef struct _DXVAHD_VPCAPS {
+  GUID VPGuid;
+  UINT PastFrames;
+  UINT FutureFrames;
+  UINT ProcessorCaps;
+  UINT ITelecineCaps;
+  UINT CustomRateCount;
+} DXVAHD_VPCAPS;
+
+typedef struct _DXVAHD_STREAM_STATE_ALPHA_DATA {
+  WINBOOL Enable;
+  FLOAT   Alpha;
+} DXVAHD_STREAM_STATE_ALPHA_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA {
+  WINBOOL         Enable;
+  DXVAHD_RATIONAL SourceAspectRatio;
+  DXVAHD_RATIONAL DestinationAspectRatio;
+} DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA, *PDXVAHD_STREAM_STATE_ASPECT_RATIO_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_D3DFORMAT_DATA {
+  D3DFORMAT Format;
+} DXVAHD_STREAM_STATE_D3DFORMAT_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA {
+  WINBOOL Enable;
+  RECT    DestinationRect;
+} DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_FILTER_DATA {
+  WINBOOL Enable;
+  INT     Level;
+} DXVAHD_STREAM_STATE_FILTER_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA {
+  DXVAHD_FRAME_FORMAT FrameFormat;
+} DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA {
+  UINT Type  :1;
+  UINT RGB_Range  :1;
+  UINT YCbCr_Matrix  :1;
+  UINT YCbCr_xvYCC  :1;
+} DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_LUMA_KEY_DATA {
+  WINBOOL Enable;
+  FLOAT   Lower;
+  FLOAT   Upper;
+} DXVAHD_STREAM_STATE_LUMA_KEY_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA {
+  WINBOOL            RepeatFrame;
+  DXVAHD_OUTPUT_RATE OutputRate;
+  DXVAHD_RATIONAL    CustomRate;
+} DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_SOURCE_RECT_DATA {
+  WINBOOL Enable;
+  RECT    SourceRect;
+} DXVAHD_STREAM_STATE_SOURCE_RECT_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA {
+  WINBOOL Enable;
+  UINT    ITelecineFlags;
+  UINT    Frames;
+  UINT    InputField;
+} DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_PRIVATE_DATA {
+  GUID Guid;
+  UINT DataSize;
+  void *pData;
+} DXVAHD_STREAM_STATE_PRIVATE_DATA;
+
+typedef struct _DXVAHD_STREAM_STATE_PALETTE_DATA {
+  UINT     Count;
+  D3DCOLOR *pEntries;
+} DXVAHD_STREAM_STATE_PALETTE_DATA;
+
+typedef HRESULT ( CALLBACK *PDXVAHDSW_CreateDevice )(IDirect3DDevice9Ex *pD3DDevice,HANDLE *phDevice);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_ProposeVideoPrivateFormat )(HANDLE hDevice,D3DFORMAT *pFormat);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorDeviceCaps )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,DXVAHD_VPDEVCAPS *pCaps);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorOutputFormats )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,D3DFORMAT *pFormats);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorInputFormats )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,D3DFORMAT *pFormats);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorCaps )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,DXVAHD_VPCAPS *pCaps);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorCustomRates )(HANDLE hDevice,const GUID *pVPGuid,UINT Count,DXVAHD_CUSTOM_RATE_DATA *pRates);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_SetVideoProcessBltState )(HANDLE hVideoProcessor,DXVAHD_BLT_STATE State,UINT DataSize,const void *pData);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_CreateVideoProcessor )(HANDLE hDevice,const GUID *pVPGuid,HANDLE *phVideoProcessor);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_DestroyDevice )(HANDLE hDevice);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorFilterRange )(HANDLE hDevice,DXVAHD_FILTER Filter,DXVAHD_FILTER_RANGE_DATA *pRange);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_DestroyVideoProcessor )(HANDLE hVideoProcessor);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_VideoProcessBltHD )(HANDLE hVideoProcessor,IDirect3DSurface9 *pOutputSurface,UINT OutputFrame,UINT StreamCount,const DXVAHD_STREAM_DATA *pStreams);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessStreamStatePrivate )(HANDLE hVideoProcessor,UINT StreamNumber,DXVAHD_STREAM_STATE_PRIVATE_DATA *pData);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_SetVideoProcessStreamState )(HANDLE hVideoProcessor,UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,const void *pData);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessBltStatePrivate )(HANDLE hVideoProcessor,DXVAHD_BLT_STATE_PRIVATE_DATA *pData);
+typedef HRESULT ( CALLBACK *PDXVAHDSW_Plugin )(UINT Size,void *pCallbacks);
+
+typedef struct _DXVAHDSW_CALLBACKS {
+  PDXVAHDSW_CreateDevice                      CreateDevice;
+  PDXVAHDSW_ProposeVideoPrivateFormat         ProposeVideoPrivateFormat;
+  PDXVAHDSW_GetVideoProcessorDeviceCaps       GetVideoProcessorDeviceCaps;
+  PDXVAHDSW_GetVideoProcessorOutputFormats    GetVideoProcessorOutputFormats;
+  PDXVAHDSW_GetVideoProcessorInputFormats     GetVideoProcessorInputFormats;
+  PDXVAHDSW_GetVideoProcessorCaps             GetVideoProcessorCaps;
+  PDXVAHDSW_GetVideoProcessorCustomRates      GetVideoProcessorCustomRates;
+  PDXVAHDSW_GetVideoProcessorFilterRange      GetVideoProcessorFilterRange;
+  PDXVAHDSW_DestroyDevice                     DestroyDevice;
+  PDXVAHDSW_CreateVideoProcessor              CreateVideoProcessor;
+  PDXVAHDSW_SetVideoProcessBltState           SetVideoProcessBltState;
+  PDXVAHDSW_GetVideoProcessBltStatePrivate    GetVideoProcessBltStatePrivate;
+  PDXVAHDSW_SetVideoProcessStreamState        SetVideoProcessStreamState;
+  PDXVAHDSW_GetVideoProcessStreamStatePrivate GetVideoProcessStreamStatePrivate;
+  PDXVAHDSW_VideoProcessBltHD                 VideoProcessBltHD;
+  PDXVAHDSW_DestroyVideoProcessor             DestroyVideoProcessor;
+} DXVAHDSW_CALLBACKS;
+
+HRESULT DXVAHD_CreateDevice(IDirect3DDevice9Ex *pD3DDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,PDXVAHDSW_Plugin pPlugin,IDXVAHD_Device **ppDevice);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef  INTERFACE
+#define INTERFACE IDXVAHD_Device
+DECLARE_INTERFACE_(IDXVAHD_Device,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDXVAHD_Device methods */
+    STDMETHOD_(HRESULT,CreateVideoProcessor)(THIS_ const GUID *pVPGuid,IDXVAHD_VideoProcessor **ppVideoProcessor) PURE;
+    STDMETHOD_(HRESULT,CreateVideoSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DXVAHD_SURFACE_TYPE Type,UINT NumSurfaces,IDirect3DSurface9 **ppSurfaces,HANDLE *pSharedHandle) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorCaps)(THIS_ UINT Count,DXVAHD_VPCAPS *pCaps) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorCustomRates)(THIS_ const GUID *pVPGuid,UINT Count,DXVAHD_CUSTOM_RATE_DATA *pRates) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorDeviceCaps)(THIS_ DXVAHD_VPDEVCAPS *pCaps) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorFilterRange)(THIS_ DXVAHD_FILTER Filter,DXVAHD_FILTER_RANGE_DATA *pRange) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorInputFormats)(THIS_ UINT Count,D3DFORMAT *pFormats) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessorOutputFormats)(THIS_ UINT Count,D3DFORMAT *pFormats) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDXVAHD_Device_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDXVAHD_Device_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDXVAHD_Device_Release(This) (This)->pVtbl->Release(This)
+#define IDXVAHD_Device_CreateVideoProcessor(This,pVPGuid,ppVideoProcessor) (This)->lpVtbl->CreateVideoProcessor(This,pVPGuid,ppVideoProcessor)
+#define IDXVAHD_Device_CreateVideoSurface(This,Width,Height,Format,Pool,Usage,Type,NumSurfaces,ppSurfaces,pSharedHandle) (This)->lpVtbl->CreateVideoSurface(This,Width,Height,Format,Pool,Usage,Type,NumSurfaces,ppSurfaces,pSharedHandle)
+#define IDXVAHD_Device_GetVideoProcessorCaps(This,Count,pCaps) (This)->lpVtbl->GetVideoProcessorCaps(This,Count,pCaps)
+#define IDXVAHD_Device_GetVideoProcessorCustomRates(This,pVPGuid,Count,pRates) (This)->lpVtbl->GetVideoProcessorCustomRates(This,pVPGuid,Count,pRates)
+#define IDXVAHD_Device_GetVideoProcessorDeviceCaps(This,pCaps) (This)->lpVtbl->GetVideoProcessorDeviceCaps(This,pCaps)
+#define IDXVAHD_Device_GetVideoProcessorFilterRange(This,Filter,pRange) (This)->lpVtbl->GetVideoProcessorFilterRange(This,Filter,pRange)
+#define IDXVAHD_Device_GetVideoProcessorInputFormats(This,Count,pFormats) (This)->lpVtbl->GetVideoProcessorInputFormats(This,Count,pFormats)
+#define IDXVAHD_Device_GetVideoProcessorOutputFormats(This,Count,pFormats) (This)->lpVtbl->GetVideoProcessorOutputFormats(This,Count,pFormats)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IDXVAHD_VideoProcessor
+DECLARE_INTERFACE_(IDXVAHD_VideoProcessor,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDXVAHD_VideoProcessor methods */
+    STDMETHOD_(HRESULT,GetVideoProcessBltState)(THIS_ DXVAHD_BLT_STATE State,UINT DataSize,void *pData) PURE;
+    STDMETHOD_(HRESULT,GetVideoProcessStreamState)(THIS_ UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,void *pData) PURE;
+    STDMETHOD_(HRESULT,SetVideoProcessBltState)(THIS_ DXVAHD_BLT_STATE State,UINT DataSize,const void *pData) PURE;
+    STDMETHOD_(HRESULT,SetVideoProcessStreamState)(THIS_ UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,const void *pData) PURE;
+    STDMETHOD_(HRESULT,VideoProcessBltHD)(THIS_ IDirect3DSurface9 *pOutputSurface,UINT OutputFrame,UINT StreamCount,const DXVAHD_STREAM_DATA *pStreams) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IDXVAHD_VideoProcessor_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IDXVAHD_VideoProcessor_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IDXVAHD_VideoProcessor_Release(This) (This)->pVtbl->Release(This)
+#define IDXVAHD_VideoProcessor_GetVideoProcessBltState(This,State,DataSize,pData) (This)->lpVtbl->GetVideoProcessBltState(This,State,DataSize,pData)
+#define IDXVAHD_VideoProcessor_GetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData) (This)->lpVtbl->GetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData)
+#define IDXVAHD_VideoProcessor_SetVideoProcessBltState(This,State,DataSize,pData) (This)->lpVtbl->SetVideoProcessBltState(This,State,DataSize,pData)
+#define IDXVAHD_VideoProcessor_SetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData) (This)->lpVtbl->SetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData)
+#define IDXVAHD_VideoProcessor_VideoProcessBltHD(This,pOutputSurface,OutputFrame,StreamCount,pStreams) (This)->lpVtbl->VideoProcessBltHD(This,pOutputSurface,OutputFrame,StreamCount,pStreams)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_DXAVHD*/
diff --git a/mingw-w64-headers/include/eapauthenticatoractiondefine.h b/mingw-w64-headers/include/eapauthenticatoractiondefine.h
new file mode 100644
index 0000000..e88c555
--- /dev/null
+++ b/mingw-w64-headers/include/eapauthenticatoractiondefine.h
@@ -0,0 +1,53 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPAUTHENTICATORACTIONDEFINE
+#define _INC_EAPAUTHENTICATORACTIONDEFINE
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION {
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_DISCARD           = 0,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_SEND              = 1,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_RESULT            = 2,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_RESPOND           = 3,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_AUTHENTICATE      = 4,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_HANDLE_IDENTITY   = 5 
+} EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION;
+
+typedef enum _EapPeerMethodResponseAction {
+  EapPeerMethodResponseActionDiscard    = 0,
+  EapPeerMethodResponseActionSend       = 1,
+  EapPeerMethodResponseActionResult     = 2,
+  EapPeerMethodResponseActionInvokeUI   = 3,
+  EapPeerMethodResponseActionRespond    = 4,
+  EapPeerMethodResponseActionNone       = 5 
+} EapPeerMethodResponseAction;
+
+typedef enum  {
+  EapPeerMethodResultUnknown   = 1,
+  EapPeerMethodResultSuccess   = 2,
+  EapPeerMethodResultFailure   = 3 
+} EapPeerMethodResultReason;
+
+typedef struct _EAP_METHOD_AUTHENTICATOR_RESULT {
+  BOOL           fIsSuccess;
+  DWORD          dwFailureReason;
+  EAP_ATTRIBUTES *pAuthAttribs;
+} EAP_METHOD_AUTHENTICATOR_RESULT;
+
+typedef struct tagEapPeerMethodOutput {
+  EapPeerMethodResponseAction action;
+  WINBOOL                     fAllowNotifications;
+} EapPeerMethodOutput;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPAUTHENTICATORACTIONDEFINE*/
diff --git a/mingw-w64-headers/include/eapauthenticatortypes.h b/mingw-w64-headers/include/eapauthenticatortypes.h
new file mode 100644
index 0000000..6434580
--- /dev/null
+++ b/mingw-w64-headers/include/eapauthenticatortypes.h
@@ -0,0 +1,18 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPAUTHENTICATORTYPES
+#define _INC_EAPAUTHENTICATORTYPES
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+
+typedef enum _EAP_AUTHENTICATOR_SEND_TIMEOUT {
+  EAP_AUTHENTICATOR_SEND_TIMEOUT_NONE          = 0,
+  EAP_AUTHENTICATOR_SEND_TIMEOUT_BASIC         = 1,
+  EAP_AUTHENTICATOR_SEND_TIMEOUT_INTERACTIVE   = 2 
+} EAP_AUTHENTICATOR_SEND_TIMEOUT;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPAUTHENTICATORTYPES*/
diff --git a/mingw-w64-headers/include/eaphosterror.h b/mingw-w64-headers/include/eaphosterror.h
new file mode 100644
index 0000000..ab14c07
--- /dev/null
+++ b/mingw-w64-headers/include/eaphosterror.h
@@ -0,0 +1,86 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_HOSTERROR
+#define _INC_HOSTERROR
+#if (_WIN32_WINNT >= 0x0600)
+
+#define _EAP_CERT_FIRST 0x0
+#define _EAP_CERT_LAST 0xf
+#define _EAP_CERT_NOT_FOUND 0x1
+#define _EAP_CERT_INVALID 0x2
+#define _EAP_CERT_EXPIRED 0x3
+#define _EAP_CERT_REVOKED 0x4
+#define _EAP_CERT_OTHER_ERROR 0x5
+#define _EAP_CERT_REJECTED 0x6
+#define _EAP_CERT_NAME_REQUIRED 0x7
+#define _EAP_GENERAL_FIRST 0x10
+#define _EAP_GENERAL_LAST 0x3f
+
+#define EAP_E_EAPHOST_FIRST 0x80420000L
+#define EAP_E_EAPHOST_LAST  0x804200FFL
+#define EAP_I_EAPHOST_FIRST 0x80420000L
+#define EAP_I_EAPHOST_FIRST 0x804200FFL
+
+#define EAP_E_CERT_STORE_INACCESSIBLE 0x80420011
+#define EAP_E_EAPHOST_METHOD_NOT_INSTALLED 0x80420011
+#define EAP_E_EAPHOST_THIRDPARTY_METHOD_HOST_RESET 0x80420012
+#define EAP_E_EAPHOST_EAPQEC_INACCESSIBLE 0x80420013
+#define EAP_E_EAPHOST_IDENTITY_UNKNOWN 0x80420014
+#define EAP_E_AUTHENTICATION_FAILED 0x80420015
+#define EAP_I_EAPHOST_EAP_NEGOTIATION_FAILED 0x40420016
+#define EAP_E_EAPHOST_METHOD_INVALID_PACKET 0x40420017
+#define EAP_E_EAPHOST_REMOTE_INVALID_PACKET 0x40420018
+#define EAP_E_EAPHOST_XML_MALFORMED 0x40420019
+
+#if (_WIN32_WINNT >= 0x0601)
+#define EAP_E_METHOD_CONFIG_DOES_NOT_SUPPORT_SSO 0x4042001A
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#define EAP_E_EAPHOST_METHOD_OPERATION_NOT_SUPPORTED 0x80420020
+
+#define EAP_E_USER_FIRST 0x80420100L
+#define EAP_E_USER_LAST  0x804201FFL
+#define EAP_I_USER_FIRST 0x40420100L
+#define EAP_I_USER_LAST  0x804201FFL
+
+#define EAP_E_USER_CERT_NOT_FOUND 0x80420100
+#define EAP_E_USER_CERT_INVALID 0x80420101
+#define EAP_E_USER_CERT_EXPIRED 0x80420102
+#define EAP_E_USER_CERT_REVOKED 0x80420103
+#define EAP_E_USER_CERT_OTHER_ERROR 0x80420104
+#define EAP_E_USER_CERT_REJECTED 0x80420105
+#define EAP_I_USER_ACCOUNT_OTHER_ERROR 0x40420110
+#define EAP_E_USER_CREDENTIALS_REJECTED 0x40420111
+
+#if (_WIN32_WINNT >= 0x0601)
+#define EAP_E_USER_NAME_PASSWORD_REJECTED 0x40420112
+#define EAP_E_NO_SMART_CARD_READER 0x80420113
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#define EAP_E_SERVER_FIRST 0x80420200L
+#define EAP_E_SERVER_LAST 0x804202FFL
+
+#define EAP_E_SERVER_CERT_NOT_FOUND 0x80420200
+#define EAP_E_SERVER_CERT_INVALID 0x80420201
+#define EAP_E_SERVER_CERT_EXPIRED 0x80420202
+#define EAP_E_SERVER_CERT_REVOKED 0x80420203
+#define EAP_E_SERVER_CERT_OTHER_ERROR 0x80420204
+
+#define EAP_E_USER_ROOT_CERT_FIRST 0x80420300L
+#define EAP_E_USER_ROOT_CERT_LAST 0x804203FFL
+#define EAP_E_USER_ROOT_CERT_NOT_FOUND 0x80420300
+#define EAP_E_USER_ROOT_CERT_INVALID 0x80420301
+#define EAP_E_USER_ROOT_CERT_EXPIRED 0x80420302
+
+#define EAP_E_SERVER_ROOT_CERT_FIRST 0x80420400L
+#define EAP_E_SERVER_ROOT_CERT_LAST 0x804204FFL
+
+#define EAP_E_SERVER_ROOT_CERT_NOT_FOUND 0x80420400
+#define EAP_E_SERVER_ROOT_CERT_INVALID 0x80420401
+#define EAP_E_SERVER_ROOT_CERT_NAME_REQUIRED 0x80420406
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_HOSTERROR*/
diff --git a/mingw-w64-headers/include/eaphostpeerconfigapis.h b/mingw-w64-headers/include/eaphostpeerconfigapis.h
new file mode 100644
index 0000000..51d969d
--- /dev/null
+++ b/mingw-w64-headers/include/eaphostpeerconfigapis.h
@@ -0,0 +1,140 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPHOSTPEERCONFIGAPIS
+#define _INC_EAPHOSTPEERCONFIGAPIS
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI EapHostPeerQueryUserBlobFromCredentialInputFields(
+  HANDLE hUserImpersonationToken,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwFlags,
+  DWORD dwEapConnDataSize,
+  const BYTE *pbEapConnData,
+  const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
+  DWORD *pdwUserBlobSize,
+  BYTE **ppbUserBlob,
+  EAP_ERROR **pEapError
+);
+
+VOID WINAPI EapHostPeerFreeErrorMemory(
+    EAP_ERROR *pEapError
+);
+
+DWORD WINAPI EapHostPeerConfigBlob2Xml(
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwSizeOfConfigIn,
+  BYTE *pConfigIn,
+  IXMLDOMDocument2 **ppConfigDoc,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerInvokeInteractiveUI(
+  HWND hwndParent,
+  DWORD dwSizeofUIContextData,
+  const BYTE *pUIContextData,
+  DWORD *pdwSizeofDataFromInteractiveUI,
+  BYTE **ppDataFromInteractiveUI,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerQueryInteractiveUIInputFields(
+  DWORD dwVersion,
+  DWORD dwFlags,
+  DWORD dwSizeofUIContextData,
+  const BYTE *pUIContextData,
+  EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
+  EAP_ERROR **ppEapError,
+  LPVOID *ppvReserved
+);
+
+DWORD WINAPI EapHostPeerQueryUIBlobFromInteractiveUIInputFields(
+  DWORD dwVersion,
+  DWORD dwFlags,
+  DWORD dwSizeofUIContextData,
+  const BYTE *pUIContextData,
+  const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
+  DWORD *pdwSizeOfDataFromInteractiveUI,
+  BYTE **ppDataFromInteractiveUI,
+  EAP_ERROR **ppEapError,
+  LPVOID *ppvReserved
+);
+
+DWORD WINAPI EapHostPeerConfigXml2Blob(
+  DWORD dwFlags,
+  IXMLDOMNode *pConfigDoc,
+  DWORD *pdwSizeOfConfigOut,
+  BYTE **ppConfigOut,
+  EAP_METHOD_TYPE *pEapMethodType,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerCredentialsXml2Blob(
+  DWORD dwFlags,
+  IXMLDOMNode *pCredentialsDoc,
+  DWORD dwSizeOfConfigIn,
+  BYTE *pConfigIn,
+  DWORD *pdwSizeofCredentialsOut,
+  BYTE **ppCredentialsOut,
+  EAP_METHOD_TYPE *pEapMethodType,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerInvokeConfigUI(
+  HWND hwndParent,
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwSizeOfConfigIn,
+  const BYTE *pConfigIn,
+  DWORD *pdwSizeOfConfigOut,
+  BYTE **ppConfigOut,
+  EAP_ERROR **pEapError
+);
+
+VOID WINAPI EapHostPeerFreeMemory(
+  BYTE *pData
+);
+
+DWORD WINAPI EapHostPeerQueryCredentialInputFields(
+  HANDLE hUserImpersonationToken,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwFlags,
+  DWORD dwEapConnDataSize,
+  const BYTE *pbEapConnData,
+  EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
+  EAP_ERROR **pEapError
+);
+
+DWORD WINAPI EapHostPeerGetMethods(
+  EAP_METHOD_INFO_ARRAY *pEapMethodInfoArray,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerInvokeIdentityUI(
+  DWORD dwVersion,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwFlags,
+  HWND hwndParent,
+  DWORD dwSizeofConnectionData,
+  const  BYTE * pConnectionData,
+  DWORD dwSizeofUserData,
+  const  BYTE *pUserData,
+  DWORD *pdwSizeofUserDataOut,
+  BYTE **ppUserDataOut,
+  LPWSTR *ppwszIdentity,
+  EAP_ERROR **ppEapError,
+  LPVOID *ppvReserved
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPHOSTPEERCONFIGAPIS*/
diff --git a/mingw-w64-headers/include/eaphostpeertypes.h b/mingw-w64-headers/include/eaphostpeertypes.h
new file mode 100644
index 0000000..b30d3b8
--- /dev/null
+++ b/mingw-w64-headers/include/eaphostpeertypes.h
@@ -0,0 +1,72 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPHOSTPEERTYPES
+#define _INC_EAPHOSTPEERTYPES
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagEapHostPeerMethodResultReason {
+  EapHostPeerMethodResultAltSuccessReceived   = 1,
+  EapHostPeerMethodResultTimeout              = 2,
+  EapHostPeerMethodResultFromMethod           = 3 
+} EapHostPeerMethodResultReason;
+
+typedef enum tagEapHostPeerResponseAction {
+  EapHostPeerResponseDiscard               = 0,
+  EapHostPeerResponseSend                  = 1,
+  EapHostPeerResponseResult                = 2,
+  EapHostPeerResponseInvokeUI              = 3,
+  EapHostPeerResponseRespond               = 4,
+  EapHostPeerResponseStartAuthentication   = 5,
+  EapHostPeerResponseNone                  = 6 
+} EapHostPeerResponseAction;
+
+typedef enum tagEapHostPeerAuthParams {
+  EapHostPeerAuthStatus             = 1,
+  EapHostPeerIdentity               = 2,
+  EapHostPeerIdentityExtendedInfo   = 3,
+  EapHostNapInfo                    = 4 
+} EapHostPeerAuthParams;
+
+typedef enum _ISOLATION_STATE {
+  ISOLATION_STATE_UNKNOWN             = 0,
+  ISOLATION_STATE_NOT_RESTRICTED      = 1,
+  ISOLATION_STATE_IN_PROBATION        = 2,
+  ISOLATION_STATE_RESTRICTED_ACCESS   = 3 
+} ISOLATION_STATE;
+
+typedef enum _EAPHOST_AUTH_STATUS {
+  EapHostInvalidSession         = 0,
+  EapHostAuthNotStarted         = 1,
+  EapHostAuthIdentityExchange   = 2,
+  EapHostAuthNegotiatingType    = 3,
+  EapHostAuthInProgress         = 4,
+  EapHostAuthSucceeded          = 5,
+  EapHostAuthFailed             = 6 
+} EAPHOST_AUTH_STATUS;
+
+typedef struct _EAPHOST_AUTH_INFO {
+  EAPHOST_AUTH_STATUS status;
+  DWORD               dwErrorCode;
+  DWORD               dwReasonCode;
+} EAPHOST_AUTH_INFO;
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef struct _tagEapHostPeerNapInfo  {
+  ISOLATION_STATE isolationState;
+  ProbationTime   probationTime;
+  UINT32          stringCorrelationIdLength;
+} EapHostPeerNapInfo, *PEapHostPeerNapInfo;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPHOSTPEERTYPES*/
diff --git a/mingw-w64-headers/include/eapmethodauthenticatorapis.h b/mingw-w64-headers/include/eapmethodauthenticatorapis.h
new file mode 100644
index 0000000..a34f964
--- /dev/null
+++ b/mingw-w64-headers/include/eapmethodauthenticatorapis.h
@@ -0,0 +1,179 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPMETHODAUTHENTICATORAPIS
+#define _INC_EAPMETHODAUTHENTICATORAPIS
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _EAP_AUTHENTICATOR_METHOD_ROUTINES {
+  DWORD           dwSizeInBytes;
+  EAP_METHOD_TYPE *pEapType;
+  DWORD (APIENTRY *EapMethodAuthenticatorInitialize)(
+      EAP_METHOD_TYPE pEapType, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorBeginSession)(
+      DWORD dwFlags, 
+      LPCWSTR pwszIdentity, 
+      EapAttributes pAttributeArray, 
+      DWORD dwSizeOfConnectionData, 
+      BYTE pConnectionData, 
+      DWORD dwMaxSendPacketSize, 
+      EAP_SESSION_HANDLE pSessionHandle, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorUpdateInnerMethodParams)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      DWORD dwFlags, 
+      WCHAR pwszIdentity, 
+      EapAttributes pAttributeArray, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorReceivePacket)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      DWORD cbReceivePacket, 
+      EapPacket pReceivePacket, 
+      EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION pEapOutput, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorSendPacket)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      BYTE bPacketId, 
+      DWORD pcbSendPacket, 
+      EapPacket pSendPacket, 
+      EAP_AUTHENTICATOR_SEND_TIMEOUT pTimeout, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorGetAttributes)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      EapAttributes pAttribs, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorSetAttributes)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      EapAttributes pAttribs, 
+      EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION pEapOutput, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorGetResult)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      EAP_METHOD_AUTHENTICATOR_RESULT pResult, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorEndSession)(
+      EAP_SESSION_HANDLE sessionHandle, 
+      EAP_ERROR ppEapError);
+  DWORD (APIENTRY *EapMethodAuthenticatorShutdown)(
+      EAP_METHOD_TYPE pEapType, 
+      EAP_ERROR ppEapError);
+} EAP_AUTHENTICATOR_METHOD_ROUTINES;
+
+VOID WINAPI EapMethodAuthenticatorFreeMemory(
+  void *pUIContextData
+);
+
+DWORD WINAPI EapMethodAuthenticatorInitialize(
+  EAP_METHOD_TYPE *pEapType,
+  EAP_ERROR **ppEapError
+);
+
+VOID WINAPI EapPeerFreeErrorMemory(
+  EAP_ERROR *ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorGetResult(
+  EAP_SESSION_HANDLE sessionHandle,
+  EAP_METHOD_AUTHENTICATOR_RESULT *pResult,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorBeginSession(
+  DWORD dwFlags,
+  LPCWSTR pwszIdentity,
+  const EapAttributes *pAttributeArray,
+  DWORD dwSizeOfConnectionData,
+  const BYTE *pConnectionData,
+  DWORD dwMaxSendPacketSize,
+  EAP_SESSION_HANDLE *pSessionHandle,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorFreeErrorMemory(
+  EAP_ERROR *ppEapError
+);
+
+DWORD EapMethodAuthenticatorEndSession(
+  EAP_SESSION_HANDLE sessionHandle,
+  EAP_ERROR **ppEapError
+);
+
+DWORD EapMethodAuthenticatorGetAttributes(
+  EAP_SESSION_HANDLE sessionHandle,
+  EapAttributes *pAttribs,
+  EAP_ERROR **ppEapError
+);
+
+DWORD EapMethodAuthenticatorGetInfo(
+  EAP_METHOD_TYPE *pEapType,
+  EAP_AUTHENTICATOR_METHOD_ROUTINES *pEapInfo,
+  EAP_ERROR **ppEapError
+);
+
+DWORD EapMethodAuthenticatorGetResult(
+  EAP_SESSION_HANDLE sessionHandle,
+  EAP_METHOD_AUTHENTICATOR_RESULT *pResult,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorInvokeConfigUI(
+  EAP_METHOD_TYPE *pEapMethodType,
+  HWND hwndParent,
+  DWORD dwFlags,
+  LPCWSTR pwszMachineName,
+  DWORD dwSizeOfConfigIn,
+  BYTE *pConfigIn,
+  DWORD *pdwSizeOfConfigOut,
+  BYTE **ppConfigOut,
+  EAP_ERROR **pEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorReceivePacket(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD cbReceivePacket,
+  const EapPacket *pReceivePacket,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorSendPacket(
+  EAP_SESSION_HANDLE sessionHandle,
+  BYTE bPacketId,
+  DWORD *pcbSendPacket,
+  EapPacket *pSendPacket,
+  EAP_AUTHENTICATOR_SEND_TIMEOUT *pTimeout,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorSetAttributes(
+  EAP_SESSION_HANDLE sessionHandle,
+  const EapAttributes *pAttribs,
+  EAP_METHOD_AUTHENTICATOR_RESPONSE_ACTION *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorShutdown(
+  EAP_METHOD_TYPE *peapType,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapMethodAuthenticatorUpdateInnerMethodParams(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD dwFlags,
+  const WCHAR *pwszIdentity,
+  const EapAttributes *pAttributeArray,
+  EAP_ERROR **ppEapError
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPMETHODAUTHENTICATORAPIS*/
diff --git a/mingw-w64-headers/include/eapmethodpeerapis.h b/mingw-w64-headers/include/eapmethodpeerapis.h
new file mode 100644
index 0000000..d13f608
--- /dev/null
+++ b/mingw-w64-headers/include/eapmethodpeerapis.h
@@ -0,0 +1,249 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPMETHODPEERAPIS
+#define _INC_EAPMETHODPEERAPIS
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#include <eapmethodtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI EapPeerQueryCredentialInputFields(
+  HANDLE hUserImpersonationToken,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwFlags,
+  DWORD dwEapConnDataSize,
+  BYTE *pbEapConnData,
+  EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerBeginSession(
+  DWORD dwFlags,
+  const EapAttributes *pAttributeArray,
+  HANDLE hTokenImpersonateUser,
+  DWORD dwSizeofConnectionData,
+  BYTE *pConnectionData,
+  DWORD dwSizeofUserData,
+  BYTE *pUserData,
+  DWORD dwMaxSendPacketSize,
+  EAP_SESSION_HANDLE *pSessionHandle,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerQueryUserBlobFromCredentialInputFields(
+  HANDLE hUserImpersonationToken,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwFlags,
+  DWORD dwEapConnDataSize,
+  BYTE *pbEapConnData,
+  const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
+  DWORD *pdwUsersBlobSize,
+  BYTE **ppUserBlob,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerGetIdentity(
+  DWORD dwflags,
+  DWORD dwSizeofConnectionData,
+  const BYTE *pConnectionData,
+  DWORD dwSizeOfUserData,
+  const BYTE *pUserData,
+  HANDLE hTokenImpersonateUser,
+  WINBOOL *pfInvokeUI,
+  DWORD *pdwSizeOfUserDataOut,
+  BYTE **ppUserDataOut,
+  LPWSTR *ppwszIdentity,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerInitialize(
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerGetInfo(
+  EAP_TYPE *pEapType,
+  EAP_PEER_METHOD_ROUTINES *pEapInfo,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerSetCredentials(
+  EAP_SESSION_HANDLE sessionHandle,
+  LPWSTR pwszIdentity,
+  LPWSTR pwszPassword,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerInvokeIdentityUI(
+  EAP_METHOD_TYPE *pEapType,
+  DWORD dwflags,
+  HWND hwndParent,
+  DWORD dwSizeOfConnectionData,
+  const BYTE *pConnectionData,
+  DWORD dwSizeOfUserData,
+  const BYTE *pUserData,
+  DWORD *pdwSizeOfUserDataOut,
+  BYTE **ppUserDataOut,
+  LPWSTR *ppwszIdentity,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerProcessRequestPacket(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD cbReceivedPacket,
+  EapPacket *pReceivedPacket,
+  EapPeerMethodOutput *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerGetResponsePacket(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD *pcbSendPacket,
+  EapPacket *pSendPacket,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerGetResult(
+  EAP_SESSION_HANDLE sessionHandle,
+  EapPeerMethodResultReason reason,
+  EapPeerMethodResult *ppResult,
+  EAP_ERROR **ppEapError
+);
+
+typedef struct tagEapPeerMethodResult {
+  WINBOOL        fIsSuccess;
+  DWORD          dwFailureReasonCode;
+  WINBOOL        fSaveConnectionData;
+  DWORD          dwSizeOfConnectionData;
+  BYTE *         pConnectionData;
+  WINBOOL        fSaveUserData;
+  DWORD          dwSizeofUserData;
+  BYTE *         pUserData;
+  EAP_ATTRIBUTES *pAttribArray;
+  EAP_ERROR *    pEapError;
+} EapPeerMethodResult;
+
+DWORD WINAPI EapPeerGetUIContext(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD *pdwSizeOfUIContextData,
+  BYTE **ppUIContextData,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerSetUIContext(
+  EAP_SESSION_HANDLE sessionHandle,
+  DWORD dwSizeOfUIContextData,
+  const BYTE *pUIContextData,
+  EapPeerMethodOutput *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerGetResponseAttributes(
+  EAP_SESSION_HANDLE sessionHandle,
+  EapAttributes *pAttribs,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerSetResponseAttributes(
+  EAP_SESSION_HANDLE sessionHandle,
+  EapAttributes *pAttribs,
+  EapPeerMethodOutput *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerEndSession(
+  EAP_SESSION_HANDLE sessionHandle,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerShutdown(
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerInvokeConfigUI(
+  EAP_METHOD_TYPE *pEapType,
+  HWND hwndParent,
+  DWORD dwFlags,
+  DWORD dwSizeOfConnectionDataIn,
+  BYTE *pConnectionDataIn,
+  DWORD *dwSizeOfConnectionDataOut,
+  BYTE **ppConnectionDataOut,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerInvokeInteractiveUI(
+  EAP_METHOD_TYPE *pEapType,
+  HWND hwndParent,
+  DWORD dwSizeofUIContextData,
+  BYTE *pUIContextData,
+  DWORD *pdwSizeOfDataFromInteractiveUI,
+  BYTE **ppDataFromInteractiveUI,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerQueryInteractiveUIInputFields(
+  DWORD dwVersion,
+  DWORD dwFlags,
+  DWORD dwSizeofUIContextData,
+  const BYTE *pUIContextData,
+  EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
+  EAP_ERROR **ppEapError,
+  LPVOID *pvReserved
+);
+
+DWORD WINAPI EapPeerQueryUIBlobFromInteractiveUIInputFields(
+  DWORD dwVersion,
+  DWORD dwFlags,
+  DWORD dwSizeofUIContextData,
+  const BYTE *pUIContextData,
+  const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
+  DWORD *pdwSizeOfDataFromInteractiveUI,
+  BYTE **ppDataFromInteractiveUI,
+  EAP_ERROR **ppEapError,
+  LPVOID *ppvReserved
+);
+
+DWORD WINAPI EapPeerConfigBlob2Xml(
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  const BYTE *pConfigIn,
+  DWORD dwSizeOfConfigIn,
+  IXMLDOMDocument2 **ppConfigDoc,
+  EAP_ERROR **pEapError
+);
+
+DWORD WINAPI EapPeerConfigXml2Blob(
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  IXMLDOMDocument2 *pConfigDoc,
+  BYTE **ppConfigOut,
+  DWORD *pdwSizeOfConfigOut,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapPeerCredentialsXml2Blob(
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  IXMLDOMDocument2 *pCredentialsDoc,
+  const BYTE *pConfigIn,
+  DWORD dwSizeOfConfigIn,
+  BYTE **ppCredentialsOut,
+  DWORD *pdwSizeofCredentialsOut,
+  EAP_ERROR **ppEapError
+);
+
+VOID WINAPI EapPeerFreeMemory(
+  void *pUIContextData
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPMETHODPEERAPIS*/
diff --git a/mingw-w64-headers/include/eapmethodtypes.h b/mingw-w64-headers/include/eapmethodtypes.h
new file mode 100644
index 0000000..a5548fe
--- /dev/null
+++ b/mingw-w64-headers/include/eapmethodtypes.h
@@ -0,0 +1,25 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPMETHODTYPES
+#define _INC_EAPMETHODTYPES
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagEapPacket {
+  BYTE Code;
+  BYTE Id;
+  BYTE Length[2];
+  BYTE Data[1];
+} EapPacket;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPMETHODTYPES*/
diff --git a/mingw-w64-headers/include/eappapis.h b/mingw-w64-headers/include/eappapis.h
new file mode 100644
index 0000000..36367fa
--- /dev/null
+++ b/mingw-w64-headers/include/eappapis.h
@@ -0,0 +1,137 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPPAPIS
+#define _INC_EAPPAPIS
+#if (_WIN32_WINNT >= 0x0600)
+#include <eaptypes.h>
+#include <eaphostpeertypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD APIENTRY EapHostPeerGetResult(
+  EAP_SESSIONID sessionHandle,
+  EapHostPeerMethodResultReason reason,
+  EapHostPeerMethodResult *ppResult,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerProcessReceivedPacket(
+  EAP_SESSIONID sessionHandle,
+  DWORD cbReceivePacket,
+  const BYTE *pReceivePacket,
+  EapHostPeerResponseAction *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+VOID APIENTRY EapHostPeerFreeEapError(
+  EAP_ERROR *ppEapError
+);
+
+DWORD APIENTRY EapHostPeerClearConnection(
+  GUID *pConnectionId,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerEndSession(
+  EAP_SESSIONID sessionHandle,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerGetAuthStatus(
+  EAP_SESSIONID sessionHandle,
+  EapHostPeerAuthParams authParam,
+  DWORD *pcbAuthData,
+  BYTE **ppAuthData,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerGetResponseAttributes(
+  EAP_SESSIONID sessionHandle,
+  EapAttributes *pAttribs,
+  EAP_ERROR **ppEapError
+);
+
+DWORD WINAPI EapHostPeerGetSendPacket(
+  EAP_SESSIONID sessionHandle,
+  DWORD *pcbSendPacket,
+  BYTE **ppSendPacket,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerGetUIContext(
+  EAP_SESSIONID sessionHandle,
+  DWORD *pdwSizeOfUIContextData,
+  BYTE **ppUIContextData,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerSetResponseAttributes(
+  EAP_SESSIONID sessionHandle,
+  const EapAttributes *pAttribs,
+  EapHostPeerResponseAction *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+DWORD APIENTRY EapHostPeerSetUIContext(
+  EAP_SESSIONID sessionHandle,
+  DWORD dwSizeOfUIContextData,
+  const BYTE *pUIContextData,
+  EapHostPeerResponseAction *pEapOutput,
+  EAP_ERROR **ppEapError
+);
+
+typedef VOID ( CALLBACK *NotificationHandler )(
+  GUID connectionId,
+  VOID *pContextData
+);
+
+DWORD APIENTRY EapHostPeerBeginSession(
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapType,
+  const EapAttributes *pAttributeArray,
+  HANDLE hTokenImpersonateUser,
+  DWORD dwSizeOfConnectionData,
+  const BYTE *pConnectionData,
+  DWORD dwSizeOfUserData,
+  const BYTE *pUserData,
+  DWORD dwMaxSendPacketSize,
+  const GUID *pConnectionId,
+  NotificationHandler func,
+  VOID *pContextData,
+  EAP_SESSIONID *pSessionId,
+  EAP_ERROR **ppEapError
+);
+
+VOID WINAPI  EapHostPeerFreeRuntimeMemory(
+  BYTE *pData
+);
+
+DWORD WINAPI EapHostPeerGetIdentity(
+  DWORD dwVersion,
+  DWORD dwFlags,
+  EAP_METHOD_TYPE eapMethodType,
+  DWORD dwSizeofConnectionData,
+  const BYTE *pConnectionData,
+  DWORD dwSizeofUserData,
+  const  BYTE *pUserData,
+  HANDLE hTokenImpersonateUser,
+  WINBOOL *pfInvokeUI,
+  DWORD *pdwSizeofUserDataOut,
+  BYTE **ppUserDataOut,
+  LPWSTR *ppwszIdentity,
+  EAP_ERROR **ppEapError,
+  BYTE **ppvReserved
+);
+
+DWORD WINAPI EapHostPeerInitialize(void);
+void WINAPI EapHostPeerUninitialize(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPPAPIS*/
diff --git a/mingw-w64-headers/include/eaptypes.h b/mingw-w64-headers/include/eaptypes.h
new file mode 100644
index 0000000..951eec8
--- /dev/null
+++ b/mingw-w64-headers/include/eaptypes.h
@@ -0,0 +1,332 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EAPTYPES
+#define _INC_EAPTYPES
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef LPVOID EAP_SESSIONID;
+typedef LPVOID EAP_SESSION_HANDLE;
+
+#define EAP_FLAG_Reserved1 0x00000001
+#define EAP_FLAG_NON_INTERACTIVE 0x00000002
+#define EAP_FLAG_LOGON 0x00000004
+#define EAP_FLAG_PREVIEW 0x00000008
+#define EAP_FLAG_Reserved2 0x00000010
+#define EAP_FLAG_MACHINE_AUTH 0x00000020
+#define EAP_FLAG_GUEST_ACCESS 0x00000040
+#define EAP_FLAG_Reserved3 0x00000080
+#define EAP_FLAG_Reserved4 0x00000100
+#define EAP_FLAG_RESUME_FROM_HIBERNATE 0x00000200
+#define EAP_FLAG_Reserved5 0x00000400
+#define EAP_FLAG_Reserved6 0x00000800
+#define EAP_FLAG_FULL_AUTH 0x00001000
+#define EAP_FLAG_PREFER_ALT_CREDENTIALS 0x00002000
+#define EAP_FLAG_Reserved7 0x00004000
+#define EAP_PEER_FLAG_HEALTH_STATE_CHANGE 0x00008000
+#define EAP_FLAG_SUPRESS_UI 0x00010000
+#define EAP_FLAG_PRE_LOGON 0x00020000
+#define EAP_FLAG_USER_AUTH 0x00040000
+#define EAP_FLAG_CONFG_READONLY 0x00080000
+#define EAP_FLAG_Reserved8 0x00100000
+
+typedef enum _EAP_ATTRIBUTE_TYPE {
+  eatMinimum                  = 0,
+  eatUserName                 = 1,
+  eatUserPassword             = 2,
+  eatMD5CHAPPassword          = 3,
+  eatNASIPAddress             = 4,
+  eatNASport                  = 5,
+  eatServiceType              = 6,
+  eatFramedProtocol           = 7,
+  eatFramedIPAddress          = 8,
+  eatFramedIPNetmask          = 9,
+  eatFramedRouting            = 10,
+  eatFilterId                 = 11,
+  eatFramedMTU                = 12,
+  eatFramedCompression        = 13,
+  eatLoginIPHost              = 14,
+  eatLoginService             = 15,
+  eatLoginTCPPort             = 16,
+  eatUnassigned17             = 17,
+  eatReplyMessage             = 18,
+  eatCallbackNumber           = 19,
+  eatCallbackId               = 20,
+  eatUnassigned21             = 21,
+  eatFramedRoute              = 22,
+  eatFramedIPXNetwork         = 23,
+  eatState                    = 24,
+  eatClass                    = 25,
+  eatVendorSpecific           = 26,
+  eatSessionTimeout           = 27,
+  eatIdleTimeout              = 28,
+  eatTerminationAction        = 29,
+  eatCalledStationId          = 30,
+  eatCallingStationId         = 31,
+  eatNASIdentifier            = 32,
+  eatProxyState               = 33,
+  eatLoginLATService          = 34,
+  eatLoginLATNode             = 35,
+  eatLoginLATGroup            = 36,
+  eatFramedAppleTalkLink      = 37,
+  eatFramedAppleTalkNetwork   = 38,
+  eatFramedAppleTalkZone      = 39,
+  eatAcctStatusType           = 40,
+  eatAcctDelayTime            = 41,
+  eatAcctInputOctets          = 42,
+  eatAcctOutputOctets         = 43,
+  eatAcctSessionId            = 44,
+  eatAcctAuthentic            = 45,
+  eatAcctSessionTime          = 46,
+  eatAcctInputPackets         = 47,
+  eatAcctOutputPackets        = 48,
+  eatAcctTerminateCause       = 49,
+  eatAcctMultiSessionId       = 50,
+  eatAcctLinkCount            = 51,
+  eatAcctEventTimeStamp       = 55,
+  eatMD5CHAPChallenge         = 60,
+  eatNASPortType              = 61,
+  eatPortLimit                = 62,
+  eatLoginLATPort             = 63,
+  eatTunnelType               = 64,
+  eatTunnelMediumType         = 65,
+  eatTunnelClientEndpoint     = 66,
+  eatTunnelServerEndpoint     = 67,
+  eatARAPPassword             = 70,
+  eatARAPFeatures             = 71,
+  eatARAPZoneAccess           = 72,
+  eatARAPSecurity             = 73,
+  eatARAPSecurityData         = 74,
+  eatPasswordRetry            = 75,
+  eatPrompt                   = 76,
+  eatConnectInfo              = 77,
+  eatConfigurationToken       = 78,
+  eatEAPMessage               = 79,
+  eatSignature                = 80,
+  eatARAPChallengeResponse    = 84,
+  eatAcctInterimInterval      = 85,
+  eatNASIPv6Address           = 95,
+  eatFramedInterfaceId        = 96,
+  eatFramedIPv6Prefix         = 97,
+  eatLoginIPv6Host            = 98,
+  eatFramedIPv6Route          = 99,
+  eatFramedIPv6Pool           = 100,
+  eatARAPGuestLogon           = 8096,
+  eatCertificateOID           = 8097,
+  eatEAPConfiguration         = 8098,
+  eatPEAPEmbeddedEAPTypeId    = 8099,
+  eatPEAPFastRoamedSession    = 8100,
+  eatEAPTLV                   = 8102,
+  eatCredentialsChanged       = 8103,
+  eatInnerEapMethodType       = 8104,
+  eatClearTextPassword        = 8107,
+  eatQuarantineSoH            = 8150,
+  eatPeerId                   = 9000,
+  eatServerId                 = 9001,
+  eatMethodId                 = 9002,
+  eatEMSK                     = 9003,
+  eatSessionId                = 9004,
+  eatReserved                 = 0xFFFFFFFF 
+} EAP_ATTRIBUTE_TYPE, EapAttributeType;
+
+typedef struct _EAP_ATTRIBUTE {
+  EAP_ATTRIBUTE_TYPE eapType;
+  DWORD              dwLength;
+  BYTE *             pValue;
+} EAP_ATTRIBUTE, EapAttribute;
+
+typedef struct _EAP_ATTRIBUTES {
+  DWORD         dwNumberOfAttributes;
+  EAP_ATTRIBUTE *pAttribs;
+} EAP_ATTRIBUTES, EapAttributes;
+
+typedef struct _EAP_TYPE {
+  BYTE  type;
+  DWORD dwVendorId;
+  DWORD dwVendorType;
+} EAP_TYPE;
+
+typedef struct _EAP_METHOD_TYPE {
+  EAP_TYPE eapType;
+  DWORD    dwAuthorId;
+} EAP_METHOD_TYPE;
+
+typedef struct _EAP_ERROR {
+  DWORD           dwWinError;
+  EAP_METHOD_TYPE type;
+  DWORD           dwReasonCode;
+  GUID            rootCauseGuid;
+  GUID            repairGuid;
+  GUID            helpLinkGuid;
+  LPWSTR          pRootCauseString;
+  LPWSTR          pRepairString;
+} EAP_ERROR;
+
+typedef enum _EAP_CONFIG_INPUT_FIELD_TYPE {
+  EapConfigInputUsername,
+  EapConfigInputPassword,
+  EapConfigInputNetworkUsername,
+  EapConfigInputNetworkPassword,
+  EapConfigInputPin,
+  EapConfigInputPSK,
+  EapConfigInputEdit,
+  EapConfigSmartCardUsername,
+  EapConfigSmartCardError 
+} EAP_CONFIG_INPUT_FIELD_TYPE;
+
+typedef enum _EAP_INTERACTIVE_UI_DATA_TYPE {
+  EapCredReq,
+  EapCredResp,
+  EapCredExpiryReq,
+  EapCredExpiryResp 
+} EAP_INTERACTIVE_UI_DATA_TYPE;
+
+#define EAP_UI_INPUT_FIELD_PROPS_DEFAULT 0x00000000
+#define EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT 0x00000000
+#define EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE 0x00000001
+#define EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE 0x00000001
+#define EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST 0x00000002
+#define EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST 0x00000002
+#define EAP_UI_INPUT_FIELD_PROPS_READ_ONLY 0x00000004
+
+#define MAX_EAP_CONFIG_INPUT_FIELD_LENGTH 256
+
+#define MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH 1024
+
+typedef struct _EAP_CONFIG_INPUT_FIELD_DATA {
+  DWORD                       dwSize;
+  EAP_CONFIG_INPUT_FIELD_TYPE Type;
+  DWORD                       dwFlagProps;
+  LPWSTR                      pwszLabel;
+  LPWSTR                      pwszData;
+  DWORD                       dwMinDataLength;
+  DWORD                       dwMaxDataLength;
+} EAP_CONFIG_INPUT_FIELD_DATA, *PEAP_CONFIG_INPUT_FIELD_DATA;
+
+#define EAP_CREDENTIAL_VERSION 1
+
+typedef struct _EAP_CONFIG_INPUT_FIELD_ARRAY {
+  DWORD                       dwVersion;
+  DWORD                       dwNumberOfFields;
+  DWORD                       dwSize;
+  EAP_CONFIG_INPUT_FIELD_DATA *pFields;
+} EAP_CONFIG_INPUT_FIELD_ARRAY, *PEAP_CONFIG_INPUT_FIELD_ARRAY;
+
+typedef EAP_CONFIG_INPUT_FIELD_ARRAY EAP_CRED_REQ;
+typedef EAP_CONFIG_INPUT_FIELD_ARRAY EAP_CRED_RESP;
+typedef EAP_CRED_RESP EAP_CRED_EXPIRY_REQ;
+
+typedef union _EAP_UI_DATA_FORMAT {
+  EAP_CRED_REQ *      credData;
+  EAP_CRED_EXPIRY_REQ *credExpiryData;
+} EAP_UI_DATA_FORMAT;
+
+typedef struct _EAP_INTERACTIVE_UI_DATA {
+  DWORD                        dwVersion;
+  DWORD                        dwSize;
+  EAP_INTERACTIVE_UI_DATA_TYPE dwDataType;
+  DWORD                        cbUiData;
+  EAP_UI_DATA_FORMAT           pbUiData;
+} EAP_INTERACTIVE_UI_DATA;
+
+#define eapPropCipherSuiteNegotiation 0x00000001
+#define eapPropMutualAuth 0x00000002
+#define eapPropIntegrity 0x00000004
+#define eapPropReplayProtection 0x00000008
+#define eapPropConfidentiality 0x00000010
+#define eapPropKeyDerivation 0x00000020
+#define eapPropKeyStrength64 0x00000040
+#define eapPropKeyStrength128 0x00000080
+#define eapPropKeyStrength256 0x00000100
+#define eapPropKeyStrength512 0x00000200
+#define eapPropKeyStrength1024 0x00000400
+#define eapPropDictionaryAttackResistance 0x00000800
+#define eapPropFastReconnect 0x00001000
+#define eapPropCryptoBinding 0x00002000
+#define eapPropSessionIndependence 0x00004000
+#define eapPropFragmentation 0x00008000
+#define eapPropChannelBinding 0x00010000
+#define eapPropNap 0x00020000
+#define eapPropStandalone 0x00040000
+#define eapPropMppeEncryption 0x00080000
+#define eapPropTunnelMethod 0x00100000
+#define eapPropSupportsConfig 0x00200000
+#define eapPropCertifiedMethod 0x00400000
+#if (_WIN32_WINNT >= 0x0601)
+#define eapPropmachineAuth 0x01000000
+#define eapPropUserAuth 0x02000000
+#define eapPropIdentityPrivacy 0x04000000
+#define eapPropMethodChaining 0x08000000
+#define eapPropSharedStateEquivalence 0x10000000
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#define eapPropReserved 0x20000000
+
+typedef struct _EAP_METHOD_INFO {
+  EAP_METHOD_TYPE         eapType;
+  LPWSTR                  pwszAuthorName;
+  LPWSTR                  pwszFriendlyName;
+  DWORD                   eapProperties;
+  struct _EAP_METHOD_INFO *pInnerMethodInfo;
+} EAP_METHOD_INFO;
+
+typedef struct _EAP_METHOD_INFO_ARRAY {
+  DWORD           dwNumberOfMethods;
+  EAP_METHOD_INFO *pEapMethods;
+} EAP_METHOD_INFO_ARRAY, *PEAP_METHOD_INFO_ARRAY;
+
+typedef struct _EAP_METHOD_INFO_EX {
+  EAP_METHOD_TYPE                  eapType;
+  LPWSTR                           pwszAuthorName;
+  LPWSTR                           pwszFriendlyName;
+  DWORD                            eapProperties;
+  struct _EAP_METHOD_INFO_ARRAY_EX *pInnerMethodInfoArray;
+} EAP_METHOD_INFO_EX;
+
+typedef struct _EAP_METHOD_INFO_ARRAY_EX {
+  DWORD              dwNumberOfMethods;
+  EAP_METHOD_INFO_EX *pEapMethods;
+} EAP_METHOD_INFO_ARRAY_EX, *PEAP_METHOD_INFO_ARRAY_EX;
+
+typedef struct _EAP_CONFIG_INPUT_FIELD_DATA {
+  DWORD                       dwSize;
+  EAP_CONFIG_INPUT_FIELD_TYPE Type;
+  DWORD                       dwFlagProps;
+  LPWSTR                      pwszLabel;
+  LPWSTR                      pwszData;
+  DWORD                       dwMinDataLength;
+  DWORD                       dwMaxDataLength;
+} EAP_CONFIG_INPUT_FIELD_DATA, *PEAP_CONFIG_INPUT_FIELD_DATA;
+
+typedef enum _EAP_CONFIG_INPUT_FIELD_TYPE {
+  EapConfigInputUsername,
+  EapConfigInputPassword,
+  EapConfigInputNetworkUsername,
+  EapConfigInputNetworkPassword,
+  EapConfigInputPin,
+  EapConfigInputPSK,
+  EapConfigInputEdit,
+  EapConfigSmartCardUsername,
+  EapConfigSmartCardError 
+} EAP_CONFIG_INPUT_FIELD_TYPE;
+
+typedef struct _EAP_CRED_EXPIRY_REQ {
+  EAP_CONFIG_INPUT_FIELD_ARRAY curCreds;
+  EAP_CONFIG_INPUT_FIELD_ARRAY newCreds;
+} EAP_CRED_EXPIRY_REQ, *PEAP_CRED_EXPIRY_REQ;
+
+typedef struct _EAP_CRED_EXPIRY_RESP {
+  EAP_CONFIG_INPUT_FIELD_ARRAY curCreds;
+  EAP_CONFIG_INPUT_FIELD_ARRAY newCreds;
+} EAP_CRED_EXPIRY_RESP, *PEAP_CRED_EXPIRY_RESP;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EAPTYPES*/
diff --git a/mingw-w64-headers/include/ehstorapi.h b/mingw-w64-headers/include/ehstorapi.h
new file mode 100644
index 0000000..a56e697
--- /dev/null
+++ b/mingw-w64-headers/include/ehstorapi.h
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EHSTORAPI
+#define _INC_EHSTORAPI
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _ACT_AUTHORIZATION_STATE {
+  ULONG ulState;
+} ACT_AUTHORIZATION_STATE, *PACT_AUTHORIZATION_STATE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_EHSTORAPI*/
diff --git a/mingw-w64-headers/include/esent.h b/mingw-w64-headers/include/esent.h
new file mode 100644
index 0000000..22a4cfe
--- /dev/null
+++ b/mingw-w64-headers/include/esent.h
@@ -0,0 +1,2770 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ESENT
+#define _INC_ESENT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef JET_API
+#define JET_API WINAPI
+#endif
+
+#if defined(_WIN64)
+typedef unsigned __int64 JET_API_PTR;
+#elif !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
+typedef __w64 unsigned long JET_API_PTR;
+#else
+typedef unsigned long JET_API_PTR;
+#endif
+
+#if !defined(_NATIVE_WCHAR_T_DEFINED)
+typedef unsigned short WCHAR;
+#else
+typedef wchar_t WCHAR;
+#endif
+
+typedef enum _JET_CBTYP {
+  JET_cbtypNull = 0x00000000,
+  JET_cbtypFinalize = 0x00000001,
+  JET_cbtypBeforeInsert = 0x00000002,
+  JET_cbtypAfterInsert = 0x00000004,
+  JET_cbtypBeforeReplace = 0x00000008,
+  JET_cbtypAfterReplace = 0x00000010,
+  JET_cbtypBeforeDelete = 0x00000020,
+  JET_cbtypAfterDelete = 0x00000040,
+  JET_cbtypUserDefinedDefaultValue = 0x00000080,
+  JET_cbtypOnlineDefragCompleted = 0x00000100,
+  JET_cbtypFreeCursorLS = 0x00000200,
+  JET_cbtypFreeTableLS = 0x00000400
+} JET_CBTYP;
+
+typedef enum _JET_COLTYP {
+  JET_coltypNil = 0,
+  JET_coltypBit,
+  JET_coltypUnsignedByte,
+  JET_coltypShort,
+  JET_coltypLong,
+  JET_coltypCurrency,
+  JET_coltypIEEESingle,
+  JET_coltypIEEEDouble,
+  JET_coltypDateTime,
+  JET_coltypBinary,
+  JET_coltypText,
+  JET_coltypLongBinary,
+  JET_coltypLongText,
+  JET_coltypSLV,
+#if (_WIN32_WINNT >= 0x0600)
+  JET_coltypUnsignedLong,
+  JET_coltypLongLong,
+  JET_coltypGUID,
+  JET_coltypUnsignedShort,
+#endif
+  JET_coltypMax
+} JET_COLTYP;
+
+typedef enum _JET_OBJTYP {
+  JET_objtypNil = 0,
+  JET_objtypTable
+} JET_OBJTYP;
+
+typedef enum _JET_SNP {
+  JET_snpRepair = 2,
+  JET_snpCompact = 4,
+  JET_snpRestore = 8,
+  JET_snpBackup = 9,
+  JET_snpUpgrade = 10,
+  JET_snpScrub = 11,
+  JET_snpUpgradeRecordFormat = 12
+} JET_SNP;
+
+typedef enum _JET_SNT {
+  JET_sntBegin = 5,
+  JET_sntRequirements = 7,
+  JET_sntProgress = 0,
+  JET_sntComplete = 6,
+  JET_sntFail = 3
+} JET_SNT;
+
+#define JET_errSuccess 0
+#define JET_wrnRemainingVersions 321
+#define JET_wrnUniqueKey 345
+#define JET_wrnSeparateLongValue 406
+#define JET_wrnExistingLogFileHasBadSignature 558
+#define JET_wrnExistingLogFileIsNotContiguous 559
+#define JET_wrnSkipThisRecord 564
+#define JET_wrnTargetInstanceRunning 578
+#define JET_wrnDatabaseRepaired 595
+#define JET_wrnColumnNull 1004
+#define JET_wrnBufferTruncated 1006
+#define JET_wrnDatabaseAttached 1007
+#define JET_wrnSortOverflow 1009
+#define JET_wrnSeekNotEqual 1039
+#define JET_wrnRecordFoundGreater JET_wrnSeekNotEqual
+#define JET_wrnRecordFoundLess JET_wrnSeekNotEqual
+#define JET_wrnNoErrorInfo 1055
+#define JET_wrnNoIdleActivity 1058
+#define JET_wrnNoWriteLock 1067
+#define JET_wrnColumnSetNull 1068
+#define JET_wrnTableEmpty 1301
+#define JET_wrnTableInUseBySystem 1327
+#define JET_wrnCorruptIndexDeleted 1415
+#define JET_wrnColumnMaxTruncated 1512
+#define JET_wrnCopyLongValue 1520
+#define JET_wrnColumnSkipped 1531
+#define JET_wrnColumnNotLocal 1532
+#define JET_wrnColumnMoreTags 1533
+#define JET_wrnColumnTruncated 1534
+#define JET_wrnColumnPresent 1535
+#define JET_wrnColumnSingleValue 1536
+#define JET_wrnColumnDefault 1537
+#define JET_wrnDataHasChanged 1610
+#define JET_wrnKeyChanged 1618
+#define JET_wrnFileOpenReadOnly 1813
+#define JET_wrnIdleFull 1908
+#define JET_wrnDefragAlreadyRunning 2000
+#define JET_wrnDefragNotRunning 2001
+#define JET_wrnCallbackNotRegistered 2100
+#define JET_wrnNyi -1
+#define JET_errRfsFailure -100
+#define JET_errRfsNotArmed -101
+#define JET_errFileClose -102
+#define JET_errOutOfThreads -103
+#define JET_errTooManyIO -105
+#define JET_errTaskDropped -106
+#define JET_errInternalError -107
+#define JET_errDatabaseBufferDependenciesCorrupted -255
+#define JET_errPreviousVersion -322
+#define JET_errPageBoundary -323
+#define JET_errKeyBoundary -324
+#define JET_errBadPageLink -327
+#define JET_errBadBookmark -328
+#define JET_errNTSystemCallFailed -334
+#define JET_errBadParentPageLink -338
+#define JET_errSPAvailExtCacheOutOfSync -340
+#define JET_errSPAvailExtCorrupted -341
+#define JET_errSPAvailExtCacheOutOfMemory -342
+#define JET_errSPOwnExtCorrupted -343
+#define JET_errDbTimeCorrupted -344
+#define JET_errKeyTruncated -346
+#define JET_errKeyTooBig -408
+#define JET_errInvalidLoggedOperation -500
+#define JET_errLogFileCorrupt -501
+#define JET_errNoBackupDirectory -503
+#define JET_errBackupDirectoryNotEmpty -504
+#define JET_errBackupInProgress -505
+#define JET_errRestoreInProgress -506
+#define JET_errMissingPreviousLogFile -509
+#define JET_errLogWriteFail -510
+#define JET_errLogDisabledDueToRecoveryFailure -511
+#define JET_errCannotLogDuringRecoveryRedo -512
+#define JET_errLogGenerationMismatch -513
+#define JET_errBadLogVersion -514
+#define JET_errInvalidLogSequence -515
+#define JET_errLoggingDisabled -516
+#define JET_errLogBufferTooSmall -517
+#define JET_errLogSequenceEnd -519
+#define JET_errNoBackup -520
+#define JET_errInvalidBackupSequence -521
+#define JET_errBackupNotAllowedYet -523
+#define JET_errDeleteBackupFileFail -524
+#define JET_errMakeBackupDirectoryFail -525
+#define JET_errInvalidBackup -526
+#define JET_errRecoveredWithErrors -527
+#define JET_errMissingLogFile -528
+#define JET_errLogDiskFull -529
+#define JET_errBadLogSignature -530
+#define JET_errBadDbSignature -531
+#define JET_errBadCheckpointSignature -532
+#define JET_errCheckpointCorrupt -533
+#define JET_errMissingPatchPage -534
+#define JET_errBadPatchPage -535
+#define JET_errRedoAbruptEnded -536
+#define JET_errBadSLVSignature -537
+#define JET_errPatchFileMissing -538
+#define JET_errDatabaseLogSetMismatch -539
+#define JET_errDatabaseStreamingFileMismatch -540
+#define JET_errLogFileSizeMismatch -541
+#define JET_errCheckpointFileNotFound -542
+#define JET_errRequiredLogFilesMissing -543
+#define JET_errSoftRecoveryOnBackupDatabase -544
+#define JET_errLogFileSizeMismatchDatabasesConsistent -545
+#define JET_errLogSectorSizeMismatch -546
+#define JET_errLogSectorSizeMismatchDatabasesConsistent -547
+#define JET_errLogSequenceEndDatabasesConsistent -548
+#define JET_errStreamingDataNotLogged -549
+#define JET_errDatabaseDirtyShutdown -550
+#define JET_errDatabaseInconsistent JET_errDatabaseDirtyShutdown
+#define JET_errConsistentTimeMismatch -551
+#define JET_errDatabasePatchFileMismatch -552
+#define JET_errEndingRestoreLogTooLow -553
+#define JET_errStartingRestoreLogTooHigh -554
+#define JET_errGivenLogFileHasBadSignature -555
+#define JET_errGivenLogFileIsNotContiguous -556
+#define JET_errMissingRestoreLogFiles -557
+#define JET_errMissingFullBackup -560
+#define JET_errBadBackupDatabaseSize -561
+#define JET_errDatabaseAlreadyUpgraded -562
+#define JET_errDatabaseIncompleteUpgrade -563
+#define JET_errMissingCurrentLogFiles -565
+#define JET_errDbTimeTooOld -566
+#define JET_errDbTimeTooNew -567
+#define JET_errMissingFileToBackup -569
+#define JET_errLogTornWriteDuringHardRestore -570
+#define JET_errLogTornWriteDuringHardRecovery -571
+#define JET_errLogCorruptDuringHardRestore -573
+#define JET_errLogCorruptDuringHardRecovery -574
+#define JET_errMustDisableLoggingForDbUpgrade -575
+#define JET_errBadRestoreTargetInstance -577
+#define JET_errRecoveredWithoutUndo -579
+#define JET_errDatabasesNotFromSameSnapshot -580
+#define JET_errSoftRecoveryOnSnapshot -581
+#define JET_errUnicodeTranslationBufferTooSmall -601
+#define JET_errUnicodeTranslationFail -602
+#define JET_errUnicodeNormalizationNotSupported -603
+#define JET_errExistingLogFileHasBadSignature -610
+#define JET_errExistingLogFileIsNotContiguous -611
+#define JET_errLogReadVerifyFailure -612
+#define JET_errSLVReadVerifyFailure -613
+#define JET_errCheckpointDepthTooDeep -614
+#define JET_errRestoreOfNonBackupDatabase -615
+#define JET_errInvalidGrbit -900
+#define JET_errTermInProgress -1000
+#define JET_errFeatureNotAvailable -1001
+#define JET_errInvalidName -1002
+#define JET_errInvalidParameter -1003
+#define JET_errDatabaseFileReadOnly -1008
+#define JET_errInvalidDatabaseId -1010
+#define JET_errOutOfMemory -1011
+#define JET_errOutOfDatabaseSpace -1012
+#define JET_errOutOfCursors -1013
+#define JET_errOutOfBuffers -1014
+#define JET_errTooManyIndexes -1015
+#define JET_errTooManyKeys -1016
+#define JET_errRecordDeleted -1017
+#define JET_errReadVerifyFailure -1018
+#define JET_errPageNotInitialized -1019
+#define JET_errOutOfFileHandles -1020
+#define JET_errDiskIO -1022
+#define JET_errInvalidPath -1023
+#define JET_errInvalidSystemPath -1024
+#define JET_errInvalidLogDirectory -1025
+#define JET_errRecordTooBig -1026
+#define JET_errTooManyOpenDatabases -1027
+#define JET_errInvalidDatabase -1028
+#define JET_errNotInitialized -1029
+#define JET_errAlreadyInitialized -1030
+#define JET_errInitInProgress -1031
+#define JET_errFileAccessDenied -1032
+#define JET_errBufferTooSmall -1038
+#define JET_errTooManyColumns -1040
+#define JET_errContainerNotEmpty -1043
+#define JET_errInvalidFilename -1044
+#define JET_errInvalidBookmark -1045
+#define JET_errColumnInUse -1046
+#define JET_errInvalidBufferSize -1047
+#define JET_errColumnNotUpdatable -1048
+#define JET_errIndexInUse -1051
+#define JET_errLinkNotSupported -1052
+#define JET_errNullKeyDisallowed -1053
+#define JET_errNotInTransaction -1054
+#define JET_errTooManyActiveUsers -1059
+#define JET_errInvalidCountry -1061
+#define JET_errInvalidLanguageId -1062
+#define JET_errInvalidCodePage -1063
+#define JET_errInvalidLCMapStringFlags -1064
+#define JET_errVersionStoreEntryTooBig -1065
+#define JET_errVersionStoreOutOfMemoryAndCleanupTimedOut -1066
+#define JET_errVersionStoreOutOfMemory -1069
+#define JET_errCannotIndex -1071
+#define JET_errRecordNotDeleted -1072
+#define JET_errTooManyMempoolEntries -1073
+#define JET_errOutOfObjectIDs -1074
+#define JET_errOutOfLongValueIDs -1075
+#define JET_errOutOfAutoincrementValues -1076
+#define JET_errOutOfDbtimeValues -1077
+#define JET_errOutOfSequentialIndexValues -1078
+#define JET_errRunningInOneInstanceMode -1080
+#define JET_errRunningInMultiInstanceMode -1081
+#define JET_errSystemParamsAlreadySet -1082
+#define JET_errSystemPathInUse -1083
+#define JET_errLogFilePathInUse -1084
+#define JET_errTempPathInUse -1085
+#define JET_errInstanceNameInUse -1086
+#define JET_errInstanceUnavailable -1090
+#define JET_errDatabaseUnavailable -1091
+#define JET_errInstanceUnavailableDueToFatalLogDiskFull -1092
+#define JET_errOutOfSessions -1101
+#define JET_errWriteConflict -1102
+#define JET_errTransTooDeep -1103
+#define JET_errInvalidSesid -1104
+#define JET_errWriteConflictPrimaryIndex -1105
+#define JET_errInTransaction -1108
+#define JET_errRollbackRequired -1109
+#define JET_errTransReadOnly -1110
+#define JET_errSessionWriteConflict -1111
+#define JET_errRecordTooBigForBackwardCompatibility -1112
+#define JET_errCannotMaterializeForwardOnlySort -1113
+#define JET_errSesidTableIdMismatch -1114
+#define JET_errInvalidInstance -1115
+#define JET_errDatabaseDuplicate -1201
+#define JET_errDatabaseInUse -1202
+#define JET_errDatabaseNotFound -1203
+#define JET_errDatabaseInvalidName -1204
+#define JET_errDatabaseInvalidPages -1205
+#define JET_errDatabaseCorrupted -1206
+#define JET_errDatabaseLocked -1207
+#define JET_errCannotDisableVersioning -1208
+#define JET_errInvalidDatabaseVersion -1209
+#define JET_errDatabase200Format -1210
+#define JET_errDatabase400Format -1211
+#define JET_errDatabase500Format -1212
+#define JET_errPageSizeMismatch -1213
+#define JET_errTooManyInstances -1214
+#define JET_errDatabaseSharingViolation -1215
+#define JET_errAttachedDatabaseMismatch -1216
+#define JET_errDatabaseInvalidPath -1217
+#define JET_errDatabaseIdInUse -1218
+#define JET_errForceDetachNotAllowed -1219
+#define JET_errCatalogCorrupted -1220
+#define JET_errPartiallyAttachedDB -1221
+#define JET_errDatabaseSignInUse -1222
+#define JET_errDatabaseCorruptedNoRepair -1224
+#define JET_errInvalidCreateDbVersion -1225
+#define JET_errTableLocked -1302
+#define JET_errTableDuplicate -1303
+#define JET_errTableInUse -1304
+#define JET_errObjectNotFound -1305
+#define JET_errDensityInvalid -1307
+#define JET_errTableNotEmpty -1308
+#define JET_errInvalidTableId -1310
+#define JET_errTooManyOpenTables -1311
+#define JET_errIllegalOperation -1312
+#define JET_errTooManyOpenTablesAndCleanupTimedOut -1313
+#define JET_errObjectDuplicate -1314
+#define JET_errInvalidObject -1316
+#define JET_errCannotDeleteTempTable -1317
+#define JET_errCannotDeleteSystemTable -1318
+#define JET_errCannotDeleteTemplateTable -1319
+#define JET_errExclusiveTableLockRequired -1322
+#define JET_errFixedDDL -1323
+#define JET_errFixedInheritedDDL -1324
+#define JET_errCannotNestDDL -1325
+#define JET_errDDLNotInheritable -1326
+#define JET_errInvalidSettings -1328
+#define JET_errClientRequestToStopJetService -1329
+#define JET_errCannotAddFixedVarColumnToDerivedTable -1330
+#define JET_errIndexCantBuild -1401
+#define JET_errIndexHasPrimary -1402
+#define JET_errIndexDuplicate -1403
+#define JET_errIndexNotFound -1404
+#define JET_errIndexMustStay -1405
+#define JET_errIndexInvalidDef -1406
+#define JET_errInvalidCreateIndex -1409
+#define JET_errTooManyOpenIndexes -1410
+#define JET_errMultiValuedIndexViolation -1411
+#define JET_errIndexBuildCorrupted -1412
+#define JET_errPrimaryIndexCorrupted -1413
+#define JET_errSecondaryIndexCorrupted -1414
+#define JET_errInvalidIndexId -1416
+#define JET_errIndexTuplesSecondaryIndexOnly -1430
+#define JET_errIndexTuplesTooManyColumns -1431
+#define JET_errIndexTuplesNonUniqueOnly -1432
+#define JET_errIndexTuplesTextBinaryColumnsOnly -1433
+#define JET_errIndexTuplesVarSegMacNotAllowed -1434
+#define JET_errIndexTuplesInvalidLimits -1435
+#define JET_errIndexTuplesCannotRetrieveFromIndex -1436
+#define JET_errIndexTuplesKeyTooSmall -1437
+#define JET_errColumnLong -1501
+#define JET_errColumnNoChunk -1502
+#define JET_errColumnDoesNotFit -1503
+#define JET_errNullInvalid -1504
+#define JET_errColumnIllegalNull JET_errNullInvalid
+#define JET_errColumnIndexed -1505
+#define JET_errColumnTooBig -1506
+#define JET_errColumnNotFound -1507
+#define JET_errColumnDuplicate -1508
+#define JET_errMultiValuedColumnMustBeTagged -1509
+#define JET_errColumnRedundant -1510
+#define JET_errInvalidColumnType -1511
+#define JET_errTaggedNotNULL -1514
+#define JET_errNoCurrentIndex -1515
+#define JET_errKeyIsMade -1516
+#define JET_errBadColumnId -1517
+#define JET_errBadItagSequence -1518
+#define JET_errColumnInRelationship -1519
+#define JET_errCannotBeTagged -1521
+#define JET_errDefaultValueTooBig -1524
+#define JET_errMultiValuedDuplicate -1525
+#define JET_errLVCorrupted -1526
+#define JET_errMultiValuedDuplicateAfterTruncation -1528
+#define JET_errDerivedColumnCorruption -1529
+#define JET_errInvalidPlaceholderColumn -1530
+#define JET_errRecordNotFound -1601
+#define JET_errRecordNoCopy -1602
+#define JET_errNoCurrentRecord -1603
+#define JET_errRecordPrimaryChanged -1604
+#define JET_errKeyDuplicate -1605
+#define JET_errAlreadyPrepared -1607
+#define JET_errKeyNotMade -1608
+#define JET_errUpdateNotPrepared -1609
+#define JET_errDataHasChanged -1611
+#define JET_errLanguageNotSupported -1619
+#define JET_errTooManySorts -1701
+#define JET_errInvalidOnSort -1702
+#define JET_errTempFileOpenError -1803
+#define JET_errTooManyAttachedDatabases -1805
+#define JET_errDiskFull -1808
+#define JET_errPermissionDenied -1809
+#define JET_errFileNotFound -1811
+#define JET_errFileInvalidType -1812
+#define JET_errAfterInitialization -1850
+#define JET_errLogCorrupted -1852
+#define JET_errInvalidOperation -1906
+#define JET_errAccessDenied -1907
+#define JET_errTooManySplits -1909
+#define JET_errSessionSharingViolation -1910
+#define JET_errEntryPointNotFound -1911
+#define JET_errSessionContextAlreadySet -1912
+#define JET_errSessionContextNotSetByThisThread -1913
+#define JET_errSessionInUse -1914
+#define JET_errRecordFormatConversionFailed -1915
+#define JET_errOneDatabasePerSession -1916
+#define JET_errRollbackError -1917
+#define JET_errCallbackFailed -2101
+#define JET_errCallbackNotResolved -2102
+#define JET_errOSSnapshotInvalidSequence -2401
+#define JET_errOSSnapshotTimeOut -2402
+#define JET_errOSSnapshotNotAllowed -2403
+#define JET_errOSSnapshotInvalidSnapId -2404
+#define JET_errLSCallbackNotSpecified -3000
+#define JET_errLSAlreadySet -3001
+#define JET_errLSNotSet -3002
+#define JET_errFileIOSparse -4000
+#define JET_errFileIOBeyondEOF -4001
+#define JET_errFileIOAbort -4002
+#define JET_errFileIORetry -4003
+#define JET_errFileIOFail -4004
+#define JET_errFileCompressed -4005
+
+#define JET_ExceptionMsgBox 0x0001
+#define JET_ExceptionNone 0x0002
+
+#define JET_EventLoggingDisable 0
+#define JET_EventLoggingLevelMax 100
+
+#define JET_instanceNil (~(JET_INSTANCE)0)
+#define JET_sesidNil (~(JET_SESID)0)
+#define JET_tableidNil (~(JET_TABLEID)0)
+#define JET_bitNil ((JET_GRBIT)0)
+#define JET_LSNil (~(JET_LS)0)
+#define JET_dbidNil ((JET_DBID) 0xFFFFFFFF)
+
+#define JET_BASE_NAME_LENGTH 3
+#define JET_MAX_COMPUTERNAME_LENGTH 15
+#define JET_cbBookmarkMost 256
+#if UNICODE
+#define JET_cbNameMost 128
+#define JET_cbFullNameMost 510
+#else
+#define JET_cbNameMost 64
+#define JET_cbFullNameMost 255
+#endif
+#define JET_cbColumnLVPageOverhead 82
+#define JET_cbColumnMost 255
+#define JET_cbLVDefaultValueMost 255
+#define JET_cbKeyMost 255
+#if (_WIN32_WINNT >= 0x0600)
+#define JET_cbKeyMost2KBytePage 500
+#define JET_cbKeyMost4KBytePage 1000
+#define JET_cbKeyMost8KBytePage 2000
+#define JET_cbKeyMostMin 255
+#define JET_ccolKeyMost 12
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#define JET_cbLimitKeyMost 256
+#define JET_cbPrimaryKeyMost 255
+#define JET_cbSecondaryKeyMost 255
+#if (_WIN32_WINNT == 0x500)
+#define JET_ccolMost 0x00007ffe
+#else
+#define JET_ccolMost 0x0000fee0
+#endif /*(_WIN32_WINNT == 0x500)*/
+#define JET_ccolFixedMost 0x0000007f
+#define JET_ccolVarMost 0x00000080
+#define JET_ccolTaggedMost ( JET_ccolMost - 0x000000ff ) /*64993*/
+
+typedef unsigned long JET_COLUMNID;
+typedef double JET_DATESERIAL;
+typedef unsigned long JET_DBID;
+typedef long JET_ERR;
+typedef unsigned long JET_GRBIT;
+typedef JET_API_PTR JET_HANDLE;
+typedef JET_API_PTR JET_INSTANCE;
+typedef JET_API_PTR JET_LS;
+typedef JET_API_PTR JET_OSSNAPID;
+typedef const char *  JET_PCSTR; /*__nullterminated*/
+typedef const WCHAR * JET_PCWSTR;/*__nullterminated*/
+typedef char *  JET_PSTR;        /*__nullterminated*/
+typedef WCHAR * JET_PWSTR;       /*__nullterminated*/
+typedef JET_API_PTR JET_SESID;
+typedef JET_API_PTR JET_TABLEID;
+
+typedef struct _JET_ENUMCOLUMNVALUE JET_ENUMCOLUMNVALUE;
+
+typedef struct _JET_LGPOS {
+  unsigned short ib;
+  unsigned short isec;
+  long lGeneration;
+} JET_LGPOS;
+
+typedef struct _JET_LOGTIME {
+  char bSeconds;
+  char bMinutes;
+  char bHours;
+  char bDay;
+  char bMonth;
+  char bYear;
+  char bFiller1;
+  char bFiller2;
+} JET_LOGTIME;
+
+typedef struct _JET_BKLOGTIME {
+  char bSeconds;
+  char bMinutes;
+  char bHours;
+  char bDay;
+  char bMonth;
+  char bYear;
+  char bFiller1;
+  __MINGW_EXTENSION union {
+    char bFiller2;
+    __MINGW_EXTENSION struct {
+      unsigned char fOSSnapshot  :1;
+      unsigned char fReserved  :7;
+    };
+  };
+} JET_BKLOGTIME;
+
+typedef struct _JET_SIGNATURE {
+  unsigned long ulRandom;
+  JET_LOGTIME logtimeCreate;
+  char szComputerName[JET_MAX_COMPUTERNAME_LENGTH + 1];
+} JET_SIGNATURE;
+
+typedef struct tagJET_UNICODEINDEX {
+  unsigned long lcid;
+  unsigned long dwMapFlags;
+} JET_UNICODEINDEX;
+
+typedef struct tagJET_TUPLELIMITS {
+  unsigned long chLengthMin;
+  unsigned long chLengthMax;
+  unsigned long chToIndexMax;
+  unsigned long cchIncrement;
+  unsigned long ichStart;
+} JET_TUPLELIMITS;
+
+typedef struct _JET_BKINFO {
+  JET_LGPOS lgposMark;
+  __MINGW_EXTENSION union {
+    JET_LOGTIME logtimeMark;
+    JET_BKLOGTIME bklogtimeMark;
+  };
+  unsigned long genLow;
+  unsigned long genHigh;
+} JET_BKINFO;
+
+typedef struct _JET_COLUMNBASE_A{
+  unsigned long cbStruct;
+  JET_COLUMNID columnid;
+  JET_COLTYP coltyp;
+  unsigned short wCountry;
+  unsigned short langid;
+  unsigned short cp;
+  unsigned short wFiller;
+  unsigned long cbMax;
+  JET_GRBIT grbit;
+  char szBaseTableName[256];
+  char szBaseColumnName[256];
+} JET_COLUMNBASE_A;
+
+typedef struct _JET_COLUMNBASE_W{
+  unsigned long cbStruct;
+  JET_COLUMNID columnid;
+  JET_COLTYP coltyp;
+  unsigned short wCountry;
+  unsigned short langid;
+  unsigned short cp;
+  unsigned short wFiller;
+  unsigned long cbMax;
+  JET_GRBIT grbit;
+  WCHAR szBaseTableName[256];
+  WCHAR szBaseColumnName[256];
+} JET_COLUMNBASE_W;
+
+#define JET_COLUMNBASE __MINGW_NAME_AW(JET_COLUMNBASE_)
+
+typedef struct tag_JET_COLUMNCREATE_A {
+  unsigned long cbStruct;
+  char* szColumnName;
+  JET_COLTYP coltyp;
+  unsigned long cbMax;
+  JET_GRBIT grbit;
+  void* pvDefault;
+  unsigned long cbDefault;
+  unsigned long cp;
+  JET_COLUMNID columnid;
+  JET_ERR err;
+} JET_COLUMNCREATE_A;
+
+typedef struct tag_JET_COLUMNCREATE_W {
+  unsigned long cbStruct;
+  WCHAR* szColumnName;
+  JET_COLTYP coltyp;
+  unsigned long cbMax;
+  JET_GRBIT grbit;
+  void* pvDefault;
+  unsigned long cbDefault;
+  unsigned long cp;
+  JET_COLUMNID columnid;
+  JET_ERR err;
+} JET_COLUMNCREATE_W;
+
+#define JET_COLUMNCREATE __MINGW_NAME_AW(JET_COLUMNCREATE_)
+
+typedef struct _JET_COLUMNDEF {
+  unsigned long cbStruct;
+  JET_COLUMNID columnid;
+  JET_COLTYP coltyp;
+  unsigned short wCountry;
+  unsigned short langid;
+  unsigned short cp;
+  unsigned short wCollate;
+  unsigned long cbMax;
+  JET_GRBIT grbit;
+} JET_COLUMNDEF;
+
+typedef struct _JET_COLUMNLIST {
+  unsigned long cbStruct;
+  JET_TABLEID tableid;
+  unsigned long cRecord;
+  JET_COLUMNID columnidPresentationOrder;
+  JET_COLUMNID columnidcolumnname;
+  JET_COLUMNID columnidcolumnid;
+  JET_COLUMNID columnidcoltyp;
+  JET_COLUMNID columnidCountry;
+  JET_COLUMNID columnidLangid;
+  JET_COLUMNID columnidCp;
+  JET_COLUMNID columnidCollate;
+  JET_COLUMNID columnidcbMax;
+  JET_COLUMNID columnidgrbit;
+  JET_COLUMNID columnidDefault;
+  JET_COLUMNID columnidBaseTableName;
+  JET_COLUMNID columnidBaseColumnName;
+  JET_COLUMNID columnidDefinitionName;
+} JET_COLUMNLIST;
+
+typedef struct tagJET_CONDITIONALCOLUMN_A {
+  unsigned long cbStruct;
+  char* szColumnName;
+  JET_GRBIT grbit;
+} JET_CONDITIONALCOLUMN_A;
+
+typedef struct tagJET_CONDITIONALCOLUMN_W {
+  unsigned long cbStruct;
+  WCHAR* szColumnName;
+  JET_GRBIT grbit;
+} JET_CONDITIONALCOLUMN_W;
+
+#define JET_CONDITIONALCOLUMN __MINGW_NAME_AW(JET_CONDITIONALCOLUMN_)
+
+typedef struct tagCONVERT_A {
+  char* SzOldDll;
+  __MINGW_EXTENSION union {
+    unsigned long fFlags;
+    __MINGW_EXTENSION struct {
+      unsigned long fSchemaChangesOnly  :1;
+    };
+  };
+} JET_CONVERT_A;
+
+typedef struct tagCONVERT_W {
+  WCHAR* SzOldDll;
+  __MINGW_EXTENSION union {
+    unsigned long fFlags;
+    __MINGW_EXTENSION struct {
+      unsigned long fSchemaChangesOnly  :1;
+    };
+  };
+} JET_CONVERT_W;
+
+#define JET_CONVERT __MINGW_NAME_AW(JET_CONVERT_)
+
+#define JET_dbstateJustCreated 1
+#define JET_dbstateDirtyShutdown 2
+#define JET_dbstateCleanShutdown 3
+#define JET_dbstateBeingConverted 4
+#define JET_dbstateForceDetach 5
+
+typedef struct _JET_DBINFOMISC {
+  unsigned long ulVersion;
+  unsigned long ulUpdate;
+  JET_SIGNATURE signDb;
+  unsigned long dbstate;
+  JET_LGPOS lgposConsistent;
+  JET_LOGTIME logtimeConsistent;
+  JET_LOGTIME logtimeAttach;
+  JET_LGPOS lgposAttach;
+  JET_LOGTIME logtimeDetach;
+  JET_LGPOS lgposDetach;
+  JET_SIGNATURE signLog;
+  JET_BKINFO bkinfoFullPrev;
+  JET_BKINFO bkinfoIncPrev;
+  JET_BKINFO bkinfoFullCur;
+  unsigned long fShadowingDisabled;
+  unsigned long fUpgradeDb;
+  unsigned long dwMajorVersion;
+  unsigned long dwMinorVersion;
+  unsigned long dwBuildNumber;
+  long lSPNumber;
+  unsigned long cbPageSize;
+} JET_DBINFOMISC;
+
+typedef struct _JET_DBINFOUPGRADE {
+  unsigned long cbStruct;
+  unsigned long cbFilesizeLow;
+  unsigned long cbFilesizeHigh;
+  unsigned long cbFreeSpaceRequiredLow;
+  unsigned long  cbFreeSpaceRequiredHigh;
+  unsigned long csecToUpgrade;
+  __MINGW_EXTENSION union {
+    unsigned long ulFlags;
+    __MINGW_EXTENSION struct {
+      unsigned long fUpgradable  :1;
+      unsigned long fAlreadyUpgraded  :1;
+    };
+  };
+} JET_DBINFOUPGRADE;
+
+typedef struct _JET_ENUMCOLUMNVALUE {
+  unsigned long itagSequence;
+  JET_ERR err;
+  unsigned long cbData;
+  void* pvData;
+} JET_ENUMCOLUMNVALUE;
+
+typedef struct _JET_ENUMCOLUMN {
+  JET_COLUMNID columnid;
+  JET_ERR err;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      unsigned long cEnumColumnValue;
+      JET_ENUMCOLUMNVALUE rgEnumColumnValue;
+    };
+    __MINGW_EXTENSION struct {
+      unsigned long cbData;
+      void* pvData;
+    };
+  } DUMMYNIONNAME1;
+} JET_ENUMCOLUMN;
+
+typedef struct _JET_ENUMCOLUMNID {
+  JET_COLUMNID columnid;
+  unsigned long ctagSequence;
+  unsigned long* rgtagSequence;
+} JET_ENUMCOLUMNID;
+
+typedef struct tagJET_INDEXCREATE_A {
+  unsigned long cbStruct;
+  char* szIndexName;
+  char* szKey;
+  unsigned long cbKey;
+  JET_GRBIT grbit;
+  unsigned long ulDensity;
+  __MINGW_EXTENSION union {
+    unsigned long lcid;
+    JET_UNICODEINDEX* pidxunicode;
+  };
+  __MINGW_EXTENSION union {
+    unsigned long cbVarSegMac;
+    JET_TUPLELIMITS* ptuplelimits;
+  };
+  JET_CONDITIONALCOLUMN* rgconditionalcolumn;
+  unsigned long cConditionalColumn;
+  JET_ERR err;
+  unsigned long cbKeyMost;
+} JET_INDEXCREATE_A;
+
+typedef struct tagJET_INDEXCREATE_W {
+  unsigned long cbStruct;
+  WCHAR* szIndexName;
+  WCHAR* szKey;
+  unsigned long cbKey;
+  JET_GRBIT grbit;
+  unsigned long ulDensity;
+  __MINGW_EXTENSION union {
+    unsigned long lcid;
+    JET_UNICODEINDEX* pidxunicode;
+  };
+  __MINGW_EXTENSION union {
+    unsigned long cbVarSegMac;
+    JET_TUPLELIMITS* ptuplelimits;
+  };
+  JET_CONDITIONALCOLUMN* rgconditionalcolumn;
+  unsigned long cConditionalColumn;
+  JET_ERR err;
+  unsigned long cbKeyMost;
+} JET_INDEXCREATE_W;
+#define JET_INDEXCREATE __MINGW_NAME_AW(JET_INDEXCREATE_)
+
+typedef struct tagJET_INDEXID {
+  unsigned long cbStruct;
+  char rgbIndexId[];
+} JET_INDEXID;
+
+typedef struct _JET_INDEXLIST {
+  unsigned long cbStruct;
+  JET_TABLEID tableid;
+  unsigned long cRecord;
+  JET_COLUMNID columnidindexname;
+  JET_COLUMNID columnidgrbitIndex;
+  JET_COLUMNID columnidcKey;
+  JET_COLUMNID columnidcEntry;
+  JET_COLUMNID columnidcPage;
+  JET_COLUMNID columnidcColumn;
+  JET_COLUMNID columnidiColumn;
+  JET_COLUMNID columnidcolumnid;
+  JET_COLUMNID columnidcoltyp; 
+  JET_COLUMNID columnidCountry;
+  JET_COLUMNID columnidLangid;
+  JET_COLUMNID columnidCp;
+  JET_COLUMNID columnidCollate;
+  JET_COLUMNID columnidgrbitColumn;
+  JET_COLUMNID columnidcolumnname;
+  JET_COLUMNID columnidLCMapFlags;
+} JET_INDEXLIST;
+
+typedef struct _JET_INDEXRANGE {
+  unsigned long cbStruct; 
+  JET_TABLEID tableid;
+  JET_GRBIT grbit;
+} JET_INDEXRANGE;
+
+typedef struct _JET_INSTANCE_INFO_A {
+  JET_INSTANCE hInstanceId;
+  char* szInstanceName;
+  JET_API_PTR cDatabases;
+  char** szDatabaseFileName;
+  char** szDatabaseDisplayName;
+  char** szDatabaseSLVFileName;
+} JET_INSTANCE_INFO_A;
+
+typedef struct _JET_INSTANCE_INFO_W {
+  JET_INSTANCE hInstanceId;
+  WCHAR* szInstanceName;
+  JET_API_PTR cDatabases;
+  WCHAR** szDatabaseFileName;
+  WCHAR** szDatabaseDisplayName;
+  WCHAR** szDatabaseSLVFileName;
+} JET_INSTANCE_INFO_W;
+
+#define JET_INSTANCE_INFO __MINGW_NAME_AW(JET_INSTANCE_INFO_)
+
+typedef struct _JET_LOGINFO_A {
+  unsigned long cbSize;
+  unsigned long ulGenLow;
+  unsigned long ulGenHigh;
+  char szBaseName[JET_BASE_NAME_LENGTH + 1];
+} JET_LOGINFO_A;
+
+typedef struct JET_LOGINFO_W {
+  unsigned long cbSize;
+  unsigned long ulGenLow;
+  unsigned long ulGenHigh;
+  WCHAR szBaseName[JET_BASE_NAME_LENGTH + 1];
+} JET_LOGINFO_W;
+
+#define JET_LOGINFO __MINGW_NAME_AW(JET_LOGINFO_)
+
+typedef struct _JET_OBJECTINFO {
+  unsigned long cbStruct;
+  JET_OBJTYP objtyp;
+  JET_DATESERIAL dtCreate;
+  JET_DATESERIAL dtUpdate;
+  JET_GRBIT grbit;
+  unsigned long flags;
+  unsigned long cRecord;
+  unsigned long cPage;
+} JET_OBJECTINFO;
+
+typedef struct _JET_OBJECTLIST {
+  unsigned long cbStruct;
+  JET_TABLEID tableid;
+  unsigned long cRecord;
+  JET_COLUMNID columnidcontainername;
+  JET_COLUMNID columnidobjectname;
+  JET_COLUMNID columnidobjtyp;
+  JET_COLUMNID columniddtCreate;
+  JET_COLUMNID columniddtUpdate;
+  JET_COLUMNID columnidgrbit;
+  JET_COLUMNID columnidflags;
+  JET_COLUMNID columnidcRecord;
+  JET_COLUMNID columnidcPage;
+} JET_OBJECTLIST;
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct tagJET_OPENTEMPORARYTABLE {
+  unsigned long cbStruct;
+  const JET_COLUMNDEF* prgcolumndef;
+  unsigned long ccolumn;
+  JET_UNICODEINDEX* pidxunicode;
+  JET_GRBIT grbit;
+  JET_COLUMNID* prgcolumnid;
+  unsigned long cbKeyMost;
+  unsigned long cbVarSegMac;
+  JET_TABLEID tableid;
+} JET_OPENTEMPORARYTABLE;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+typedef struct _JET_RECORDLIST{
+  unsigned long cbStruct;
+  JET_TABLEID tableid;
+  unsigned long cRecord;
+  JET_COLUMNID columnidBookmark;
+} JET_RECORDLIST;
+
+typedef struct _JET_RECPOS {
+  unsigned long cbStruct;
+  unsigned long centriesLT;
+  unsigned long centriesInRange;
+  unsigned long centriesTotal;
+} JET_RECPOS;
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _JET_RECSIZE {
+  unsigned __int64 cbData;
+  unsigned __int64 cbLongValueData;
+  unsigned __int64 cbOverhead;
+  unsigned __int64 cbLongValueOverhead;
+  unsigned __int64 cNonTaggedColumns;
+  unsigned __int64 cTaggedColumns;
+  unsigned __int64 cLongValues;
+  unsigned __int64 cMultiValues;
+} JET_RECSIZE;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+typedef struct _JET_RETINFO {
+  unsigned long cbStruct;
+  unsigned long ibLongValue;
+  unsigned long itagSequence;
+  JET_COLUMNID columnidNextTagged;
+} JET_RETINFO;
+
+typedef struct _JET_RETRIEVECOLUMN {
+  JET_COLUMNID columnid;
+  void* pvData;  unsigned long cbData;
+  unsigned long cbActual;
+  JET_GRBIT grbit;
+  unsigned long ibLongValue;
+  unsigned long itagSequence;
+  JET_COLUMNID columnidNextTagged;
+  JET_ERR err;
+} JET_RETRIEVECOLUMN;
+
+#ifndef xRPC_STRING
+#define xRPC_STRING
+#endif
+
+typedef struct _JET_RSTMAP_A{
+  xRPC_STRING char* szDatabaseName;
+  xRPC_STRING char* szNewDatabaseName;
+} JET_RSTMAP_A;
+
+typedef struct _JET_RSTMAP_W{
+  xRPC_STRING WCHAR* szDatabaseName;
+  xRPC_STRING WCHAR* szNewDatabaseName;
+} JET_RSTMAP_W;
+
+typedef JET_ERR (JET_API *JET_PFNSTATUS)(
+  JET_SESID  sesid,
+  JET_SNP snp,
+  JET_SNT snt,
+  void* pv
+);
+
+typedef struct _JET_RSTINFO_A{
+  unsigned long cbStruct;
+  JET_RSTMAP_A* rgrstmap;
+  long crstmap;
+  JET_LGPOS lgposStop;
+  JET_LOGTIME logtimeStop;
+  JET_PFNSTATUS pfnStatus;
+} JET_RSTINFO_A;
+
+typedef struct _JET_RSTINFO_W{
+  unsigned long cbStruct;
+  JET_RSTMAP_W* rgrstmap;
+  long crstmap;
+  JET_LGPOS lgposStop;
+  JET_LOGTIME logtimeStop;
+  JET_PFNSTATUS pfnStatus;
+} JET_RSTINFO_W;
+
+#define JET_RSTMAP __MINGW_NAME_AW(JET_RSTMAP_)
+#define JET_RSTINFO __MINGW_NAME_AW(JET_RSTINFO_)
+
+typedef struct _JET_SETCOLUMN {
+  JET_COLUMNID columnid;
+  const void* pvData;
+  unsigned long cbData;
+  JET_GRBIT grbit;
+  unsigned long ibLongValue; 
+  unsigned long itagSequence;
+  JET_ERR err;
+} JET_SETCOLUMN;
+
+typedef struct _JET_SETINFO {
+  unsigned long cbStruct;
+  unsigned long ibLongValue;
+  unsigned long itagSequence;
+} JET_SETINFO;
+
+typedef struct _JET_SETSYSPARAM_A {
+  unsigned long paramid;
+  JET_API_PTR lParam;
+  const char* sz;
+  JET_ERR err;
+} JET_SETSYSPARAM_A;
+
+typedef struct _JET_SETSYSPARAM_W {
+  unsigned long paramid;
+  JET_API_PTR lParam;
+  const WCHAR* sz;
+  JET_ERR err;
+} JET_SETSYSPARAM_W;
+
+#define JET_SETSYSPARAM __MINGW_NAME_AW(JET_SETSYSPARAM_)
+
+typedef struct _JET_SNPROG {
+  unsigned long cbStruct;
+  unsigned long cunitDone;
+  unsigned long cunitTotal;
+} JET_SNPROG;
+
+typedef struct tagJET_TABLECREATE_A {
+  unsigned long cbStruct;
+  char* szTableName;
+  char* szTemplateTableName;
+  unsigned long ulPages;
+  unsigned long ulDensity;
+  JET_COLUMNCREATE* rgcolumncreate;
+  unsigned long cColumns;
+  JET_INDEXCREATE_A* rgindexcreate;
+  unsigned long cIndexes;
+  JET_GRBIT grbit;
+  JET_TABLEID tableid;
+  unsigned long cCreated;
+} JET_TABLECREATE_A;
+
+typedef struct tagJET_TABLECREATE_W {
+  unsigned long cbStruct;
+  WCHAR* szTableName;
+  WCHAR* szTemplateTableName;
+  unsigned long ulPages;
+  unsigned long ulDensity;
+  JET_COLUMNCREATE* rgcolumncreate;
+  unsigned long cColumns;
+  JET_INDEXCREATE_W* rgindexcreate;
+  unsigned long cIndexes;
+  JET_GRBIT grbit;
+  JET_TABLEID tableid;
+  unsigned long cCreated;
+} JET_TABLECREATE_W;
+
+#define JET_TABLECREATE __MINGW_NAME_AW(JET_TABLECREATE_)
+
+typedef struct tagJET_TABLECREATE2_A {
+  unsigned long cbStruct;
+  char* szTableName;
+  char* szTemplateTableName;
+  unsigned long ulPages;
+  unsigned long ulDensity;
+  JET_COLUMNCREATE_A* rgcolumncreate;
+  unsigned long cColumns;
+  JET_INDEXCREATE_A* rgindexcreate;
+  unsigned long cIndexes;
+  char* szCallback;
+  JET_CBTYP cbtyp;
+  JET_GRBIT grbit;
+  JET_TABLEID tableid;
+  unsigned long cCreated;
+} JET_TABLECREATE2_A;
+
+typedef struct tagJET_TABLECREATE2_W {
+  unsigned long cbStruct;
+  WCHAR* szTableName;
+  WCHAR* szTemplateTableName;
+  unsigned long ulPages;
+  unsigned long ulDensity;
+  JET_COLUMNCREATE_W* rgcolumncreate;
+  unsigned long cColumns;
+  JET_INDEXCREATE_W* rgindexcreate;
+  unsigned long cIndexes;
+  WCHAR* szCallback;
+  JET_CBTYP cbtyp;
+  JET_GRBIT grbit;
+  JET_TABLEID tableid;
+  unsigned long cCreated;
+} JET_TABLECREATE2_W;
+
+#define JET_TABLECREATE2 __MINGW_NAME_AW(JET_TABLECREATE2_)
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _JET_THREADSTATS {
+  unsigned long cbStruct;
+  unsigned long cPageReferenced;
+  unsigned long cPageRead;
+  unsigned long cPagePreread;
+  unsigned long cPageDirtied;
+  unsigned long cPageRedirtied;
+  unsigned long cLogRecord;
+  unsigned long cbLogRecord;
+} JET_THREADSTATS;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+typedef struct tag_JET_USERDEFINEDDEFAULT_A {
+  char* szCallback;
+  unsigned char* pbUserData;
+  unsigned long cbUserData;
+  char* szDependantColumns;
+} JET_USERDEFINEDDEFAULT_A;
+
+typedef struct tag_JET_USERDEFINEDDEFAULT_W {
+  WCHAR* szCallback;
+  unsigned char* pbUserData;
+  unsigned long cbUserData;
+  WCHAR* szDependantColumns;
+} JET_USERDEFINEDDEFAULT_W;
+
+#define JET_USERDEFINEDDEFAULT __MINGW_NAME_AW(JET_USERDEFINEDDEFAULT_)
+
+typedef JET_ERR (JET_API* JET_CALLBACK)(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_TABLEID tableid,
+  JET_CBTYP cbtyp,
+  void* pvArg1,
+  void* pvArg2,
+  void* pvContext,
+  JET_API_PTR ulUnused
+);
+
+typedef void * (JET_API *JET_PFNREALLOC)(
+  void* pvContext,
+  void* pv,
+  unsigned long cb
+);
+
+JET_ERR JET_API JetAddColumnA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szColumnName,
+  const JET_COLUMNDEF* pcolumndef,
+  const void* pvDefault,
+  unsigned long cbDefault,
+  JET_COLUMNID* pcolumnid
+);
+
+JET_ERR JET_API JetAddColumnW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szColumnName,
+  const JET_COLUMNDEF* pcolumndef,
+  const void* pvDefault,
+  unsigned long cbDefault,
+  JET_COLUMNID* pcolumnid
+);
+
+#define JetAddColumn __MINGW_NAME_AW(JetAddColumn)
+
+JET_ERR JET_API JetAttachDatabaseA(
+  JET_SESID sesid,
+  const char* szFilename,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetAttachDatabaseW(
+  JET_SESID sesid,
+  const WCHAR* szFilename,
+  JET_GRBIT grbit
+);
+
+#define JetAttachDatabase __MINGW_NAME_AW(JetAttachDatabase)
+
+JET_ERR JET_API JetAttachDatabase2A(
+  JET_SESID sesid,
+  const char* szFilename,
+  const unsigned long cpgDatabaseSizeMax,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetAttachDatabase2W(
+  JET_SESID sesid,
+  const WCHAR* szFilename,
+  const unsigned long cpgDatabaseSizeMax,
+  JET_GRBIT grbit
+);
+
+#define JetAttachDatabase2 __MINGW_NAME_AW(JetAttachDatabase2)
+
+JET_ERR JET_API JetBackupA(
+  JET_PCSTR szBackupPath,
+  JET_GRBIT grbit,
+  JET_PFNSTATUS pfnStatus
+);
+
+JET_ERR JET_API JetBackupW(
+  JET_PCWSTR szBackupPath,
+  JET_GRBIT grbit,
+  JET_PFNSTATUS pfnStatus
+);
+
+#define JetBackup __MINGW_NAME_AW(JetBackup)
+
+JET_ERR JET_API JetBackupInstanceA(
+  JET_INSTANCE instance,
+  JET_PCSTR szBackupPath,
+  JET_GRBIT grbit,
+  JET_PFNSTATUS pfnStatus
+);
+
+JET_ERR JET_API JetBackupInstanceW(
+  JET_INSTANCE instance,
+  JET_PCWSTR szBackupPath,
+  JET_GRBIT grbit,
+  JET_PFNSTATUS pfnStatus
+);
+
+#define JetBackupInstance __MINGW_NAME_AW(JetBackupInstance)
+
+JET_ERR JET_API JetBeginExternalBackup(
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetBeginExternalBackupInstance(
+  JET_INSTANCE instance,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetBeginSessionA(
+  JET_INSTANCE instance,
+  JET_SESID* psesid,
+  JET_PCSTR szUserName,
+  JET_PCSTR szPassword
+);
+
+JET_ERR JET_API JetBeginSessionW(
+  JET_INSTANCE instance,
+  JET_SESID* psesid,
+  JET_PCWSTR szUserName,
+  JET_PCWSTR szPassword
+);
+
+JET_ERR JET_API JetBeginTransaction(
+  JET_SESID sesid
+);
+
+JET_ERR JET_API JetBeginTransaction2(
+  JET_SESID sesid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCloseDatabase(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCloseFile(
+  JET_HANDLE hfFile
+);
+
+JET_ERR JET_API JetCloseFileInstance(
+  JET_INSTANCE instance,
+  JET_HANDLE hfFile
+);
+
+JET_ERR JET_API JetCloseTable(
+  JET_SESID sesid,
+  JET_TABLEID tableid
+);
+
+JET_ERR JET_API JetCommitTransaction(
+  JET_SESID sesid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCompactA(
+  JET_SESID sesid,
+  JET_PCSTR szDatabaseSrc,
+  JET_PCSTR szDatabaseDest,
+  JET_PFNSTATUS pfnStatus,
+  JET_CONVERT_A* pconvert,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCompactW(
+  JET_SESID sesid,
+  JET_PCWSTR szDatabaseSrc,
+  JET_PCWSTR szDatabaseDest,
+  JET_PFNSTATUS pfnStatus,
+  JET_CONVERT_W* pconvert,
+  JET_GRBIT grbit
+);
+
+#define JetCompact __MINGW_NAME_AW(JetCompact)
+
+JET_ERR JET_API JetComputeStats(
+  JET_SESID sesid,
+  JET_TABLEID tableid
+);
+
+JET_ERR JET_API JetCreateDatabaseA(
+  JET_SESID sesid,
+  JET_PCSTR szFilename,
+  JET_PCSTR szConnect,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCreateDatabaseW(
+  JET_SESID sesid,
+  JET_PCWSTR szFilename,
+  JET_PCWSTR szConnect,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+#define JetCreateDatabase __MINGW_NAME_AW(JetCreateDatabase)
+
+JET_ERR JET_API JetCreateDatabase2A(
+  JET_SESID sesid,
+  const char* szFilename,
+  const unsigned long cpgDatabaseSizeMax,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCreateDatabase2W(
+  JET_SESID sesid,
+  const WCHAR* szFilename,
+  const unsigned long cpgDatabaseSizeMax,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+#define JetCreateDatabase2 __MINGW_NAME_AW(JetCreateDatabase2)
+
+JET_ERR JET_API JetCreateIndexA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName,
+  JET_GRBIT grbit,
+  const char* szKey,
+  unsigned long cbKey,
+  unsigned long lDensity
+);
+
+JET_ERR JET_API JetCreateIndexW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName,
+  JET_GRBIT grbit,
+  const WCHAR* szKey,
+  unsigned long cbKey,
+  unsigned long lDensity
+);
+
+#define JetCreateIndex __MINGW_NAME_AW(JetCreateIndex)
+
+JET_ERR JET_API JetCreateIndex2A(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_INDEXCREATE_A* pindexcreate,
+  unsigned long cIndexCreate
+);
+
+JET_ERR JET_API JetCreateIndex2W(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_INDEXCREATE_W* pindexcreate,
+  unsigned long cIndexCreate
+);
+
+#define JetCreateIndex2 __MINGW_NAME_AW(JetCreateIndex2)
+
+JET_ERR JET_API JetCreateInstanceA(
+  JET_INSTANCE* pinstance,
+  const char* szInstanceName
+);
+
+JET_ERR JET_API JetCreateInstanceW(
+  JET_INSTANCE* pinstance,
+  const WCHAR* szInstanceName
+);
+
+#define JetCreateInstance __MINGW_NAME_AW(JetCreateInstance)
+
+JET_ERR JET_API JetCreateInstance2A(
+  JET_INSTANCE* pinstance,
+  const char* szInstanceName,
+  const char* szDisplayName,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCreateInstance2W(
+  JET_INSTANCE* pinstance,
+  const WCHAR* szInstanceName,
+  const WCHAR* szDisplayName,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetCreateTableA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szTableName,
+  unsigned long lPages,
+  unsigned long lDensity,
+  JET_TABLEID* ptableid
+);
+
+JET_ERR JET_API JetCreateTableW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szTableName,
+  unsigned long lPages,
+  unsigned long lDensity,
+  JET_TABLEID* ptableid
+);
+
+JET_ERR JET_API JetCreateTableColumnIndexA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_TABLECREATE_A* ptablecreate
+);
+
+JET_ERR JET_API JetCreateTableColumnIndexW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_TABLECREATE_W* ptablecreate
+);
+
+#define JetCreateInstance2 __MINGW_NAME_AW(JetCreateInstance2)
+
+JET_ERR JET_API JetCreateTableColumnIndex2A(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_TABLECREATE2_A* ptablecreate
+);
+
+JET_ERR JET_API JetCreateTableColumnIndex2W(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_TABLECREATE2_W* ptablecreate
+);
+
+#define JetCreateTableColumnIndex2 __MINGW_NAME_AW(JetCreateTableColumnIndex2)
+
+JET_ERR JET_API JetDefragmentA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCSTR szTableName,
+  unsigned long* pcPasses,
+  unsigned long* pcSeconds,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetDefragmentW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCWSTR szTableName,
+  unsigned long* pcPasses,
+  unsigned long* pcSeconds,
+  JET_GRBIT grbit
+);
+
+#define JetDefragment __MINGW_NAME_AW(JetDefragment)
+
+JET_ERR JET_API JetDefragment2A(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCSTR szTableName,
+  unsigned long* pcPasses,
+  unsigned long* pcSeconds,
+  JET_CALLBACK callback,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetDefragment2W(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCWSTR szTableName,
+  unsigned long* pcPasses,
+  unsigned long* pcSeconds,
+  JET_CALLBACK callback,
+  JET_GRBIT grbit
+);
+
+#define JetDefragment2 __MINGW_NAME_AW(JetDefragment2)
+
+JET_ERR JET_API JetDelete(
+  JET_SESID sesid,
+  JET_TABLEID tableid
+);
+
+JET_ERR JET_API JetDeleteColumnA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const char* szColumnName
+);
+
+JET_ERR JET_API JetDeleteColumnW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const WCHAR* szColumnName
+);
+
+#define JetDeleteColumn __MINGW_NAME_AW(JetDeleteColumn)
+
+JET_ERR JET_API JetDeleteColumn2A(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const char* szColumnName,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetDeleteColumn2W(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const WCHAR* szColumnName,
+  const JET_GRBIT grbit
+);
+
+#define JetDeleteColumn2 __MINGW_NAME_AW(JetDeleteColumn2)
+
+JET_ERR JET_API JetDeleteIndexA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName
+);
+
+JET_ERR JET_API JetDeleteIndexW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName
+);
+
+#define JetDeleteColumn2 __MINGW_NAME_AW(JetDeleteColumn2)
+
+JET_ERR JET_API JetDeleteIndexA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName
+);
+
+JET_ERR JET_API JetDeleteIndexW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName
+);
+
+#define JetDeleteIndex __MINGW_NAME_AW(JetDeleteIndex)
+
+JET_ERR JET_API JetDeleteTableA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szTableName
+);
+
+JET_ERR JET_API JetDeleteTableW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szTableName
+);
+
+#define JetDeleteTable __MINGW_NAME_AW(JetDeleteTable)
+
+JET_ERR JET_API JetDetachDatabaseA(
+  JET_SESID sesid,
+  const char* szFilename
+);
+
+JET_ERR JET_API JetDetachDatabaseW(
+  JET_SESID sesid,
+  const char* szFilename
+);
+
+#define JetDetachDatabase __MINGW_NAME_AW(JetDetachDatabase)
+
+JET_ERR JET_API JetDetachDatabase2A(
+  JET_SESID sesid,
+  const char* szFilename,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetDetachDatabase2W(
+  JET_SESID sesid,
+  const WCHAR* szFilename,
+  JET_GRBIT grbit
+);
+
+#define JetDetachDatabase2 __MINGW_NAME_AW(JetDetachDatabase2)
+
+JET_ERR JET_API JetDupCursor(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_TABLEID* ptableid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetDupSession(
+  JET_SESID sesid,
+  JET_SESID* psesid
+);
+
+JET_ERR JET_API JetEnableMultiInstanceA(
+  JET_SETSYSPARAM_A* psetsysparam,
+  unsigned long csetsysparam,
+  unsigned long* pcsetsucceed
+);
+
+JET_ERR JET_API JetEnableMultiInstanceW(
+  JET_SETSYSPARAM_W* psetsysparam,
+  unsigned long csetsysparam,
+  unsigned long* pcsetsucceed
+);
+
+#define JetEnableMultiInstance __MINGW_NAME_AW(JetEnableMultiInstance)
+
+JET_ERR JET_API JetEndExternalBackup(void);
+
+JET_ERR JET_API JetEndExternalBackupInstance(
+  JET_INSTANCE instance
+);
+
+JET_ERR JET_API JetEndExternalBackupInstance2(
+  JET_INSTANCE instance,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetEndSession(
+  JET_SESID sesid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetEnumerateColumns(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  unsigned long cEnumColumnId,
+  JET_ENUMCOLUMNID* rgEnumColumnId,
+  unsigned long* pcEnumColumn,
+  JET_ENUMCOLUMN** prgEnumColumn,
+  JET_PFNREALLOC pfnRealloc,
+  void* pvReallocContext,
+  unsigned long cbDataMost,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetEscrowUpdate(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_COLUMNID columnid,
+  void* pv,
+  unsigned long cbMax,
+  void* pvOld,
+  unsigned long cbOldMax,
+  unsigned long* pcbOldActual,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetExternalRestoreA(
+  JET_PSTR szCheckpointFilePath,
+  JET_PSTR szLogPath,
+  JET_RSTMAP_A* rgrstmap,
+  long crstfilemap,
+  JET_PSTR szBackupLogPath,
+  long genLow,
+  long genHigh,
+  JET_PFNSTATUS pfn
+);
+
+JET_ERR JET_API JetExternalRestoreW(
+  JET_PWSTR szCheckpointFilePath,
+  JET_PWSTR szLogPath,
+  JET_RSTMAP_W* rgrstmap,
+  long crstfilemap,
+  JET_PWSTR szBackupLogPath,
+  long genLow,
+  long genHigh,
+  JET_PFNSTATUS pfn
+);
+
+#define JetExternalRestore __MINGW_NAME_AW(JetExternalRestore)
+
+JET_ERR JET_API JetExternalRestore2A(
+  JET_PSTR szCheckpointFilePath,
+  JET_PSTR szLogPath,
+  JET_RSTMAP_A* rgrstmap,
+  long crstfilemap,
+  JET_PSTR szBackupLogPath,
+  JET_LOGINFO_A* pLogInfo,
+  JET_PSTR szTargetInstanceName,
+  JET_PSTR szTargetInstanceLogPath,
+  JET_PSTR szTargetInstanceCheckpointPath,
+  JET_PFNSTATUS pfn
+);
+
+JET_ERR JET_API JetExternalRestore2W(
+  JET_PWSTR szCheckpointFilePath,
+  JET_PWSTR szLogPath,
+  JET_RSTMAP_W* rgrstmap,
+  long crstfilemap,
+  JET_PWSTR szBackupLogPath,
+  JET_LOGINFO_W* pLogInfo,
+  JET_PWSTR szTargetInstanceName,
+  JET_PWSTR szTargetInstanceLogPath,
+  JET_PWSTR szTargetInstanceCheckpointPath,
+  JET_PFNSTATUS pfn
+);
+
+#define JetExternalRestore2 __MINGW_NAME_AW(JetExternalRestore2)
+
+JET_ERR JET_API JetFreeBuffer(
+  char* pbBuf
+);
+
+JET_ERR JET_API JetGetAttachInfoA(
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetAttachInfoW(
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+#define JetGetAttachInfo __MINGW_NAME_AW(JetGetAttachInfo)
+
+JET_ERR JET_API JetGetAttachInfoInstanceA(
+  JET_INSTANCE instance,
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetAttachInfoInstanceW(
+  JET_INSTANCE instance,
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+#define JetGetAttachInfoInstance __MINGW_NAME_AW(JetGetAttachInfoInstance)
+
+JET_ERR JET_API JetGetBookmark(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvBookmark,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetColumnInfoA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szTableName,
+  const char* szColumnName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetColumnInfoW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szTableName,
+  const WCHAR* szColumnName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetColumnInfo __MINGW_NAME_AW(JetGetColumnInfo)
+
+JET_ERR JET_API JetGetCurrentIndexA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PSTR szIndexName,
+  unsigned long cchIndexName
+);
+
+JET_ERR JET_API JetGetCurrentIndexW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PWSTR szIndexName,
+  unsigned long cchIndexName
+);
+
+#define JetGetCurrentIndex __MINGW_NAME_AW(JetGetCurrentIndex)
+
+JET_ERR JET_API JetGetCursorInfo(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetDatabaseFileInfoA(
+  const char* szDatabaseName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetDatabaseFileInfoW(
+  const WCHAR* szDatabaseName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetDatabaseFileInfo __MINGW_NAME_AW(JetGetDatabaseFileInfo)
+
+JET_ERR JET_API JetGetDatabaseInfoA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetDatabaseInfoW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetDatabaseInfo __MINGW_NAME_AW(JetGetDatabaseInfo)
+
+JET_ERR JET_API JetGetIndexInfoA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szTableName,
+  const char* szIndexName,
+  void* pvResult,
+  unsigned long cbResult,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetIndexInfoW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szTableName,
+  const WCHAR* szIndexName,
+  void* pvResult,
+  unsigned long cbResult,
+  unsigned long InfoLevel
+);
+
+#define JetGetIndexInfo __MINGW_NAME_AW(JetGetIndexInfo)
+
+JET_ERR JET_API JetGetInstanceInfoA(
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_A** paInstanceInfo
+);
+
+JET_ERR JET_API JetGetInstanceInfoW(
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_W** paInstanceInfo
+);
+
+#define JetGetInstanceInfo __MINGW_NAME_AW(JetGetInstanceInfo)
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetGetInstanceMiscInfo(
+  JET_INSTANCE instance,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetGetLock(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetGetLogInfoA(
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetLogInfoW(
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+#define JetGetLogInfo __MINGW_NAME_AW(JetGetLogInfo)
+
+JET_ERR JET_API JetGetLogInfoInstanceA(
+  JET_INSTANCE instance,
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetLogInfoInstanceW(
+  JET_INSTANCE instance,
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+#define JetGetLogInfoInstance __MINGW_NAME_AW(JetGetLogInfoInstance)
+
+JET_ERR JET_API JetGetLogInfoInstance2A(
+  JET_INSTANCE instance,
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual,
+  JET_LOGINFO_A* pLogInfo
+);
+
+JET_ERR JET_API JetGetLogInfoInstance2W(
+  JET_INSTANCE instance,
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual,
+  JET_LOGINFO_W* pLogInfo
+);
+
+#define JetGetLogInfoInstance2 __MINGW_NAME_AW(JetGetLogInfoInstance2)
+
+JET_ERR JET_API JetGetLS(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_LS* pls,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetGetObjectInfoA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_OBJTYP objtyp,
+  const char* szContainerName,
+  const char* szObjectName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetObjectInfoW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_OBJTYP objtyp,
+  const WCHAR* szContainerName,
+  const WCHAR* szObjectName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetObjectInfo __MINGW_NAME_AW(JetGetObjectInfo)
+
+JET_ERR JET_API JetGetRecordPosition(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_RECPOS* precpos,
+  unsigned long cbRecpos
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetGetRecordSize(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_RECSIZE* precsize,
+  const JET_GRBIT grbit
+);
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
+JET_ERR JET_API JetGetSecondaryIndexBookmark(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvSecondaryKey,
+  unsigned long cbSecondaryKeyMax,
+  unsigned long* pcbSecondaryKeyActual,
+  void* pvPrimaryBookmark,
+  unsigned long cbPrimaryBookmarkMax,
+  unsigned long* pcbPrimaryKeyActual,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetGetSystemParameterA(
+  JET_INSTANCE instance,
+  JET_SESID sesid,
+  unsigned long paramid,
+  JET_API_PTR* plParam,
+  JET_PSTR szParam,
+  unsigned long cbMax
+);
+
+JET_ERR JET_API JetGetSystemParameterW(
+  JET_INSTANCE instance,
+  JET_SESID sesid,
+  unsigned long paramid,
+  JET_API_PTR* plParam,
+  JET_PWSTR szParam,
+  unsigned long cbMax
+);
+
+#define JetGetSystemParameter __MINGW_NAME_AW(JetGetSystemParameter)
+
+JET_ERR JET_API JetGetTableColumnInfoA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const char* szColumnName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetTableColumnInfoW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const WCHAR* szColumnName,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetTableColumnInfoW __MINGW_NAME_AW(JetGetTableColumnInfo)
+
+JET_ERR JET_API JetGetTableIndexInfoA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const char* szIndexName,
+  void* pvResult,
+  unsigned long cbResult,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetTableIndexInfoW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const WCHAR* szIndexName,
+  void* pvResult,
+  unsigned long cbResult,
+  unsigned long InfoLevel
+);
+
+#define JetGetTableIndexInfo __MINGW_NAME_AW(JetGetTableIndexInfo)
+
+JET_ERR JET_API JetGetTableInfoA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+JET_ERR JET_API JetGetTableInfoW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvResult,
+  unsigned long cbMax,
+  unsigned long InfoLevel
+);
+
+#define JetGetTableInfo __MINGW_NAME_AW(JetGetTableInfo)
+
+JET_ERR JET_API JetGetThreadStats(
+  void* pvResult,
+  unsigned long cbMax
+);
+
+JET_ERR JET_API JetGetTruncateLogInfoInstanceA(
+  JET_INSTANCE instance,
+  char* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetTruncateLogInfoInstanceW(
+  JET_INSTANCE instance,
+  WCHAR* szz,
+  unsigned long cbMax,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetGetVersion(
+  JET_SESID sesid,
+  unsigned long* pwVersion
+);
+
+JET_ERR JET_API JetGotoBookmark(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvBookmark,
+  unsigned long cbBookmark
+);
+
+JET_ERR JET_API JetGotoPosition(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_RECPOS* precpos
+);
+
+JET_ERR JET_API JetGotoSecondaryIndexBookmark(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvSecondaryKey,
+  unsigned long cbSecondaryKey,
+  void* pvPrimaryBookmark,
+  unsigned long cbPrimaryBookmark,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetGrowDatabase(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  unsigned long cpg,
+  unsigned long* pcpgReal
+);
+
+JET_ERR JET_API JetIdle(
+  JET_SESID sesid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetIndexRecordCount(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  unsigned long* pcrec,
+  unsigned long crecMax
+);
+
+JET_ERR JET_API JetInit(
+  JET_INSTANCE* pinstance
+);
+
+JET_ERR JET_API JetInit2(
+  JET_INSTANCE* pinstance,
+  JET_GRBIT grbit
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetInit3A(
+  JET_INSTANCE* pinstance,
+  JET_RSTINFO_A* prstInfo,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetInit3W(
+  JET_INSTANCE* pinstance,
+  JET_RSTINFO_W* prstInfo,
+  JET_GRBIT grbit
+);
+
+#define JetInit3 __MINGW_NAME_AW(JetInit3)
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetIntersectIndexes(
+  JET_SESID sesid,
+  JET_INDEXRANGE* rgindexrange,
+  unsigned long cindexrange,
+  JET_RECORDLIST* precordlist,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetMakeKey(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const void* pvData,
+  unsigned long cbData,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetMove(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  long cRow,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetOpenDatabaseA(
+  JET_SESID sesid,
+  const char* szFilename,
+  const char* szConnect,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetOpenDatabaseW(
+  JET_SESID sesid,
+  const WCHAR* szFilename,
+  const WCHAR* szConnect,
+  JET_DBID* pdbid,
+  JET_GRBIT grbit
+);
+
+#define JetOpenDatabase __MINGW_NAME_AW(JetOpenDatabase)
+
+JET_ERR JET_API JetOpenFileA(
+  const char* szFileName,
+  JET_HANDLE* phfFile,
+  unsigned long* pulFileSizeLow,
+  unsigned long* pulFileSizeHigh
+);
+
+JET_ERR JET_API JetOpenFileW(
+  const WCHAR* szFileName,
+  JET_HANDLE* phfFile,
+  unsigned long* pulFileSizeLow,
+  unsigned long* pulFileSizeHigh
+);
+
+#define JetOpenFile __MINGW_NAME_AW(JetOpenFile)
+
+JET_ERR JET_API JetOpenFileInstanceA(
+  JET_INSTANCE instance,
+  JET_PCSTR szFileName,
+  JET_HANDLE* phfFile,
+  unsigned long* pulFileSizeLow,
+  unsigned long* pulFileSizeHigh
+);
+
+JET_ERR JET_API JetOpenFileInstanceW(
+  JET_INSTANCE instance,
+  JET_PCWSTR szFileName,
+  JET_HANDLE* phfFile,
+  unsigned long* pulFileSizeLow,
+  unsigned long* pulFileSizeHigh
+);
+
+#define JetOpenFileInstance __MINGW_NAME_AW(JetOpenFileInstance)
+
+JET_ERR JET_API JetOpenTableA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szTableName,
+  const void* pvParameters,
+  unsigned long cbParameters,
+  JET_GRBIT grbit,
+  JET_TABLEID* ptableid
+);
+
+JET_ERR JET_API JetOpenTableW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szTableName,
+  const void* pvParameters,
+  unsigned long cbParameters,
+  JET_GRBIT grbit,
+  JET_TABLEID* ptableid
+);
+
+#define JetOpenTable __MINGW_NAME_AW(JetOpenTable)
+
+JET_ERR JET_API JetOpenTemporaryTable(
+  JET_SESID sesid,
+  JET_OPENTEMPORARYTABLE* popentemporarytable
+);
+
+JET_ERR JET_API JetOpenTempTable(
+  JET_SESID sesid,
+  const JET_COLUMNDEF* prgcolumndef,
+  unsigned long ccolumn,
+  JET_GRBIT grbit,
+  JET_TABLEID* ptableid,
+  JET_COLUMNID* prgcolumnid
+);
+
+JET_ERR JET_API JetOpenTempTable2(
+  JET_SESID sesid,
+  const JET_COLUMNDEF* prgcolumndef,
+  unsigned long ccolumn,
+  unsigned long lcid,
+  JET_GRBIT grbit,
+  JET_TABLEID* ptableid,
+  JET_COLUMNID* prgcolumnid
+);
+
+JET_ERR JET_API JetOpenTempTable3(
+  JET_SESID sesid,
+  const JET_COLUMNDEF* prgcolumndef,
+  unsigned long ccolumn,
+  JET_UNICODEINDEX* pidxunicode,
+  JET_GRBIT grbit,
+  JET_TABLEID* ptableid,
+  JET_COLUMNID* prgcolumnid
+);
+
+JET_ERR JET_API JetOSSnapshotAbort(
+  const JET_OSSNAPID snapId,
+  const JET_GRBIT grbit
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetOSSnapshotEnd(
+  const JET_OSSNAPID snapId,
+  const JET_GRBIT grbit
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetOSSnapshotFreezeA(
+  const JET_OSSNAPID snapId,
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_A** paInstanceInfo,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetOSSnapshotFreezeW(
+  const JET_OSSNAPID snapId,
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_W** paInstanceInfo,
+  const JET_GRBIT grbit
+);
+
+#define JetOSSnapshotFreeze __MINGW_NAME_AW(JetOSSnapshotFreeze)
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetOSSnapshotGetFreezeInfoA(
+  const JET_OSSNAPID snapId,
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_A** paInstanceInfo,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetOSSnapshotGetFreezeInfoW(
+  const JET_OSSNAPID snapId,
+  unsigned long* pcInstanceInfo,
+  JET_INSTANCE_INFO_W** paInstanceInfo,
+  const JET_GRBIT grbit
+);
+#define JetOSSnapshotGetFreezeInfo __MINGW_NAME_AW(JetOSSnapshotGetFreezeInfo)
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetOSSnapshotPrepare(
+  JET_OSSNAPID* psnapId,
+  const JET_GRBIT grbit
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetOSSnapshotPrepareInstance(
+  JET_OSSNAPID snapId,
+  JET_INSTANCE instance,
+  const JET_GRBIT grbit
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetOSSnapshotThaw(
+  const JET_OSSNAPID snapId,
+  const JET_GRBIT grbit
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+JET_ERR JET_API JetOSSnapshotTruncateLog(
+  const JET_OSSNAPID snapId,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetOSSnapshotTruncateLogInstance(
+  const JET_OSSNAPID snapId,
+  JET_INSTANCE instance,
+  const JET_GRBIT grbit
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+JET_ERR JET_API JetPrepareUpdate(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  unsigned long prep
+);
+
+JET_ERR JET_API JetReadFile(
+  JET_HANDLE hfFile,
+  void* pv,
+  unsigned long cb,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetReadFileInstance(
+  JET_INSTANCE instance,
+  JET_HANDLE hfFile,
+  void* pv,
+  unsigned long cb,
+  unsigned long* pcb
+);
+
+JET_ERR JET_API JetRegisterCallback(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_CBTYP cbtyp,
+  JET_CALLBACK pCallback,
+  void* pvContext,
+  JET_HANDLE* phCallbackId
+);
+
+JET_ERR JET_API JetRenameColumnA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szName,
+  JET_PCSTR szNameNew,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetRenameColumnW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szName,
+  JET_PCWSTR szNameNew,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetRenameTableA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const char* szName,
+  const char* szNameNew
+);
+
+JET_ERR JET_API JetRenameTableW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  const WCHAR* szName,
+  const WCHAR* szNameNew
+);
+
+JET_ERR JET_API JetResetSessionContext(
+  JET_SESID sesid
+);
+
+JET_ERR JET_API JetResetTableSequential(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetRestoreA(
+  JET_PCSTR sz,
+  JET_PFNSTATUS pfn
+);
+
+JET_ERR JET_API JetRestoreW(
+  JET_PCWSTR sz,
+  JET_PFNSTATUS pfn
+);
+
+#define JetRestore __MINGW_NAME_AW(JetRestore)
+
+JET_ERR JET_API JetRestore2A(
+  JET_PCSTR sz,
+  JET_PCSTR szDest,
+  JET_PFNSTATUS pfn
+);
+
+JET_ERR JET_API JetRestore2W(
+  JET_PCWSTR sz,
+  JET_PCWSTR szDest,
+  JET_PFNSTATUS pfn
+);
+
+#define JetRestore2 __MINGW_NAME_AW(JetRestore2)
+
+JET_ERR JET_API JetRestoreInstanceA(
+  JET_INSTANCE instance,
+  JET_PCSTR sz,
+  JET_PCSTR szDest,
+  JET_PFNSTATUS pfn
+);
+
+JET_ERR JET_API JetRestoreInstanceW(
+  JET_INSTANCE instance,
+  JET_PCWSTR sz,
+  JET_PCWSTR szDest,
+  JET_PFNSTATUS pfn
+);
+
+#define JetRestoreInstance __MINGW_NAME_AW(JetRestoreInstance)
+
+JET_ERR JET_API JetRetrieveColumn(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_COLUMNID columnid,
+  void* pvData,
+  unsigned long cbData,
+  unsigned long* pcbActual,
+  JET_GRBIT grbit,
+  JET_RETINFO* pretinfo
+);
+
+JET_ERR JET_API JetRetrieveColumns(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_RETRIEVECOLUMN* pretrievecolumn,
+  unsigned long cretrievecolumn
+);
+
+JET_ERR JET_API JetRetrieveKey(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvData,
+  unsigned long cbMax,
+  unsigned long* pcbActual,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetRollback(
+  JET_SESID sesid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSeek(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSetColumn(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_COLUMNID columnid,
+  const void* pvData,
+  unsigned long cbData,
+  JET_GRBIT grbit,
+  JET_SETINFO* psetinfo
+);
+
+JET_ERR JET_API JetSetColumnDefaultValueA(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCSTR szTableName,
+  JET_PCSTR szColumnName,
+  const void* pvData,
+  const unsigned long cbData,
+  const JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSetColumnDefaultValueW(
+  JET_SESID sesid,
+  JET_DBID dbid,
+  JET_PCWSTR szTableName,
+  JET_PCWSTR szColumnName,
+  const void* pvData,
+  const unsigned long cbData,
+  const JET_GRBIT grbit
+);
+
+#define JetSetColumnDefaultValue __MINGW_NAME_AW(JetSetColumnDefaultValue)
+
+JET_ERR JET_API JetSetColumns(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_SETCOLUMN* psetcolumn,
+  unsigned long csetcolumn
+);
+
+JET_ERR JET_API JetSetCurrentIndexA(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const char* szIndexName
+);
+
+JET_ERR JET_API JetSetCurrentIndexW(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  const WCHAR* szIndexName
+);
+
+#define JetSetColumnDefaultValue __MINGW_NAME_AW(JetSetColumnDefaultValue)
+
+JET_ERR JET_API JetSetCurrentIndex2A(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSetCurrentIndex2W(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName,
+  JET_GRBIT grbit
+);
+
+#define JetSetColumnDefaultValue2 __MINGW_NAME_AW(JetSetColumnDefaultValue2)
+
+JET_ERR JET_API JetSetCurrentIndex3A(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName,
+  JET_GRBIT grbit,
+  unsigned long itagSequence
+);
+
+JET_ERR JET_API JetSetCurrentIndex3W(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName,
+  JET_GRBIT grbit,
+  unsigned long itagSequence
+);
+
+#define JetSetColumnDefaultValue3 __MINGW_NAME_AW(JetSetColumnDefaultValue3)
+
+JET_ERR JET_API JetSetCurrentIndex4A(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCSTR szIndexName,
+  JET_INDEXID* pindexid,
+  JET_GRBIT grbit,
+  unsigned long itagSequence
+);
+
+JET_ERR JET_API JetSetCurrentIndex4W(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_PCWSTR szIndexName,
+  JET_INDEXID* pindexid,
+  JET_GRBIT grbit,
+  unsigned long itagSequence
+);
+
+#define JetSetCurrentIndex4 __MINGW_NAME_AW(JetSetCurrentIndex4)
+
+JET_ERR JET_API JetSetDatabaseSizeA(
+  JET_SESID sesid,
+  JET_PCSTR szDatabaseName,
+  unsigned long cpg,
+  unsigned long* pcpgReal
+);
+
+JET_ERR JET_API JetSetDatabaseSizeW(
+  JET_SESID sesid,
+  JET_PCWSTR szDatabaseName,
+  unsigned long cpg,
+  unsigned long* pcpgReal
+);
+
+#define JetSetDatabaseSize __MINGW_NAME_AW(JetSetDatabaseSize)
+
+JET_ERR JET_API JetSetIndexRange(
+  JET_SESID sesid,
+  JET_TABLEID tableidSrc,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSetLS(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_LS ls,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetSetSessionContext(
+  JET_SESID sesid,
+  JET_API_PTR ulContext
+);
+
+JET_ERR JET_API JetSetSystemParameterA(
+  JET_INSTANCE* pinstance,
+  JET_SESID sesid,
+  unsigned long paramid,
+  JET_API_PTR lParam,
+  JET_PCSTR szParam
+);
+
+JET_ERR JET_API JetSetSystemParameterW(
+  JET_INSTANCE* pinstance,
+  JET_SESID sesid,
+  unsigned long paramid,
+  JET_API_PTR lParam,
+  JET_PCWSTR szParam
+);
+
+#define JetSetSystemParameter __MINGW_NAME_AW(JetSetSystemParameter)
+
+JET_ERR JET_API JetSetTableSequential(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetStopBackup(void);
+
+JET_ERR JET_API JetStopBackupInstance(
+  JET_INSTANCE instance
+);
+
+JET_ERR JET_API JetStopService(void);
+
+JET_ERR JET_API JetStopServiceInstance(
+  JET_INSTANCE instance
+);
+
+JET_ERR JET_API JetTerm(
+  JET_INSTANCE instance
+);
+
+JET_ERR JET_API JetTerm2(
+  JET_INSTANCE instance,
+  JET_GRBIT grbit
+);
+
+JET_ERR JET_API JetTruncateLog(void);
+
+JET_ERR JET_API JetTruncateLogInstance(
+  JET_INSTANCE instance
+);
+
+JET_ERR JET_API JetUnregisterCallback(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  JET_CBTYP cbtyp,
+  JET_HANDLE hCallbackId
+);
+
+JET_ERR JET_API JetUpdate(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvBookmark,
+  unsigned long cbBookmark,
+  unsigned long* pcbActual
+);
+
+JET_ERR JET_API JetUpdate2(
+  JET_SESID sesid,
+  JET_TABLEID tableid,
+  void* pvBookmark,
+  unsigned long cbBookmark,
+  unsigned long* pcbActual,
+  const JET_GRBIT grbit
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*_INC_ESENT*/
diff --git a/mingw-w64-headers/include/evcoll.h b/mingw-w64-headers/include/evcoll.h
new file mode 100644
index 0000000..22f85c9
--- /dev/null
+++ b/mingw-w64-headers/include/evcoll.h
@@ -0,0 +1,231 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EVCOLL
+#define _INC_EVCOLL
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _EC_SUBSCRIPTION_CONFIGURATION_MODE {
+  EcConfigurationModeNormal         = 0,
+  EcConfigurationModeCustom         = 1,
+  EcConfigurationModeMinLatency     = 2,
+  EcConfigurationModeMinBandwidth   = 3 
+} EC_SUBSCRIPTION_CONFIGURATION_MODE;
+
+typedef enum _EC_SUBSCRIPTION_CONTENT_FORMAT {
+  EcContentFormatEvents         = 1,
+  EcContentFormatRenderedText   = 2 
+} EC_SUBSCRIPTION_CONTENT_FORMAT;
+
+typedef enum _EC_SUBSCRIPTION_CREDENTIALS_TYPE {
+  EcSubscriptionCredDefault        = 0,
+  EcSubscriptionCredNegotiate      = 1,
+  EcSubscriptionCredDigest         = 2,
+  EcSubscriptionCredBasic          = 3,
+  EcSubscriptionCredLocalMachine   = 4 
+} EC_SUBSCRIPTION_CREDENTIALS_TYPE;
+
+typedef enum _EC_SUBSCRIPTION_DELIVERY_MODE {
+  EcDeliveryModePull   = 1,
+  EcDeliveryModePush   = 2 
+} EC_SUBSCRIPTION_DELIVERY_MODE;
+
+typedef enum _EC_SUBSCRIPTION_PROPERTY_ID {
+  EcSubscriptionEnabled                        = 0,
+  EcSubscriptionEventSources                   = 1,
+  EcSubscriptionEventSourceAddress             = 2,
+  EcSubscriptionEventSourceEnabled             = 3,
+  EcSubscriptionEventSourceUserName            = 4,
+  EcSubscriptionEventSourcePassword            = 5,
+  EcSubscriptionDescription                    = 6,
+  EcSubscriptionURI                            = 7,
+  EcSubscriptionConfigurationMode              = 8,
+  EcSubscriptionExpires                        = 9,
+  EcSubscriptionQuery                          = 10,
+  EcSubscriptionTransportName                  = 11,
+  EcSubscriptionTransportPort                  = 12,
+  EcSubscriptionDeliveryMode                   = 13,
+  EcSubscriptionDeliveryMaxItems               = 14,
+  EcSubscriptionDeliveryMaxLatencyTime         = 15,
+  EcSubscriptionHeartbeatInterval              = 16,
+  EcSubscriptionLocale                         = 17,
+  EcSubscriptionContentFormat                  = 18,
+  EcSubscriptionLogFile                        = 19,
+  EcSubscriptionPublisherName                  = 20,
+  EcSubscriptionCredentialsType                = 21,
+  EcSubscriptionCommonUserName                 = 22,
+  EcSubscriptionCommonPassword                 = 23,
+  EcSubscriptionHostName                       = 24,
+  EcSubscriptionReadExistingEvents             = 25,
+  EcSubscriptionDialect                        = 26,
+  EcSubscriptionType                           = 27,
+  EcSubscriptionAllowedIssuerCAs               = 28,
+  EcSubscriptionAllowedSubjects                = 29,
+  EcSubscriptionDeniedSubjects                 = 30,
+  EcSubscriptionAllowedSourceDomainComputers   = 31 
+} EC_SUBSCRIPTION_PROPERTY_ID;
+
+typedef enum _EC_SUBSCRIPTION_RUNTIME_STATUS_ACTIVE_STATUS {
+  EcRuntimeStatusActiveStatusDisabled   = 1,
+  EcRuntimeStatusActiveStatusActive     = 2,
+  EcRuntimeStatusActiveStatusInactive   = 3,
+  EcRuntimeStatusActiveStatusTrying     = 4 
+} EC_SUBSCRIPTION_RUNTIME_STATUS_ACTIVE_STATUS;
+
+typedef enum _EC_SUBSCRIPTION_TYPE {
+  EcSubscriptionTypeSourceInitiated      = 0,
+  EcSubscriptionTypeCollectorInitiated   = 1 
+} EC_SUBSCRIPTION_TYPE;
+
+typedef enum _EC_SUBSCRIPTION_RUNTIME_STATUS_INFO_ID {
+  EcSubscriptionRunTimeStatusActive              = 0,
+  EcSubscriptionRunTimeStatusLastError           = 1,
+  EcSubscriptionRunTimeStatusLastErrorMessage    = 2,
+  EcSubscriptionRunTimeStatusLastErrorTime       = 3,
+  EcSubscriptionRunTimeStatusNextRetryTime       = 4,
+  EcSubscriptionRunTimeStatusEventSources        = 5,
+  EcSubscriptionRunTimeStatusLastHeartbeatTime   = 6 
+} EC_SUBSCRIPTION_RUNTIME_STATUS_INFO_ID;
+
+typedef struct _EC_VARIANT {
+  __MINGW_EXTENSION union {
+    BOOL      BooleanVal;
+    UINT32    UInt32Val;
+    ULONGLONG DateTimeVal;
+    LPCWSTR   StringVal;
+    PBYTE     BinaryVal;
+    WINBOOL   *BooleanArr;
+    INT32*    Int32Arr;
+    LPWSTR    *StringArr;
+  };
+  DWORD Count;
+  DWORD Type;
+} EC_VARIANT, *PEC_VARIANT;
+
+typedef enum _EC_VARIANT_TYPE {
+  EcVarTypeNull                    = 0,
+  EcVarTypeBoolean                 = 1,
+  EcVarTypeUInt32                  = 2,
+  EcVarTypeDateTime                = 3,
+  EcVarTypeString                  = 4,
+  EcVarObjectArrayPropertyHandle   = 5 
+} EC_VARIANT_TYPE;
+
+typedef LPVOID EC_HANDLE;
+
+WINBOOL WINAPI EcClose(
+  EC_HANDLE Object
+);
+
+WINBOOL WINAPI EcDeleteSubscription(
+  LPCWSTR SubscriptionName,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EcEnumNextSubscription(
+  EC_HANDLE SubscriptionEnum,
+  DWORD SubscriptionNameBufferSize,
+  LPWSTR SubscriptionNameBuffer,
+  PDWORD SubscriptionNameBufferUsed
+);
+
+WINBOOL WINAPI EcGetObjectArrayProperty(
+  EC_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  EC_SUBSCRIPTION_PROPERTY_ID PropertyId,
+  DWORD ArrayIndex,
+  DWORD Flags,
+  DWORD PropertyValueBufferSize,
+  PEC_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EcGetObjectArraySize(
+  EC_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  PDWORD ObjectArraySize
+);
+
+WINBOOL WINAPI EcGetSubscriptionProperty(
+  EC_HANDLE Subscription,
+  EC_SUBSCRIPTION_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  DWORD PropertyValueBufferSize,
+  PEC_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EcGetSubscriptionRunTimeStatus(
+  LPCWSTR SubscriptionName,
+  EC_SUBSCRIPTION_RUNTIME_STATUS_INFO_ID StatusInfoId,
+  LPCWSTR EventSourceName,
+  DWORD Flags,
+  DWORD StatusValueBufferSize,
+  PEC_VARIANT StatusValueBuffer,
+  PDWORD StatusValueBufferUsed
+);
+
+WINBOOL WINAPI EcInsertObjectArrayElement(
+  EC_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  DWORD ArrayIndex
+);
+
+EC_HANDLE WINAPI EcOpenSubscription(
+  LPCWSTR SubscriptionName,
+  DWORD AccessMask,
+  DWORD Flags
+);
+
+EC_HANDLE WINAPI EcOpenSubscriptionEnum(
+  DWORD Flags
+);
+
+WINBOOL WINAPI EcRemoveObjectArrayElement(
+  EC_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  DWORD ArrayIndex
+);
+
+WINBOOL WINAPI EcRetrySubscription(
+  LPCWSTR SubscriptionName,
+  LPCWSTR EventSourceName,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EcSaveSubscription(
+  EC_HANDLE Subscription,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EcSetObjectArrayProperty(
+  EC_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  EC_SUBSCRIPTION_PROPERTY_ID PropertyId,
+  DWORD ArrayIndex,
+  DWORD Flags,
+  PEC_VARIANT PropertyValue
+);
+
+WINBOOL WINAPI EcSetSubscriptionProperty(
+  EC_HANDLE Subscription,
+  EC_SUBSCRIPTION_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  PEC_VARIANT PropertyValue
+);
+
+DWORD EjectDiskFromSADrive(
+  LPCWSTR lpComputerName,
+  LPCWSTR  lpAppName,
+  LPCWSTR  lpDeviceName,
+  HWND  hWnd,
+  LPCWSTR  lpTitle,
+  LPCWSTR   lpMessage,
+  DWORD    dwOptions
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EVCOLL*/
diff --git a/mingw-w64-headers/include/evr.h b/mingw-w64-headers/include/evr.h
new file mode 100644
index 0000000..645915c
--- /dev/null
+++ b/mingw-w64-headers/include/evr.h
@@ -0,0 +1,180 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EVR
+#define _INC_EVR
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef enum _EVRFilterConfig_Prefs {
+  EVRFilterConfigPrefs_EnableQoS   = 0x00000001,
+  EVRFilterConfigPrefs_Mask        = 0x00000001
+} EVRFilterConfigPrefs;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef enum MFVideoAspectRatioMode {
+  MFVideoARMode_None               = 0x00000000,
+  MFVideoARMode_PreservePicture    = 0x00000001,
+  MFVideoARMode_PreservePixel      = 0x00000002,
+  MFVideoARMode_NonLinearStretch   = 0x00000004,
+  MFVideoARMode_Mask               = 0x00000007
+} MFVideoAspectRatioMode;
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef enum _MFVideoMixPrefs {
+  MFVideoMixPrefs_ForceHalfInterlace         = 0x00000001,
+  MFVideoMixPrefs_AllowDropToHalfInterlace   = 0x00000002,
+  MFVideoMixPrefs_AllowDropToBob             = 0x00000004,
+  MFVideoMixPrefs_ForceBob                   = 0x00000008,
+  MFVideoMixPrefs_Mask                       = 0x0000000f
+} MFVideoMixPrefs;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef enum MFVideoRenderPrefs {
+  MFVideoRenderPrefs_DoNotRenderBorder       = 0x00000001,
+  MFVideoRenderPrefs_DoNotClipToDevice       = 0x00000002,
+  MFVideoRenderPrefs_AllowOutputThrottling   = 0x00000004,
+  MFVideoRenderPrefs_ForceOutputThrottling   = 0x00000008,
+  MFVideoRenderPrefs_ForceBatching           = 0x00000010,
+  MFVideoRenderPrefs_AllowBatching           = 0x00000020,
+  MFVideoRenderPrefs_ForceScaling            = 0x00000040,
+  MFVideoRenderPrefs_AllowScaling            = 0x00000080,
+  MFVideoRenderPrefs_DoNotRepaintOnStop      = 0x00000100,
+  MFVideoRenderPrefs_Mask                    = 0x000000ff
+} MFVideoRenderPrefs;
+
+typedef enum _MFVP_MESSAGE_TYPE {
+  MFVP_MESSAGE_FLUSH                 = 0x00000000,
+  MFVP_MESSAGE_INVALIDATEMEDIATYPE   = 0x00000001,
+  MFVP_MESSAGE_PROCESSINPUTNOTIFY    = 0x00000002,
+  MFVP_MESSAGE_BEGINSTREAMING        = 0x00000003,
+  MFVP_MESSAGE_ENDSTREAMING          = 0x00000004,
+  MFVP_MESSAGE_ENDOFSTREAM           = 0x00000005,
+  MFVP_MESSAGE_STEP                  = 0x00000006,
+  MFVP_MESSAGE_CANCELSTEP            = 0x00000007
+} MFVP_MESSAGE_TYPE;
+
+typedef struct MFVideoNormalizedRect {
+  float left;
+  float top;
+  float right;
+  float bottom;
+} MFVideoNormalizedRect;
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef  INTERFACE
+#define INTERFACE IMFVideoPresenter
+DECLARE_INTERFACE_(IMFVideoPresenter,IMFClockStateSink)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClockStateSink methods */
+    STDMETHOD_(HRESULT,OnClockPause)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockRestart)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockSetRate)(THIS_ MFTIME hnsSystemTime,float flRate) PURE;
+    STDMETHOD_(HRESULT,OnClockStart)(THIS_ MFTIME hnsSystemTime,LONGLONG llClockStartOffset) PURE;
+    STDMETHOD_(HRESULT,OnClockStop)(THIS_ MFTIME hnssSystemTime) PURE;
+
+    /* IMFVideoPresenter methods */
+    STDMETHOD_(HRESULT,GetCurrentMediaType)(THIS_ IMFVideoMediaType **ppMediaType) PURE;
+    STDMETHOD_(HRESULT,ProcessMessage)(THIS_ MFVP_MESSAGE_TYPE eMessage,ULONG_PTR ulParam) PURE;
+
+    END_INTERFACE
+};
+
+#ifdef COBJMACROS
+#define IMFVideoPresenter_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFVideoPresenter_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFVideoPresenter_Release(This) (This)->pVtbl->Release(This)
+#define IMFVideoPresenter_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
+#define IMFVideoPresenter_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
+#define IMFVideoPresenter_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
+#define IMFVideoPresenter_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
+#define IMFVideoPresenter_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
+#define IMFVideoPresenter_GetCurrentMediaType(This,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,ppMediaType)
+#define IMFVideoPresenter_ProcessMessage(This,eMessage,ulParam) (This)->lpVtbl->ProcessMessage(This,eMessage,ulParam)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFDesiredSample
+DECLARE_INTERFACE_(IMFDesiredSample,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFDesiredSample methods */
+    STDMETHOD(Clear)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetDesiredSampleTimeAndDuration)(THIS_ LONGLONG *phnsSampleTime,LONGLONG *phnsSampleDuration) PURE;
+    STDMETHOD(SetDesiredSampleTimeAndDuration)(THIS_ LONGLONG hnsSampleTime,LONGLONG hnsSampleDuration) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFDesiredSample_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFDesiredSample_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFDesiredSample_Release(This) (This)->pVtbl->Release(This)
+#define IMFDesiredSample_Clear() (This)->lpVtbl->Clear(This)
+#define IMFDesiredSample_GetDesiredSampleTimeAndDuration(This,phnsSampleTime,phnsSampleDuration) (This)->lpVtbl->GetDesiredSampleTimeAndDuration(This,phnsSampleTime,phnsSampleDuration)
+#define IMFDesiredSample_SetDesiredSampleTimeAndDuration(This,hnsSampleTime,hnsSampleDuration) (This)->lpVtbl->SetDesiredSampleTimeAndDuration(This,hnsSampleTime,hnsSampleDuration)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFTrackedSample
+DECLARE_INTERFACE_(IMFTrackedSample,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFTrackedSample methods */
+    STDMETHOD_(HRESULT,SetAllocator)(THIS_ IMFAsyncCallback *pSampleAllocator,IUnknown *pUnkState) PURE;
+
+    END_INTERFACE
+};
+
+#ifdef COBJMACROS
+#define IMFTrackedSample_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTrackedSample_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTrackedSample_Release(This) (This)->pVtbl->Release(This)
+#define IMFTrackedSample_SetAllocator(This,pSampleAllocator,pUnkState) (This)->lpVtbl->SetAllocator(This,pSampleAllocator,pUnkState)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFCreateVideoMixer(IUnknown *pOwner,REFIID riidDevice,REFIID riid,void **ppVideoMixer);
+HRESULT WINAPI MFCreateVideoMixerAndPresenter(IUnknown *pMixerOwner,IUnknown *pPresenterOwner,REFIID riidMixer,void **ppvVideoMixer,REFIID riidPresenter,void **ppvVideoPresenter);
+HRESULT WINAPI MFCreateVideoPresenter(IUnknown *pOwner,REFIID riidDevice,REFIID riid,void **ppvVideoPresenter);
+HRESULT WINAPI MFCreateVideoSampleAllocator(REFIID riid,void** ppSampleAllocator);
+HRESULT WINAPI MFCreateVideoSampleFromSurface(IUnknown *pUnkSurface,IMFSample **ppSample);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_EVR*/
diff --git a/mingw-w64-headers/include/evr9.h b/mingw-w64-headers/include/evr9.h
new file mode 100644
index 0000000..8f3b607
--- /dev/null
+++ b/mingw-w64-headers/include/evr9.h
@@ -0,0 +1,29 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_EVR9
+#define _INC_EVR9
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum  {
+  MFVideoAlphaBitmap_EntireDDS     = 0x00000001,
+  MFVideoAlphaBitmap_SrcColorKey   = 0x00000002,
+  MFVideoAlphaBitmap_SrcRect       = 0x00000004,
+  MFVideoAlphaBitmap_DestRect      = 0x00000008,
+  MFVideoAlphaBitmap_FilterMode    = 0x00000010,
+  MFVideoAlphaBitmap_Alpha         = 0x00000020,
+  MFVideoAlphaBitmap_BitMask       = 0x0000003f 
+} MFVideoAlphaBitmapFlags;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_EVR9*/
diff --git a/mingw-w64-headers/include/fileextd.h b/mingw-w64-headers/include/fileextd.h
new file mode 100644
index 0000000..b9cc440
--- /dev/null
+++ b/mingw-w64-headers/include/fileextd.h
@@ -0,0 +1,157 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FILEEXTD
+#define _INC_FILEEXTD
+
+#if (_WIN32_WINNT < 0x0600) /*XP & 2003*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _FILE_ALLOCATION_INFO {
+  LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFO {
+  DWORD FileAttributes;
+  DWORD ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO;
+
+typedef struct _FILE_BASIC_INFO {
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  DWORD         FileAttributes;
+} FILE_BASIC_INFO, *PFILE_BASIC_INFO;
+
+typedef struct _FILE_COMPRESSION_INFO {
+  LARGE_INTEGER CompressedFileSize;
+  WORD          CompressionFormat;
+  UCHAR         CompressionUnitShift;
+  UCHAR         ChunkShift;
+  UCHAR         ClusterShift;
+  UCHAR         Reserved[3];
+} FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO;
+
+typedef struct _FILE_DISPOSITION_INFO {
+  WINBOOL DeleteFile;
+} FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO;
+
+typedef struct _FILE_END_OF_FILE_INFO {
+  LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO;
+
+typedef struct _FILE_ID_BOTH_DIR_INFO {
+  DWORD         NextEntryOffset;
+  DWORD         FileIndex;
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  LARGE_INTEGER EndOfFile;
+  LARGE_INTEGER AllocationSize;
+  DWORD         FileAttributes;
+  DWORD         FileNameLength;
+  DWORD         EaSize;
+  CCHAR         ShortNameLength;
+  WCHAR         ShortName[12];
+  LARGE_INTEGER FileId;
+  WCHAR         FileName[1];
+} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;
+
+typedef struct _FILE_ID_DESCRIPTOR{
+  DWORD        dwSize;
+  FILE_ID_TYPE Type;
+  __MINGW_EXTENSION union {
+    LARGE_INTEGER FileId;
+    GUID          ObjectId;
+  };
+} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
+
+typedef enum _FILE_ID_TYPE {
+  FileIdType,
+  ObjectIdType,
+  MaximumFileIdType
+} FILE_ID_TYPE, *PFILE_ID_TYPE;
+
+typedef enum _FILE_INFO_BY_HANDLE_CLASS {
+  FileBasicInfo                    = 0,
+  FileStandardInfo                 = 1,
+  FileNameInfo                     = 2,
+  FileRenameInfo                   = 3,
+  FileDispositionInfo              = 4,
+  FileAllocationInfo               = 5,
+  FileEndOfFileInfo                = 6,
+  FileStreamInfo                   = 7,
+  FileCompressionInfo              = 8,
+  FileAttributeTagInfo             = 9,
+  FileIdBothDirectoryInfo          = 10,  // 0xA
+  FileIdBothDirectoryRestartInfo   = 11,  // 0xB
+  FileIoPriorityHintInfo           = 12,  // 0xC
+  FileRemoteProtocolInfo           = 13,  // 0xD
+  MaximumFileInfoByHandlesClass    = 14   // 0xE
+} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
+
+typedef struct _FILE_NAME_INFO {
+  DWORD FileNameLength;
+  WCHAR FileName[1];
+} FILE_NAME_INFO, *PFILE_NAME_INFO;
+
+typedef struct _FILE_RENAME_INFO {
+  BOOL   ReplaceIfExists;
+  HANDLE RootDirectory;
+  DWORD  FileNameLength;
+  WCHAR  FileName[1];
+} FILE_RENAME_INFO, *PFILE_RENAME_INFO;
+
+typedef struct _FILE_STANDARD_INFO {
+  LARGE_INTEGER AllocationSize;
+  LARGE_INTEGER EndOfFile;
+  DWORD          NumberOfLinks;
+  WINBOOL        DeletePending;
+  WINBOOL        Directory;
+} FILE_STANDARD_INFO, *PFILE_STANDARD_INFO;
+
+typedef struct _FILE_STREAM_INFO {
+  DWORD         NextEntryOffset;
+  DWORD         StreamNameLength;
+  LARGE_INTEGER StreamSize;
+  LARGE_INTEGER StreamAllocationSize;
+  WCHAR         StreamName[1];
+} FILE_STREAM_INFO, *PFILE_STREAM_INFO;
+
+WINBASEAPI WINBOOL WINAPI GetFileInformationByHandleEx(
+  HANDLE hFile,
+  FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
+  LPVOID lpFileInformation,
+  DWORD dwBufferSize
+);
+
+WINBASEAPI HANDLE WINAPI OpenFileById(
+  HANDLE hFile,
+  LPFILE_ID_DESCRIPTOR lpFileID,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  DWORD dwFlags
+);
+
+WINBOOL WINAPI SetFileInformationByHandle(
+  HANDLE hFile,
+  FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
+  LPVOID lpFileInformation,
+  DWORD dwBufferSize
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT < 0x0600)*/
+
+#endif /*_INC_FILEEXTD*/
diff --git a/mingw-w64-headers/include/fsrmenums.h b/mingw-w64-headers/include/fsrmenums.h
new file mode 100644
index 0000000..d5526b9
--- /dev/null
+++ b/mingw-w64-headers/include/fsrmenums.h
@@ -0,0 +1,142 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FSRMENUMS
+#define _INC_FSRMENUMS
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _FsrmAccountType {
+  FsrmAccountType_Unknown          = 0,
+  FsrmAccountType_NetworkService   = 1,
+  FsrmAccountType_LocalService     = 2,
+  FsrmAccountType_LocalSystem      = 3,
+  FsrmAccountType_InProc           = 4,
+  FsrmAccountType_External         = 5 
+} FsrmAccountType;
+
+typedef enum _FsrmActionType {
+  FsrmActionType_Unknown    = 0,
+  FsrmActionType_EventLog   = 1,
+  FsrmActionType_Email      = 2,
+  FsrmActionType_Command    = 3,
+  FsrmActionType_Report     = 4 
+} FsrmActionType;
+
+typedef enum _FsrmCollectionState {
+  FsrmCollectionState_Fetching     = 1,
+  FsrmCollectionState_Committing   = 2,
+  FsrmCollectionState_Complete     = 3,
+  FsrmCollectionState_Cancelled    = 4 
+} FsrmCollectionState;
+
+typedef enum _FsrmCommitOptions {
+  FsrmCommitOptions_None           = 0x00000000,
+  FsrmCommitOptions_Asynchronous   = 0x00000001 
+} FsrmCommitOptions;
+
+typedef enum _FsrmEnumOptions {
+  FsrmEnumOptions_None                  = 0x00000000,
+  FsrmEnumOptions_Asynchronous          = 0x00000001,
+  FsrmEnumOptions_CheckRecycleBin       = 0x00000002,
+  FsrmEnumOptions_IncludeClusterNodes   = 0x00000004 
+} FsrmEnumOptions;
+
+typedef enum _FsrmEventType {
+  FsrmEventType_Unknown       = 0,
+  FsrmEventType_Information   = 1,
+  FsrmEventType_Warning       = 2,
+  FsrmEventType_Error         = 3 
+} FsrmEventType;
+
+typedef enum _FsrmFileScreenFlags {
+  FsrmFileScreenFlags_Enforce   = 0x00000001 
+} FsrmFileScreenFlags;
+
+typedef enum _FsrmQuotaFlags {
+  FsrmQuotaFlags_Enforce            = 0x00000100,
+  FsrmQuotaFlags_Disable            = 0x00000200,
+  FsrmQuotaFlags_StatusIncomplete   = 0x00010000,
+  FsrmQuotaFlags_StatusRebuilding   = 0x00020000 
+} FsrmQuotaFlags;
+
+typedef enum _FsrmReportFilter {
+  FsrmReportFilter_MinSize         = 1,
+  FsrmReportFilter_MinAgeDays      = 2,
+  FsrmReportFilter_MaxAgeDays      = 3,
+  FsrmReportFilter_MinQuotaUsage   = 4,
+  FsrmReportFilter_FileGroups      = 5,
+  FsrmReportFilter_Owners          = 6,
+  FsrmReportFilter_NamePattern     = 7,
+  FsrmReportFilter_Property        = 8 
+} FsrmReportFilter;
+
+typedef enum _FsrmReportFormat {
+  FsrmReportFormat_Unknown   = 0,
+  FsrmReportFormat_DHtml     = 1,
+  FsrmReportFormat_Html      = 2,
+  FsrmReportFormat_Txt       = 3,
+  FsrmReportFormat_Csv       = 4,
+  FsrmReportFormat_Xml       = 5 
+} FsrmReportFormat;
+
+typedef enum _FsrmReportGenerationContext {
+  FsrmReportGenerationContext_Undefined           = 1,
+  FsrmReportGenerationContext_ScheduledReport     = 2,
+  FsrmReportGenerationContext_InteractiveReport   = 3,
+  FsrmReportGenerationContext_IncidentReport      = 4 
+} FsrmReportGenerationContext;
+
+typedef enum _FsrmReportLimit {
+  FsrmReportLimit_MaxFiles                   = 1,
+  FsrmReportLimit_MaxFileGroups              = 2,
+  FsrmReportLimit_MaxOwners                  = 3,
+  FsrmReportLimit_MaxFilesPerFileGroup       = 4,
+  FsrmReportLimit_MaxFilesPerOwner           = 5,
+  FsrmReportLimit_MaxFilesPerDuplGroup       = 6,
+  FsrmReportLimit_MaxDuplicateGroups         = 7,
+  FsrmReportLimit_MaxQuotas                  = 8,
+  FsrmReportLimit_MaxFileScreenEvents        = 9,
+  FsrmReportLimit_MaxPropertyValues          = 10,
+  FsrmReportLimit_MaxFilesPerPropertyValue   = 11 
+} FsrmReportLimit;
+
+typedef enum _FsrmReportRunningStatus {
+  FsrmReportRunningStatus_Unknown      = 0,
+  FsrmReportRunningStatus_NotRunning   = 1,
+  FsrmReportRunningStatus_Queued       = 2,
+  FsrmReportRunningStatus_Running      = 3 
+} FsrmReportRunningStatus;
+
+typedef enum _FsrmReportType {
+  FsrmReportType_Unknown                   = 0,
+  FsrmReportType_LargeFiles                = 1,
+  FsrmReportType_FilesByType               = 2,
+  FsrmReportType_LeastRecentlyAccessed     = 3,
+  FsrmReportType_MostRecentlyAccessed      = 4,
+  FsrmReportType_QuotaUsage                = 5,
+  FsrmReportType_FilesByOwner              = 6,
+  FsrmReportType_ExportReport              = 7,
+  FsrmReportType_DuplicateFiles            = 8,
+  FsrmReportType_FileScreenAudit           = 9,
+  FsrmReportType_FilesByProperty           = 10,
+  FsrmReportType_AutomaticClassification   = 11,
+  FsrmReportType_Expiration                = 12 
+} FsrmReportType;
+
+typedef enum _FsrmTemplateApplyOptions {
+  FsrmTemplateApplyOptions_ApplyToDerivedMatching   = 1,
+  FsrmTemplateApplyOptions_ApplyToDerivedAll        = 2 
+} FsrmTemplateApplyOptions;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FSRMENUMS*/
diff --git a/mingw-w64-headers/include/fsrmpipeline.h b/mingw-w64-headers/include/fsrmpipeline.h
new file mode 100644
index 0000000..579528f
--- /dev/null
+++ b/mingw-w64-headers/include/fsrmpipeline.h
@@ -0,0 +1,6 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <fsrmenums.h>
diff --git a/mingw-w64-headers/include/fsrmquota.h b/mingw-w64-headers/include/fsrmquota.h
new file mode 100644
index 0000000..579528f
--- /dev/null
+++ b/mingw-w64-headers/include/fsrmquota.h
@@ -0,0 +1,6 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <fsrmenums.h>
diff --git a/mingw-w64-headers/include/fsrmreports.h b/mingw-w64-headers/include/fsrmreports.h
new file mode 100644
index 0000000..579528f
--- /dev/null
+++ b/mingw-w64-headers/include/fsrmreports.h
@@ -0,0 +1,6 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <fsrmenums.h>
diff --git a/mingw-w64-headers/include/fsrmscreen.h b/mingw-w64-headers/include/fsrmscreen.h
new file mode 100644
index 0000000..579528f
--- /dev/null
+++ b/mingw-w64-headers/include/fsrmscreen.h
@@ -0,0 +1,6 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <fsrmenums.h>
diff --git a/mingw-w64-headers/include/functiondiscoveryapi.h b/mingw-w64-headers/include/functiondiscoveryapi.h
new file mode 100644
index 0000000..cd89e0a
--- /dev/null
+++ b/mingw-w64-headers/include/functiondiscoveryapi.h
@@ -0,0 +1,28 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FUNCTIONDISCOVERYAPI
+#define _INC_FUNCTIONDISCOVERYAPI
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagQueryUpdateAction {
+  QUA_ADD      = 0,
+  QUA_REMOVE   = 1,
+  QUA_CHANGE   = 2 
+} QueryUpdateAction;
+
+typedef enum tagSystemVisibilityFlags {
+  SVF_SYSTEM   = 0,
+  SVF_USER     = 1 
+} SystemVisibilityFlags;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FUNCTIONDISCOVERYAPI*/
diff --git a/mingw-w64-headers/include/functiondiscoveryconstraints.h b/mingw-w64-headers/include/functiondiscoveryconstraints.h
new file mode 100644
index 0000000..4e0ce84
--- /dev/null
+++ b/mingw-w64-headers/include/functiondiscoveryconstraints.h
@@ -0,0 +1,31 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FUNCTIONDISCOVERYCONSTRAINTS
+#define _INC_FUNCTIONDISCOVERYCONSTRAINTS
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagPropertyConstraint {
+  QC_EQUALS               = 0,
+  QC_NOTEQUAL             = 1,
+  QC_LESSTHAN             = 2,
+  QC_LESSTHANOREQUAL      = 3,
+  QC_GREATERTHAN          = 4,
+  QC_GREATERTHANOREQUAL   = 5,
+  QC_STARTSWITH           = 6,
+  QC_EXISTS               = 7,
+  QC_DOESNOTEXIST         = 8,
+  QC_CONTAINS             = 8 
+} PropertyConstraint;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FUNCTIONDISCOVERYCONSTRAINTS*/
diff --git a/mingw-w64-headers/include/fwpmtypes.h b/mingw-w64-headers/include/fwpmtypes.h
new file mode 100644
index 0000000..a487df4
--- /dev/null
+++ b/mingw-w64-headers/include/fwpmtypes.h
@@ -0,0 +1,404 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FWPMTYPES
+#define _INC_FWPMTYPES
+#include <fwptypes.h>
+#include <ipsectypes.h>
+#include <iketypes.h>
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef UINT32 FWP_ACTION_TYPE;
+
+typedef enum FWPM_PROVIDER_CONTEXT_TYPE_ {
+  FWPM_IPSEC_KEYING_CONTEXT,
+  FWPM_IPSEC_IKE_QM_TRANSPORT_CONTEXT,
+  FWPM_IPSEC_IKE_QM_TUNNEL_CONTEXT,
+  FWPM_IPSEC_AUTHIP_QM_TRANSPORT_CONTEXT,
+  FWPM_IPSEC_AUTHIP_QM_TUNNEL_CONTEXT,
+  FWPM_IPSEC_IKE_MM_CONTEXT,
+  FWPM_IPSEC_AUTHIP_MM_CONTEXT,
+  FWPM_CLASSIFY_OPTIONS_CONTEXT,
+  FWPM_GENERAL_CONTEXT,
+  FWPM_IPSEC_IKEV2_QM_TUNNEL_CONTEXT,
+  FWPM_IPSEC_IKEV2_MM_CONTEXT,
+  FWPM_DOSP_CONTEXT,
+  FWPM_PROVIDER_CONTEXT_TYPE_MAX 
+} FWPM_PROVIDER_CONTEXT_TYPE;
+
+typedef enum FWPM_NET_EVENT_TYPE_ {
+  FWPM_NET_EVENT_TYPE_IKEEXT_MM_FAILURE,
+  FWPM_NET_EVENT_TYPE_IKEEXT_QM_FAILURE,
+  FWPM_NET_EVENT_TYPE_IKEEXT_EM_FAILURE,
+  FWPM_NET_EVENT_TYPE_CLASSIFY_DROP,
+  FWPM_NET_EVENT_TYPE_IPSEC_KERNEL_DROP,
+  FWPM_NET_EVENT_TYPE_IPSEC_DOSP_DROP,
+  FWPM_NET_EVENT_TYPE_MAX 
+} FWPM_NET_EVENT_TYPE;
+
+typedef struct FWPM_ACTION0_ {
+  FWP_ACTION_TYPE type;
+  __MINGW_EXTENSION union {
+    GUID filterType;
+    GUID calloutKey;
+  };
+} FWPM_ACTION0;
+
+typedef struct FWPM_DISPLAY_DATA0_ {
+  wchar_t *name;
+  wchar_t *description;
+} FWPM_DISPLAY_DATA0;
+
+typedef struct FWPM_SESSION0_ {
+  GUID               sessionKey;
+  FWPM_DISPLAY_DATA0 displayData;
+  UINT32             flags;
+  UINT32             txnWaitTimeoutInMSec;
+  DWORD              processId;
+  SID                *sid;
+  wchar_t            *username;
+  WINBOOL            kernelMode;
+} FWPM_SESSION0;
+
+typedef struct FWPM_CALLOUT_ENUM_TEMPLATE0_ {
+  GUID *providerKey;
+  GUID layerKey;
+} FWPM_CALLOUT_ENUM_TEMPLATE0;
+
+typedef struct FWPM_CALLOUT_SUBSCRIPTION0_ {
+  FWPM_CALLOUT_ENUM_TEMPLATE0 *enumTemplate;
+  UINT32                      flags;
+  GUID                        sessionKey;
+} FWPM_CALLOUT_SUBSCRIPTION0;
+
+typedef enum FWPM_CHANGE_TYPE_ {
+  FWPM_CHANGE_ADD        = 1,
+  FWPM_CHANGE_DELETE,
+  FWPM_CHANGE_TYPE_MAX 
+} FWPM_CHANGE_TYPE;
+
+typedef struct FWPM_CALLOUT_CHANGE0_ {
+  FWPM_CHANGE_TYPE changeType;
+  GUID             calloutKey;
+  UINT32           calloutId;
+} FWPM_CALLOUT_CHANGE0;
+
+typedef struct FWPM_CALLOUT0_ {
+  GUID               calloutKey;
+  FWPM_DISPLAY_DATA0 displayData;
+  UINT32             flags;
+  GUID               *providerKey;
+  FWP_BYTE_BLOB      providerData;
+  GUID               applicableLayer;
+  UINT32             calloutId;
+} FWPM_CALLOUT0;
+
+typedef struct FWPM_CLASSIFY_OPTION0_ {
+  FWP_CLASSIFY_OPTION_TYPE type;
+  FWP_VALUE0               value;
+} FWPM_CLASSIFY_OPTION0;
+
+typedef struct FWPM_CLASSIFY_OPTIONS0_ {
+  UINT32                numOptions;
+  FWPM_CLASSIFY_OPTION0 *options;
+} FWPM_CLASSIFY_OPTIONS0;
+
+typedef enum FWPM_ENGINE_OPTION_ {
+  FWPM_ENGINE_COLLECT_NET_EVENTS,
+  FWPM_ENGINE_NET_EVENT_MATCH_ANY_KEYWORDS,
+  FWPM_ENGINE_NAME_CACHE,
+  FWPM_ENGINE_OPTION_MAX 
+} FWPM_ENGINE_OPTION;
+
+typedef enum FWPM_FIELD_TYPE_ {
+  FWPM_FIELD_RAW_DATA,
+  FWPM_FIELD_IP_ADDRESS,
+  FWPM_FIELD_FLAGS,
+  FWPM_FIELD_TYPE_MAX 
+} FWPM_FIELD_TYPE;
+
+typedef struct FWPM_FIELD0_ {
+  GUID            *fieldKey;
+  FWPM_FIELD_TYPE type;
+  FWP_DATA_TYPE   dataType;
+} FWPM_FIELD0;
+
+typedef struct FWPM_FILTER_CHANGE0_ {
+  FWPM_CHANGE_TYPE changeType;
+  GUID             filterKey;
+  UINT64           filterId;
+} FWPM_FILTER_CHANGE0;
+
+typedef struct FWPM_FILTER_CONDITION0_ {
+  GUID                fieldKey;
+  FWP_MATCH_TYPE      matchType;
+  FWP_CONDITION_VALUE conditionValue;
+} FWPM_FILTER_CONDITION0;
+
+typedef struct FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0_ {
+  GUID                       *providerKey;
+  FWPM_PROVIDER_CONTEXT_TYPE providerContextType;
+} FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0;
+
+typedef struct FWPM_FILTER_ENUM_TEMPLATE0_ {
+  GUID                                 *providerKey;
+  GUID                                 layerKey;
+  FWP_FILTER_ENUM_TYPE                 enumType;
+  UINT32                               flags;
+  FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0 *providerContextTemplate;
+  UINT32                               numFilterConditions;
+  FWPM_FILTER_CONDITION0               *filterCondition;
+  UINT32                               actionMask;
+  GUID                                 *calloutKey;
+} FWPM_FILTER_ENUM_TEMPLATE0;
+
+typedef struct FWPM_FILTER_SUBSCRIPTION0_ {
+  FWPM_FILTER_ENUM_TEMPLATE0 *enumTemplate;
+  UINT32                     flags;
+  GUID                       sessionKey;
+} FWPM_FILTER_SUBSCRIPTION0;
+
+typedef struct FWPM_FILTER0_ {
+  GUID                   filterKey;
+  FWPM_DISPLAY_DATA0     displayData;
+  UINT32                 flags;
+  GUID                   *providerKey;
+  FWP_BYTE_BLOB          providerData;
+  GUID                   layerKey;
+  GUID                   subLayerKey;
+  FWP_VALUE0             weight;
+  UINT32                 numFilterConditions;
+  FWPM_FILTER_CONDITION0 *filterCondition;
+  FWPM_ACTION0           action;
+  __MINGW_EXTENSION union {
+    UINT64 rawContext;
+    GUID   providerContextKey;
+  };
+  GUID                   *reserved;
+  UINT64                 filterId;
+  FWP_VALUE0             effectiveWeight;
+} FWPM_FILTER0;
+
+typedef struct FWPM_LAYER_ENUM_TEMPLATE0_ {
+  UINT64 reserved;
+} FWPM_LAYER_ENUM_TEMPLATE0;
+
+typedef struct FWPM_LAYER0_ {
+  GUID               layerKey;
+  FWPM_DISPLAY_DATA0 displayData;
+  UINT32             flags;
+  UINT32             numFields;
+  FWPM_FIELD0        *field;
+  GUID               defaultSubLayerKey;
+  UINT16             layerId;
+} FWPM_LAYER0;
+
+typedef struct FWPM_NET_EVENT_CLASSIFY_DROP0_ {
+  UINT64 filterId;
+  UINT16 layerId;
+} FWPM_NET_EVENT_CLASSIFY_DROP0;
+
+typedef struct FWPM_NET_EVENT_ENUM_TEMPLATE0_ {
+  FILETIME               startTime;
+  FILETIME               endTime;
+  UINT32                 numFilterConditions;
+  FWPM_FILTER_CONDITION0 *filterCondition;
+} FWPM_NET_EVENT_ENUM_TEMPLATE0;
+
+typedef struct FWPM_NET_EVENT_HEADER0_ {
+  FILETIME       timeStamp;
+  UINT32         flags;
+  FWP_IP_VERSION ipVersion;
+  UINT8          ipProtocol;
+  __MINGW_EXTENSION union {
+    UINT32           localAddrV4;
+    FWP_BYTE_ARRAY16 localAddrV6;
+  };
+  __MINGW_EXTENSION union {
+    UINT32           remoteAddrV4;
+    FWP_BYTE_ARRAY16 remoteAddrV6;
+  };
+  UINT16         localPort;
+  UINT16         remotePort;
+  UINT32         scopeId;
+  FWP_BYTE_BLOB  appId;
+  SID            *userId;
+} FWPM_NET_EVENT_HEADER0;
+
+#define IKEEXT_CERT_HASH_LEN 20
+
+typedef struct FWPM_NET_EVENT_IKEEXT_UM_FAILURE0_ {
+  UINT32                            failureErrorCode;
+  IPSEC_FAILURE_POINT               failurePoint;
+  UINT32                            flags;
+  IKEEXT_EM_SA_STATE                emState;
+  IKEEXT_SA_ROLE                    saRole;
+  IKEEXT_AUTHENTICATION_METHOD_TYPE emAuthMethod;
+  UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
+  UINT64                            mmId;
+  UINT64                            qmFilterId;
+} FWPM_NET_EVENT_IKEEXT_UM_FAILURE0;
+
+typedef struct FWPM_NET_EVENT_IKEEXT_MM_FAILURE0_ {
+  UINT32                            failureErrorCode;
+  IPSEC_FAILURE_POINT               failurePoint;
+  UINT32                            flags;
+  IKEEXT_KEY_MODULE_TYPE            keyingModuleType;
+  IKEEXT_MM_SA_STATE                mmState;
+  IKEEXT_SA_ROLE                    saRole;
+  IKEEXT_AUTHENTICATION_METHOD_TYPE mmAuthMethod;
+  UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
+  UINT64                            mmId;
+  UINT64                            mmFilterId;
+} FWPM_NET_EVENT_IKEEXT_MM_FAILURE0;
+
+typedef struct FWPM_BET_EVENT_IKEEXT_QM_FAILURE0 {
+  UINT32                 failureErrorCode;
+  IPSEC_FAILURE_POINT    failurePoint;
+  IKEEXT_KEY_MODULE_TYPE keyingModuleType;
+  IKEEXT_QM_SA_STATE     qmState;
+  IKEEXT_SA_ROLE         saRole;
+  IPSEC_TRAFFIC_TYPE     saTrafficType;
+  __MINGW_EXTENSION union {
+    FWP_CONDITION_VALUE0 localSubNet;
+    ;      // case(IPSEC_TRAFFIC_TYPE_TRANSPORT)
+  };
+  __MINGW_EXTENSION union {
+    FWP_CONDITION_VALUE0 remoteSubNet;
+    ;      // case(IPSEC_TRAFFIC_TYPE_TRANSPORT)
+  };
+  UINT64                 qmFilterId;
+} FWPM_NET_EVENT_IKEEXT_QM_FAILURE0;
+
+typedef UINT32 IPSEC_SA_SPI;
+
+typedef struct FWPM_NET_EVENT_IPSEC_KERNEL_DROP0_ {
+  INT32         failureStatus;
+  FWP_DIRECTION direction;
+  IPSEC_SA_SPI  spi;
+  UINT64        filterId;
+  UINT16        layerId;
+} FWPM_NET_EVENT_IPSEC_KERNEL_DROP0;
+
+typedef struct FWPM_NET_EVENT_IPSEC_DOSP_DROP0_ {
+  FWP_IP_VERSION ipVersion;
+  __MINGW_EXTENSION union {
+    UINT32 publicHostV4Addr;
+    UINT8  publicHostV6Addr[16];
+  };
+  __MINGW_EXTENSION union {
+    UINT32 internalHostV4Addr;
+    UINT8  internalHostV6Addr[16];
+  };
+  INT32          failureStatus;
+  FWP_DIRECTION  direction;
+} FWPM_NET_EVENT_IPSEC_DOSP_DROP0;
+
+typedef struct FWPM_NET_EVENT0_ {
+  FWPM_NET_EVENT_HEADER0 header;
+  FWPM_NET_EVENT_TYPE    type;
+  __MINGW_EXTENSION union {
+    FWPM_NET_EVENT_IKEEXT_MM_FAILURE0 *ikeMmFailure;
+    FWPM_NET_EVENT_IKEEXT_QM_FAILURE0 *ikeQmFailure;
+    FWPM_NET_EVENT_IKEEXT_EM_FAILURE0 *ikeEmFailure;
+    FWPM_NET_EVENT_CLASSIFY_DROP0     *classifyDrop;
+    FWPM_NET_EVENT_IPSEC_KERNEL_DROP0 *ipsecDrop;
+    FWPM_NET_EVENT_IPSEC_DOSP_DROP0   *idpDrop;
+  };
+} FWPM_NET_EVENT0;
+
+typedef struct FWPM_PROVIDER_CHANGE0_ {
+  FWPM_CHANGE_TYPE changeType;
+  GUID             providerKey;
+} FWPM_PROVIDER_CHANGE0;
+
+typedef struct FWPM_PROVIDER_CONTEXT_CHANGE0_ {
+  FWPM_CHANGE_TYPE changeType;
+  GUID             providerContextKey;
+  UINT64           providerContextId;
+} FWPM_PROVIDER_CONTEXT_CHANGE0;
+
+typedef struct FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0_ {
+  FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0 *enumTemplate;
+  UINT32                               flags;
+  GUID                                 sessionKey;
+} FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0;
+
+typedef struct FWPM_PROVIDER_CONTEXT0_ {
+  GUID                       providerContextKey;
+  FWPM_DISPLAY_DATA0         displayData;
+  UINT32                     flags;
+  GUID                       *providerKey;
+  FWP_BYTE_BLOB              providerData;
+  FWPM_PROVIDER_CONTEXT_TYPE type;
+  __MINGW_EXTENSION union {
+    IPSEC_KEYING_POLICY0    *keyingPolicy;
+    IPSEC_TRANSPORT_POLICY0 *ikeQmTransportPolicy;
+    IPSEC_TUNNEL_POLICY0    *ikeQmTunnelPolicy;
+    IPSEC_TRANSPORT_POLICY0 *authipQmTransportPolicy;
+    IPSEC_TUNNEL_POLICY0    *authipQmTunnelPolicy;
+    IKEEXT_POLICY0          *ikeMmPolicy;
+    IKEEXT_POLICY0          *authIpMmPolicy;
+    FWP_BYTE_BLOB           *dataBuffer;
+    FWPM_CLASSIFY_OPTIONS0  *classifyOptions;
+  };
+  UINT64                     providerContextId;
+} FWPM_PROVIDER_CONTEXT0;
+
+typedef struct FWPM_PROVIDER_ENUM_TEMPLATE0_ {
+  UINT64 reserved;
+} FWPM_PROVIDER_ENUM_TEMPLATE0;
+
+typedef struct FWPM_PROVIDER_SUBSCRIPTION0_ {
+  FWPM_PROVIDER_ENUM_TEMPLATE0 *enumTemplate;
+  UINT32                       flags;
+  GUID                         sessionKey;
+} FWPM_PROVIDER_SUBSCRIPTION0;
+
+typedef struct FWPM_PROVIDER0_ {
+  GUID               providerKey;
+  FWPM_DISPLAY_DATA0 displayData;
+  UINT32             flags;
+  FWP_BYTE_BLOB      providerData;
+  wchar_t            *serviceName;
+} FWPM_PROVIDER0;
+
+typedef struct FWPM_SESSION_ENUM_TEMPLATE0_ {
+  UINT64 reserved;
+} FWPM_SESSION_ENUM_TEMPLATE0;
+
+typedef struct FWPM_SUBLAYER_CHANGE0_ {
+  FWPM_CHANGE_TYPE changeType;
+  GUID             subLayerKey;
+} FWPM_SUBLAYER_CHANGE0;
+
+typedef struct FWPM_SUBLAYER_ENUM_TEMPLATE0_ {
+  GUID *providerKey;
+} FWPM_SUBLAYER_ENUM_TEMPLATE0;
+
+typedef struct FWPM_SUBLAYER_SUBSCRIPTION0_ {
+  FWPM_SUBLAYER_ENUM_TEMPLATE0 *enumTemplate;
+  UINT32                       flags;
+  GUID                         sessionKey;
+} FWPM_SUBLAYER_SUBSCRIPTION0;
+
+typedef struct FWPM_SUBLAYER0_ {
+  GUID               subLayerKey;
+  FWPM_DISPLAY_DATA0 displayData;
+  UINT16             flags;
+  GUID               *providerKey;
+  FWP_BYTE_BLOB      providerData;
+  UINT16             weight;
+} FWPM_SUBLAYER0;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FWPMTYPES*/
diff --git a/mingw-w64-headers/include/fwpmu.h b/mingw-w64-headers/include/fwpmu.h
new file mode 100644
index 0000000..7dcd1fd
--- /dev/null
+++ b/mingw-w64-headers/include/fwpmu.h
@@ -0,0 +1,710 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FWPMU
+#define _INC_FWPMU
+#include <rpc.h>
+#include <fwptypes.h>
+#include <fwpmtypes.h>
+#include <iketypes.h>
+#include <ipsectypes.h>
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void ( CALLBACK *FWPM_CALLOUT_CHANGE_CALLBACK0 )(
+  void *context,
+  const FWPM_CALLOUT_CHANGE0 *change
+);
+
+typedef void ( CALLBACK *FWPM_FILTER_CHANGE_CALLBACK0 )(
+  void *context,
+  const FWPM_FILTER_CHANGE0 *change
+);
+
+typedef void ( CALLBACK *FWPM_PROVIDER_CHANGE_CALLBACK0 )(
+  void *context,
+  const FWPM_PROVIDER_CHANGE0 *change
+);
+
+typedef void ( CALLBACK *FWPM_PROVIDER_CONTEXT_CHANGE_CALLBACK0 )(
+  void *context,
+  const FWPM_PROVIDER_CONTEXT_CHANGE0 *change
+);
+
+typedef void ( CALLBACK *FWPM_SUBLAYER_CHANGE_CALLBACK0 )(
+  void *context,
+  const FWPM_SUBLAYER_CHANGE0 *change
+);
+
+DWORD WINAPI FwpmCalloutSubscribeChanges0(
+  HANDLE engineHandle,
+  const FWPM_CALLOUT_SUBSCRIPTION0 *subscription,
+  FWPM_CALLOUT_CHANGE_CALLBACK0 callback,
+  void *context,
+  HANDLE *changeHandle
+);
+
+DWORD WINAPI FwpmEngineOpen0(
+  const wchar_t *serverName,
+  UINT32 authnService,
+  SEC_WINNT_AUTH_IDENTITY_W *authIdentity,
+  const FWPM_SESSION0 *session,
+  HANDLE *engineHandle
+);
+
+DWORD WINAPI FwpmCalloutAdd0(
+  HANDLE engineHandle,
+  const FWPM_CALLOUT0 *callout,
+  PSECURITY_DESCRIPTOR sd,
+  UINT32 *id
+);
+
+DWORD WINAPI FwpmFilterAdd0(
+  HANDLE engineHandle,
+  const FWPM_FILTER0 *filter,
+  PSECURITY_DESCRIPTOR sd,
+  UINT64 *id
+);
+
+DWORD WINAPI FwpmEngineClose0(
+  HANDLE engineHandle
+);
+
+DWORD WINAPI FwpmFilterSubscribeChanges0(
+  HANDLE engineHandle,
+  const FWPM_FILTER_SUBSCRIPTION0 *subscription,
+  FWPM_FILTER_CHANGE_CALLBACK0 callback,
+  void *context,
+  HANDLE *changeHandle
+);
+
+DWORD WINAPI FwpmProviderSubscribeChanges0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER_SUBSCRIPTION0 *subscription,
+  FWPM_PROVIDER_CHANGE_CALLBACK0 callback,
+  void *context,
+  HANDLE *changeHandle
+);
+
+DWORD WINAPI FwpmProviderContextSubscribeChanges0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0 *subscription,
+  FWPM_PROVIDER_CONTEXT_CHANGE_CALLBACK0 callback,
+  void *context,
+  HANDLE *changeHandle
+);
+
+DWORD WINAPI FwpmProviderContextAdd0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER_CONTEXT0 *providerContext,
+  PSECURITY_DESCRIPTOR sd,
+  UINT64 *id
+);
+
+DWORD WINAPI FwpmSubLayerSubscribeChanges0(
+  HANDLE engineHandle,
+  const FWPM_SUBLAYER_SUBSCRIPTION0 *subscription,
+  FWPM_SUBLAYER_CHANGE_CALLBACK0 callback,
+  void *context,
+  HANDLE *changeHandle
+);
+
+DWORD WINAPI FwpmSubLayerAdd0(
+  HANDLE engineHandle,
+  const FWPM_SUBLAYER0 *subLayer,
+  PSECURITY_DESCRIPTOR sd
+);
+
+DWORD WINAPI FwpmCalloutCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_CALLOUT_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmCalloutDeleteById0(
+  HANDLE engineHandle,
+  UINT32 id
+);
+
+DWORD WINAPI FwpmCalloutDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmCalloutDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmCalloutEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_CALLOUT0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+void WINAPI FwpmFreeMemory0(
+  void **p
+);
+
+DWORD WINAPI FwpmCalloutGetById0(
+  HANDLE engineHandle,
+  UINT32 id,
+  FWPM_CALLOUT0 **callout
+);
+
+DWORD WINAPI FwpmCalloutGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_CALLOUT0 **callout
+);
+
+DWORD WINAPI FwpmCalloutGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmCalloutSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmCalloutSubscriptionsGet0(
+  HANDLE engineHandle,
+  FWPM_CALLOUT_SUBSCRIPTION0 ***entries,
+  UINT32 *numEntries
+);
+
+DWORD WINAPI FwpmCalloutUnsubscribeChanges0(
+  HANDLE engineHandle,
+  HANDLE changeHandle
+);
+
+#define FWPM_NET_EVENT_KEYWORD_INBOUND_MCAST 1
+#define FWPM_NET_EVENT_KEYWORD_INBOUND_BCAST 2
+
+DWORD WINAPI FwpmEngineGetOption0(
+  HANDLE engineHandle,
+  FWPM_ENGINE_OPTION option,
+  FWP_VALUE0 **value
+);
+
+DWORD WINAPI FwpmEngineGetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmEngineSetOption0(
+  HANDLE engineHandle,
+  FWPM_ENGINE_OPTION option,
+  const FWP_VALUE0 *newValue
+);
+
+DWORD WINAPI IPsecSaDbSetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmFilterCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_FILTER_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmFilterDeleteById0(
+  HANDLE engineHandle,
+  UINT64 id
+);
+
+DWORD WINAPI FwpmFilterDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmFilterDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmFilterEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_FILTER0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmFilterGetById0(
+  HANDLE engineHandle,
+  UINT64 id,
+  FWPM_FILTER0 **filter
+);
+
+DWORD WINAPI FwpmFilterGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_FILTER0 **filter
+);
+
+DWORD WINAPI FwpmFilterGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmFilterSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmFilterSubscriptionsGet0(
+  HANDLE engineHandle,
+  FWPM_FILTER_SUBSCRIPTION0 ***entries,
+  UINT32 *numEntries
+);
+
+DWORD WINAPI FwpmFilterUnsubscribeChanges0(
+  HANDLE engineHandle,
+  HANDLE changeHandle
+);
+
+DWORD WINAPI FwpmGetAppIdFromFileName0(
+  const wchar_t *fileName,
+  FWP_BYTE_BLOB **appId
+);
+
+DWORD WINAPI FwpmIpsecTunnelAdd0(
+  HANDLE engineHandle,
+  UINT32 flags,
+  const FWPM_PROVIDER_CONTEXT0 *mainModePolicy,
+  const FWPM_PROVIDER_CONTEXT0 *tunnelPolicy,
+  UINT32 numFilterConditions,
+  const FWPM_FILTER_CONDITION0 *filterConditions,
+  PSECURITY_DESCRIPTOR sd
+);
+
+DWORD WINAPI FwpmIPsecTunnelDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmLayerCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_LAYER_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmLayerDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmLayerEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_LAYER0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmLayerGetById0(
+  HANDLE engineHandle,
+  UINT16 id,
+  FWPM_LAYER0 **layer
+);
+
+DWORD WINAPI FwpmLayerGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_LAYER0 **layer
+);
+
+DWORD WINAPI FwpmLayerGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmLayerSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmNetEventCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_NET_EVENT_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmNetEventDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmNetEventEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_NET_EVENT0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmNetEventsGetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmNetEventsSetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmProviderAdd0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER0 *provider,
+  PSECURITY_DESCRIPTOR sd
+);
+
+DWORD WINAPI FwpmProviderContextCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmProviderContextDeleteById0(
+  HANDLE engineHandle,
+  UINT64 id
+);
+
+DWORD WINAPI FwpmProviderContextDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmProviderContextDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmProviderContextEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_PROVIDER_CONTEXT0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmProviderContextGetById0(
+  HANDLE engineHandle,
+  UINT64 id,
+  FWPM_PROVIDER_CONTEXT0 **providerContext
+);
+
+DWORD WINAPI FwpmProviderContextGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_PROVIDER_CONTEXT0 **providerContext
+);
+
+DWORD WINAPI FwpmProviderContextGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmProviderContextSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmProviderContextSubscriptionsGet0(
+  HANDLE engineHandle,
+  FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0 ***entries,
+  UINT32 *numEntries
+);
+
+DWORD WINAPI FwpmProviderContextUnsubscribeChanges0(
+  HANDLE engineHandle,
+  HANDLE changeHandle
+);
+
+DWORD WINAPI FwpmProviderCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_PROVIDER_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmProviderDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmProviderDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmProviderEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_PROVIDER0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmProviderGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_PROVIDER0 **provider
+);
+
+DWORD WINAPI FwpmProviderGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmProviderSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmProviderSubscriptionsGet0(
+  HANDLE engineHandle,
+  FWPM_PROVIDER_SUBSCRIPTION0 ***entries,
+  UINT32 *numEntries
+);
+
+DWORD WINAPI FwpmProviderUnsubscribeChanges0(
+  HANDLE engineHandle,
+  HANDLE changeHandle
+);
+
+DWORD WINAPI FwpmSessionCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_SESSION_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmSessionDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmSessionEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_SESSION0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmSubLayerCreateEnumHandle0(
+  HANDLE engineHandle,
+  const FWPM_SUBLAYER_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI FwpmSubLayerDeleteByKey0(
+  HANDLE engineHandle,
+  const GUID *key
+);
+
+DWORD WINAPI FwpmSubLayerDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI FwpmSubLayerEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  FWPM_SUBLAYER0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI FwpmSubLayerGetByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  FWPM_SUBLAYER0 **subLayer
+);
+
+DWORD WINAPI FwpmSubLayerGetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI FwpmCalloutSetSecurityInfoByKey0(
+  HANDLE engineHandle,
+  const GUID *key,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI FwpmSubLayerSubscriptionsGet0(
+  HANDLE engineHandle,
+  FWPM_SUBLAYER_SUBSCRIPTION0 ***entries,
+  UINT32 *numEntries
+);
+
+DWORD WINAPI FwpmSubLayerUnsubscribeChanges0(
+  HANDLE engineHandle,
+  HANDLE changeHandle
+);
+
+DWORD WINAPI FwpmTransactionAbort0(
+  HANDLE engineHandle
+);
+
+DWORD WINAPI FwpmTransactionBegin0(
+  HANDLE engineHandle,
+  UINT32 flags
+);
+
+DWORD WINAPI FwpmTransactionCommit0(
+  HANDLE engineHandle
+);
+
+DWORD WINAPI IkeextGetStatistics0(
+  HANDLE engineHandle,
+  IKEEXT_STATISTICS0 *ikeextStatistics
+);
+
+DWORD WINAPI IkeextSaDbGetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  PSID *sidOwner,
+  PSID *sidGroup,
+  PACL *dacl,
+  PACL *sacl,
+  PSECURITY_DESCRIPTOR *securityDescriptor
+);
+
+DWORD WINAPI IkeextSaCreateEnumHandle0(
+  HANDLE engineHandle,
+  const IKEEXT_SA_ENUM_TEMPLATE0 *enumTemplate,
+  HANDLE *enumHandle
+);
+
+DWORD WINAPI IkeextSaDbSetSecurityInfo0(
+  HANDLE engineHandle,
+  SECURITY_INFORMATION securityInfo,
+  const SID *sidOwner,
+  const SID *sidGroup,
+  const ACL *dacl,
+  const ACL *sacl
+);
+
+DWORD WINAPI IkeextSaDeleteById0(
+  HANDLE engineHandle,
+  UINT64 id
+);
+
+DWORD WINAPI IkeextSaDestroyEnumHandle0(
+  HANDLE engineHandle,
+  HANDLE enumHandle
+);
+
+DWORD WINAPI IkeextSaEnum0(
+  HANDLE engineHandle,
+  HANDLE enumHandle,
+  UINT32 numEntriesRequested,
+  IKEEXT_SA_DETAILS0 ***entries,
+  UINT32 *numEntriesReturned
+);
+
+DWORD WINAPI IkeextSaGetById0(
+  HANDLE engineHandle,
+  UINT64 id,
+  IKEEXT_SA_DETAILS0 **sa
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FWPMU*/
diff --git a/mingw-w64-headers/include/fwptypes.h b/mingw-w64-headers/include/fwptypes.h
new file mode 100644
index 0000000..121e7ca
--- /dev/null
+++ b/mingw-w64-headers/include/fwptypes.h
@@ -0,0 +1,183 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_FWTYPES
+#define _INC_FWTYPES
+#if (_WIN32_WINNT >= 0x0600)
+
+#define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION 0x00000001 
+#define SOCKET_SETTINGS_ALLOW_INSECURE 0x00000002
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum FWP_CLASSIFY_OPTION_TYPE_ {
+  FWP_CLASSIFY_OPTION_MULTICAST_STATE,
+  FWP_CLASSIFY_OPTION_LOOSE_SOURCE_MAPPING,
+  FWP_CLASSIFY_OPTION_UNICAST_LIFETIME,
+  FWP_CLASSIFY_OPTION_MCAST_BCAST_LIFETIME,
+  FWP_CLASSIFY_OPTION_SECURE_SOCKET_SECURITY_FLAGS,
+  FWP_CLASSIFY_OPTION_SECURE_SOCKET_AUTHIP_MM_POLICY_KEY,
+  FWP_CLASSIFY_OPTION_SECURE_SOCKET_AUTHIP_QM_POLICY_KEY,
+  FWP_CLASSIFY_OPTION_MAX 
+} FWP_CLASSIFY_OPTION_TYPE;
+
+typedef enum FWP_DATA_TYPE_ {
+  FWP_EMPTY,
+  FWP_UINT8,
+  FWP_UINT16,
+  FWP_UINT32,
+  FWP_UINT64,
+  FWP_INT8,
+  FWP_INT16,
+  FWP_INT32,
+  FWP_INT64,
+  FWP_FLOAT,
+  FWP_DOUBLE,
+  FWP_BYTE_ARRAY16_TYPE,
+  FWP_BYTE_BLOB_TYPE,
+  FWP_SID,
+  FWP_SECURITY_DESCRIPTOR_TYPE,
+  FWP_TOKEN_INFORMATION_TYPE ,
+  FWP_TOKEN_ACCESS_INFORMATION_TYPE ,
+  FWP_UNICODE_STRING_TYPE,
+  FWP_BYTE_ARRAY6_TYPE,
+  FWP_SINGLE_DATA_TYPE_MAX             = 0xFF,
+  FWP_V4_ADDR_MASK,
+  FWP_V6_ADDR_MASK,
+  FWP_RANGE_TYPE,
+  FWP_DATA_TYPE_MAX 
+} FWP_DATA_TYPE;
+
+typedef enum FWP_DIRECTION_ {
+  FWP_DIRECTION_OUTBOUND,
+  FWP_DIRECTION_INBOUND,
+  FWP_DIRECTION_MAX 
+} FWP_DIRECTION;
+
+typedef enum FWP_FILTER_ENUM_TYPE_ {
+  FWP_FILTER_ENUM_FULLY_CONTAINED,
+  FWP_FILTER_ENUM_OVERLAPPING,
+  FWP_FILTER_ENUM_TYPE_MAX 
+} FWP_FILTER_ENUM_TYPE;
+
+typedef enum FWP_IP_VERSION_ {
+  FWP_IP_VERSION_V4,
+  FWP_IP_VERSION_V6,
+  FWP_IP_VERSION_NONE,
+  FWP_IP_VERSION_MAX 
+} FWP_IP_VERSION;
+
+typedef enum FWP_MATCH_TYPE_ {
+  FWP_MATCH_EQUAL,
+  FWP_MATCH_GREATER,
+  FWP_MATCH_LESS,
+  FWP_MATCH_GREATER_OR_EQUAL,
+  FWP_MATCH_LESS_OR_EQUAL,
+  FWP_MATCH_RANGE,
+  FWP_MATCH_FLAGS_ALL_SET,
+  FWP_MATCH_FLAGS_ANY_SET,
+  FWP_MATCH_FLAGS_NONE_SET,
+  FWP_MATCH_EQUAL_CASE_INSENSITIVE,
+  FWP_MATCH_NOT_EQUAL,
+  FWP_MATCH_TYPE_MAX 
+} FWP_MATCH_TYPE;
+
+typedef struct FWP_BYTE_ARRAY16_ {
+  UINT8 byteArray16[16];
+} FWP_BYTE_ARRAY16;
+
+typedef struct FWP_BYTE_BLOB_ {
+  UINT32 size;
+  UINT8  *data;
+} FWP_BYTE_BLOB;
+
+typedef struct FWP_BYTE_ARRAY6_ {
+  UINT8 byteArray6[6];
+} FWP_BYTE_ARRAY6;
+
+typedef struct FWP_V4_ADDR_AND_MASK_ {
+  UINT32 addr;
+  UINT32 mask;
+} FWP_V4_ADDR_AND_MASK;
+
+#define FWP_V6_ADDR_SIZE 16
+
+typedef struct FWP_V6_ADDR_AND_MASK_ {
+  UINT8 addr[FWP_V6_ADDR_SIZE];
+  UINT8 prefixLength;
+} FWP_V6_ADDR_AND_MASK;
+
+typedef struct FWP_RANGE0_ {
+  FWP_VALUE0 valueLow;
+  FWP_VALUE0 valueHigh;
+} FWP_RANGE0;
+
+typedef struct FWP_CONDITION_VALUE0_ {
+  FWP_DATA_TYPE type;
+  __MINGW_EXTENSION union {
+    UINT8                uint8;
+    UINT16               uint16;
+    UINT32               uint32;
+    UINT64               *uint64;
+    INT8                 int8;
+    INT16                int16;
+    INT32                int32;
+    INT64                *int64;
+    float                float32;
+    double               *double64;
+    FWP_BYTE_ARRAY16     *byteArray16;
+    FWP_BYTE_BLOB        *byteBlob;
+    SID                  *sid;
+    FWP_BYTE_BLOB        *sd;
+    FWP_BYTE_BLOB        *tokenInformation;
+    FWP_BYTE_BLOB        *tokenAccessInformation;
+    LPWSTR               unicodeString;
+    FWP_BYTE_ARRAY6      *byteArray6;
+    FWP_V4_ADDR_AND_MASK *v4AddrMask;
+    FWP_V6_ADDR_AND_MASK *v6AddrMask;
+    FWP_RANGE0           *rangeValue;
+  };
+} FWP_CONDITION_VALUE0;
+
+typedef struct _FWP_TOKEN_INFORMATION {
+  ULONG                sidCount;
+  PSID_AND_ATTRIBUTES  sids;
+  ULONG                restrictedSidCount;
+  PSID_AND_ATTRIBUTES  restrictedSids;
+} FWP_TOKEN_INFORMATION;
+
+typedef struct FWP_VALUE0_ {
+  FWP_DATA_TYPE type;
+  __MINGW_EXTENSION union {
+    LPVOID                EMPTY;      // case(FWP_EMPTY)
+    UINT8                 uint8;
+    UINT16                uint16;
+    UINT32                uint32;
+    UINT64                *uint64;
+    INT8                  int8;
+    INT16                 int16;
+    INT32                 int32;
+    INT64                 *int64;
+    float                 float32;
+    double                *double64;
+    FWP_BYTE_ARRAY16      *byteArray16;
+    FWP_BYTE_BLOB         *byteBlob;
+    SID                   *sid;
+    FWP_BYTE_BLOB         *sd;
+    FWP_TOKEN_INFORMATION *tokenInformation;
+    FWP_BYTE_BLOB         *tokenAccessInformation;
+    LPWSTR                unicodeString;
+    FWP_BYTE_ARRAY6       *byteArray6;
+  };
+} FWP_VALUE0;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_FWTYPES*/
diff --git a/mingw-w64-headers/include/gpmgmt.h b/mingw-w64-headers/include/gpmgmt.h
index 228e251..4ca70f7 100644
--- a/mingw-w64-headers/include/gpmgmt.h
+++ b/mingw-w64-headers/include/gpmgmt.h
@@ -2977,6 +2977,30 @@
   unsigned char *__RPC_API VARIANT_UserUnmarshal(unsigned long *,unsigned char *,VARIANT *);
   void __RPC_API VARIANT_UserFree(unsigned long *,VARIANT *);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _GPMPermissionType {
+  permGPOApply                   = 0x00010000,
+  permGPORead                    = 0x00010100,
+  permGPOEdit                    = 0x00010101,
+  permGPOEditSecurityAndDelete   = 0x00010102,
+  permGPOCustom                  = 0x00010103,
+  permWMIFilterEdit              = 0x00020000,
+  permWMIFilterFullControl       = 0x00020001,
+  permWMIFilterCustom            = 0x00020002,
+  permSOMLink                    = 0x001C0000,
+  permSOMLogging                 = 0x00180100,
+  permSOMPlanning                = 0x00180200,
+  permSOMWMICreate               = 0x00100300,
+  permSOMWMIFullControl          = 0x00100301,
+  permSOMGPOCreate               = 0x00100400,
+  permStarterGPORead             = 0x00030500,
+  permStarterGPOEdit             = 0x00030501,
+  permStarterGPOFullControl      = 0x00030502,
+  permStarterGPOCustom           = 0x00030503,
+  permSOMStarterGPOCreate        = 0x00100500
+} GPMPermissionType;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/http.h b/mingw-w64-headers/include/http.h
index b24b08d..fc713a3 100644
--- a/mingw-w64-headers/include/http.h
+++ b/mingw-w64-headers/include/http.h
@@ -168,7 +168,7 @@
     ULONG SslClientCertNegotiated;
   } HTTP_SSL_INFO,*PHTTP_SSL_INFO;
 
-  typedef struct _HTTP_REQUEST {
+  typedef struct _HTTP_REQUEST_V1 {
     ULONG Flags;
     HTTP_CONNECTION_ID ConnectionId;
     HTTP_REQUEST_ID RequestId;
@@ -187,11 +187,23 @@
     PHTTP_DATA_CHUNK pEntityChunks;
     HTTP_RAW_CONNECTION_ID RawConnectionId;
     PHTTP_SSL_INFO pSslInfo;
-  } HTTP_REQUEST,*PHTTP_REQUEST;
+  } HTTP_REQUEST_V1,*PHTTP_REQUEST_V1;
+
+#if (_WIN32_WINNT >= 0x0600)
+  typedef struct _HTTP_REQUEST_V2 {
+    struct HTTP_REQUEST_V1;
+    USHORT             RequestInfoCount;
+    PHTTP_REQUEST_INFO pRequestInfo;
+  } HTTP_REQUEST_V2, *PHTTP_REQUEST_V2;
+
+  typedef HTTP_REQUEST_V2 HTTP_REQUEST, *PHTTP_REQUEST;
+#else
+  typedef HTTP_REQUEST_V1 HTTP_REQUEST, *PHTTP_REQUEST;
+#endif
 
 #define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001
 
-  typedef struct _HTTP_RESPONSE {
+  typedef struct _HTTP_RESPONSE_V1 {
     ULONG Flags;
     HTTP_VERSION Version;
     USHORT StatusCode;
@@ -200,7 +212,19 @@
     HTTP_RESPONSE_HEADERS Headers;
     USHORT EntityChunkCount;
     PHTTP_DATA_CHUNK pEntityChunks;
-  } HTTP_RESPONSE,*PHTTP_RESPONSE;
+  } HTTP_RESPONSE_V1,*PHTTP_RESPONSE_V1;
+
+#if (_WIN32_WINNT >= 0x0600)
+  typedef struct {
+    struct HTTP_RESPONSE_V1;
+    USHORT              ResponseInfoCount;
+    PHTTP_RESPONSE_INFO pResponseInfo;
+  } HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2;
+
+  typedef HTTP_RESPONSE_V2 HTTP_RESPONSE, *PHTTP_RESPONSE;
+#else
+  typedef HTTP_RESPONSE_V1 HTTP_RESPONSE, *PHTTP_RESPONSE;
+#endif /* _WIN32_WINNT >= 0x0600 */
 
   typedef enum _HTTP_CACHE_POLICY_TYPE {
     HttpCachePolicyNocache,
@@ -317,6 +341,405 @@
   HTTPAPI_LINKAGE ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped);
   HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pInputConfigInformation,ULONG InputConfigInformationLength,PVOID pOutputConfigInformation,ULONG OutputConfigInformationLength,PULONG pReturnLength,LPOVERLAPPED pOverlapped);
 
+#if (_WIN32_WINNT >= 0x0600)
+#define HTTP_VERSION_2_0	{ 2, 0 }
+#define HTTPAPI_VERSION_2	{ 2, 0 }
+
+typedef enum _HTTP_503_RESPONSE_VERBOSITY {
+  Http503ResponseVerbosityBasic,
+  Http503ResponseVerbosityLimited,
+  Http503ResponseVerbosityFull
+} HTTP_503_RESPONSE_VERBOSITY, *PHTTP_503_RESPONSE_VERBOSITY;
+
+typedef enum _HTTP_ENABLED_STATE {
+  HttpEnabledStateActive,
+  HttpEnabledStateInactive
+} HTTP_ENABLED_STATE, *PHTTP_ENABLED_STATE;
+
+typedef enum _HTTP_LOGGING_ROLLOVER_TYPE {
+  HttpLoggingRolloverSize,
+  HttpLoggingRolloverDaily,
+  HttpLoggingRolloverWeekly,
+  HttpLoggingRolloverMonthly,
+  HttpLoggingRolloverHourly
+} HTTP_LOGGING_ROLLOVER_TYPE, *PHTTP_LOGGING_ROLLOVER_TYPE;
+
+typedef enum _HTTP_LOGGING_TYPE {
+  HttpLoggingTypeW3C,
+  HttpLoggingTypeIIS,
+  HttpLoggingTypeNCSA,
+  HttpLoggingTypeRaw
+} HTTP_LOGGING_TYPE, *PHTTP_LOGGING_TYPE;
+
+typedef enum _HTTP_QOS_SETTING_TYPE {
+  HttpQosSettingTypeBandwidth,
+  HttpQosSettingTypeConnectionLimit,
+  HttpQosSettingTypeFlowRate
+} HTTP_QOS_SETTING_TYPE, *PHTTP_QOS_SETTING_TYPE;
+
+typedef enum _HTTP_SERVER_PROPERTY {
+  HttpServerAuthenticationProperty,
+  HttpServerLoggingProperty,
+  HttpServerQosProperty,
+  HttpServerTimeoutsProperty,
+  HttpServerQueueLengthProperty,
+  HttpServerStateProperty,
+  HttpServer503VerbosityProperty,
+  HttpServerBindingProperty,
+  HttpServerExtendedAuthenticationProperty,
+  HttpServerListenEndpointProperty,
+  HttpServerChannelBindProperty
+} HTTP_SERVER_PROPERTY, *PHTTP_SERVER_PROPERTY;
+
+typedef enum _HTTP_AUTHENTICATION_HARDENING_LEVELS {
+  HttpAuthenticationHardeningLegacy   = 0,
+  HttpAuthenticationHardeningMedium   = 1,
+  HttpAuthenticationHardeningStrict   = 2
+} HTTP_AUTHENTICATION_HARDENING_LEVELS;
+
+typedef enum _HTTP_SERVICE_BINDING_TYPE {
+  HttpServiceBindingTypeNone   = 0,
+  HttpServiceBindingTypeW      = 1,
+  HttpServiceBindingTypeA      = 2
+} HTTP_SERVICE_BINDING_TYPE;
+
+typedef enum _HTTP_LOG_DATA_TYPE {
+  HttpLogDataTypeFields   = 0
+} HTTP_LOG_DATA_TYPE, *PHTTP_LOG_DATA_TYPE;
+
+typedef enum _HTTP_REQUEST_AUTH_TYPE {
+  HttpRequestAuthTypeNone = 0,
+  HttpRequestAuthTypeBasic,
+  HttpRequestAuthTypeDigest,
+  HttpRequestAuthTypeNTLM,
+  HttpRequestAuthTypeNegotiate,
+  HttpRequestAuthTypeKerberos
+} HTTP_REQUEST_AUTH_TYPE, *PHTTP_REQUEST_AUTH_TYPE;
+
+typedef enum _HTTP_REQUEST_INFO_TYPE {
+  HttpRequestInfoTypeAuth
+} HTTP_REQUEST_INFO_TYPE, *PHTTP_REQUEST_INFO_TYPE;
+
+typedef enum _HTTP_AUTH_STATUS {
+  HttpAuthStatusSuccess,
+  HttpAuthStatusNotAuthenticated,
+  HttpAuthStatusFailure
+} HTTP_AUTH_STATUS, *PHTTP_AUTH_STATUS;
+
+typedef enum _HTTP_SERVICE_CONFIG_TIMEOUT_KEY {
+  IdleConnectionTimeout = 0,
+  HeaderWaitTimeout
+} HTTP_SERVICE_CONFIG_TIMEOUT_KEY, *PHTTP_SERVICE_CONFIG_TIMEOUT_KEY;
+
+typedef struct _HTTP_CONNECTION_LIMIT_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  ULONG               MaxConnections;
+} HTTP_CONNECTION_LIMIT_INFO, *PHTTP_CONNECTION_LIMIT_INFO;
+
+typedef struct _HTTP_STATE_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  HTTP_ENABLED_STATE  State;
+} HTTP_STATE_INFO, *PHTTP_STATE_INFO;
+
+typedef struct _HTTP_QOS_SETTING_INFO {
+  HTTP_QOS_SETTING_TYPE  QosType;
+  PVOID               QosSetting;
+} HTTP_QOS_SETTING_INFO, *PHTTP_QOS_SETTING_INFO;
+
+typedef struct _HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS {
+  USHORT DomainNameLength;
+  PWSTR  DomainName;
+  USHORT RealmLength;
+  PWSTR  Realm;
+} HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS, *PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS;
+
+typedef struct _HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS {
+  USHORT RealmLength;
+  PWSTR  Realm;
+} HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS, *PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS;
+
+typedef struct _HTTP_SERVER_AUTHENTICATION_INFO {
+  HTTP_PROPERTY_FLAGS                      Flags;
+  ULONG                                    AuthSchemes;
+  BOOLEAN                                  ReceiveMutualAuth;
+  BOOLEAN                                  ReceiveContextHandle;
+  BOOLEAN                                  DisableNTLMCredentialCaching;
+  UCHAR                                    ExFlags;
+  HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS DigestParams;
+  HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS  BasicParams;
+} HTTP_SERVER_AUTHENTICATION_INFO, *PHTTP_SERVER_AUTHENTICATION_INFO;
+
+typedef struct _HTTP_LOGGING_INFO {
+  HTTP_PROPERTY_FLAGS        Flags;
+  ULONG                      LoggingFlags;
+  PCWSTR                     SoftwareName;
+  USHORT                     SoftwareNameLength;
+  USHORT                     DirectoryNameLength;
+  PCWSTR                     DirectoryName;
+  HTTP_LOGGING_TYPE          Format;
+  ULONG                      Fields;
+  PVOID                      pExtFields;
+  USHORT                     NumOfExtFields;
+  USHORT                     MaxRecordSize;
+  HTTP_LOGGING_ROLLOVER_TYPE RolloverType;
+  ULONG                      RolloverSize;
+  PSECURITY_DESCRIPTOR       pSecurityDescriptor;
+} HTTP_LOGGING_INFO, *PHTTP_LOGGING_INFO;
+
+typedef struct _HTTP_TIMEOUT_LIMIT_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  USHORT              EntityBody;
+  USHORT              DrainEntityBody;
+  USHORT              RequestQueue;
+  USHORT              IdleConnection;
+  USHORT              HeaderWait;
+  ULONG               MinSendRate;
+} HTTP_TIMEOUT_LIMIT_INFO, *PHTTP_TIMEOUT_LIMIT_INFO;
+
+typedef struct _HTTP_SERVICE_BINDING_BASE {
+  HTTP_SERVICE_BINDING_TYPE Type;
+} HTTP_SERVICE_BINDING_BASE, *PHTTP_SERVICE_BINDING_BASE;
+
+typedef struct _HTTP_CHANNEL_BIND_INFO {
+  HTTP_AUTHENTICATION_HARDENING_LEVELS Hardening;
+  ULONG                                Flags;
+  PHTTP_SERVICE_BINDING_BASE           *ServiceNames;
+  ULONG                                NumberOfServiceNames;
+} HTTP_CHANNEL_BIND_INFO, *PHTTP_CHANNEL_BIND_INFO;
+
+typedef struct _HTTP_REQUEST_CHANNEL_BIND_STATUS {
+  PHTTP_SERVICE_BINDING_BASE ServiceName;
+  PUCHAR                     ChannelToken;
+  ULONG                      ChannelTokenSize;
+  ULONG                      Flags;
+} HTTP_REQUEST_CHANNEL_BIND_STATUS, *PHTTP_REQUEST_CHANNEL_BIND_STATUS;
+
+typedef struct _HTTP_SERVICE_BINDING_A {
+  HTTP_SERVICE_BINDING_BASE Base;
+  PCHAR                     Buffer;
+  ULONG                     BufferSize;
+} HTTP_SERVICE_BINDING_A, *PHTTP_SERVICE_BINDING_A;
+
+typedef struct _HTTP_SERVICE_BINDING_W {
+  HTTP_SERVICE_BINDING_BASE Base;
+  PWCHAR                    Buffer;
+  ULONG                     BufferSize;
+} HTTP_SERVICE_BINDING_W, *PHTTP_SERVICE_BINDING_W;
+
+typedef struct _HTTP_PROPERTY_FLAGS {
+  ULONG Present:1;
+} HTTP_PROPERTY_FLAGS, *PHTTP_PROPERTY_FLAGS
+
+typedef struct _HTTP_REQUEST_INFO {
+  HTTP_REQUEST_INFO_TYPE InfoType;
+  ULONG                  InfoLength;
+  PVOID                  pInfo;
+} HTTP_REQUEST_INFO, *PHTTP_REQUEST_INFO;
+
+typedef struct _HTTP_LOG_FIELDS_DATA {
+  HTTP_LOG_DATA Base;
+  USHORT        UserNameLength;
+  USHORT        UriStemLength;
+  USHORT        ClientIpLength;
+  USHORT        ServerNameLength;
+  USHORT        ServerIpLength;
+  USHORT        MethodLength;
+  USHORT        UriQueryLength;
+  USHORT        HostLength;
+  USHORT        UserAgentLength;
+  USHORT        CookieLength;
+  USHORT        ReferrerLength;
+  PWCHAR        UserName;
+  PWCHAR        UriStem;
+  PCHAR         ClientIp;
+  PCHAR         ServerName;
+  PCHAR         ServiceName;
+  PCHAR         ServerIp;
+  PCHAR         Method;
+  PCHAR         UriQuery;
+  PCHAR         Host;
+  PCHAR         UserAgent;
+  PCHAR         Cookie;
+  PCHAR         Referrer;
+  USHORT        ServerPort;
+  USHORT        ProtocolStatus;
+  ULONG         Win32Status;
+  HTTP_VERB     MethodNum;
+  USHORT        SubStatus;
+} HTTP_LOG_FIELDS_DATA, *PHTTP_LOG_FIELDS_DATA;
+
+typedef struct _HTTP_REQUEST_AUTH_INFO {
+  HTTP_AUTH_STATUS       AuthStatus;
+  SECURITY_STATUS        SecStatus;
+  ULONG                  Flags;
+  HTTP_REQUEST_AUTH_TYPE AuthType;
+  HANDLE                 AccessToken;
+  ULONG                  ContextAttributes;
+  ULONG                  PackedContextLength;
+  ULONG                  PackedContextType;
+  PVOID                  PackedContext;
+  ULONG                  MutualAuthDataLength;
+  PCHAR                  pMutualAuthData;
+} HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO;
+
+typedef struct _HTTP_MULTIPLE_KNOWN_HEADERS {
+  HTTP_HEADER_ID     HeaderId;
+  ULONG              Flags;
+  USHORT             KnownHeaderCount;
+  PHTTP_KNOWN_HEADER KnownHeaders;
+} HTTP_MULTIPLE_KNOWN_HEADERS, *PHTTP_MULTIPLE_KNOWN_HEADERS;
+
+typedef struct _HTTP_RESPONSE_INFO {
+  HTTP_RESPONSE_INFO_TYPE Type;
+  ULONG                   Length;
+  PVOID                   pInfo;
+} HTTP_RESPONSE_INFO, *PHTTP_RESPONSE_INFO;
+
+typedef struct _HTTP_SERVICE_CONFIG_TIMEOUT_SET {
+  HTTP_SERVICE_CONFIG_TIMEOUT_KEY   KeyDesc;
+  HTTP_SERVICE_CONFIG_TIMEOUT_PARAM ParamDesc;
+} HTTP_SERVICE_CONFIG_TIMEOUT_SET, *PHTTP_SERVICE_CONFIG_TIMEOUT_SET;
+
+typedef struct _HTTP_BANDWIDTH_LIMIT_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  ULONG               MaxBandwidth;
+} HTTP_BANDWIDTH_LIMIT_INFO, *PHTTP_BANDWIDTH_LIMIT_INFO;
+
+typedef struct _HTTP_BINDING_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  HANDLE              RequestQueueHandle;
+} HTTP_BINDING_INFO, *PHTTP_BINDING_INFO;
+
+typedef struct _HTTP_LISTEN_ENDPOINT_INFO {
+  HTTP_PROPERTY_FLAGS Flags;
+  BOOLEAN             EnableSharing;
+} HTTP_LISTEN_ENDPOINT_INFO, *PHTTP_LISTEN_ENDPOINT_INFO;
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpSetRequestQueueProperty(
+  HANDLE Handle,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength,
+  ULONG Reserved,
+  PVOID pReserved
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpQueryRequestQueueProperty(
+  HANDLE Handle,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength,
+  ULONG Reserved,
+  PULONG pReturnLength,
+  PVOID pReserved
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCreateRequestQueue(
+  HTTPAPI_VERSION Version,
+  PCWSTR pName,
+  PSECURITY_ATTRIBUTES pSecurityAttributes,
+  ULONG Flags,
+  PHANDLE pReqQueueHandle
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrlToUrlGroup(
+  HTTP_URL_GROUP_ID UrlGroupId,
+  PCWSTR pFullyQualifiedUrl,
+  HTTP_URL_CONTEXT UrlContext,
+  ULONG Reserved
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCancelHttpRequest(
+  HANDLE ReqQueueHandle,
+  HTTP_REQUEST_ID RequestId,
+  LPOVERLAPPED pOverlapped
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCloseRequestQueue(
+  HANDLE ReqQueueHandle
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCloseServerSession(
+  HTTP_SERVER_SESSION_ID ServerSessionId
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCloseUrlGroup(
+  HTTP_URL_GROUP_ID UrlGroupId
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCreateServerSession(
+  HTTPAPI_VERSION Version,
+  PHTTP_SERVER_SESSION_ID pServerSessionId,
+  ULONG Reserved
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpCreateUrlGroup(
+  HTTP_SERVER_SESSION_ID ServerSessionId,
+  PHTTP_URL_GROUP_ID pUrlGroupId,
+  ULONG Reserved
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServerSessionProperty(
+  HTTP_SERVER_SESSION_ID ServerSessionId,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength,
+  PULONG pReturnLength
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpQueryUrlGroupProperty(
+  HTTP_URL_GROUP_ID UrlGroupId,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength,
+  PULONG pReturnLength
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrlFromUrlGroup(
+  HTTP_URL_GROUP_ID UrlGroupId,
+  PCWSTR pFullyQualifiedUrl,
+  ULONG Flags
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpSetServerSessionProperty(
+  HTTP_SERVER_SESSION_ID ServerSessionId,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpSetUrlGroupProperty(
+  HTTP_URL_GROUP_ID UrlGroupId,
+  HTTP_SERVER_PROPERTY Property,
+  PVOID pPropertyInformation,
+  ULONG PropertyInformationLength
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpShutdownRequestQueue(
+  HANDLE ReqQueueHandle
+);
+
+HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDemandStart(
+  HANDLE ReqQueueHandle,
+  LPOVERLAPPED pOverlapped
+);
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef enum _HTTP_SERVICE_CONFIG_CACHE_KEY {
+  MaxCacheResponseSize  = 0,
+  CacheRangeChunkSize
+} HTTP_SERVICE_CONFIG_CACHE_KEY;
+
+typedef struct _HTTP_FLOWRATE_INFO {
+  HTTP_PROPERTY_FLAGS  Flags;
+  ULONG                MaxBandwidth;
+  ULONG                MaxPeakBandwidth;
+  ULONG                BurstSize;
+} HTTP_FLOWRATE_INFO, *PHTTP_FLOWRATE_INFO;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/iassdo_0.idl b/mingw-w64-headers/include/iassdo_0.idl
new file mode 100644
index 0000000..bb8d9b1
--- /dev/null
+++ b/mingw-w64-headers/include/iassdo_0.idl
@@ -0,0 +1,783 @@
+/* Automated generated idl file <sdoiaslib>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Union record forward declarations.  */
+dispinterface ISdoMachine;
+dispinterface ISdoServiceControl;
+dispinterface ISdo;
+dispinterface ISdoCollection;
+dispinterface ISdoDictionaryOld;
+
+/* Union record forward declarations.  */
+coclass SdoMachine;
+
+/* Enumeration declarations.  */
+enum _ATTRIBUTEID
+{
+  ATTRIBUTE_UNDEFINED = (int) 201326592,
+  ATTRIBUTE_MIN_VALUE = (int) 201326593,
+  RADIUS_ATTRIBUTE_USER_NAME = (int) 201326593,
+  RADIUS_ATTRIBUTE_USER_PASSWORD = (int) 201326594,
+  RADIUS_ATTRIBUTE_CHAP_PASSWORD = (int) 201326595,
+  RADIUS_ATTRIBUTE_NAS_IP_ADDRESS = (int) 201326596,
+  RADIUS_ATTRIBUTE_NAS_PORT = (int) 201326597,
+  RADIUS_ATTRIBUTE_SERVICE_TYPE = (int) 201326598,
+  RADIUS_ATTRIBUTE_FRAMED_PROTOCOL = (int) 201326599,
+  RADIUS_ATTRIBUTE_FRAMED_IP_ADDRESS = (int) 201326600,
+  RADIUS_ATTRIBUTE_FRAMED_IP_NETMASK = (int) 201326601,
+  RADIUS_ATTRIBUTE_FRAMED_ROUTING = (int) 201326602,
+  RADIUS_ATTRIBUTE_FILTER_ID = (int) 201326603,
+  RADIUS_ATTRIBUTE_FRAMED_MTU = (int) 201326604,
+  RADIUS_ATTRIBUTE_FRAMED_COMPRESSION = (int) 201326605,
+  RADIUS_ATTRIBUTE_LOGIN_IP_HOST = (int) 201326606,
+  RADIUS_ATTRIBUTE_LOGIN_SERVICE = (int) 201326607,
+  RADIUS_ATTRIBUTE_LOGIN_TCP_PORT = (int) 201326608,
+  RADIUS_ATTRIBUTE_UNASSIGNED1 = (int) 201326609,
+  RADIUS_ATTRIBUTE_REPLY_MESSAGE = (int) 201326610,
+  RADIUS_ATTRIBUTE_CALLBACK_NUMBER = (int) 201326611,
+  RADIUS_ATTRIBUTE_CALLBACK_ID = (int) 201326612,
+  RADIUS_ATTRIBUTE_UNASSIGNED2 = (int) 201326613,
+  RADIUS_ATTRIBUTE_FRAMED_ROUTE = (int) 201326614,
+  RADIUS_ATTRIBUTE_FRAMED_IPX_NETWORK = (int) 201326615,
+  RADIUS_ATTRIBUTE_STATE = (int) 201326616,
+  RADIUS_ATTRIBUTE_CLASS = (int) 201326617,
+  RADIUS_ATTRIBUTE_VENDOR_SPECIFIC = (int) 201326618,
+  RADIUS_ATTRIBUTE_SESSION_TIMEOUT = (int) 201326619,
+  RADIUS_ATTRIBUTE_IDLE_TIMEOUT = (int) 201326620,
+  RADIUS_ATTRIBUTE_TERMINATION_ACTION = (int) 201326621,
+  RADIUS_ATTRIBUTE_CALLED_STATION_ID = (int) 201326622,
+  RADIUS_ATTRIBUTE_CALLING_STATION_ID = (int) 201326623,
+  RADIUS_ATTRIBUTE_NAS_IDENTIFIER = (int) 201326624,
+  RADIUS_ATTRIBUTE_PROXY_STATE = (int) 201326625,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_SERVICE = (int) 201326626,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_NODE = (int) 201326627,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_GROUP = (int) 201326628,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_LINK = (int) 201326629,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_NET = (int) 201326630,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_ZONE = (int) 201326631,
+  RADIUS_ATTRIBUTE_ACCT_STATUS_TYPE = (int) 201326632,
+  RADIUS_ATTRIBUTE_ACCT_DELAY_TIME = (int) 201326633,
+  RADIUS_ATTRIBUTE_ACCT_INPUT_OCTETS = (int) 201326634,
+  RADIUS_ATTRIBUTE_ACCT_OUTPUT_OCTETS = (int) 201326635,
+  RADIUS_ATTRIBUTE_ACCT_SESSION_ID = (int) 201326636,
+  RADIUS_ATTRIBUTE_ACCT_AUTHENTIC = (int) 201326637,
+  RADIUS_ATTRIBUTE_ACCT_SESSION_TIME = (int) 201326638,
+  RADIUS_ATTRIBUTE_ACCT_INPUT_PACKETS = (int) 201326639,
+  RADIUS_ATTRIBUTE_ACCT_OUTPUT_PACKETS = (int) 201326640,
+  RADIUS_ATTRIBUTE_ACCT_TERMINATE_CAUSE = (int) 201326641,
+  RADIUS_ATTRIBUTE_ACCT_MULTI_SSN_ID = (int) 201326642,
+  RADIUS_ATTRIBUTE_ACCT_LINK_COUNT = (int) 201326643,
+  RADIUS_ATTRIBUTE_CHAP_CHALLENGE = (int) 201326652,
+  RADIUS_ATTRIBUTE_NAS_PORT_TYPE = (int) 201326653,
+  RADIUS_ATTRIBUTE_PORT_LIMIT = (int) 201326654,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_PORT = (int) 201326655,
+  RADIUS_ATTRIBUTE_TUNNEL_TYPE = (int) 201326656,
+  RADIUS_ATTRIBUTE_TUNNEL_MEDIUM_TYPE = (int) 201326657,
+  RADIUS_ATTRIBUTE_TUNNEL_CLIENT_ENDPT = (int) 201326658,
+  RADIUS_ATTRIBUTE_TUNNEL_SERVER_ENDPT = (int) 201326659,
+  RADIUS_ATTRIBUTE_ACCT_TUNNEL_CONN = (int) 201326660,
+  RADIUS_ATTRIBUTE_TUNNEL_PASSWORD = (int) 201326661,
+  RADIUS_ATTRIBUTE_ARAP_PASSWORD = (int) 201326662,
+  RADIUS_ATTRIBUTE_ARAP_FEATURES = (int) 201326663,
+  RADIUS_ATTRIBUTE_ARAP_ZONE_ACCESS = (int) 201326664,
+  RADIUS_ATTRIBUTE_ARAP_SECURITY = (int) 201326665,
+  RADIUS_ATTRIBUTE_ARAP_SECURITY_DATA = (int) 201326666,
+  RADIUS_ATTRIBUTE_PASSWORD_RETRY = (int) 201326667,
+  RADIUS_ATTRIBUTE_PROMPT = (int) 201326668,
+  RADIUS_ATTRIBUTE_CONNECT_INFO = (int) 201326669,
+  RADIUS_ATTRIBUTE_CONFIGURATION_TOKEN = (int) 201326670,
+  RADIUS_ATTRIBUTE_EAP_MESSAGE = (int) 201326671,
+  RADIUS_ATTRIBUTE_SIGNATURE = (int) 201326672,
+  RADIUS_ATTRIBUTE_TUNNEL_PVT_GROUP_ID = (int) 201326673,
+  RADIUS_ATTRIBUTE_TUNNEL_ASSIGNMENT_ID = (int) 201326674,
+  RADIUS_ATTRIBUTE_TUNNEL_PREFERENCE = (int) 201326675,
+  RADIUS_ATTRIBUTE_ARAP_CHALLENGE_RESPONSE = (int) 201326676,
+  RADIUS_ATTRIBUTE_ACCT_INTERIM_INTERVAL = (int) 201326677,
+  RADIUS_ATTRIBUTE_NAS_IPv6_ADDRESS = (int) 201326687,
+  RADIUS_ATTRIBUTE_FRAMED_INTERFACE_ID = (int) 201326688,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_PREFIX = (int) 201326689,
+  RADIUS_ATTRIBUTE_LOGIN_IPv6_HOST = (int) 201326690,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_ROUTE = (int) 201326691,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_POOL = (int) 201326692,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IP_ADDRESS = (int) 201330688,
+  IAS_ATTRIBUTE_SAVED_RADIUS_CALLBACK_NUMBER = (int) 201330689,
+  IAS_ATTRIBUTE_NP_CALLING_STATION_ID = (int) 201330690,
+  IAS_ATTRIBUTE_SAVED_NP_CALLING_STATION_ID = (int) 201330691,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_ROUTE = (int) 201330692,
+  IAS_ATTRIBUTE_IGNORE_USER_DIALIN_PROPERTIES = (int) 201330693,
+  IAS_ATTRIBUTE_NP_TIME_OF_DAY = (int) 201330694,
+  IAS_ATTRIBUTE_NP_CALLED_STATION_ID = (int) 201330695,
+  IAS_ATTRIBUTE_NP_ALLOWED_PORT_TYPES = (int) 201330696,
+  IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE = (int) 201330697,
+  IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE = (int) 201330698,
+  IAS_ATTRIBUTE_SHARED_SECRET = (int) 201330699,
+  IAS_ATTRIBUTE_CLIENT_IP_ADDRESS = (int) 201330700,
+  IAS_ATTRIBUTE_CLIENT_PACKET_HEADER = (int) 201330701,
+  IAS_ATTRIBUTE_TOKEN_GROUPS = (int) 201330702,
+  IAS_ATTRIBUTE_ALLOW_DIALIN = (int) 201330703,
+  IAS_ATTRIBUTE_REQUEST_ID = (int) 201330704,
+  IAS_ATTRIBUTE_MANIPULATION_TARGET = (int) 201330705,
+  IAS_ATTRIBUTE_MANIPULATION_RULE = (int) 201330706,
+  IAS_ATTRIBUTE_ORIGINAL_USER_NAME = (int) 201330707,
+  IAS_ATTRIBUTE_CLIENT_VENDOR_TYPE = (int) 201330708,
+  IAS_ATTRIBUTE_CLIENT_UDP_PORT = (int) 201330709,
+  MS_ATTRIBUTE_CHAP_CHALLENGE = (int) 201330710,
+  MS_ATTRIBUTE_CHAP_RESPONSE = (int) 201330711,
+  MS_ATTRIBUTE_CHAP_DOMAIN = (int) 201330712,
+  MS_ATTRIBUTE_CHAP_ERROR = (int) 201330713,
+  MS_ATTRIBUTE_CHAP_CPW1 = (int) 201330714,
+  MS_ATTRIBUTE_CHAP_CPW2 = (int) 201330715,
+  MS_ATTRIBUTE_CHAP_LM_ENC_PW = (int) 201330716,
+  MS_ATTRIBUTE_CHAP_NT_ENC_PW = (int) 201330717,
+  MS_ATTRIBUTE_CHAP_MPPE_KEYS = (int) 201330718,
+  IAS_ATTRIBUTE_AUTHENTICATION_TYPE = (int) 201330719,
+  IAS_ATTRIBUTE_CLIENT_NAME = (int) 201330720,
+  IAS_ATTRIBUTE_NT4_ACCOUNT_NAME = (int) 201330721,
+  IAS_ATTRIBUTE_FULLY_QUALIFIED_USER_NAME = (int) 201330722,
+  IAS_ATTRIBUTE_NTGROUPS = (int) 201330723,
+  IAS_ATTRIBUTE_EAP_FRIENDLY_NAME = (int) 201330724,
+  IAS_ATTRIBUTE_AUTH_PROVIDER_TYPE = (int) 201330725,
+  MS_ATTRIBUTE_ACCT_AUTH_TYPE = (int) 201330726,
+  MS_ATTRIBUTE_ACCT_EAP_TYPE = (int) 201330727,
+  IAS_ATTRIBUTE_PACKET_TYPE = (int) 201330728,
+  IAS_ATTRIBUTE_AUTH_PROVIDER_NAME = (int) 201330729,
+  IAS_ATTRIBUTE_ACCT_PROVIDER_TYPE = (int) 201330730,
+  IAS_ATTRIBUTE_ACCT_PROVIDER_NAME = (int) 201330731,
+  MS_ATTRIBUTE_MPPE_SEND_KEY = (int) 201330732,
+  MS_ATTRIBUTE_MPPE_RECV_KEY = (int) 201330733,
+  IAS_ATTRIBUTE_REASON_CODE = (int) 201330734,
+  MS_ATTRIBUTE_FILTER = (int) 201330735,
+  MS_ATTRIBUTE_CHAP2_RESPONSE = (int) 201330736,
+  MS_ATTRIBUTE_CHAP2_SUCCESS = (int) 201330737,
+  MS_ATTRIBUTE_CHAP2_CPW = (int) 201330738,
+  MS_ATTRIBUTE_RAS_VENDOR = (int) 201330739,
+  MS_ATTRIBUTE_RAS_VERSION = (int) 201330740,
+  IAS_ATTRIBUTE_NP_NAME = (int) 201330741,
+  MS_ATTRIBUTE_PRIMARY_DNS_SERVER = (int) 201330742,
+  MS_ATTRIBUTE_SECONDARY_DNS_SERVER = (int) 201330743,
+  MS_ATTRIBUTE_PRIMARY_NBNS_SERVER = (int) 201330744,
+  MS_ATTRIBUTE_SECONDARY_NBNS_SERVER = (int) 201330745,
+  IAS_ATTRIBUTE_PROXY_POLICY_NAME = (int) 201330746,
+  IAS_ATTRIBUTE_PROVIDER_TYPE = (int) 201330747,
+  IAS_ATTRIBUTE_PROVIDER_NAME = (int) 201330748,
+  IAS_ATTRIBUTE_REMOTE_SERVER_ADDRESS = (int) 201330749,
+  IAS_ATTRIBUTE_GENERATE_CLASS_ATTRIBUTE = (int) 201330750,
+  MS_ATTRIBUTE_RAS_CLIENT_NAME = (int) 201330751,
+  MS_ATTRIBUTE_RAS_CLIENT_VERSION = (int) 201330752,
+  IAS_ATTRIBUTE_ALLOWED_CERTIFICATE_EKU = (int) 201330753,
+  IAS_ATTRIBUTE_EXTENSION_STATE = (int) 201330754,
+  IAS_ATTRIBUTE_GENERATE_SESSION_TIMEOUT = (int) 201330755,
+  MS_ATTRIBUTE_SESSION_TIMEOUT = (int) 201330756,
+  MS_ATTRIBUTE_QUARANTINE_IPFILTER = (int) 201330757,
+  MS_ATTRIBUTE_QUARANTINE_SESSION_TIMEOUT = (int) 201330758,
+  MS_ATTRIBUTE_USER_SECURITY_IDENTITY = (int) 201330759,
+  IAS_ATTRIBUTE_REMOTE_RADIUS_TO_WINDOWS_USER_MAPPING = (int) 201330760,
+  IAS_ATTRIBUTE_PASSPORT_USER_MAPPING_UPN_SUFFIX = (int) 201330761,
+  IAS_ATTRIBUTE_TUNNEL_TAG = (int) 201330762,
+  IAS_ATTRIBUTE_NP_PEAPUPFRONT_ENABLED = (int) 201330763,
+  IAS_ATTRIBUTE_CERTIFICATE_EKU = (int) 201334689,
+  IAS_ATTRIBUTE_EAP_CONFIG = (int) 201334690,
+  MS_ATTRIBUTE_PEAP_EMBEDDED_EAP_TYPEID = (int) 201334691,
+  MS_ATTRIBUTE_PEAP_FAST_ROAMED_SESSION = (int) 201334692,
+  IAS_ATTRIBUTE_EAP_TYPEID = (int) 201334693,
+  MS_ATTRIBUTE_EAP_TLV = (int) 201334694,
+  IAS_ATTRIBUTE_REJECT_REASON_CODE = (int) 201334695,
+  IAS_ATTRIBUTE_PROXY_EAP_CONFIG = (int) 201334696,
+  IAS_ATTRIBUTE_EAP_SESSION = (int) 201334697,
+  IAS_ATTRIBUTE_IS_REPLAY = (int) 201334698,
+  IAS_ATTRIBUTE_CLEAR_TEXT_PASSWORD = (int) 201334699,
+  MS_ATTRIBUTE_IDENTITY_TYPE = (int) 201334700,
+  MS_ATTRIBUTE_SERVICE_CLASS = (int) 201334701,
+  MS_ATTRIBUTE_QUARANTINE_USER_CLASS = (int) 201334702,
+  MS_ATTRIBUTE_QUARANTINE_STATE = (int) 201334703,
+  IAS_ATTRIBUTE_OVERRIDE_RAP_AUTH = (int) 201334704,
+  IAS_ATTRIBUTE_PEAP_CHANNEL_UP = (int) 201334705,
+  IAS_ATTRIBUTE_NAME_MAPPED = (int) 201334706,
+  IAS_ATTRIBUTE_POLICY_ENFORCED = (int) 201334707,
+  IAS_ATTRIBUTE_MACHINE_NTGROUPS = (int) 201334708,
+  IAS_ATTRIBUTE_USER_NTGROUPS = (int) 201334709,
+  IAS_ATTRIBUTE_MACHINE_TOKEN_GROUPS = (int) 201334710,
+  IAS_ATTRIBUTE_USER_TOKEN_GROUPS = (int) 201334711,
+  MS_ATTRIBUTE_QUARANTINE_GRACE_TIME = (int) 201334712,
+  IAS_ATTRIBUTE_QUARANTINE_URL = (int) 201334713,
+  IAS_ATTRIBUTE_QUARANTINE_FIXUP_SERVERS = (int) 201334714,
+  MS_ATTRIBUTE_NOT_QUARANTINE_CAPABLE = (int) 201334715,
+  IAS_ATTRIBUTE_QUARANTINE_SYSTEM_HEALTH_RESULT = (int) 201334716,
+  IAS_ATTRIBUTE_QUARANTINE_SYSTEM_HEALTH_VALIDATORS = (int) 201334717,
+  IAS_ATTRIBUTE_MACHINE_NAME = (int) 201334718,
+  IAS_ATTRIBUTE_NT4_MACHINE_NAME = (int) 201334719,
+  IAS_ATTRIBUTE_QUARANTINE_SESSION_HANDLE = (int) 201334720,
+  IAS_ATTRIBUTE_FULLY_QUALIFIED_MACHINE_NAME = (int) 201334721,
+  IAS_ATTRIBUTE_QUARANTINE_FIXUP_SERVERS_CONFIGURATION = (int) 201334722,
+  IAS_ATTRIBUTE_CLIENT_QUARANTINE_COMPATIBLE = (int) 201334723,
+  MS_ATTRIBUTE_NETWORK_ACCESS_SERVER_TYPE = (int) 201334724,
+  IAS_ATTRIBUTE_QUARANTINE_SESSION_ID = (int) 201334725,
+  MS_ATTRIBUTE_AFW_QUARANTINE_ZONE = (int) 201334726,
+  MS_ATTRIBUTE_AFW_PROTECTION_LEVEL = (int) 201334727,
+  IAS_ATTRIBUTE_QUARANTINE_UPDATE_NON_COMPLIANT = (int) 201334728,
+  IAS_ATTRIBUTE_REQUEST_START_TIME = (int) 201334729,
+  MS_ATTRIBUTE_MACHINE_NAME = (int) 201334730,
+  IAS_ATTRIBUTE_CLIENT_IPv6_ADDRESS = (int) 201334731,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_INTERFACE_ID = (int) 201334732,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IPv6_PREFIX = (int) 201334733,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IPv6_ROUTE = (int) 201334734,
+  MS_ATTRIBUTE_QUARANTINE_GRACE_TIME_CONFIGURATION = (int) 201334735,
+  MS_ATTRIBUTE_IPv6_FILTER = (int) 201334736,
+  MS_ATTRIBUTE_IPV4_REMEDIATION_SERVERS = (int) 201334737,
+  MS_ATTRIBUTE_IPV6_REMEDIATION_SERVERS = (int) 201334738,
+  IAS_ATTRIBUTE_PROXY_RETRY_COUNT = (int) 201334739,
+  IAS_ATTRIBUTE_MACHINE_INVENTORY = (int) 201334740,
+  IAS_ATTRIBUTE_ABSOLUTE_TIME = (int) 201334741,
+  MS_ATTRIBUTE_QUARANTINE_SOH = (int) 201334742,
+  IAS_ATTRIBUTE_EAP_TYPES_CONFIGURED_IN_PROXYPOLICY = (int) 201334743,
+  MS_ATTRIBUTE_HCAP_LOCATION_GROUP_NAME = (int) 201334744,
+  MS_ATTRIBUTE_EXTENDED_QUARANTINE_STATE = (int) 201334745,
+  IAS_ATTRIBUTE_SOH_CARRIER_EAPTLV = (int) 201334746,
+  MS_ATTRIBUTE_HCAP_USER_GROUPS = (int) 201334747,
+  IAS_ATTRIBUTE_SAVED_MACHINE_HEALTHCHECK_ONLY = (int) 201334748,
+  IAS_ATTRIBUTE_POLICY_EVALUATED_SHV = (int) 201334749,
+  MS_ATTRIBUTE_RAS_CORRELATION_ID = (int) 201334750,
+  MS_ATTRIBUTE_HCAP_USER_NAME = (int) 201334751,
+  IAS_ATTRIBUTE_NT4_HCAP_ACCOUNT_NAME = (int) 201334752,
+  IAS_ATTRIBUTE_USER_TOKEN_SID = (int) 201334753,
+  IAS_ATTRIBUTE_MACHINE_TOKEN_SID = (int) 201334754,
+  IAS_ATTRIBUTE_MACHINE_VALIDATED = (int) 201334755,
+  MS_ATTRIBUTE_USER_IPv4_ADDRESS = (int) 201334756,
+  MS_ATTRIBUTE_USER_IPv6_ADDRESS = (int) 201334757,
+  MS_ATTRIBUTE_TSG_DEVICE_REDIRECTION = (int) 201334758,
+  IAS_ATTRIBUTE_ACCEPT_REASON_CODE = (int) 201334759,
+  RAS_ATTRIBUTE_ENCRYPTION_TYPE = (int) -90,
+  RAS_ATTRIBUTE_ENCRYPTION_POLICY = (int) -89,
+  RAS_ATTRIBUTE_BAP_REQUIRED = (int) -88,
+  RAS_ATTRIBUTE_BAP_LINE_DOWN_TIME = (int) -87,
+  RAS_ATTRIBUTE_BAP_LINE_DOWN_LIMIT = (int) -86
+};
+enum _NEW_LOG_FILE_FREQUENCY
+{
+  IAS_LOGGING_UNLIMITED_SIZE = (int) 201326592,
+  IAS_LOGGING_DAILY = (int) 201326593,
+  IAS_LOGGING_WEEKLY = (int) 201326594,
+  IAS_LOGGING_MONTHLY = (int) 201326595,
+  IAS_LOGGING_WHEN_FILE_SIZE_REACHES = (int) 201326596
+};
+enum _AUTHENTICATION_TYPE
+{
+  IAS_AUTH_INVALID = (int) 201326592,
+  IAS_AUTH_PAP = (int) 201326593,
+  IAS_AUTH_MD5CHAP = (int) 201326594,
+  IAS_AUTH_MSCHAP = (int) 201326595,
+  IAS_AUTH_MSCHAP2 = (int) 201326596,
+  IAS_AUTH_EAP = (int) 201326597,
+  IAS_AUTH_ARAP = (int) 201326598,
+  IAS_AUTH_NONE = (int) 201326599,
+  IAS_AUTH_CUSTOM = (int) 201326600,
+  IAS_AUTH_MSCHAP_CPW = (int) 201326601,
+  IAS_AUTH_MSCHAP2_CPW = (int) 201326602,
+  IAS_AUTH_PEAP = (int) 201326603
+};
+enum _IDENTITY_TYPE
+{
+  IAS_IDENTITY_NO_DEFAULT = (int) 201326593
+};
+enum _ATTRIBUTESYNTAX
+{
+  IAS_SYNTAX_BOOLEAN = (int) 201326593,
+  IAS_SYNTAX_INTEGER = (int) 201326594,
+  IAS_SYNTAX_ENUMERATOR = (int) 201326595,
+  IAS_SYNTAX_INETADDR = (int) 201326596,
+  IAS_SYNTAX_STRING = (int) 201326597,
+  IAS_SYNTAX_OCTETSTRING = (int) 201326598,
+  IAS_SYNTAX_UTCTIME = (int) 201326599,
+  IAS_SYNTAX_PROVIDERSPECIFIC = (int) 201326600,
+  IAS_SYNTAX_UNSIGNEDINTEGER = (int) 201326601,
+  IAS_SYNTAX_INETADDR6 = (int) 201326602
+};
+enum _ATTRIBUTERESTRICTIONS
+{
+  MULTIVALUED = (int) 201326593,
+  ALLOWEDINPROFILE = (int) 201326594,
+  ALLOWEDINCONDITION = (int) 201326596,
+  ALLOWEDINPROXYPROFILE = (int) 201326600,
+  ALLOWEDINPROXYCONDITION = (int) 201326608,
+  ALLOWEDINVPNDIALUP = (int) 201326624,
+  ALLOWEDIN8021X = (int) 201326656
+};
+enum _ATTRIBUTEFILTER
+{
+  ATTRIBUTE_FILTER_NONE = (int) 201326592,
+  ATTRIBUTE_FILTER_VPN_DIALUP = (int) 201326593,
+  ATTRIBUTE_FILTER_IEEE_802_1x = (int) 201326594
+};
+enum _ATTRIBUTEINFO
+{
+  NAME = (int) 201326593,
+  SYNTAX = (int) 201326594,
+  RESTRICTIONS = (int) 201326595,
+  DESCRIPTION = (int) 201326596,
+  VENDORID = (int) 201326597,
+  LDAPNAME = (int) 201326598,
+  VENDORTYPE = (int) 201326599
+};
+enum _IASCOMMONPROPERTIES
+{
+  PROPERTY_SDO_RESERVED = (int) 201326592,
+  PROPERTY_SDO_CLASS = (int) 201326593,
+  PROPERTY_SDO_NAME = (int) 201326594,
+  PROPERTY_SDO_DESCRIPTION = (int) 201326595,
+  PROPERTY_SDO_ID = (int) 201326596,
+  PROPERTY_SDO_DATASTORE_NAME = (int) 201326597,
+  PROPERTY_SDO_START = (int) 201327616
+};
+enum _USERPROPERTIES
+{
+  PROPERTY_USER_CALLING_STATION_ID = (int) 201327616,
+  PROPERTY_USER_SAVED_CALLING_STATION_ID = (int) 201327617,
+  PROPERTY_USER_RADIUS_CALLBACK_NUMBER = (int) 201327618,
+  PROPERTY_USER_RADIUS_FRAMED_ROUTE = (int) 201327619,
+  PROPERTY_USER_RADIUS_FRAMED_IP_ADDRESS = (int) 201327620,
+  PROPERTY_USER_SAVED_RADIUS_CALLBACK_NUMBER = (int) 201327621,
+  PROPERTY_USER_SAVED_RADIUS_FRAMED_ROUTE = (int) 201327622,
+  PROPERTY_USER_SAVED_RADIUS_FRAMED_IP_ADDRESS = (int) 201327623,
+  PROPERTY_USER_ALLOW_DIALIN = (int) 201327624,
+  PROPERTY_USER_SERVICE_TYPE = (int) 201327625,
+  PROPERTY_USER_RADIUS_FRAMED_IPV6_ROUTE = (int) 201327626,
+  PROPERTY_USER_SAVED_RADIUS_FRAMED_IPV6_ROUTE = (int) 201327627,
+  PROPERTY_USER_RADIUS_FRAMED_INTERFACE_ID = (int) 201327628,
+  PROPERTY_USER_SAVED_RADIUS_FRAMED_INTERFACE_ID = (int) 201327629,
+  PROPERTY_USER_RADIUS_FRAMED_IPV6_PREFIX = (int) 201327630,
+  PROPERTY_USER_SAVED_RADIUS_FRAMED_IPV6_PREFIX = (int) 201327631
+};
+enum _DICTIONARYPROPERTIES
+{
+  PROPERTY_DICTIONARY_ATTRIBUTES_COLLECTION = (int) 201327616,
+  PROPERTY_DICTIONARY_LOCATION = (int) 201327617
+};
+enum _ATTRIBUTEPROPERTIES
+{
+  PROPERTY_ATTRIBUTE_ID = (int) 201327616,
+  PROPERTY_ATTRIBUTE_VENDOR_ID = (int) 201327617,
+  PROPERTY_ATTRIBUTE_VENDOR_TYPE_ID = (int) 201327618,
+  PROPERTY_ATTRIBUTE_IS_ENUMERABLE = (int) 201327619,
+  PROPERTY_ATTRIBUTE_ENUM_NAMES = (int) 201327620,
+  PROPERTY_ATTRIBUTE_ENUM_VALUES = (int) 201327621,
+  PROPERTY_ATTRIBUTE_SYNTAX = (int) 201327622,
+  PROPERTY_ATTRIBUTE_ALLOW_MULTIPLE = (int) 201327623,
+  PROPERTY_ATTRIBUTE_ALLOW_LOG_ORDINAL = (int) 201327624,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_PROFILE = (int) 201327625,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_CONDITION = (int) 201327626,
+  PROPERTY_ATTRIBUTE_DISPLAY_NAME = (int) 201327627,
+  PROPERTY_ATTRIBUTE_VALUE = (int) 201327628,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_PROXY_PROFILE = (int) 201327629,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_PROXY_CONDITION = (int) 201327630,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_VPNDIALUP = (int) 201327631,
+  PROPERTY_ATTRIBUTE_ALLOW_IN_8021X = (int) 201327632,
+  PROPERTY_ATTRIBUTE_ENUM_FILTERS = (int) 201327633
+};
+enum _IASPROPERTIES
+{
+  PROPERTY_IAS_RADIUSSERVERGROUPS_COLLECTION = (int) 201327616,
+  PROPERTY_IAS_POLICIES_COLLECTION = (int) 201327617,
+  PROPERTY_IAS_PROFILES_COLLECTION = (int) 201327618,
+  PROPERTY_IAS_PROTOCOLS_COLLECTION = (int) 201327619,
+  PROPERTY_IAS_AUDITORS_COLLECTION = (int) 201327620,
+  PROPERTY_IAS_REQUESTHANDLERS_COLLECTION = (int) 201327621,
+  PROPERTY_IAS_PROXYPOLICIES_COLLECTION = (int) 201327622,
+  PROPERTY_IAS_PROXYPROFILES_COLLECTION = (int) 201327623,
+  PROPERTY_IAS_REMEDIATIONSERVERGROUPS_COLLECTION = (int) 201327624,
+  PROPERTY_IAS_SHVTEMPLATES_COLLECTION = (int) 201327625
+};
+enum _CLIENTPROPERTIES
+{
+  PROPERTY_CLIENT_REQUIRE_SIGNATURE = (int) 201327616,
+  PROPERTY_CLIENT_UNUSED = (int) 201327617,
+  PROPERTY_CLIENT_SHARED_SECRET = (int) 201327618,
+  PROPERTY_CLIENT_NAS_MANUFACTURER = (int) 201327619,
+  PROPERTY_CLIENT_ADDRESS = (int) 201327620,
+  PROPERTY_CLIENT_QUARANTINE_COMPATIBLE = (int) 201327621,
+  PROPERTY_CLIENT_ENABLED = (int) 201327622
+};
+enum _VENDORPROPERTIES
+{
+  PROPERTY_NAS_VENDOR_ID = (int) 201327616
+};
+enum _PROFILEPROPERTIES
+{
+  PROPERTY_PROFILE_ATTRIBUTES_COLLECTION = (int) 201327616
+};
+enum _POLICYPROPERTIES
+{
+  PROPERTY_POLICY_CONSTRAINT = (int) 201327616,
+  PROPERTY_POLICY_MERIT = (int) 201327617,
+  PROPERTY_POLICY_UNUSED0 = (int) 201327618,
+  PROPERTY_POLICY_UNUSED1 = (int) 201327619,
+  PROPERTY_POLICY_PROFILE_NAME = (int) 201327620,
+  PROPERTY_POLICY_ACTION = (int) 201327621,
+  PROPERTY_POLICY_CONDITIONS_COLLECTION = (int) 201327622,
+  PROPERTY_POLICY_ENABLED = (int) 201327623,
+  PROPERTY_POLICY_SOURCETAG = (int) 201327624
+};
+enum _CONDITIONPROPERTIES
+{
+  PROPERTY_CONDITION_TEXT = (int) 201327616
+};
+enum _RADIUSSERVERGROUPPROPERTIES
+{
+  PROPERTY_RADIUSSERVERGROUP_SERVERS_COLLECTION = (int) 201327616
+};
+enum _RADIUSSERVERPROPERTIES
+{
+  PROPERTY_RADIUSSERVER_AUTH_PORT = (int) 201327616,
+  PROPERTY_RADIUSSERVER_AUTH_SECRET = (int) 201327617,
+  PROPERTY_RADIUSSERVER_ACCT_PORT = (int) 201327618,
+  PROPERTY_RADIUSSERVER_ACCT_SECRET = (int) 201327619,
+  PROPERTY_RADIUSSERVER_ADDRESS = (int) 201327620,
+  PROPERTY_RADIUSSERVER_FORWARD_ACCT_ONOFF = (int) 201327621,
+  PROPERTY_RADIUSSERVER_PRIORITY = (int) 201327622,
+  PROPERTY_RADIUSSERVER_WEIGHT = (int) 201327623,
+  PROPERTY_RADIUSSERVER_TIMEOUT = (int) 201327624,
+  PROPERTY_RADIUSSERVER_MAX_LOST = (int) 201327625,
+  PROPERTY_RADIUSSERVER_BLACKOUT = (int) 201327626,
+  PROPERTY_RADIUSSERVER_SEND_SIGNATURE = (int) 201327627
+};
+enum _REMEDIATIONSERVERGROUPPROPERTIES
+{
+  PROPERTY_REMEDIATIONSERVERGROUP_SERVERS_COLLECTION = (int) 201327616
+};
+enum _REMEDIATIONSERVERPROPERTIES
+{
+  PROPERTY_REMEDIATIONSERVER_ADDRESS = (int) 201327616,
+  PROPERTY_REMEDIATIONSERVER_FRIENDLY_NAME = (int) 201327617
+};
+enum _SHVTEMPLATEPROPERTIES
+{
+  PROPERTY_SHV_COMBINATION_TYPE = (int) 201327616,
+  PROPERTY_SHV_LIST = (int) 201327617
+};
+enum _IASCOMPONENTPROPERTIES
+{
+  PROPERTY_COMPONENT_ID = (int) 201327616,
+  PROPERTY_COMPONENT_PROG_ID = (int) 201327617,
+  PROPERTY_COMPONENT_START = (int) 201327618
+};
+enum _PROTOCOLPROPERTIES
+{
+  PROPERTY_PROTOCOL_REQUEST_HANDLER = (int) 201327618,
+  PROPERTY_PROTOCOL_START = (int) 201327619
+};
+enum _RADIUSPROPERTIES
+{
+  PROPERTY_RADIUS_ACCOUNTING_PORT = (int) 201327619,
+  PROPERTY_RADIUS_AUTHENTICATION_PORT = (int) 201327620,
+  PROPERTY_RADIUS_CLIENTS_COLLECTION = (int) 201327621,
+  PROPERTY_RADIUS_VENDORS_COLLECTION = (int) 201327622
+};
+enum _NTEVENTLOGPROPERTIES
+{
+  PROPERTY_EVENTLOG_LOG_APPLICATION_EVENTS = (int) 201327618,
+  PROPERTY_EVENTLOG_LOG_MALFORMED = (int) 201327619,
+  PROPERTY_EVENTLOG_LOG_DEBUG = (int) 201327620
+};
+enum _NAMESPROPERTIES
+{
+  PROPERTY_NAMES_REALMS = (int) 201327618
+};
+enum _NTSAMPROPERTIES
+{
+  PROPERTY_NTSAM_ALLOW_LM_AUTHENTICATION = (int) 201327618
+};
+enum _ACCOUNTINGPROPERTIES
+{
+  PROPERTY_ACCOUNTING_LOG_ACCOUNTING = (int) 201327618,
+  PROPERTY_ACCOUNTING_LOG_ACCOUNTING_INTERIM = (int) 201327619,
+  PROPERTY_ACCOUNTING_LOG_AUTHENTICATION = (int) 201327620,
+  PROPERTY_ACCOUNTING_LOG_OPEN_NEW_FREQUENCY = (int) 201327621,
+  PROPERTY_ACCOUNTING_LOG_OPEN_NEW_SIZE = (int) 201327622,
+  PROPERTY_ACCOUNTING_LOG_FILE_DIRECTORY = (int) 201327623,
+  PROPERTY_ACCOUNTING_LOG_IAS1_FORMAT = (int) 201327624,
+  PROPERTY_ACCOUNTING_LOG_ENABLE_LOGGING = (int) 201327625,
+  PROPERTY_ACCOUNTING_LOG_DELETE_IF_FULL = (int) 201327626,
+  PROPERTY_ACCOUNTING_SQL_MAX_SESSIONS = (int) 201327627,
+  PROPERTY_ACCOUNTING_LOG_AUTHENTICATION_INTERIM = (int) 201327628
+};
+enum _EAPWRAPPROPERTIES
+{
+  PROPERTY_EAP_SESSION_TIMEOUT = (int) 201327618,
+  PROPERTY_EAP_MAX_SESSIONS = (int) 201327619
+};
+enum _NAPPROPERTIES
+{
+  PROPERTY_NAP_POLICIES_COLLECTION = (int) 201327618,
+  PROPERTY_SHV_TEMPLATES_COLLECTION = (int) 201327619
+};
+enum _RADIUSPROXYPROPERTIES
+{
+  PROPERTY_RADIUSPROXY_SERVERGROUPS = (int) 201327618
+};
+enum _REMEDIATIONSERVERSPROPERTIES
+{
+  PROPERTY_REMEDIATIONSERVERS_SERVERGROUPS = (int) 201327618
+};
+enum _SHV_COMBINATION_TYPE
+{
+  SHV_COMBINATION_TYPE_ALL_PASS = (int) 201326592,
+  SHV_COMBINATION_TYPE_ALL_FAIL = (int) 201326593,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_PASS = (int) 201326594,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_FAIL = (int) 201326595,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_INFECTED = (int) 201326596,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_TRANSITIONAL = (int) 201326597,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_UNKNOWN = (int) 201326598,
+  SHV_COMBINATION_TYPE_MAX = (int) 201326599
+};
+enum _SERVICE_TYPE
+{
+  SERVICE_TYPE_IAS = (int) 201326592,
+  SERVICE_TYPE_RAS = (int) 201326593,
+  SERVICE_TYPE_MAX = (int) 201326594
+};
+enum _IASOSTYPE
+{
+  SYSTEM_TYPE_NT4_WORKSTATION = (int) 201326592,
+  SYSTEM_TYPE_NT5_WORKSTATION = (int) 201326593,
+  SYSTEM_TYPE_NT6_WORKSTATION = (int) 201326594,
+  SYSTEM_TYPE_NT4_SERVER = (int) 201326595,
+  SYSTEM_TYPE_NT5_SERVER = (int) 201326596,
+  SYSTEM_TYPE_NT6_SERVER = (int) 201326597
+};
+enum _DOMAINTYPE
+{
+  DOMAIN_TYPE_NONE = (int) 201326592,
+  DOMAIN_TYPE_NT4 = (int) 201326593,
+  DOMAIN_TYPE_NT5 = (int) 201326594,
+  DOMAIN_TYPE_MIXED = (int) 201326595
+};
+enum _IASDATASTORE
+{
+  DATA_STORE_LOCAL = (int) 201326592,
+  DATA_STORE_DIRECTORY = (int) 201326593
+};
+
+/* Type definitions.  */
+typedef enum _ATTRIBUTEID ATTRIBUTEID;
+typedef enum _NEW_LOG_FILE_FREQUENCY NEW_LOG_FILE_FREQUENCY;
+typedef enum _AUTHENTICATION_TYPE AUTHENTICATION_TYPE;
+typedef enum _IDENTITY_TYPE IDENTITY_TYPE;
+typedef enum _ATTRIBUTESYNTAX ATTRIBUTESYNTAX;
+typedef enum _ATTRIBUTERESTRICTIONS ATTRIBUTERESTRICTIONS;
+typedef enum _ATTRIBUTEFILTER ATTRIBUTEFILTER;
+typedef enum _ATTRIBUTEINFO ATTRIBUTEINFO;
+typedef enum _IASCOMMONPROPERTIES IASCOMMONPROPERTIES;
+typedef enum _USERPROPERTIES USERPROPERTIES;
+typedef enum _DICTIONARYPROPERTIES DICTIONARYPROPERTIES;
+typedef enum _ATTRIBUTEPROPERTIES ATTRIBUTEPROPERTIES;
+typedef enum _IASPROPERTIES IASPROPERTIES;
+typedef enum _CLIENTPROPERTIES CLIENTPROPERTIES;
+typedef enum _VENDORPROPERTIES VENDORPROPERTIES;
+typedef enum _PROFILEPROPERTIES PROFILEPROPERTIES;
+typedef enum _POLICYPROPERTIES POLICYPROPERTIES;
+typedef enum _CONDITIONPROPERTIES CONDITIONPROPERTIES;
+typedef enum _RADIUSSERVERGROUPPROPERTIES RADIUSSERVERGROUPPROPERTIES;
+typedef enum _RADIUSSERVERPROPERTIES RADIUSSERVERPROPERTIES;
+typedef enum _REMEDIATIONSERVERGROUPPROPERTIES REMEDIATIONSERVERGROUPPROPERTIES;
+typedef enum _REMEDIATIONSERVERPROPERTIES REMEDIATIONSERVERPROPERTIES;
+typedef enum _SHVTEMPLATEPROPERTIES SHVTEMPLATEPROPERTIES;
+typedef enum _IASCOMPONENTPROPERTIES IASCOMPONENTPROPERTIES;
+typedef enum _PROTOCOLPROPERTIES PROTOCOLPROPERTIES;
+typedef enum _RADIUSPROPERTIES RADIUSPROPERTIES;
+typedef enum _NTEVENTLOGPROPERTIES NTEVENTLOGPROPERTIES;
+typedef enum _NAMESPROPERTIES NAMESPROPERTIES;
+typedef enum _NTSAMPROPERTIES NTSAMPROPERTIES;
+typedef enum _ACCOUNTINGPROPERTIES ACCOUNTINGPROPERTIES;
+typedef enum _EAPWRAPPROPERTIES EAPWRAPPROPERTIES;
+typedef enum _NAPPROPERTIES NAPPROPERTIES;
+typedef enum _RADIUSPROXYPROPERTIES RADIUSPROXYPROPERTIES;
+typedef enum _REMEDIATIONSERVERSPROPERTIES REMEDIATIONSERVERSPROPERTIES;
+typedef enum _SHV_COMBINATION_TYPE SHV_COMBINATION_TYPE;
+typedef enum _SERVICE_TYPE SERVICE_TYPE;
+typedef enum _IASOSTYPE IASOSTYPE;
+typedef enum _IASOSTYPE * PIASOSTYPE;
+typedef enum _DOMAINTYPE IASDOMAINTYPE;
+typedef enum _DOMAINTYPE * PIASDOMAINTYPE;
+typedef enum _IASDATASTORE IASDATASTORE;
+typedef enum _IASDATASTORE * PIASDATASTORE;
+
+[
+  uuid(81DDF732-4AA8-4A35-BDFF-8B42EFE7C624),
+  version(1.0),
+  helpstring("IAS SDO 1.0 Type Library")
+]
+library sdoiaslib
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(E9218AE7-9E91-11D1-BF60-0080C7846BC0),
+     cancreate
+   ]
+   coclass SdoMachine
+   {
+     dispinterface ISdoMachine;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(479F6E75-49A2-11D2-8ECA-00C04FC2F519),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoMachine : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall Attach (
+       [in] BSTR bstrComputerName
+     );
+     HRESULT __stdcall GetDictionarySDO (
+       [out retval] IUnknown **ppDictionarySDO
+     );
+     HRESULT __stdcall GetServiceSDO (
+       [in] IASDATASTORE eDataStore,
+       [in] BSTR bstrServiceName,
+       [out retval] IUnknown **ppServiceSDO
+     );
+     HRESULT __stdcall GetUserSDO (
+       [in] IASDATASTORE eDataStore,
+       [in] BSTR bstrUserName,
+       [out retval] IUnknown **ppUserSDO
+     );
+     HRESULT __stdcall GetOSType (
+       [out retval] IASOSTYPE *eOSType
+     );
+     HRESULT __stdcall GetDomainType (
+       [out retval] IASDOMAINTYPE *eDomainType
+     );
+     HRESULT __stdcall IsDirectoryAvailable (
+       [out retval] WINBOOL *boolDirectoryAvailable
+     );
+     HRESULT __stdcall GetAttachedComputer (
+       [out retval] BSTR *bstrComputerName
+     );
+     [hidden]
+     HRESULT __stdcall GetSDOSchema (
+       [out retval] IUnknown **ppSDOSchema
+     );
+   };
+   [
+     uuid(479F6E74-49A2-11D2-8ECA-00C04FC2F519),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoServiceControl : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall StartService (void);
+     HRESULT __stdcall StopService (void);
+     HRESULT __stdcall GetServiceStatus (
+       [out retval] long *status
+     );
+     HRESULT __stdcall ResetService (void);
+   };
+   [
+     uuid(56BC53DE-96DB-11D1-BF3F-000000000000),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdo : IDispatch
+   {
+     [id(1), hidden]
+     HRESULT __stdcall GetPropertyInfo (
+       [in] long Id,
+       [out retval] IUnknown **ppPropertyInfo
+     );
+     HRESULT __stdcall GetProperty (
+       [in] long Id,
+       [out retval] VARIANT *pValue
+     );
+     HRESULT __stdcall PutProperty (
+       [in] long Id,
+       [in] VARIANT *pValue
+     );
+     HRESULT __stdcall ResetProperty (
+       [in] long Id
+     );
+     HRESULT __stdcall Apply (void);
+     HRESULT __stdcall Restore (void);
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnumVARIANT
+     );
+   };
+   [
+     uuid(56BC53E2-96DB-11D1-BF3F-000000000000),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     HRESULT __stdcall Add (
+       [in] BSTR bstrName,
+       [in out] IDispatch **ppItem
+     );
+     HRESULT __stdcall Remove (
+       [in] IDispatch * pItem
+     );
+     HRESULT __stdcall RemoveAll (void);
+     HRESULT __stdcall Reload (void);
+     HRESULT __stdcall IsNameUnique (
+       [in] BSTR bstrName,
+       [out retval] WINBOOL *pBool
+     );
+     [id(0)]
+     HRESULT __stdcall Item (
+       [in] VARIANT *NAME,
+       [out retval] IDispatch **pItem
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnumVARIANT
+     );
+   };
+   [
+     uuid(D432E5F4-53D8-11D2-9A3A-00C04FB998AC),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoDictionaryOld : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall EnumAttributes (
+       [in out] VARIANT *Id,
+       [out retval] VARIANT *pValues
+     );
+     [hidden]
+     HRESULT __stdcall GetAttributeInfo (
+       [in] ATTRIBUTEID Id,
+       [in] VARIANT *pInfoIDs,
+       [out retval] VARIANT *pInfoValues
+     );
+     HRESULT __stdcall EnumAttributeValues (
+       [in] ATTRIBUTEID Id,
+       [out] VARIANT *pValueIds,
+       [out retval] VARIANT *pValuesDesc
+     );
+     HRESULT __stdcall CreateAttribute (
+       [in] ATTRIBUTEID Id,
+       [out retval] IDispatch **ppAttributeObject
+     );
+     HRESULT __stdcall GetAttributeID (
+       [in] BSTR bstrAttributeName,
+       [out retval] ATTRIBUTEID *pId
+     );
+   };
+
+};
+
diff --git a/mingw-w64-headers/include/iassdo_1.idl b/mingw-w64-headers/include/iassdo_1.idl
new file mode 100644
index 0000000..19bbd25
--- /dev/null
+++ b/mingw-w64-headers/include/iassdo_1.idl
@@ -0,0 +1,71 @@
+/* Automated generated idl file <sdoiaslibprivate>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Union record forward declarations.  */
+dispinterface ISdoService;
+
+/* Union record forward declarations.  */
+coclass SdoService;
+
+/* Enumeration declarations.  */
+enum _SERVICE_TYPE
+{
+  SERVICE_TYPE_IAS = (int) 201326592,
+  SERVICE_TYPE_RAS = (int) 201326593,
+  SERVICE_TYPE_MAX = (int) 201326594
+};
+
+/* Type definitions.  */
+typedef enum _SERVICE_TYPE SERVICE_TYPE;
+
+[
+  uuid(56BC53D1-96DB-11D1-BF3F-000000000000),
+  version(1.0),
+  helpstring("Private SDO 1.0 Type Library")
+]
+library sdoiaslibprivate
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(BC94D813-4D7F-11D2-A8C9-00AA00A71DCA),
+     cancreate,
+     hidden,
+     restricted
+   ]
+   coclass SdoService
+   {
+     dispinterface ISdoService;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(7A968236-9D6D-11D1-BF5D-000000000000),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoService : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall InitializeService (
+       [in] SERVICE_TYPE eServiceType
+     );
+     HRESULT __stdcall ShutdownService (
+       [in] SERVICE_TYPE eServiceType
+     );
+     HRESULT __stdcall StartService (
+       [in] SERVICE_TYPE eServiceType
+     );
+     HRESULT __stdcall StopService (
+       [in] SERVICE_TYPE eServiceType
+     );
+     HRESULT __stdcall ConfigureService (
+       [in] SERVICE_TYPE eServiceType
+     );
+   };
+
+};
+
diff --git a/mingw-w64-headers/include/icftypes.h b/mingw-w64-headers/include/icftypes.h
new file mode 100644
index 0000000..6842e2f
--- /dev/null
+++ b/mingw-w64-headers/include/icftypes.h
@@ -0,0 +1,44 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ICFTYPES
+#define _INC_ICFTYPES
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _NET_FW_ACTION {
+  NET_FW_ACTION_BLOCK,
+  NET_FW_ACTION_ALLOW,
+  NET_FW_ACTION_MAX 
+} NET_FW_ACTION;
+
+typedef enum _NET_FW_MODIFY_STATE {
+  NET_FW_MODIFY_STATE_OK,
+  NET_FW_MODIFY_STATE_GP_OVERRIDE,
+  NET_FW_MODIFY_STATE_INBOUND_BLOCKED 
+} NET_FW_MODIFY_STATE;
+
+typedef enum NET_FW_PROFILE_TYPE2_ {
+  NET_FW_PROFILE2_DOMAIN    = 0x0001,
+  NET_FW_PROFILE2_PRIVATE   = 0x0002,
+  NET_FW_PROFILE2_PUBLIC    = 0x0004,
+  NET_FW_PROFILE2_ALL       = 0x7FFFFFFF 
+} NET_FW_PROFILE_TYPE2;
+
+typedef enum NET_FW_RULE_DIRECTION_ {
+  NET_FW_RULE_DIR_IN,
+  NET_FW_RULE_DIR_OUT,
+  NET_FW_RULE_DIR_MAX 
+} NET_FW_RULE_DIRECTION;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_ICFTYPES*/
diff --git a/mingw-w64-headers/include/icm.h b/mingw-w64-headers/include/icm.h
index a99d625..3c00c5f 100644
--- a/mingw-w64-headers/include/icm.h
+++ b/mingw-w64-headers/include/icm.h
@@ -465,6 +465,162 @@
   WINBOOL WINAPI CMTranslateRGBs(HCMTRANSFORM hcmTransform,LPVOID lpSrcBits,BMFORMAT bmInput,DWORD dwWidth,DWORD dwHeight,DWORD dwStride,LPVOID lpDestBits,BMFORMAT bmOutput,DWORD dwTranslateDirection);
   WINBOOL WINAPI CMTranslateRGBsExt(HCMTRANSFORM hcmTransform,LPVOID lpSrcBits,BMFORMAT bmInput,DWORD dwWidth,DWORD dwHeight,DWORD dwInputStride,LPVOID lpDestBits,BMFORMAT bmOutput,DWORD dwOutputStride,LPBMCALLBACKFN lpfnCallback,LPARAM ulCallbackData);
 
+#if (_WIN32_WINNT >= 0x0600)
+  typedef enum tagCOLORDATATYPE {
+  COLOR_BYTE                 = 1,
+  COLOR_WORD,
+  COLOR_FLOAT,
+  COLOR_S2DOT13FIXED,
+  COLOR_10b_R10G10B10A2,
+  COLOR_10b_R10G10B10A2_XR
+} COLORDATATYPE, *PCOLORDATATYPE, *LPCOLORDATATYPE;
+
+typedef enum tagCOLORPROFILSUBTYPE {
+  CPST_NONE                    = 0x0000,
+  CPST_RGB_WORKING_SPACE       = 0x0001,
+  CPST_PERCEPTUAL              = 0x0002,
+  CPST_ABSOLUTE_COLORIMETRIC   = 0x0004,
+  CPST_RELATIVE_COLORIMETRIC   = 0x0008,
+  CPST_SATURATION              = 0x0010,
+  CPST_CUSTOM_WORKING_SPACE    = 0x0020 
+} COLORPROFILSUBTYPE, *COLORPROFILESUBTYPE PCOLORPROFILESUBTYPE, *LPCOLORPROFILESUBTYPE;
+
+typedef enum tagCOLORPROFILETYPE {
+  CPT_ICC    = 0x0001,
+  CPT_DMP,
+  CPT_CAMP,
+  CPT_GMMP
+} COLORPROFILETYPE, *PCOLORPROFILETYPE, *LPCOLORPROFILETYPE;
+
+typedef enum tagWCS_PROFILE_MANAGEMENT_SCOPE {
+  WCS_PROFILE_MANAGEMENT_SCOPE_SYSTEM_WIDE,
+  WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER
+} WCS_PROFILE_MANAGEMENT_SCOPE;
+
+#define WcsAssociateColorProfileWithDevice __MINGW_NAME_AW(WcsAssociateColorProfileWithDevice)
+
+WINBOOL WINAPI WcsAssociateColorProfileWithDeviceA(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCSTR pProfileName,
+  PCSTR pDeviceName
+);
+
+WINBOOL WINAPI WcsAssociateColorProfileWithDeviceW(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCWSTR pProfileName,
+  PCWSTR pDeviceName
+);
+
+WINBOOL WINAPI WcsCheckColors(
+  HTRANSFORM hColorTransform,
+  DWORD nColors,
+  DWORD nInputChannels,
+  COLORDATATYPE cdtInput,
+  DWORD cbInput,
+  PVOID pInputData,
+  PBYTE paResult
+);
+
+HPROFILE WINAPI WcsCreateIccProfile(
+  HPROFILE hWcsProfile,
+  DWORD dwOptions
+);
+
+WINBOOL WINAPI WcsDisassociateColorProfileFromDevice(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCWSTR pProfileName,
+  PCWSTR pDeviceName
+);
+
+WINBOOL WINAPI WcsEnumColorProfiles(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PENUMTYPEW pEnumRecord,
+  PBYTE pBuffer,
+  DWORD dwSize,
+  PDWORD pnProfiles
+);
+
+WINBOOL WINAPI WcsEnumColorProfilesSize(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PENUMTYPEW pEnumRecord,
+  PDWORD pdwSize
+);
+
+WINBOOL WINAPI WcsGetDefaultColorProfile(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCWSTR pDeviceName,
+  COLORPROFILETYPE cptColorProfileType,
+  COLORPROFILESUBTYPE cpstColorProfileSubType,
+  DWORD dwProfileID,
+  DWORD cbProfileName,
+  LPWSTR pProfileName
+);
+
+WINBOOL WINAPI WcsGetDefaultColorProfileSize(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCWSTR pDeviceName,
+  COLORPROFILETYPE cptColorProfileType,
+  COLORPROFILESUBTYPE cpstColorProfileSubType,
+  DWORD dwProfileID,
+  PDWORD pcbProfileName
+);
+
+WINBOOL WINAPI WcsGetDefaultRenderingIntent(
+  WCS_PROFILE_MANAGEMENT_SCOPE scope,
+  PDWORD pdwRenderingIntent
+);
+
+WINBOOL WINAPI WcsGetUsePerUserProfiles(
+  LPCWSTR pDeviceName,
+  DWORD dwDeviceClass,
+  WINBOOL *pUsePerUserProfiles
+);
+
+HPROFILE WINAPI WcsOpenColorProfile(
+  PPROFILE pCDMPProfile,
+  PPROFILE pCAMPProfile,
+  PPROFILE pGMMPProfile,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  DWORD dwCreationMode,
+  DWORD dwFlags
+);
+
+WINBOOL WINAPI WcsSetDefaultColorProfile(
+  WCS_PROFILE_MANAGEMENT_SCOPE profileManagementScope,
+  PCWSTR pDeviceName,
+  COLORPROFILETYPE cptColorProfileType,
+  COLORPROFILESUBTYPE cpstColorProfileSubType,
+  DWORD dwProfileID,
+  LPCWSTR pProfileName
+);
+
+WInBOOL WINAPI WcsSetDefaultRenderingIntent(
+  WCS_PROFILE_MANAGEMENT_SCOPE scope,
+  DWORD dwRenderingIntent
+);
+
+WINBOOL WINAPI WcsSetUsePerUserProfiles(
+  LPCWSTR pDeviceName,
+  DWORD dwDeviceClass,
+  WINBOOL usePerUserProfiles
+);
+
+WINBOOL WINAPI WcsTranslateColors(
+  HTRANSFORM hColorTransform,
+  DWORD nColors,
+  DWORD nInputChannels,
+  COLORDATATYPE cdtInput,
+  DWORD cbInput,
+  PVOID pInputData,
+  DWORD nOutputChannels,
+  COLORDATATYPE cdtOutput,
+  DWORD cbOutput,
+  PVOID pOutputData
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/ifdef.h b/mingw-w64-headers/include/ifdef.h
new file mode 100644
index 0000000..72e1219
--- /dev/null
+++ b/mingw-w64-headers/include/ifdef.h
@@ -0,0 +1,114 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_IFDEF
+#define _INC_IFDEF
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IF_TYPE_OTHER 1
+#define IF_TYPE_ETHERNET_CSMACD 6
+#define IF_TYPE_ISO88025_TOKENRING 9
+#define IF_TYPE_PPP 23
+#define IF_TYPE_SOFTWARE_LOOPBACK 24
+#define IF_TYPE_ATM 37
+#define IF_TYPE_IEEE80211 71
+#define IF_TYPE_TUNNEL 131
+#define IF_TYPE_IEEE1394 144
+#define IF_MAX_STRING_SIZE 256
+#define IF_MAX_PHYS_ADDRESS_LENGTH 32
+
+typedef GUID NET_IF_NETWORK_GUID;
+
+typedef enum _IF_OPER_STATUS {
+  IfOperStatusUp               = 1,
+  IfOperStatusDown,
+  IfOperStatusTesting,
+  IfOperStatusUnknown,
+  IfOperStatusDormant,
+  IfOperStatusNotPresent,
+  IfOperStatusLowerLayerDown 
+} IF_OPER_STATUS;
+
+typedef enum _NET_IF_ADMIN_STATUS {
+  NET_IF_ADMIN_STATUS_UP        = 1,
+  NET_IF_ADMIN_STATUS_DOWN,
+  NET_IF_ADMIN_STATUS_TESTING 
+} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
+
+typedef enum _NET_IF_MEDIA_CONNECT_STATE {
+  MediaConnectStateUnknown,
+  MediaConnectStateConnected,
+  MediaConnectStateDisconnected 
+} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
+
+typedef enum _NET_IF_ACCESS_TYPE {
+  NET_IF_ACCESS_LOOPBACK               = 1,
+  NET_IF_ACCESS_BROADCAST,
+  NET_IF_ACCESS_POINT_TO_POINT,
+  NET_IF_ACCESS_POINT_TO_MULTI_POINT,
+  NET_IF_ACCESS_MAXIMUM 
+} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
+
+typedef enum _NET_IF_ADMIN_STATUS {
+  NET_IF_ADMIN_STATUS_UP        = 1,
+  NET_IF_ADMIN_STATUS_DOWN,
+  NET_IF_ADMIN_STATUS_TESTING 
+} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
+
+typedef enum _NET_IF_CONNECTION_TYPE {
+  NET_IF_CONNECTION_DEDICATED   = 1,
+  NET_IF_CONNECTION_PASSIVE,
+  NET_IF_CONNECTION_DEMAND,
+  NET_IF_CONNECTION_MAXIMUM 
+} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
+
+typedef enum _NET_IF_DIRECTION_TYPE {
+  NET_IF_DIRECTION_SENDRECEIVE,
+  NET_IF_DIRECTION_SENDONLY,
+  NET_IF_DIRECTION_RECEIVEONLY,
+  NET_IF_DIRECTION_MAXIMUM 
+} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
+
+typedef enum _NET_IF_MEDIA_CONNECT_STATE {
+  MediaConnectStateUnknown,
+  MediaConnectStateConnected,
+  MediaConnectStateDisconnected 
+} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
+
+typedef enum _NET_IF_MEDIA_DUPLEX_STATE {
+  MediaDuplexStateUnknown,
+  MediaDuplexStateHalf,
+  MediaDuplexStateFull 
+} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
+
+typedef enum _TUNNEL_TYPE {
+  TUNNEL_TYPE_NONE      = 0,
+  TUNNEL_TYPE_OTHER,
+  TUNNEL_TYPE_DIRECT,
+  TUNNEL_TYPE_6TO4,
+  TUNNEL_TYPE_ISATAP,
+  TUNNEL_TYPE_TEREDO,
+  TUNNEL_TYPE_IPHTTPS 
+} TUNNEL_TYPE, *PTUNNEL_TYPE;
+
+typedef union _NET_LUID {
+  ULONG64 Value;
+  __MINGW_EXTENSION struct {
+    ULONG64 Reserved  :24;
+    ULONG64 NetLuidIndex  :24;
+    ULONG64 IfType  :16;
+  } Info;
+} NET_LUID, *PNET_LUID;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_IFDEF*/
diff --git a/mingw-w64-headers/include/iketypes.h b/mingw-w64-headers/include/iketypes.h
new file mode 100644
index 0000000..a8b048a
--- /dev/null
+++ b/mingw-w64-headers/include/iketypes.h
@@ -0,0 +1,337 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_IKETYPES
+#define _INC_IKETYPES
+#include <fwptypes.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum IKEEXT_EM_SA_STATE_ {
+  IKEEXT_EM_SA_STATE_NONE,
+  IKEEXT_EM_SA_STATE_SENT_ATTS,
+  IKEEXT_EM_SA_STATE_SSPI_SENT,
+  IKEEXT_EM_SA_STATE_AUTH_COMPLETE,
+  IKEEXT_EM_SA_STATE_FINAL,
+  IKEEXT_EM_SA_STATE_COMPLETE,
+  IKEEXT_EM_SA_STATE_MAX 
+} IKEEXT_EM_SA_STATE;
+
+typedef enum IKEEXT_SA_ROLE_ {
+  IKEEXT_SA_ROLE_INITIATOR,
+  IKEEXT_SA_ROLE_RESPONDER,
+  IKEEXT_SA_ROLE_MAX 
+} IKEEXT_SA_ROLE;
+
+typedef enum IKEEXT_AUTHENTICATION_METHOD_TYPE_ {
+  IKEEXT_PRESHARED_KEY,
+  IKEEXT_CERTIFICATE,
+  IKEEXT_KERBEROS,
+  IKEEXT_ANONYMOUS,
+  IKEEXT_SSL,
+  IKEEXT_NTLM_V2,
+  IKEEXT_IPV6_CGA,
+  IKEEXT_CERTIFICATE_ECDSA_P256,
+  IKEEXT_CERTIFICATE_ECDSA_P384,
+  IKEEXT_SSL_ECDSA_P256,
+  IKEEXT_SSL_ECDSA_P384,
+  IKEEXT_EAP,
+  IKEEXT_AUTHENTICATION_METHOD_TYPE_MAX 
+} IKEEXT_AUTHENTICATION_METHOD_TYPE;
+
+typedef enum IKEEXT_KEY_MODULE_TYPE_ {
+  IKEEXT_KEY_MODULE_IKE,
+  IKEEXT_KEY_MODULE_AUTHIP,
+  IKEEXT_KEY_MODULE_IKEV2,
+  IKEEXT_KEY_MODULE_MAX 
+} IKEEXT_KEY_MODULE_TYPE;
+
+typedef enum IKEEXT_MM_SA_STATE_ {
+  IKEEXT_MM_SA_STATE_NONE,
+  IKEEXT_MM_SA_STATE_SA_SENT,
+  IKEEXT_MM_SA_STATE_SSPI_SENT,
+  IKEEXT_MM_SA_STATE_FINAL,
+  IKEEXT_MM_SA_STATE_FINAL_SENT,
+  IKEEXT_MM_SA_STATE_COMPLETE,
+  IKEEXT_MM_SA_STATE_MAX 
+} IKEEXT_MM_SA_STATE;
+
+typedef enum IKEEXT_QM_SA_STATE_ {
+  IKEEXT_QM_SA_STATE_NONE,
+  IKEEXT_QM_SA_STATE_INITIAL,
+  IKEEXT_QM_SA_STATE_FINAL,
+  IKEEXT_QM_SA_STATE_COMPLETE,
+  IKEEXT_QM_SA_STATE_MAX 
+} IKEEXT_QM_SA_STATE;
+
+typedef enum IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE_ {
+  IKEEXT_IMPERSONATION_NONE,
+  IKEEXT_IMPERSONATION_SOCKET_PRINCIPAL,
+  IKEEXT_IMPERSONATION_MAX 
+} IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE;
+
+typedef enum IKEEXT_CERT_CONFIG_TYPE_ {
+  IKEEXT_CERT_CONFIG_EXPLICIT_TRUST_LIST,
+  IKEEXT_CERT_CONFIG_ENTERPRISE_STORE,
+  IKEEXT_CERT_CONFIG_TRUSTED_ROOT_STORE,
+  IKEEXT_CERT_CONFIG_UNSPECIFIED,
+  IKEEXT_CERT_CONFIG_TYPE_MAX 
+} IKEEXT_CERT_CONFIG_TYPE;
+
+typedef enum IKEEXT_CIPHER_TYPE_ {
+  IKEEXT_CIPHER_DES,
+  IKEEXT_CIPHER_3DES,
+  IKEEXT_CIPHER_AES_128,
+  IKEEXT_CIPHER_AES_192,
+  IKEEXT_CIPHER_AES_256,
+  IKEEXT_CIPHER_TYPE_MAX 
+} IKEEXT_CIPHER_TYPE;
+
+typedef enum IKEEXT_INTEGRITY_TYPE_ {
+  IKEEXT_INTEGRITY_MD5,
+  IKEEXT_INTEGRITY_SHA1,
+  IKEEXT_INTEGRITY_SHA_256,
+  IKEEXT_INTEGRITY_SHA_384,
+  IKEEXT_INTEGRITY_TYPE_MAX 
+} IKEEXT_INTEGRITY_TYPE;
+
+typedef enum IKEEXT_DH_GROUP_ {
+  IKEEXT_DH_GROUP_NONE,
+  IKEEXT_DH_GROUP_1,
+  IKEEXT_DH_GROUP_2,
+  IKEEXT_DH_GROUP_2048,
+  IKEEXT_DH_ECP_256,
+  IKEEXT_DH_ECP_384,
+  IKEEXT_DH_GROUP_MAX 
+} IKEEXT_DH_GROUP;
+
+typedef struct IKEEXT_CERT_ROOT_CONFIG0_ {
+  FWP_BYTE_BLOB certData;
+  UINT32        flags;
+} IKEEXT_CERT_ROOT_CONFIG0;
+
+typedef struct IKEEXT_EM_POLICY0_ {
+  UINT32                                   numAuthenticationMethods;
+  IKEEXT_AUTHENTICATION_METHOD0            *authenticationMethods;
+  IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
+} IKEEXT_EM_POLICY0;
+
+typedef struct IKEEXT_KERBEROS_AUTHENTICATION0_ {
+  UINT32 flags;
+} IKEEXT_KERBEROS_AUTHENTICATION0;
+
+typedef struct IKEEXT_NTLM_V2_AUTHENTICATION0_ {
+  UINT32 flags;
+} IKEEXT_NTLM_V2_AUTHENTICATION0;
+
+typedef struct IKEEXT_IPV6_CGA_AUTHENTICATION0_ {
+  wchar_t          *keyContainerName;
+  wchar_t          *cspName;
+  UINT32           cspType;
+  FWP_BYTE_ARRAY16 cgaModifier;
+  BYTE             cgaCollisionCount;
+} IKEEXT_IPV6_CGA_AUTHENTICATION0;
+
+typedef struct IKEEXT_PRESHARED_KEY_AUTHENTICATION0__ {
+  FWP_BYTE_BLOB presharedKey;
+} IKEEXT_PRESHARED_KEY_AUTHENTICATION0;
+
+typedef struct IKEEXT_AUTHENTICATION_METHOD0_ {
+  IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
+  __MINGW_EXTENSION union {
+    IKEEXT_PRESHARED_KEY_AUTHENTICATION0 presharedKeyAuthentication;
+    IKEEXT_CERTIFICATE_AUTHENTICATION0   certificateAuthentication;
+    IKEEXT_KERBEROS_AUTHENTICATION0      kerberosAuthentication;
+    IKEEXT_NTLM_V2_AUTHENTICATION0       ntlmV2Authentication;
+    IKEEXT_CERTIFICATE_AUTHENTICATION0   sslAuthentication;
+    IKEEXT_IPV6_CGA_AUTHENTICATION0      cgaAuthentication;
+    ;      // case(IKEEXT_ANONYMOUS)
+  };
+} IKEEXT_AUTHENTICATION_METHOD0;
+
+typedef struct IKEEXT_CERTIFICATE_AUTHENTICATION0_ {
+  IKEEXT_CERT_CONFIG_TYPE inboundConfigType;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      UINT32                   inboundRootArraySize;
+      IKEEXT_CERT_ROOT_CONFIG0 *inboundRootArray;
+    };
+    IKEEXT_CERT_ROOT_CONFIG0 *inboundEnterpriseStoreConfig;
+    IKEEXT_CERT_ROOT_CONFIG0 *inboundTrustedRootStoreConfig;
+  };
+  IKEEXT_CERT_CONFIG_TYPE outboundConfigType;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      UINT32                   outboundRootArraySize;
+      IKEEXT_CERT_ROOT_CONFIG0 *outboundRootArray;
+    };
+    IKEEXT_CERT_ROOT_CONFIG0 *outboundEnterpriseStoreConfig;
+    IKEEXT_CERT_ROOT_CONFIG0 *outboundTrustedRootStoreConfig;
+  };
+  UINT32                  flags;
+} IKEEXT_CERTIFICATE_AUTHENTICATION0;
+
+typedef struct IKEEXT_POLICY0_ {
+  UINT32                                   softExpirationTime;
+  UINT32                                   numAuthenticationMethods;
+  IKEEXT_AUTHENTICATION_METHOD0            *authenticationMethods;
+  IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
+  UINT32                                   numIkeProposals;
+  IKEEXT_PROPOSAL0                         *ikeProposals;
+  UINT32                                   flags;
+  UINT32                                   maxDynamicFilters;
+} IKEEXT_POLICY0;
+
+typedef struct IKEEXT_INTEGRITY_ALGORITHM0_ {
+  IKEEXT_INTEGRITY_TYPE algoIdentifier;
+} IKEEXT_INTEGRITY_ALGORITHM0;
+
+typedef struct IKEEXT_CIPHER_ALGORITHM0_ {
+  IKEEXT_CIPHER_TYPE algoIdentifier;
+  UINT32             keyLen;
+  UINT32             rounds;
+} IKEEXT_CIPHER_ALGORITHM0;
+
+typedef struct IKEEXT_PROPOSAL0_ {
+  IKEEXT_CIPHER_ALGORITHM0    cipherAlgorithm;
+  IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm;
+  UINT32                      maxLifetimeSeconds;
+  IKEEXT_DH_GROUP             dhGroup;
+  UINT32                      quickModeLimit;
+} IKEEXT_PROPOSAL0;
+
+typedef struct IKEEXT_CERTIFICATE_CREDENTIAL0_ {
+  FWP_BYTE_BLOB subjectName;
+  FWP_BYTE_BLOB certHash;
+  UINT32        flags;
+} IKEEXT_CERTIFICATE_CREDENTIAL0;
+
+typedef struct IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0_ {
+  UINT32 totalSocketReceiveFailures;
+  UINT32 totalSocketSendFailures;
+} IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0;
+
+typedef struct IKEEXT_COMMON_STATISTICS0_ {
+  IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0 v4Statistics;
+  IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0 v6Statistics;
+  UINT32                                        totalPacketsReceived;
+  UINT32                                        totalInvalidPacketsReceived;
+  UINT32                                        currentQueuedWorkitems;
+} IKEEXT_COMMON_STATISTICS0;
+
+typedef UINT64 IKEEXT_COOKIE;
+
+typedef struct IKEEXT_COOKIE_PAIR0_ {
+  IKEEXT_COOKIE initiator;
+  IKEEXT_COOKIE responder;
+} IKEEXT_COOKIE_PAIR0;
+
+typedef struct IKEEXT_CREDENTIAL0_ {
+  IKEEXT_AUTHENTICATION_METHOD_TYPE        authenticationMethodType;
+  IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE impersonationType;
+  __MINGW_EXTENSION union {
+    IKEEXT_PRESHARED_KEY_AUTHENTICATION0 *presharedKey;
+    IKEEXT_CERTIFICATE_CREDENTIAL0       *certificate;
+    IKEEXT_NAME_CREDENTIAL0              *name;
+    ;      // case(IKEEXT_ANONYMOUS)
+  };
+} IKEEXT_CREDENTIAL0;
+
+typedef struct IKEEXT_CREDENTIAL_PAIR0_ {
+  IKEEXT_CREDENTIAL0 localCredentials;
+  IKEEXT_CREDENTIAL0 peerCredentials;
+} IKEEXT_CREDENTIAL_PAIR0;
+
+typedef struct IKEEXT_CREDENTIALS0_ {
+  UINT32                  numCredentials;
+  IKEEXT_CREDENTIAL_PAIR0 *credentials;
+} IKEEXT_CREDENTIALS0;
+
+typedef struct IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0_ {
+  UINT32 currentActiveMainModes;
+  UINT32 totalMainModesStarted;
+  UINT32 totalSuccessfulMainModes;
+  UINT32 totalFailedMainModes;
+  UINT32 totalResponderMainModes;
+  UINT32 currentNewResponderMainModes;
+  UINT32 currentActiveQuickModes;
+  UINT32 totalQuickModesStarted;
+  UINT32 totalSuccessfulQuickModes;
+  UINT32 totalFailedQuickModes;
+  UINT32 totalAcquires;
+  UINT32 totalReinitAcquires;
+  UINT32 currentActiveExtendedModes;
+  UINT32 totalExtendedModesStarted;
+  UINT32 totalSuccessfulExtendedModes;
+  UINT32 totalFailedExtendedModes;
+  UINT32 totalImpersonationExtendedModes;
+  UINT32 totalImpersonationMainModes;
+} IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0;
+
+#define IKEEXT_ERROR_CODE_COUNT (ERROR_IPSEC_IKE_NEG_STATUS_END - ERROR_IPSEC_IKE_NEG_STATUS_BEGIN) /* Should be 84 */
+
+typedef struct IKEEXT_KEYMODULE_STATISTICS0_ {
+  IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0 v4Statistics;
+  IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0 v6Statistics;
+  UINT32                                           errorFrequencyTable[IKEEXT_ERROR_CODE_COUNT];
+  UINT32                                           mainModeNegotiationTime;
+  UINT32                                           quickModeNegotiationTime;
+  UINT32                                           extendedModeNegotiationTime;
+} IKEEXT_KEYMODULE_STATISTICS0;
+
+typedef struct IKEEXT_NAME_CREDENTIAL0_ {
+  wchar_t *principalName;
+} IKEEXT_NAME_CREDENTIAL0;
+
+typedef struct IKEEXT_SA_DETAILS0_ {
+  UINT64                 saId;
+  IKEEXT_KEY_MODULE_TYPE keyModuleType;
+  FWP_IP_VERSION         ipVersion;
+  __MINGW_EXTENSION union {
+    IPSEC_V4_UDP_ENCAPSULATION0 *v4UdpEncapsulation;
+    ;      // case(FWP_IP_VERSION_V6)
+  };
+  IKEEXT_TRAFFIC0        ikeTraffic;
+  IKEEXT_PROPOSAL0       ikeProposal;
+  IKEEXT_COOKIE_PAIR0    cookiePair;
+  IKEEXT_CREDENTIALS0    ikeCredentials;
+  GUID                   ikePolicyKey;
+  UINT64                 virtualIfTunnelId;
+} IKEEXT_SA_DETAILS0;
+
+typedef struct IKEEXT_SA_ENUM_TEMPLATE0_ {
+  FWP_CONDITION_VALUE0 localSubNet;
+  FWP_CONDITION_VALUE0 remoteSubNet;
+  FWP_BYTE_BLOB        localMainModeCertHash;
+} IKEEXT_SA_ENUM_TEMPLATE0;
+
+typedef struct IKEEXT_STATISTICS0_ {
+  IKEEXT_KEYMODULE_STATISTICS0 ikeStatistics;
+  IKEEXT_KEYMODULE_STATISTICS0 authipStatistics;
+  IKEEXT_COMMON_STATISTICS0    commonStatistics;
+} IKEEXT_STATISTICS0;
+
+typedef struct IKEEXT_TRAFFIC0_ {
+  FWP_IP_VERSION ipVersion;
+  __MINGW_EXTENSION union {
+    UINT32 localV4Address;
+    UINT8  localV6Address[16];
+  };
+  __MINGW_EXTENSION union {
+    UINT32 remoteV4Address;
+    UINT8  remoteV6Address[16];
+  };
+  UINT64         authIpFilterId;
+} IKEEXT_TRAFFIC0;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_IKETYPES*/
diff --git a/mingw-w64-headers/include/imapi2.idl b/mingw-w64-headers/include/imapi2.idl
new file mode 100644
index 0000000..ce3d486
--- /dev/null
+++ b/mingw-w64-headers/include/imapi2.idl
@@ -0,0 +1,1908 @@
+/* Automated generated idl file <imapi2>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+#include <windows.h>
+
+/* Interface forward declarations.  */
+interface DDiscMaster2Events;
+interface DWriteEngine2Events;
+interface DDiscFormat2EraseEvents;
+interface DDiscFormat2DataEvents;
+interface DDiscFormat2TrackAtOnceEvents;
+interface DDiscFormat2RawCDEvents;
+interface IStream;
+interface ISequentialStream;
+interface IBurnVerification;
+interface IConnectionPointContainer;
+interface IEnumConnectionPoints;
+interface IConnectionPoint;
+interface IEnumConnections;
+interface IDiscRecorder2Ex;
+interface IStreamPseudoRandomBased;
+interface IStreamConcatenate;
+interface IStreamInterleave;
+interface IMultisessionSequential;
+interface IMultisession;
+
+/* Structure forward declarations.  */
+struct _LARGE_INTEGER;
+struct _ULARGE_INTEGER;
+struct tagSTATSTG;
+struct _FILETIME;
+struct tagCONNECTDATA;
+
+/* Union record forward declarations.  */
+dispinterface IWriteEngine2EventArgs;
+dispinterface IDiscFormat2DataEventArgs;
+dispinterface IDiscFormat2TrackAtOnceEventArgs;
+dispinterface IDiscFormat2RawCDEventArgs;
+dispinterface IWriteSpeedDescriptor;
+dispinterface IRawCDImageCreator;
+dispinterface IRawCDImageTrackInfo;
+dispinterface IDiscMaster2;
+dispinterface IDiscRecorder2;
+dispinterface IWriteEngine2;
+dispinterface IDiscFormat2Erase;
+dispinterface IDiscFormat2;
+dispinterface IDiscFormat2Data;
+dispinterface IDiscFormat2TrackAtOnce;
+dispinterface IDiscFormat2RawCD;
+
+/* Union record forward declarations.  */
+coclass MsftDiscMaster2;
+coclass MsftDiscRecorder2;
+coclass MsftWriteEngine2;
+coclass MsftDiscFormat2Erase;
+coclass MsftDiscFormat2Data;
+coclass MsftDiscFormat2TrackAtOnce;
+coclass MsftDiscFormat2RawCD;
+coclass MsftStreamZero;
+coclass MsftStreamPrng001;
+coclass MsftStreamConcatenate;
+coclass MsftStreamInterleave;
+coclass MsftWriteSpeedDescriptor;
+coclass MsftMultisessionSequential;
+coclass MsftRawCDImageCreator;
+
+/* Enumeration declarations.  */
+[
+  helpstring("The current action being performed for the data write")
+]
+enum _IMAPI_FORMAT2_DATA_WRITE_ACTION
+{
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_VALIDATING_MEDIA = (int) 201326592,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_FORMATTING_MEDIA = (int) 201326593,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_INITIALIZING_HARDWARE = (int) 201326594,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_CALIBRATING_POWER = (int) 201326595,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_WRITING_DATA = (int) 201326596,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_FINALIZATION = (int) 201326597,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_COMPLETED = (int) 201326598,
+  IMAPI_FORMAT2_DATA_WRITE_ACTION_VERIFYING = (int) 201326599
+};
+[
+  helpstring("Current action when writing to CD in Track-at-Once mode")
+]
+enum _IMAPI_FORMAT2_TAO_WRITE_ACTION
+{
+  IMAPI_FORMAT2_TAO_WRITE_ACTION_UNKNOWN = (int) 201326592,
+  IMAPI_FORMAT2_TAO_WRITE_ACTION_PREPARING = (int) 201326593,
+  IMAPI_FORMAT2_TAO_WRITE_ACTION_WRITING = (int) 201326594,
+  IMAPI_FORMAT2_TAO_WRITE_ACTION_FINISHING = (int) 201326595,
+  IMAPI_FORMAT2_TAO_WRITE_ACTION_VERIFYING = (int) 201326596
+};
+[
+  helpstring("Current action when writing to the CD in Disc-At-Once (RAW) mode")
+]
+enum _IMAPI_FORMAT2_RAW_CD_WRITE_ACTION
+{
+  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_UNKNOWN = (int) 201326592,
+  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_PREPARING = (int) 201326593,
+  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_WRITING = (int) 201326594,
+  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_FINISHING = (int) 201326595
+};
+[
+  helpstring("Physical type of the optical media")
+]
+enum _IMAPI_MEDIA_PHYSICAL_TYPE
+{
+  IMAPI_MEDIA_TYPE_UNKNOWN = (int) 201326592,
+  IMAPI_MEDIA_TYPE_CDROM = (int) 201326593,
+  IMAPI_MEDIA_TYPE_CDR = (int) 201326594,
+  IMAPI_MEDIA_TYPE_CDRW = (int) 201326595,
+  IMAPI_MEDIA_TYPE_DVDROM = (int) 201326596,
+  IMAPI_MEDIA_TYPE_DVDRAM = (int) 201326597,
+  IMAPI_MEDIA_TYPE_DVDPLUSR = (int) 201326598,
+  IMAPI_MEDIA_TYPE_DVDPLUSRW = (int) 201326599,
+  IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER = (int) 201326600,
+  IMAPI_MEDIA_TYPE_DVDDASHR = (int) 201326601,
+  IMAPI_MEDIA_TYPE_DVDDASHRW = (int) 201326602,
+  IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER = (int) 201326603,
+  IMAPI_MEDIA_TYPE_DISK = (int) 201326604,
+  IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER = (int) 201326605,
+  IMAPI_MEDIA_TYPE_HDDVDROM = (int) 201326606,
+  IMAPI_MEDIA_TYPE_HDDVDR = (int) 201326607,
+  IMAPI_MEDIA_TYPE_HDDVDRAM = (int) 201326608,
+  IMAPI_MEDIA_TYPE_BDROM = (int) 201326609,
+  IMAPI_MEDIA_TYPE_BDR = (int) 201326610,
+  IMAPI_MEDIA_TYPE_BDRE = (int) 201326611,
+  IMAPI_MEDIA_TYPE_MAX = (int) 201326611
+};
+[
+  helpstring("The CD sector type for provided data")
+]
+enum _IMAPI_CD_SECTOR_TYPE
+{
+  IMAPI_CD_SECTOR_AUDIO = (int) 201326592,
+  IMAPI_CD_SECTOR_MODE_ZERO = (int) 201326593,
+  IMAPI_CD_SECTOR_MODE1 = (int) 201326594,
+  IMAPI_CD_SECTOR_MODE2FORM0 = (int) 201326595,
+  IMAPI_CD_SECTOR_MODE2FORM1 = (int) 201326596,
+  IMAPI_CD_SECTOR_MODE2FORM2 = (int) 201326597,
+  IMAPI_CD_SECTOR_MODE1RAW = (int) 201326598,
+  IMAPI_CD_SECTOR_MODE2FORM0RAW = (int) 201326599,
+  IMAPI_CD_SECTOR_MODE2FORM1RAW = (int) 201326600,
+  IMAPI_CD_SECTOR_MODE2FORM2RAW = (int) 201326601
+};
+[
+  helpstring("Data sector type to use when writing to CD in Disc-At-Once (RAW) mode")
+]
+enum _IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE
+{
+  IMAPI_FORMAT2_RAW_CD_SUBCODE_PQ_ONLY = (int) 201326593,
+  IMAPI_FORMAT2_RAW_CD_SUBCODE_IS_COOKED = (int) 201326594,
+  IMAPI_FORMAT2_RAW_CD_SUBCODE_IS_RAW = (int) 201326595
+};
+[
+  helpstring("The audio track digital copy setting")
+]
+enum _IMAPI_CD_TRACK_DIGITAL_COPY_SETTING
+{
+  IMAPI_CD_TRACK_DIGITAL_COPY_PERMITTED = (int) 201326592,
+  IMAPI_CD_TRACK_DIGITAL_COPY_PROHIBITED = (int) 201326593,
+  IMAPI_CD_TRACK_DIGITAL_COPY_SCMS = (int) 201326594
+};
+[
+  helpstring("Burn verification level")
+]
+enum _IMAPI_BURN_VERIFICATION_LEVEL
+{
+  IMAPI_BURN_VERIFICATION_NONE = (int) 201326592,
+  IMAPI_BURN_VERIFICATION_QUICK = (int) 201326593,
+  IMAPI_BURN_VERIFICATION_FULL = (int) 201326594
+};
+[
+  helpstring("Address type provided for reading track information")
+]
+enum _IMAPI_READ_TRACK_ADDRESS_TYPE
+{
+  IMAPI_READ_TRACK_ADDRESS_TYPE_LBA = (int) 201326592,
+  IMAPI_READ_TRACK_ADDRESS_TYPE_TRACK = (int) 201326593,
+  IMAPI_READ_TRACK_ADDRESS_TYPE_SESSION = (int) 201326594
+};
+[
+  helpstring("Type of the feature page data")
+]
+enum _IMAPI_FEATURE_PAGE_TYPE
+{
+  IMAPI_FEATURE_PAGE_TYPE_PROFILE_LIST = (int) 201326592,
+  IMAPI_FEATURE_PAGE_TYPE_CORE = (int) 201326593,
+  IMAPI_FEATURE_PAGE_TYPE_MORPHING = (int) 201326594,
+  IMAPI_FEATURE_PAGE_TYPE_REMOVABLE_MEDIUM = (int) 201326595,
+  IMAPI_FEATURE_PAGE_TYPE_WRITE_PROTECT = (int) 201326596,
+  IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_READABLE = (int) 201326608,
+  IMAPI_FEATURE_PAGE_TYPE_CD_MULTIREAD = (int) 201326621,
+  IMAPI_FEATURE_PAGE_TYPE_CD_READ = (int) 201326622,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_READ = (int) 201326623,
+  IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_WRITABLE = (int) 201326624,
+  IMAPI_FEATURE_PAGE_TYPE_INCREMENTAL_STREAMING_WRITABLE = (int) 201326625,
+  IMAPI_FEATURE_PAGE_TYPE_SECTOR_ERASABLE = (int) 201326626,
+  IMAPI_FEATURE_PAGE_TYPE_FORMATTABLE = (int) 201326627,
+  IMAPI_FEATURE_PAGE_TYPE_HARDWARE_DEFECT_MANAGEMENT = (int) 201326628,
+  IMAPI_FEATURE_PAGE_TYPE_WRITE_ONCE = (int) 201326629,
+  IMAPI_FEATURE_PAGE_TYPE_RESTRICTED_OVERWRITE = (int) 201326630,
+  IMAPI_FEATURE_PAGE_TYPE_CDRW_CAV_WRITE = (int) 201326631,
+  IMAPI_FEATURE_PAGE_TYPE_MRW = (int) 201326632,
+  IMAPI_FEATURE_PAGE_TYPE_ENHANCED_DEFECT_REPORTING = (int) 201326633,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_RW = (int) 201326634,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R = (int) 201326635,
+  IMAPI_FEATURE_PAGE_TYPE_RIGID_RESTRICTED_OVERWRITE = (int) 201326636,
+  IMAPI_FEATURE_PAGE_TYPE_CD_TRACK_AT_ONCE = (int) 201326637,
+  IMAPI_FEATURE_PAGE_TYPE_CD_MASTERING = (int) 201326638,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_DASH_WRITE = (int) 201326639,
+  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_READ = (int) 201326640,
+  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_R_WRITE = (int) 201326641,
+  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_RW_WRITE = (int) 201326642,
+  IMAPI_FEATURE_PAGE_TYPE_LAYER_JUMP_RECORDING = (int) 201326643,
+  IMAPI_FEATURE_PAGE_TYPE_CD_RW_MEDIA_WRITE_SUPPORT = (int) 201326647,
+  IMAPI_FEATURE_PAGE_TYPE_BD_PSEUDO_OVERWRITE = (int) 201326648,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R_DUAL_LAYER = (int) 201326651,
+  IMAPI_FEATURE_PAGE_TYPE_BD_READ = (int) 201326656,
+  IMAPI_FEATURE_PAGE_TYPE_BD_WRITE = (int) 201326657,
+  IMAPI_FEATURE_PAGE_TYPE_HD_DVD_READ = (int) 201326672,
+  IMAPI_FEATURE_PAGE_TYPE_HD_DVD_WRITE = (int) 201326673,
+  IMAPI_FEATURE_PAGE_TYPE_POWER_MANAGEMENT = (int) 201326848,
+  IMAPI_FEATURE_PAGE_TYPE_SMART = (int) 201326849,
+  IMAPI_FEATURE_PAGE_TYPE_EMBEDDED_CHANGER = (int) 201326850,
+  IMAPI_FEATURE_PAGE_TYPE_CD_ANALOG_PLAY = (int) 201326851,
+  IMAPI_FEATURE_PAGE_TYPE_MICROCODE_UPDATE = (int) 201326852,
+  IMAPI_FEATURE_PAGE_TYPE_TIMEOUT = (int) 201326853,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_CSS = (int) 201326854,
+  IMAPI_FEATURE_PAGE_TYPE_REAL_TIME_STREAMING = (int) 201326855,
+  IMAPI_FEATURE_PAGE_TYPE_LOGICAL_UNIT_SERIAL_NUMBER = (int) 201326856,
+  IMAPI_FEATURE_PAGE_TYPE_MEDIA_SERIAL_NUMBER = (int) 201326857,
+  IMAPI_FEATURE_PAGE_TYPE_DISC_CONTROL_BLOCKS = (int) 201326858,
+  IMAPI_FEATURE_PAGE_TYPE_DVD_CPRM = (int) 201326859,
+  IMAPI_FEATURE_PAGE_TYPE_FIRMWARE_INFORMATION = (int) 201326860,
+  IMAPI_FEATURE_PAGE_TYPE_AACS = (int) 201326861,
+  IMAPI_FEATURE_PAGE_TYPE_VCPS = (int) 201326864
+};
+[
+  helpstring("Type of the mode page data")
+]
+enum _IMAPI_MODE_PAGE_TYPE
+{
+  IMAPI_MODE_PAGE_TYPE_READ_WRITE_ERROR_RECOVERY = (int) 201326593,
+  IMAPI_MODE_PAGE_TYPE_MRW = (int) 201326595,
+  IMAPI_MODE_PAGE_TYPE_WRITE_PARAMETERS = (int) 201326597,
+  IMAPI_MODE_PAGE_TYPE_CACHING = (int) 201326600,
+  IMAPI_MODE_PAGE_TYPE_INFORMATIONAL_EXCEPTIONS = (int) 201326620,
+  IMAPI_MODE_PAGE_TYPE_TIMEOUT_AND_PROTECT = (int) 201326621,
+  IMAPI_MODE_PAGE_TYPE_POWER_CONDITION = (int) 201326618,
+  IMAPI_MODE_PAGE_TYPE_LEGACY_CAPABILITIES = (int) 201326634
+};
+[
+  helpstring("Mode page data type to request")
+]
+enum _IMAPI_MODE_PAGE_REQUEST_TYPE
+{
+  IMAPI_MODE_PAGE_REQUEST_TYPE_CURRENT_VALUES = (int) 201326592,
+  IMAPI_MODE_PAGE_REQUEST_TYPE_CHANGEABLE_VALUES = (int) 201326593,
+  IMAPI_MODE_PAGE_REQUEST_TYPE_DEFAULT_VALUES = (int) 201326594,
+  IMAPI_MODE_PAGE_REQUEST_TYPE_SAVED_VALUES = (int) 201326595
+};
+[
+  helpstring("Type of the profile in feature page data")
+]
+enum _IMAPI_PROFILE_TYPE
+{
+  IMAPI_PROFILE_TYPE_INVALID = (int) 201326592,
+  IMAPI_PROFILE_TYPE_NON_REMOVABLE_DISK = (int) 201326593,
+  IMAPI_PROFILE_TYPE_REMOVABLE_DISK = (int) 201326594,
+  IMAPI_PROFILE_TYPE_MO_ERASABLE = (int) 201326595,
+  IMAPI_PROFILE_TYPE_MO_WRITE_ONCE = (int) 201326596,
+  IMAPI_PROFILE_TYPE_AS_MO = (int) 201326597,
+  IMAPI_PROFILE_TYPE_CDROM = (int) 201326600,
+  IMAPI_PROFILE_TYPE_CD_RECORDABLE = (int) 201326601,
+  IMAPI_PROFILE_TYPE_CD_REWRITABLE = (int) 201326602,
+  IMAPI_PROFILE_TYPE_DVDROM = (int) 201326608,
+  IMAPI_PROFILE_TYPE_DVD_DASH_RECORDABLE = (int) 201326609,
+  IMAPI_PROFILE_TYPE_DVD_RAM = (int) 201326610,
+  IMAPI_PROFILE_TYPE_DVD_DASH_REWRITABLE = (int) 201326611,
+  IMAPI_PROFILE_TYPE_DVD_DASH_RW_SEQUENTIAL = (int) 201326612,
+  IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_SEQUENTIAL = (int) 201326613,
+  IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_LAYER_JUMP = (int) 201326614,
+  IMAPI_PROFILE_TYPE_DVD_PLUS_RW = (int) 201326618,
+  IMAPI_PROFILE_TYPE_DVD_PLUS_R = (int) 201326619,
+  IMAPI_PROFILE_TYPE_DDCDROM = (int) 201326624,
+  IMAPI_PROFILE_TYPE_DDCD_RECORDABLE = (int) 201326625,
+  IMAPI_PROFILE_TYPE_DDCD_REWRITABLE = (int) 201326626,
+  IMAPI_PROFILE_TYPE_DVD_PLUS_RW_DUAL = (int) 201326634,
+  IMAPI_PROFILE_TYPE_DVD_PLUS_R_DUAL = (int) 201326635,
+  IMAPI_PROFILE_TYPE_BD_ROM = (int) 201326656,
+  IMAPI_PROFILE_TYPE_BD_R_SEQUENTIAL = (int) 201326657,
+  IMAPI_PROFILE_TYPE_BD_R_RANDOM_RECORDING = (int) 201326658,
+  IMAPI_PROFILE_TYPE_BD_REWRITABLE = (int) 201326659,
+  IMAPI_PROFILE_TYPE_HD_DVD_ROM = (int) 201326672,
+  IMAPI_PROFILE_TYPE_HD_DVD_RECORDABLE = (int) 201326673,
+  IMAPI_PROFILE_TYPE_HD_DVD_RAM = (int) 201326674,
+  IMAPI_PROFILE_TYPE_NON_STANDARD = (int) 201392127
+};
+[
+  helpstring("Set of flags to indicate current media state")
+]
+enum _IMAPI_FORMAT2_DATA_MEDIA_STATE
+{
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNKNOWN = (int) 201326592,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_INFORMATIONAL_MASK = (int) 201326607,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNSUPPORTED_MASK = (int) 201391104,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_OVERWRITE_ONLY = (int) 201326593,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_RANDOMLY_WRITABLE = (int) 201326593,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_BLANK = (int) 201326594,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_APPENDABLE = (int) 201326596,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_FINAL_SESSION = (int) 201326600,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_DAMAGED = (int) 201327616,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_ERASE_REQUIRED = (int) 201328640,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_NON_EMPTY_SESSION = (int) 201330688,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_WRITE_PROTECTED = (int) 201334784,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_FINALIZED = (int) 201342976,
+  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNSUPPORTED_MEDIA = (int) 201359360
+};
+[
+  helpstring("Detected write protection type of the media")
+]
+enum _IMAPI_MEDIA_WRITE_PROTECT_STATE
+{
+  IMAPI_WRITEPROTECTED_UNTIL_POWERDOWN = (int) 201326593,
+  IMAPI_WRITEPROTECTED_BY_CARTRIDGE = (int) 201326594,
+  IMAPI_WRITEPROTECTED_BY_MEDIA_SPECIFIC_REASON = (int) 201326596,
+  IMAPI_WRITEPROTECTED_BY_SOFTWARE_WRITE_PROTECT = (int) 201326600,
+  IMAPI_WRITEPROTECTED_BY_DISC_CONTROL_BLOCK = (int) 201326608,
+  IMAPI_WRITEPROTECTED_READ_ONLY_MEDIA = (int) 201342976
+};
+
+/* Structure/union declarations.  */
+struct _LARGE_INTEGER
+{
+  LONGLONG QuadPart;
+};
+struct _ULARGE_INTEGER
+{
+  ULONGLONG QuadPart;
+};
+struct tagSTATSTG
+{
+  LPWSTR pwcsName;
+  UINT type;
+  struct _ULARGE_INTEGER cbSize;
+  struct _FILETIME mtime;
+  struct _FILETIME ctime;
+  struct _FILETIME atime;
+  UINT grfMode;
+  UINT grfLocksSupported;
+  struct GUID clsid;
+  UINT grfStateBits;
+  UINT reserved;
+};
+struct _FILETIME
+{
+  UINT dwLowDateTime;
+  UINT dwHighDateTime;
+};
+struct tagCONNECTDATA
+{
+  IUnknown * pUnk;
+  UINT dwCookie;
+};
+
+/* Type definitions.  */
+[
+  helpstring("The current action being performed for the data write")
+]
+typedef enum _IMAPI_FORMAT2_DATA_WRITE_ACTION IMAPI_FORMAT2_DATA_WRITE_ACTION;
+[
+  helpstring("Current action when writing to CD in Track-at-Once mode")
+]
+typedef enum _IMAPI_FORMAT2_TAO_WRITE_ACTION IMAPI_FORMAT2_TAO_WRITE_ACTION;
+[
+  helpstring("Current action when writing to the CD in Disc-At-Once (RAW) mode")
+]
+typedef enum _IMAPI_FORMAT2_RAW_CD_WRITE_ACTION IMAPI_FORMAT2_RAW_CD_WRITE_ACTION;
+[
+  helpstring("Physical type of the optical media")
+]
+typedef enum _IMAPI_MEDIA_PHYSICAL_TYPE IMAPI_MEDIA_PHYSICAL_TYPE;
+[
+  helpstring("The CD sector type for provided data")
+]
+typedef enum _IMAPI_CD_SECTOR_TYPE IMAPI_CD_SECTOR_TYPE;
+[
+  helpstring("Data sector type to use when writing to CD in Disc-At-Once (RAW) mode")
+]
+typedef enum _IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE;
+[
+  helpstring("The audio track digital copy setting")
+]
+typedef enum _IMAPI_CD_TRACK_DIGITAL_COPY_SETTING IMAPI_CD_TRACK_DIGITAL_COPY_SETTING;
+[
+  helpstring("Burn verification level")
+]
+typedef enum _IMAPI_BURN_VERIFICATION_LEVEL IMAPI_BURN_VERIFICATION_LEVEL;
+[
+  helpstring("Address type provided for reading track information")
+]
+typedef enum _IMAPI_READ_TRACK_ADDRESS_TYPE IMAPI_READ_TRACK_ADDRESS_TYPE;
+[
+  helpstring("Type of the feature page data")
+]
+typedef enum _IMAPI_FEATURE_PAGE_TYPE IMAPI_FEATURE_PAGE_TYPE;
+[
+  helpstring("Type of the mode page data")
+]
+typedef enum _IMAPI_MODE_PAGE_TYPE IMAPI_MODE_PAGE_TYPE;
+[
+  helpstring("Mode page data type to request")
+]
+typedef enum _IMAPI_MODE_PAGE_REQUEST_TYPE IMAPI_MODE_PAGE_REQUEST_TYPE;
+[
+  helpstring("Type of the profile in feature page data")
+]
+typedef enum _IMAPI_PROFILE_TYPE IMAPI_PROFILE_TYPE;
+[
+  helpstring("Set of flags to indicate current media state")
+]
+typedef enum _IMAPI_FORMAT2_DATA_MEDIA_STATE IMAPI_FORMAT2_DATA_MEDIA_STATE;
+[
+  helpstring("Detected write protection type of the media")
+]
+typedef enum _IMAPI_MEDIA_WRITE_PROTECT_STATE IMAPI_MEDIA_WRITE_PROTECT_STATE;
+
+[
+  uuid(2735412F-7F64-5B0F-8F00-5D77AFBE261E),
+  version(1.0),
+  helpstring("Microsoft IMAPI2 Base Functionality")
+]
+library imapi2
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(2735412E-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Disc Master"),
+     cancreate
+   ]
+   coclass MsftDiscMaster2
+   {
+     dispinterface IDiscMaster2;
+     interface IConnectionPointContainer;
+     interface DDiscMaster2Events;
+   };
+   [
+     uuid(2735412D-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Disc Recorder"),
+     cancreate
+   ]
+   coclass MsftDiscRecorder2
+   {
+     dispinterface IDiscRecorder2;
+     interface IDiscRecorder2Ex;
+   };
+   [
+     uuid(2735412C-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 CD Write Engine"),
+     cancreate
+   ]
+   coclass MsftWriteEngine2
+   {
+     dispinterface IWriteEngine2;
+     interface IConnectionPointContainer;
+     interface DWriteEngine2Events;
+   };
+   [
+     uuid(2735412B-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Media Erase/Blank"),
+     cancreate
+   ]
+   coclass MsftDiscFormat2Erase
+   {
+     dispinterface IDiscFormat2Erase;
+     interface IConnectionPointContainer;
+     interface DDiscFormat2EraseEvents;
+   };
+   [
+     uuid(2735412A-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Data Writer"),
+     cancreate
+   ]
+   coclass MsftDiscFormat2Data
+   {
+     dispinterface IDiscFormat2Data;
+     interface IBurnVerification;
+     interface IConnectionPointContainer;
+     interface DDiscFormat2DataEvents;
+   };
+   [
+     uuid(27354129-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Track-at-Once Audio CD Writer"),
+     cancreate
+   ]
+   coclass MsftDiscFormat2TrackAtOnce
+   {
+     dispinterface IDiscFormat2TrackAtOnce;
+     interface IBurnVerification;
+     interface IConnectionPointContainer;
+     interface DDiscFormat2TrackAtOnceEvents;
+   };
+   [
+     uuid(27354128-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Disc-at-Once RAW CD Image Writer"),
+     cancreate
+   ]
+   coclass MsftDiscFormat2RawCD
+   {
+     dispinterface IDiscFormat2RawCD;
+     interface IConnectionPointContainer;
+     interface DDiscFormat2RawCDEvents;
+   };
+   [
+     uuid(27354127-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 /dev/zero Stream "),
+     cancreate
+   ]
+   coclass MsftStreamZero
+   {
+     interface IStream;
+   };
+   [
+     uuid(27354126-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 PRNG based Stream (LCG: 0x19660D, 0x3C6EF35F)"),
+     cancreate
+   ]
+   coclass MsftStreamPrng001
+   {
+     interface IStreamPseudoRandomBased;
+   };
+   [
+     uuid(27354125-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 concatenation stream"),
+     cancreate
+   ]
+   coclass MsftStreamConcatenate
+   {
+     interface IStreamConcatenate;
+   };
+   [
+     uuid(27354124-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 interleave stream"),
+     cancreate
+   ]
+   coclass MsftStreamInterleave
+   {
+     interface IStreamInterleave;
+   };
+   [
+     uuid(27354123-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 Write Speed Descriptor")
+   ]
+   coclass MsftWriteSpeedDescriptor
+   {
+     dispinterface IWriteSpeedDescriptor;
+   };
+   [
+     uuid(27354122-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Microsoft IMAPIv2 sequential Multi-session")
+   ]
+   coclass MsftMultisessionSequential
+   {
+     interface IMultisessionSequential;
+   };
+   [
+     uuid(25983561-9D65-49CE-B335-40630D901227),
+     helpstring("Microsoft IMAPIv2 RAW CD Image Creator"),
+     cancreate
+   ]
+   coclass MsftRawCDImageCreator
+   {
+     dispinterface IRawCDImageCreator;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(27354136-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("CD Write Engine"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IWriteEngine2EventArgs : IDispatch
+   {
+     [id(256), propget]
+     HRESULT __stdcall StartLba (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall SectorCount (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall LastReadLba (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall LastWrittenLba (
+       [out retval] long *value
+     );
+     [id(262), propget]
+     HRESULT __stdcall TotalSystemBuffer (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall UsedSystemBuffer (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall FreeSystemBuffer (
+       [out retval] long *value
+     );
+   };
+   [
+     uuid(2735413D-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Track-at-once Data Writer"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2DataEventArgs : IWriteEngine2EventArgs
+   {
+     [id(768), propget]
+     HRESULT __stdcall ElapsedTime (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RemainingTime (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall TotalTime (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentAction (
+       [out retval] IMAPI_FORMAT2_DATA_WRITE_ACTION *value
+     );
+   };
+   [
+     uuid(27354140-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("CD Track-at-once Audio Writer Event Arguments"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2TrackAtOnceEventArgs : IWriteEngine2EventArgs
+   {
+     [id(768), propget]
+     HRESULT __stdcall CurrentTrackNumber (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentAction (
+       [out retval] IMAPI_FORMAT2_TAO_WRITE_ACTION *value
+     );
+     [propget]
+     HRESULT __stdcall ElapsedTime (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RemainingTime (
+       [out retval] long *value
+     );
+   };
+   [
+     uuid(27354143-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("CD Disc-At-Once RAW Writer Event Arguments"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2RawCDEventArgs : IWriteEngine2EventArgs
+   {
+     [id(769), propget]
+     HRESULT __stdcall CurrentAction (
+       [out retval] IMAPI_FORMAT2_RAW_CD_WRITE_ACTION *value
+     );
+     [propget]
+     HRESULT __stdcall ElapsedTime (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RemainingTime (
+       [out retval] long *value
+     );
+   };
+   [
+     uuid(27354144-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("A single optical drive Write Speed Configuration"),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IWriteSpeedDescriptor : IDispatch
+   {
+     [id(257), propget]
+     HRESULT __stdcall MediaType (
+       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
+     );
+     [propget]
+     HRESULT __stdcall RotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall WriteSpeed (
+       [out retval] long *value
+     );
+   };
+   [
+     uuid(25983550-9D65-49CE-B335-40630D901227),
+     helpstring("CD Raw CD (Disc-at-Once) Image Creator"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRawCDImageCreator : IDispatch
+   {
+     [id(512)]
+     HRESULT __stdcall CreateResultImage (
+       [out retval] interface IStream **resultStream
+     );
+     HRESULT __stdcall AddTrack (
+       [in] IMAPI_CD_SECTOR_TYPE dataType,
+       [in] interface IStream *data,
+       [out retval] long *trackIndex
+     );
+     HRESULT __stdcall AddSpecialPregap (
+       [in] interface IStream *data
+     );
+     HRESULT __stdcall AddSubcodeRWGenerator (
+       [in] interface IStream *subcode
+     );
+     [id(256), propput]
+     HRESULT __stdcall ResultingImageType (
+       [in] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall ResultingImageType (
+       [out retval] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE *value
+     );
+     [propget]
+     HRESULT __stdcall StartOfLeadout (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall StartOfLeadoutLimit (
+       [in] long argNo1
+     );
+     [id(258), propget]
+     HRESULT __stdcall StartOfLeadoutLimit (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall DisableGaplessAudio (
+       [in] WINBOOL argNo1
+     );
+     [id(259), propget]
+     HRESULT __stdcall DisableGaplessAudio (
+       [out retval] WINBOOL *value
+     );
+     [propput]
+     HRESULT __stdcall MediaCatalogNumber (
+       [in] BSTR argNo1
+     );
+     [id(260), propget]
+     HRESULT __stdcall MediaCatalogNumber (
+       [out retval] BSTR *value
+     );
+     [propput]
+     HRESULT __stdcall StartingTrackNumber (
+       [in] long argNo1
+     );
+     [id(261), propget]
+     HRESULT __stdcall StartingTrackNumber (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall TrackInfo (
+       [in] long trackIndex,
+       [out retval] dispinterface IRawCDImageTrackInfo **value
+     );
+     [propget]
+     HRESULT __stdcall NumberOfExistingTracks (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall LastUsedUserSectorInImage (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall ExpectedTableOfContents (
+       [out retval] VARIANT value[]*
+     );
+   };
+   [
+     uuid(25983551-9D65-49CE-B335-40630D901227),
+     helpstring("CD Raw CD (Disc-at-Once) Per-Track Information"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRawCDImageTrackInfo : IDispatch
+   {
+     [id(256), propget]
+     HRESULT __stdcall StartingLba (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall SectorCount (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall TrackNumber (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall SectorType (
+       [out retval] IMAPI_CD_SECTOR_TYPE *value
+     );
+     [propget]
+     HRESULT __stdcall ISRC (
+       [out retval] BSTR *value
+     );
+     [id(260), propput]
+     HRESULT __stdcall ISRC (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall DigitalAudioCopySetting (
+       [out retval] IMAPI_CD_TRACK_DIGITAL_COPY_SETTING *value
+     );
+     [id(261), propput]
+     HRESULT __stdcall DigitalAudioCopySetting (
+       [in] IMAPI_CD_TRACK_DIGITAL_COPY_SETTING argNo1
+     );
+     [propget]
+     HRESULT __stdcall AudioHasPreemphasis (
+       [out retval] WINBOOL *value
+     );
+     [id(262), propput]
+     HRESULT __stdcall AudioHasPreemphasis (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall TrackIndexes (
+       [out retval] VARIANT value[]*
+     );
+     [id(512)]
+     HRESULT __stdcall AddTrackIndex (
+       [in] long lbaOffset
+     );
+     HRESULT __stdcall ClearTrackIndex (
+       [in] long lbaOffset
+     );
+   };
+   [
+     uuid(27354130-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("IDiscMaster2 is used to get an enumerator for the set of CD/DVD (optical) devices on the system"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscMaster2 : IDispatch
+   {
+     [id(-4), propget, restricted, hidden]
+     HRESULT __stdcall _NewEnum (
+       [out retval] interface IEnumVARIANT **ppunk
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long index,
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall Count (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall IsSupportedEnvironment (
+       [out retval] WINBOOL *value
+     );
+   };
+   [
+     uuid(27354133-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Represents a single CD/DVD type device, and enables many common operations via a simplified API."),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscRecorder2 : IDispatch
+   {
+     [id(256)]
+     HRESULT __stdcall EjectMedia (void);
+     HRESULT __stdcall CloseTray (void);
+     HRESULT __stdcall AcquireExclusiveAccess (
+       [in] WINBOOL force,
+       [in] BSTR __MIDL__IDiscRecorder20000
+     );
+     HRESULT __stdcall ReleaseExclusiveAccess (void);
+     HRESULT __stdcall DisableMcn (void);
+     HRESULT __stdcall EnableMcn (void);
+     HRESULT __stdcall InitializeDiscRecorder (
+       [in] BSTR recorderUniqueId
+     );
+     [id(0), propget]
+     HRESULT __stdcall ActiveDiscRecorder (
+       [out retval] BSTR *value
+     );
+     [id(513), propget]
+     HRESULT __stdcall VendorId (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall ProductId (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall ProductRevision (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall VolumeName (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall VolumePathNames (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall DeviceCanLoadMedia (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall LegacyDeviceNumber (
+       [out retval] long *LegacyDeviceNumber
+     );
+     [propget]
+     HRESULT __stdcall SupportedFeaturePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall CurrentFeaturePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedProfiles (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall CurrentProfiles (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedModePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall ExclusiveAccessOwner (
+       [out retval] BSTR *value
+     );
+   };
+   [
+     uuid(27354135-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Write Engine"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IWriteEngine2 : IDispatch
+   {
+     [id(512)]
+     HRESULT __stdcall WriteSection (
+       [in] interface IStream *data,
+       [in] long startingBlockAddress,
+       [in] long numberOfBlocks
+     );
+     HRESULT __stdcall CancelWrite (void);
+     [id(256), propput]
+     HRESULT __stdcall Recorder (
+       [in] interface IDiscRecorder2Ex *argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall Recorder (
+       [out retval] interface IDiscRecorder2Ex **value
+     );
+     [propput]
+     HRESULT __stdcall UseStreamingWrite12 (
+       [in] WINBOOL argNo1
+     );
+     [id(257), propget]
+     HRESULT __stdcall UseStreamingWrite12 (
+       [out retval] WINBOOL *value
+     );
+     [propput]
+     HRESULT __stdcall StartingSectorsPerSecond (
+       [in] long argNo1
+     );
+     [id(258), propget]
+     HRESULT __stdcall StartingSectorsPerSecond (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall EndingSectorsPerSecond (
+       [in] long argNo1
+     );
+     [id(259), propget]
+     HRESULT __stdcall EndingSectorsPerSecond (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall BytesPerSector (
+       [in] long argNo1
+     );
+     [id(260), propget]
+     HRESULT __stdcall BytesPerSector (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall WriteInProgress (
+       [out retval] WINBOOL *value
+     );
+   };
+   [
+     uuid(27354156-8F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Optical media erase"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2Erase : IDiscFormat2
+   {
+     [id(256), propput]
+     HRESULT __stdcall Recorder (
+       [in] dispinterface IDiscRecorder2 *argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall Recorder (
+       [out retval] dispinterface IDiscRecorder2 **value
+     );
+     [propput]
+     HRESULT __stdcall FullErase (
+       [in] WINBOOL argNo1
+     );
+     [id(257), propget]
+     HRESULT __stdcall FullErase (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentPhysicalMediaType (
+       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
+     );
+     [propput]
+     HRESULT __stdcall ClientName (
+       [in] BSTR argNo1
+     );
+     [id(259), propget]
+     HRESULT __stdcall ClientName (
+       [out retval] BSTR *value
+     );
+     [id(513)]
+     HRESULT __stdcall EraseMedia (void);
+   };
+   [
+     uuid(27354152-8F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Common Disc Format (writer) Operations"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2 : IDispatch
+   {
+     [id(2048)]
+     HRESULT __stdcall IsRecorderSupported (
+       [in] dispinterface IDiscRecorder2 *Recorder,
+       [out retval] WINBOOL *value
+     );
+     HRESULT __stdcall IsCurrentMediaSupported (
+       [in] dispinterface IDiscRecorder2 *Recorder,
+       [out retval] WINBOOL *value
+     );
+     [id(1792), propget]
+     HRESULT __stdcall MediaPhysicallyBlank (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall MediaHeuristicallyBlank (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall SupportedMediaTypes (
+       [out retval] VARIANT value[]*
+     );
+   };
+   [
+     uuid(27354153-9F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Data Writer"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2Data : IDiscFormat2
+   {
+     [id(256), propput]
+     HRESULT __stdcall Recorder (
+       [in] dispinterface IDiscRecorder2 *argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall Recorder (
+       [out retval] dispinterface IDiscRecorder2 **value
+     );
+     [propput]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [in] WINBOOL argNo1
+     );
+     [id(257), propget]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [out retval] WINBOOL *value
+     );
+     [id(260), propput]
+     HRESULT __stdcall PostgapAlreadyInImage (
+       [in] WINBOOL argNo1
+     );
+     [id(260), propget]
+     HRESULT __stdcall PostgapAlreadyInImage (
+       [out retval] WINBOOL *value
+     );
+     [id(262), propget]
+     HRESULT __stdcall CurrentMediaStatus (
+       [out retval] IMAPI_FORMAT2_DATA_MEDIA_STATE *value
+     );
+     [propget]
+     HRESULT __stdcall WriteProtectStatus (
+       [out retval] IMAPI_MEDIA_WRITE_PROTECT_STATE *value
+     );
+     [propget]
+     HRESULT __stdcall TotalSectorsOnMedia (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall FreeSectorsOnMedia (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall NextWritableAddress (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall StartAddressOfPreviousSession (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall LastWrittenAddressOfPreviousSession (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall ForceMediaToBeClosed (
+       [in] WINBOOL argNo1
+     );
+     [id(269), propget]
+     HRESULT __stdcall ForceMediaToBeClosed (
+       [out retval] WINBOOL *value
+     );
+     [propput]
+     HRESULT __stdcall DisableConsumerDvdCompatibilityMode (
+       [in] WINBOOL argNo1
+     );
+     [id(270), propget]
+     HRESULT __stdcall DisableConsumerDvdCompatibilityMode (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentPhysicalMediaType (
+       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
+     );
+     [propput]
+     HRESULT __stdcall ClientName (
+       [in] BSTR argNo1
+     );
+     [id(272), propget]
+     HRESULT __stdcall ClientName (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeeds (
+       [out retval] VARIANT supportedSpeeds[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeedDescriptors (
+       [out retval] VARIANT supportedSpeedDescriptors[]*
+     );
+     [propput]
+     HRESULT __stdcall ForceOverwrite (
+       [in] WINBOOL argNo1
+     );
+     [id(279), propget]
+     HRESULT __stdcall ForceOverwrite (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall MultisessionInterfaces (
+       [out retval] VARIANT value[]*
+     );
+     [id(512)]
+     HRESULT __stdcall Write (
+       [in] interface IStream *data
+     );
+     HRESULT __stdcall CancelWrite (void);
+     HRESULT __stdcall SetWriteSpeed (
+       [in] long RequestedSectorsPerSecond,
+       [in] WINBOOL RotationTypeIsPureCAV
+     );
+   };
+   [
+     uuid(27354154-8F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("CD Track-at-Once Audio Writer"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2TrackAtOnce : IDiscFormat2
+   {
+     [id(512)]
+     HRESULT __stdcall PrepareMedia (void);
+     HRESULT __stdcall AddAudioTrack (
+       [in] interface IStream *data
+     );
+     HRESULT __stdcall CancelAddTrack (void);
+     HRESULT __stdcall ReleaseMedia (void);
+     HRESULT __stdcall SetWriteSpeed (
+       [in] long RequestedSectorsPerSecond,
+       [in] WINBOOL RotationTypeIsPureCAV
+     );
+     [id(256), propput]
+     HRESULT __stdcall Recorder (
+       [in] dispinterface IDiscRecorder2 *argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall Recorder (
+       [out retval] dispinterface IDiscRecorder2 **value
+     );
+     [id(258), propput]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [in] WINBOOL argNo1
+     );
+     [id(258), propget]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall NumberOfExistingTracks (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall TotalSectorsOnMedia (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall FreeSectorsOnMedia (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall UsedSectorsOnMedia (
+       [out retval] long *value
+     );
+     [propput]
+     HRESULT __stdcall DoNotFinalizeMedia (
+       [in] WINBOOL argNo1
+     );
+     [id(263), propget]
+     HRESULT __stdcall DoNotFinalizeMedia (
+       [out retval] WINBOOL *value
+     );
+     [id(266), propget]
+     HRESULT __stdcall ExpectedTableOfContents (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall CurrentPhysicalMediaType (
+       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
+     );
+     [id(270), propput]
+     HRESULT __stdcall ClientName (
+       [in] BSTR argNo1
+     );
+     [id(270), propget]
+     HRESULT __stdcall ClientName (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeeds (
+       [out retval] VARIANT supportedSpeeds[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeedDescriptors (
+       [out retval] VARIANT supportedSpeedDescriptors[]*
+     );
+   };
+   [
+     uuid(27354155-8F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("CD Disc-At-Once RAW Writer"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscFormat2RawCD : IDiscFormat2
+   {
+     [id(512)]
+     HRESULT __stdcall PrepareMedia (void);
+     HRESULT __stdcall WriteMedia (
+       [in] interface IStream *data
+     );
+     HRESULT __stdcall WriteMedia2 (
+       [in] interface IStream *data,
+       [in] long streamLeadInSectors
+     );
+     HRESULT __stdcall CancelWrite (void);
+     HRESULT __stdcall ReleaseMedia (void);
+     HRESULT __stdcall SetWriteSpeed (
+       [in] long RequestedSectorsPerSecond,
+       [in] WINBOOL RotationTypeIsPureCAV
+     );
+     [id(256), propput]
+     HRESULT __stdcall Recorder (
+       [in] dispinterface IDiscRecorder2 *argNo1
+     );
+     [id(256), propget]
+     HRESULT __stdcall Recorder (
+       [out retval] dispinterface IDiscRecorder2 **value
+     );
+     [id(258), propput]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [in] WINBOOL argNo1
+     );
+     [id(258), propget]
+     HRESULT __stdcall BufferUnderrunFreeDisabled (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall StartOfNextSession (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall LastPossibleStartOfLeadout (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentPhysicalMediaType (
+       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
+     );
+     [id(264), propget]
+     HRESULT __stdcall SupportedSectorTypes (
+       [out retval] VARIANT value[]*
+     );
+     [propput]
+     HRESULT __stdcall RequestedSectorType (
+       [in] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE argNo1
+     );
+     [id(265), propget]
+     HRESULT __stdcall RequestedSectorType (
+       [out retval] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE *value
+     );
+     [propput]
+     HRESULT __stdcall ClientName (
+       [in] BSTR argNo1
+     );
+     [id(266), propget]
+     HRESULT __stdcall ClientName (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentWriteSpeed (
+       [out retval] long *value
+     );
+     [propget]
+     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeeds (
+       [out retval] VARIANT supportedSpeeds[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedWriteSpeedDescriptors (
+       [out retval] VARIANT supportedSpeedDescriptors[]*
+     );
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(27354131-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Provides notification of the arrival/removal of CD/DVD (optical) devices."),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DDiscMaster2Events : IDispatch
+{
+  [id(256)]
+  HRESULT __stdcall NotifyDeviceAdded (
+    [in] IDispatch * object,
+    [in] BSTR uniqueId
+  );
+  HRESULT __stdcall NotifyDeviceRemoved (
+    [in] IDispatch * object,
+    [in] BSTR uniqueId
+  );
+};
+[
+  uuid(27354137-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Provides notification of the progress of the WriteEngine2 writing."),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DWriteEngine2Events : IDispatch
+{
+  [id(256)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] IDispatch * progress
+  );
+};
+[
+  uuid(2735413A-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Provides notification of media erase progress."),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DDiscFormat2EraseEvents : IDispatch
+{
+  [id(512)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] long elapsedSeconds,
+    [in] long estimatedTotalSeconds
+  );
+};
+[
+  uuid(2735413C-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Data Writer"),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DDiscFormat2DataEvents : IDispatch
+{
+  [id(512)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] IDispatch * progress
+  );
+};
+[
+  uuid(2735413F-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("CD Track-at-Once Audio Writer Events"),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DDiscFormat2TrackAtOnceEvents : IDispatch
+{
+  [id(512)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] IDispatch * progress
+  );
+};
+[
+  uuid(27354142-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("CD Disc-At-Once RAW Writer Events"),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DDiscFormat2RawCDEvents : IDispatch
+{
+  [id(512)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] IDispatch * progress
+  );
+};
+[
+  uuid(0000000C-0000-0000-C000-000000000046)
+]
+interface IStream : ISequentialStream
+{
+  [id(1610743808)]
+  HRESULT __stdcall RemoteSeek (
+    [in] struct _LARGE_INTEGER dlibMove,
+    [in] UINT dwOrigin,
+    [out] struct _ULARGE_INTEGER *plibNewPosition
+  );
+  HRESULT __stdcall SetSize (
+    [in] struct _ULARGE_INTEGER libNewSize
+  );
+  HRESULT __stdcall RemoteCopyTo (
+    [in] interface IStream *pstm,
+    [in] struct _ULARGE_INTEGER cb,
+    [out] struct _ULARGE_INTEGER *pcbRead,
+    [out] struct _ULARGE_INTEGER *pcbWritten
+  );
+  HRESULT __stdcall Commit (
+    [in] UINT grfCommitFlags
+  );
+  HRESULT __stdcall Revert (void);
+  HRESULT __stdcall LockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall UnlockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall Stat (
+    [out] struct tagSTATSTG *pstatstg,
+    [in] UINT grfStatFlag
+  );
+  HRESULT __stdcall Clone (
+    [out] interface IStream **ppstm
+  );
+};
+[
+  uuid(0C733A30-2A1C-11CE-ADE5-00AA0044773D)
+]
+interface ISequentialStream : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteRead (
+    [out] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbRead
+  );
+  HRESULT __stdcall RemoteWrite (
+    [in] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbWritten
+  );
+};
+[
+  uuid(D2FFD834-958B-426D-8470-2A13879C6A91),
+  helpstring("An interface to control burn verification for a burning object")
+]
+interface IBurnVerification : IUnknown
+{
+  [id(1024), propput]
+  HRESULT __stdcall BurnVerificationLevel (
+    [in] IMAPI_BURN_VERIFICATION_LEVEL argNo1
+  );
+  [id(1024), propget]
+  HRESULT __stdcall BurnVerificationLevel (
+    [out retval] IMAPI_BURN_VERIFICATION_LEVEL *value
+  );
+};
+[
+  uuid(B196B284-BAB4-101A-B69C-00AA00341D07)
+]
+interface IConnectionPointContainer : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall EnumConnectionPoints (
+    [out] interface IEnumConnectionPoints **ppEnum
+  );
+  HRESULT __stdcall FindConnectionPoint (
+    [in] struct GUID *riid,
+    [out] interface IConnectionPoint **ppCP
+  );
+};
+[
+  uuid(B196B285-BAB4-101A-B69C-00AA00341D07)
+]
+interface IEnumConnectionPoints : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT cConnections,
+    [out] interface IConnectionPoint **ppCP,
+    [out] UINT *pcFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT cConnections
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumConnectionPoints **ppEnum
+  );
+};
+[
+  uuid(B196B286-BAB4-101A-B69C-00AA00341D07)
+]
+interface IConnectionPoint : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetConnectionInterface (
+    [out] struct GUID *pIID
+  );
+  HRESULT __stdcall GetConnectionPointContainer (
+    [out] interface IConnectionPointContainer **ppCPC
+  );
+  HRESULT __stdcall Advise (
+    [in] IUnknown * pUnkSink,
+    [out] UINT *pdwCookie
+  );
+  HRESULT __stdcall Unadvise (
+    [in] UINT dwCookie
+  );
+  HRESULT __stdcall EnumConnections (
+    [out] interface IEnumConnections **ppEnum
+  );
+};
+[
+  uuid(B196B287-BAB4-101A-B69C-00AA00341D07)
+]
+interface IEnumConnections : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT cConnections,
+    [out] struct tagCONNECTDATA *rgcd,
+    [out] UINT *pcFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT cConnections
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumConnections **ppEnum
+  );
+};
+[
+  uuid(27354132-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Represents a single CD/DVD type device, enabling additional commands requiring advanced marshalling code.")
+]
+interface IDiscRecorder2Ex : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall SendCommandNoData (
+    [in] UCHAR *Cdb,
+    [in] UINT CdbSize,
+    [out] UCHAR SenseBuffer[18],
+    [in] UINT Timeout
+  );
+  HRESULT __stdcall SendCommandSendDataToDevice (
+    [in] UCHAR *Cdb,
+    [in] UINT CdbSize,
+    [out] UCHAR SenseBuffer[18],
+    [in] UINT Timeout,
+    [in] UCHAR *Buffer,
+    [in] UINT BufferSize
+  );
+  HRESULT __stdcall SendCommandGetDataFromDevice (
+    [in] UCHAR *Cdb,
+    [in] UINT CdbSize,
+    [out] UCHAR SenseBuffer[18],
+    [in] UINT Timeout,
+    [out] UCHAR *Buffer,
+    [in] UINT BufferSize,
+    [out] UINT *BufferFetched
+  );
+  HRESULT __stdcall ReadDvdStructure (
+    [in] UINT format,
+    [in] UINT address,
+    [in] UINT layer,
+    [in] UINT agid,
+    [out] UCHAR *data,
+    [out] UINT *Count
+  );
+  HRESULT __stdcall SendDvdStructure (
+    [in] UINT format,
+    [in] UCHAR *data,
+    [in] UINT Count
+  );
+  HRESULT __stdcall GetAdapterDescriptor (
+    [out] UCHAR *data,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetDeviceDescriptor (
+    [out] UCHAR *data,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetDiscInformation (
+    [out] UCHAR *discInformation,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetTrackInformation (
+    [in] UINT address,
+    [in] IMAPI_READ_TRACK_ADDRESS_TYPE addressType,
+    [out] UCHAR *trackInformation,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetFeaturePage (
+    [in] IMAPI_FEATURE_PAGE_TYPE requestedFeature,
+    [in] CHAR currentFeatureOnly,
+    [out] UCHAR *featureData,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetModePage (
+    [in] IMAPI_MODE_PAGE_TYPE requestedModePage,
+    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
+    [out] UCHAR *modePageData,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall SetModePage (
+    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
+    [in] UCHAR *data,
+    [in] UINT byteSize
+  );
+  HRESULT __stdcall GetSupportedFeaturePages (
+    [in] CHAR currentFeatureOnly,
+    [out] IMAPI_FEATURE_PAGE_TYPE **featureData,
+    [out] UINT *byteSize
+  );
+  HRESULT __stdcall GetSupportedProfiles (
+    [in] CHAR currentOnly,
+    [out] IMAPI_PROFILE_TYPE **profileTypes,
+    [out] UINT *validProfiles
+  );
+  HRESULT __stdcall GetSupportedModePages (
+    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
+    [out] IMAPI_MODE_PAGE_TYPE **modePageTypes,
+    [out] UINT *validPages
+  );
+  HRESULT __stdcall GetByteAlignmentMask (
+    [out retval] UINT *value
+  );
+  HRESULT __stdcall GetMaximumNonPageAlignedTransferSize (
+    [out retval] UINT *value
+  );
+  HRESULT __stdcall GetMaximumPageAlignedTransferSize (
+    [out retval] UINT *value
+  );
+};
+[
+  uuid(27354145-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Pseudo-random based IStream data (implementation dependent)")
+]
+interface IStreamPseudoRandomBased : IStream
+{
+  [id(1610809344)]
+  HRESULT __stdcall put_Seed (
+    [in] UINT value
+  );
+  HRESULT __stdcall get_Seed (
+    [out] UINT *value
+  );
+  HRESULT __stdcall put_ExtendedSeed (
+    [in] UINT *values,
+    [in] UINT eCount
+  );
+  HRESULT __stdcall get_ExtendedSeed (
+    [out] UINT *values,
+    [out] UINT *eCount
+  );
+};
+[
+  uuid(27354146-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Stream concatenation")
+]
+interface IStreamConcatenate : IStream
+{
+  [id(1610809344)]
+  HRESULT __stdcall Initialize (
+    [in] interface IStream *stream1,
+    [in] interface IStream *stream2
+  );
+  HRESULT __stdcall Initialize2 (
+    [in] interface IStream **streams,
+    [in] UINT streamCount
+  );
+  HRESULT __stdcall Append (
+    [in] interface IStream *stream
+  );
+  HRESULT __stdcall Append2 (
+    [in] interface IStream **streams,
+    [in] UINT streamCount
+  );
+};
+[
+  uuid(27354147-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Stream interleave: each stream gets interleaveSize bytes, then cycles to the next stream")
+]
+interface IStreamInterleave : IStream
+{
+  [id(1610809344)]
+  HRESULT __stdcall Initialize (
+    [in] interface IStream **streams,
+    [in] UINT *interleaveSizes,
+    [in] UINT streamCount
+  );
+};
+[
+  uuid(27354151-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Sequential multisession support interface."),
+  dispatchable
+]
+interface IMultisessionSequential : IMultisession
+{
+  [id(512), propget]
+  HRESULT __stdcall IsFirstDataSession (
+    [out retval] WINBOOL *value
+  );
+  [propget]
+  HRESULT __stdcall StartAddressOfPreviousSession (
+    [out retval] long *value
+  );
+  [propget]
+  HRESULT __stdcall LastWrittenAddressOfPreviousSession (
+    [out retval] long *value
+  );
+  [propget]
+  HRESULT __stdcall NextWritableAddress (
+    [out retval] long *value
+  );
+  [propget]
+  HRESULT __stdcall FreeSectorsOnMedia (
+    [out retval] long *value
+  );
+};
+[
+  uuid(27354150-7F64-5B0F-8F00-5D77AFBE261E),
+  helpstring("Generic multisession support interface."),
+  dispatchable
+]
+interface IMultisession : IDispatch
+{
+  [id(256), propget]
+  HRESULT __stdcall IsSupportedOnCurrentMediaState (
+    [out retval] WINBOOL *value
+  );
+  [propput]
+  HRESULT __stdcall InUse (
+    [in] WINBOOL argNo1
+  );
+  [id(257), propget]
+  HRESULT __stdcall InUse (
+    [out retval] WINBOOL *value
+  );
+  [propget]
+  HRESULT __stdcall ImportRecorder (
+    [out retval] dispinterface IDiscRecorder2 **value
+  );
+};
+
diff --git a/mingw-w64-headers/include/imapi2fs.idl b/mingw-w64-headers/include/imapi2fs.idl
new file mode 100644
index 0000000..c7e1727
--- /dev/null
+++ b/mingw-w64-headers/include/imapi2fs.idl
@@ -0,0 +1,1208 @@
+/* Automated generated idl file <imapi2fs>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Interface forward declarations.  */
+interface DFileSystemImageEvents;
+interface DFileSystemImageImportEvents;
+interface IStream;
+interface ISequentialStream;
+interface IEnumProgressItems;
+interface IEnumFsiItems;
+interface IConnectionPointContainer;
+interface IEnumConnectionPoints;
+interface IConnectionPoint;
+interface IEnumConnections;
+interface IIsoImageManager;
+
+/* Structure forward declarations.  */
+struct _LARGE_INTEGER;
+struct _ULARGE_INTEGER;
+struct tagSTATSTG;
+struct _FILETIME;
+struct tagCONNECTDATA;
+
+/* Union record forward declarations.  */
+dispinterface IBootOptions;
+dispinterface IFileSystemImageResult;
+dispinterface IProgressItems;
+dispinterface IProgressItem;
+dispinterface IFsiDirectoryItem2;
+dispinterface IFsiDirectoryItem;
+dispinterface IFsiItem;
+dispinterface IFsiFileItem2;
+dispinterface IFsiFileItem;
+dispinterface IFsiNamedStreams;
+dispinterface IFileSystemImage3;
+dispinterface IFileSystemImage2;
+dispinterface IFileSystemImage;
+dispinterface IDiscRecorder2;
+
+/* Union record forward declarations.  */
+coclass BootOptions;
+coclass FsiStream;
+coclass FileSystemImageResult;
+coclass ProgressItem;
+coclass EnumProgressItems;
+coclass ProgressItems;
+coclass FsiDirectoryItem;
+coclass FsiFileItem;
+coclass EnumFsiItems;
+coclass FsiNamedStreams;
+coclass MsftFileSystemImage;
+coclass MsftIsoImageManager;
+
+/* Enumeration declarations.  */
+[
+  helpstring("Type of file system")
+]
+enum FsiFileSystems
+{
+  FsiFileSystemNone = (int) 201326592,
+  FsiFileSystemISO9660 = (int) 201326593,
+  FsiFileSystemJoliet = (int) 201326594,
+  FsiFileSystemUDF = (int) 201326596,
+  FsiFileSystemUnknown = (int) 1073741824
+};
+[
+  helpstring("Boot platform type")
+]
+enum PlatformId
+{
+  PlatformX86 = (int) 201326592,
+  PlatformPowerPC = (int) 201326593,
+  PlatformMac = (int) 201326594,
+  PlatformEFI = (int) 201326831
+};
+[
+  helpstring("Boot emulation type")
+]
+enum EmulationType
+{
+  EmulationNone = (int) 201326592,
+  Emulation12MFloppy = (int) 201326593,
+  Emulation144MFloppy = (int) 201326594,
+  Emulation288MFloppy = (int) 201326595,
+  EmulationHardDisk = (int) 201326596
+};
+[
+  helpstring("Physical type of the optical media")
+]
+enum _IMAPI_MEDIA_PHYSICAL_TYPE
+{
+  IMAPI_MEDIA_TYPE_UNKNOWN = (int) 201326592,
+  IMAPI_MEDIA_TYPE_CDROM = (int) 201326593,
+  IMAPI_MEDIA_TYPE_CDR = (int) 201326594,
+  IMAPI_MEDIA_TYPE_CDRW = (int) 201326595,
+  IMAPI_MEDIA_TYPE_DVDROM = (int) 201326596,
+  IMAPI_MEDIA_TYPE_DVDRAM = (int) 201326597,
+  IMAPI_MEDIA_TYPE_DVDPLUSR = (int) 201326598,
+  IMAPI_MEDIA_TYPE_DVDPLUSRW = (int) 201326599,
+  IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER = (int) 201326600,
+  IMAPI_MEDIA_TYPE_DVDDASHR = (int) 201326601,
+  IMAPI_MEDIA_TYPE_DVDDASHRW = (int) 201326602,
+  IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER = (int) 201326603,
+  IMAPI_MEDIA_TYPE_DISK = (int) 201326604,
+  IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER = (int) 201326605,
+  IMAPI_MEDIA_TYPE_HDDVDROM = (int) 201326606,
+  IMAPI_MEDIA_TYPE_HDDVDR = (int) 201326607,
+  IMAPI_MEDIA_TYPE_HDDVDRAM = (int) 201326608,
+  IMAPI_MEDIA_TYPE_BDROM = (int) 201326609,
+  IMAPI_MEDIA_TYPE_BDR = (int) 201326610,
+  IMAPI_MEDIA_TYPE_BDRE = (int) 201326611,
+  IMAPI_MEDIA_TYPE_MAX = (int) 201326611
+};
+[
+  helpstring("File system item type")
+]
+enum FsiItemType
+{
+  FsiItemNotFound = (int) 201326592,
+  FsiItemDirectory = (int) 201326593,
+  FsiItemFile = (int) 201326594
+};
+
+/* Structure/union declarations.  */
+struct _LARGE_INTEGER
+{
+  LONGLONG QuadPart;
+};
+struct _ULARGE_INTEGER
+{
+  ULONGLONG QuadPart;
+};
+struct tagSTATSTG
+{
+  LPWSTR pwcsName;
+  UINT type;
+  struct _ULARGE_INTEGER cbSize;
+  struct _FILETIME mtime;
+  struct _FILETIME ctime;
+  struct _FILETIME atime;
+  UINT grfMode;
+  UINT grfLocksSupported;
+  struct GUID clsid;
+  UINT grfStateBits;
+  UINT reserved;
+};
+struct _FILETIME
+{
+  UINT dwLowDateTime;
+  UINT dwHighDateTime;
+};
+struct tagCONNECTDATA
+{
+  IUnknown * pUnk;
+  UINT dwCookie;
+};
+
+/* Type definitions.  */
+[
+  helpstring("Physical type of the optical media")
+]
+typedef enum _IMAPI_MEDIA_PHYSICAL_TYPE IMAPI_MEDIA_PHYSICAL_TYPE;
+
+[
+  uuid(2C941FD0-975B-59BE-A960-9A2A262853A5),
+  version(1.0),
+  helpstring("Microsoft IMAPI2 File System Image Creator")
+]
+library imapi2fs
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(2C941FCE-975B-59BE-A960-9A2A262853A5),
+     helpstring("Boot options"),
+     cancreate
+   ]
+   coclass BootOptions
+   {
+     dispinterface IBootOptions;
+   };
+   [
+     uuid(2C941FCD-975B-59BE-A960-9A2A262853A5),
+     helpstring("Stream")
+   ]
+   coclass FsiStream
+   {
+     interface IStream;
+   };
+   [
+     uuid(2C941FCC-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage result stream")
+   ]
+   coclass FileSystemImageResult
+   {
+     dispinterface IFileSystemImageResult;
+   };
+   [
+     uuid(2C941FCB-975B-59BE-A960-9A2A262853A5),
+     helpstring("Progress item block mapping")
+   ]
+   coclass ProgressItem
+   {
+     dispinterface IProgressItem;
+   };
+   [
+     uuid(2C941FCA-975B-59BE-A960-9A2A262853A5),
+     helpstring("Progress item block mapping enumerator")
+   ]
+   coclass EnumProgressItems
+   {
+     interface IEnumProgressItems;
+   };
+   [
+     uuid(2C941FC9-975B-59BE-A960-9A2A262853A5),
+     helpstring("Progress item block mapping collection")
+   ]
+   coclass ProgressItems
+   {
+     dispinterface IProgressItems;
+   };
+   [
+     uuid(2C941FC8-975B-59BE-A960-9A2A262853A5),
+     helpstring("Directory item")
+   ]
+   coclass FsiDirectoryItem
+   {
+     dispinterface IFsiDirectoryItem2;
+     dispinterface IFsiDirectoryItem;
+     dispinterface IFsiItem;
+   };
+   [
+     uuid(2C941FC7-975B-59BE-A960-9A2A262853A5),
+     helpstring("File item")
+   ]
+   coclass FsiFileItem
+   {
+     dispinterface IFsiFileItem2;
+     dispinterface IFsiFileItem;
+     dispinterface IFsiItem;
+   };
+   [
+     uuid(2C941FC6-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage item enumerator")
+   ]
+   coclass EnumFsiItems
+   {
+     interface IEnumFsiItems;
+   };
+   [
+     uuid(C6B6F8ED-6D19-44B4-B539-B159B793A32D),
+     helpstring("Named stream collection")
+   ]
+   coclass FsiNamedStreams
+   {
+     dispinterface IFsiNamedStreams;
+   };
+   [
+     uuid(2C941FC5-975B-59BE-A960-9A2A262853A5),
+     helpstring("File system image"),
+     cancreate
+   ]
+   coclass MsftFileSystemImage
+   {
+     dispinterface IFileSystemImage3;
+     dispinterface IFileSystemImage2;
+     interface DFileSystemImageEvents;
+     interface DFileSystemImageImportEvents;
+     interface IConnectionPointContainer;
+     dispinterface IFileSystemImage;
+   };
+   [
+     uuid(CEEE3B62-8F56-4056-869B-EF16917E3EFC),
+     helpstring("Microsoft IMAPIv2 Iso Image Manager"),
+     cancreate
+   ]
+   coclass MsftIsoImageManager
+   {
+     interface IIsoImageManager;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(2C941FD4-975B-59BE-A960-9A2A262853A5),
+     helpstring("Boot options"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IBootOptions : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall BootImage (
+       [out retval] interface IStream **pVal
+     );
+     [propget]
+     HRESULT __stdcall Manufacturer (
+       [out retval] BSTR *pVal
+     );
+     [id(2), propput]
+     HRESULT __stdcall Manufacturer (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall PlatformId (
+       [out retval] enum PlatformId *pVal
+     );
+     [id(3), propput]
+     HRESULT __stdcall PlatformId (
+       [in] enum PlatformId argNo1
+     );
+     [propget]
+     HRESULT __stdcall Emulation (
+       [out retval] enum EmulationType *pVal
+     );
+     [id(4), propput]
+     HRESULT __stdcall Emulation (
+       [in] enum EmulationType argNo1
+     );
+     [propget]
+     HRESULT __stdcall ImageSize (
+       [out retval] UINT *pVal
+     );
+     [id(20)]
+     HRESULT __stdcall AssignBootImage (
+       [in] interface IStream *newVal
+     );
+   };
+   [
+     uuid(2C941FD8-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage result stream"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFileSystemImageResult : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall ImageStream (
+       [out retval] interface IStream **pVal
+     );
+     [propget]
+     HRESULT __stdcall ProgressItems (
+       [out retval] dispinterface IProgressItems **pVal
+     );
+     [propget]
+     HRESULT __stdcall TotalBlocks (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall BlockSize (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall DiscId (
+       [out retval] BSTR *pVal
+     );
+   };
+   [
+     uuid(2C941FD7-975B-59BE-A960-9A2A262853A5),
+     helpstring("Progress item block mapping collection"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IProgressItems : IDispatch
+   {
+     [id(-4), propget, restricted, hidden]
+     HRESULT __stdcall _NewEnum (
+       [out retval] interface IEnumVARIANT **NewEnum
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long Index,
+       [out retval] dispinterface IProgressItem **Item
+     );
+     [propget]
+     HRESULT __stdcall Count (
+       [out retval] long *Count
+     );
+     HRESULT __stdcall ProgressItemFromBlock (
+       [in] UINT block,
+       [out retval] dispinterface IProgressItem **Item
+     );
+     HRESULT __stdcall ProgressItemFromDescription (
+       [in] BSTR Description,
+       [out retval] dispinterface IProgressItem **Item
+     );
+     [propget, restricted, hidden]
+     HRESULT __stdcall EnumProgressItems (
+       [out retval] interface IEnumProgressItems **NewEnum
+     );
+   };
+   [
+     uuid(2C941FD5-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImageResult progress item"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IProgressItem : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *desc
+     );
+     [propget]
+     HRESULT __stdcall FirstBlock (
+       [out retval] UINT *block
+     );
+     [propget]
+     HRESULT __stdcall LastBlock (
+       [out retval] UINT *block
+     );
+     [propget]
+     HRESULT __stdcall BlockCount (
+       [out retval] UINT *blocks
+     );
+   };
+   [
+     uuid(F7FB4B9B-6D96-4D7B-9115-201B144811EF),
+     helpstring("FileSystemImage directory item (rev.2)"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiDirectoryItem2 : IFsiDirectoryItem
+   {
+     [id(36)]
+     HRESULT __stdcall AddTreeWithNamedStreams (
+       [in] BSTR sourceDirectory,
+       [in] WINBOOL includeBaseDirectory
+     );
+   };
+   [
+     uuid(2C941FDC-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage directory item"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiDirectoryItem : IFsiItem
+   {
+     [id(-4), propget, restricted, hidden]
+     HRESULT __stdcall _NewEnum (
+       [out retval] interface IEnumVARIANT **NewEnum
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] BSTR path,
+       [out retval] dispinterface IFsiItem **Item
+     );
+     [propget]
+     HRESULT __stdcall Count (
+       [out retval] long *Count
+     );
+     [propget, restricted, hidden]
+     HRESULT __stdcall EnumFsiItems (
+       [out retval] interface IEnumFsiItems **NewEnum
+     );
+     [id(30)]
+     HRESULT __stdcall AddDirectory (
+       [in] BSTR path
+     );
+     HRESULT __stdcall AddFile (
+       [in] BSTR path,
+       [in] interface IStream *fileData
+     );
+     HRESULT __stdcall AddTree (
+       [in] BSTR sourceDirectory,
+       [in] WINBOOL includeBaseDirectory
+     );
+     HRESULT __stdcall Add (
+       [in] dispinterface IFsiItem *Item
+     );
+     HRESULT __stdcall Remove (
+       [in] BSTR path
+     );
+     HRESULT __stdcall RemoveTree (
+       [in] BSTR path
+     );
+   };
+   [
+     uuid(2C941FD9-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage item"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiItem : IDispatch
+   {
+     [id(11), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall FullPath (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall CreationTime (
+       [out retval] DATE *pVal
+     );
+     [id(13), propput]
+     HRESULT __stdcall CreationTime (
+       [in] DATE argNo1
+     );
+     [propget]
+     HRESULT __stdcall LastAccessedTime (
+       [out retval] DATE *pVal
+     );
+     [id(14), propput]
+     HRESULT __stdcall LastAccessedTime (
+       [in] DATE argNo1
+     );
+     [propget]
+     HRESULT __stdcall LastModifiedTime (
+       [out retval] DATE *pVal
+     );
+     [id(15), propput]
+     HRESULT __stdcall LastModifiedTime (
+       [in] DATE argNo1
+     );
+     [propget]
+     HRESULT __stdcall IsHidden (
+       [out retval] WINBOOL *pVal
+     );
+     [id(16), propput]
+     HRESULT __stdcall IsHidden (
+       [in] WINBOOL argNo1
+     );
+     HRESULT __stdcall FileSystemName (
+       [in] enum FsiFileSystems fileSystem,
+       [out retval] BSTR *pVal
+     );
+     HRESULT __stdcall FileSystemPath (
+       [in] enum FsiFileSystems fileSystem,
+       [out retval] BSTR *pVal
+     );
+   };
+   [
+     uuid(199D0C19-11E1-40EB-8EC2-C8C822A07792),
+     helpstring("FileSystemImage file item (rev.2)"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiFileItem2 : IFsiFileItem
+   {
+     [id(45), propget, restricted, hidden]
+     HRESULT __stdcall FsiNamedStreams (
+       [out retval] dispinterface IFsiNamedStreams **streams
+     );
+     [propget]
+     HRESULT __stdcall IsNamedStream (
+       [out retval] WINBOOL *pVal
+     );
+     HRESULT __stdcall AddStream (
+       [in] BSTR Name,
+       [in] interface IStream *streamData
+     );
+     HRESULT __stdcall RemoveStream (
+       [in] BSTR Name
+     );
+     [propget]
+     HRESULT __stdcall IsRealTime (
+       [out retval] WINBOOL *pVal
+     );
+     [id(49), propput]
+     HRESULT __stdcall IsRealTime (
+       [in] WINBOOL argNo1
+     );
+   };
+   [
+     uuid(2C941FDB-975B-59BE-A960-9A2A262853A5),
+     helpstring("FileSystemImage file item"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiFileItem : IFsiItem
+   {
+     [id(41), propget]
+     HRESULT __stdcall DataSize (
+       [out retval] LONGLONG *pVal
+     );
+     [propget]
+     HRESULT __stdcall DataSize32BitLow (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall DataSize32BitHigh (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall Data (
+       [out retval] interface IStream **pVal
+     );
+     [id(44), propput]
+     HRESULT __stdcall Data (
+       [in] interface IStream *argNo1
+     );
+   };
+   [
+     uuid(ED79BA56-5294-4250-8D46-F9AECEE23459),
+     helpstring("Named stream collection"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFsiNamedStreams : IDispatch
+   {
+     [id(-4), propget, restricted, hidden]
+     HRESULT __stdcall _NewEnum (
+       [out retval] interface IEnumVARIANT **NewEnum
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long Index,
+       [out retval] dispinterface IFsiFileItem2 **Item
+     );
+     [id(81), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *Count
+     );
+     [propget, restricted, hidden]
+     HRESULT __stdcall EnumNamedStreams (
+       [out retval] interface IEnumFsiItems **NewEnum
+     );
+   };
+   [
+     uuid(7CFF842C-7E97-4807-8304-910DD8F7C051),
+     helpstring("File system image (rev.3)"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFileSystemImage3 : IFileSystemImage2
+   {
+     [id(61), propget]
+     HRESULT __stdcall CreateRedundantUdfMetadataFiles (
+       [out retval] WINBOOL *pVal
+     );
+     [id(61), propput]
+     HRESULT __stdcall CreateRedundantUdfMetadataFiles (
+       [in] WINBOOL argNo1
+     );
+     [id(70)]
+     HRESULT __stdcall ProbeSpecificFileSystem (
+       [in] enum FsiFileSystems fileSystemToProbe,
+       [out retval] WINBOOL *isAppendable
+     );
+   };
+   [
+     uuid(D7644B2C-1537-4767-B62F-F1387B02DDFD),
+     helpstring("File system image (rev.2)"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFileSystemImage2 : IFileSystemImage
+   {
+     [id(60), propget]
+     HRESULT __stdcall BootImageOptionsArray (
+       [out retval] VARIANT pVal[]*
+     );
+     [id(60), propput]
+     HRESULT __stdcall BootImageOptionsArray (
+       [in] VARIANT argNo1[]
+     );
+   };
+   [
+     uuid(2C941FE1-975B-59BE-A960-9A2A262853A5),
+     helpstring("File system image"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFileSystemImage : IDispatch
+   {
+     [id(0), propget]
+     HRESULT __stdcall Root (
+       [out retval] dispinterface IFsiDirectoryItem **pVal
+     );
+     [propget]
+     HRESULT __stdcall SessionStartBlock (
+       [out retval] long *pVal
+     );
+     [id(1), propput]
+     HRESULT __stdcall SessionStartBlock (
+       [in] long argNo1
+     );
+     [propget]
+     HRESULT __stdcall FreeMediaBlocks (
+       [out retval] long *pVal
+     );
+     [id(2), propput]
+     HRESULT __stdcall FreeMediaBlocks (
+       [in] long argNo1
+     );
+     [id(36)]
+     HRESULT __stdcall SetMaxMediaBlocksFromDevice (
+       [in] dispinterface IDiscRecorder2 *discRecorder
+     );
+     [id(3), propget]
+     HRESULT __stdcall UsedBlocks (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall VolumeName (
+       [out retval] BSTR *pVal
+     );
+     [id(4), propput]
+     HRESULT __stdcall VolumeName (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall ImportedVolumeName (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall BootImageOptions (
+       [out retval] dispinterface IBootOptions **pVal
+     );
+     [id(6), propput]
+     HRESULT __stdcall BootImageOptions (
+       [in] dispinterface IBootOptions *argNo1
+     );
+     [propget]
+     HRESULT __stdcall FileCount (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall DirectoryCount (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall WorkingDirectory (
+       [out retval] BSTR *pVal
+     );
+     [id(9), propput]
+     HRESULT __stdcall WorkingDirectory (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall ChangePoint (
+       [out retval] long *pVal
+     );
+     [propget]
+     HRESULT __stdcall StrictFileSystemCompliance (
+       [out retval] WINBOOL *pVal
+     );
+     [id(11), propput]
+     HRESULT __stdcall StrictFileSystemCompliance (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall UseRestrictedCharacterSet (
+       [out retval] WINBOOL *pVal
+     );
+     [id(12), propput]
+     HRESULT __stdcall UseRestrictedCharacterSet (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall FileSystemsToCreate (
+       [out retval] enum FsiFileSystems *pVal
+     );
+     [id(13), propput]
+     HRESULT __stdcall FileSystemsToCreate (
+       [in] enum FsiFileSystems argNo1
+     );
+     [propget]
+     HRESULT __stdcall FileSystemsSupported (
+       [out retval] enum FsiFileSystems *pVal
+     );
+     [id(37), propput]
+     HRESULT __stdcall UDFRevision (
+       [in] long argNo1
+     );
+     [id(37), propget]
+     HRESULT __stdcall UDFRevision (
+       [out retval] long *pVal
+     );
+     [id(31), propget]
+     HRESULT __stdcall UDFRevisionsSupported (
+       [out retval] VARIANT pVal[]*
+     );
+     HRESULT __stdcall ChooseImageDefaults (
+       [in] dispinterface IDiscRecorder2 *discRecorder
+     );
+     HRESULT __stdcall ChooseImageDefaultsForMediaType (
+       [in] IMAPI_MEDIA_PHYSICAL_TYPE value
+     );
+     [propput]
+     HRESULT __stdcall ISO9660InterchangeLevel (
+       [in] long argNo1
+     );
+     [id(34), propget]
+     HRESULT __stdcall ISO9660InterchangeLevel (
+       [out retval] long *pVal
+     );
+     [id(38), propget]
+     HRESULT __stdcall ISO9660InterchangeLevelsSupported (
+       [out retval] VARIANT pVal[]*
+     );
+     [id(15)]
+     HRESULT __stdcall CreateResultImage (
+       [out retval] dispinterface IFileSystemImageResult **resultStream
+     );
+     HRESULT __stdcall Exists (
+       [in] BSTR FullPath,
+       [out retval] enum FsiItemType *itemType
+     );
+     [id(18)]
+     HRESULT __stdcall CalculateDiscIdentifier (
+       [out retval] BSTR *discIdentifier
+     );
+     HRESULT __stdcall IdentifyFileSystemsOnDisc (
+       [in] dispinterface IDiscRecorder2 *discRecorder,
+       [out retval] enum FsiFileSystems *fileSystems
+     );
+     HRESULT __stdcall GetDefaultFileSystemForImport (
+       [in] enum FsiFileSystems fileSystems,
+       [out retval] enum FsiFileSystems *importDefault
+     );
+     HRESULT __stdcall ImportFileSystem (
+       [out retval] enum FsiFileSystems *importedFileSystem
+     );
+     HRESULT __stdcall ImportSpecificFileSystem (
+       [in] enum FsiFileSystems fileSystemToUse
+     );
+     HRESULT __stdcall RollbackToChangePoint (
+       [in] long ChangePoint
+     );
+     HRESULT __stdcall LockInChangePoint (void);
+     HRESULT __stdcall CreateDirectoryItem (
+       [in] BSTR Name,
+       [out retval] dispinterface IFsiDirectoryItem **newItem
+     );
+     HRESULT __stdcall CreateFileItem (
+       [in] BSTR Name,
+       [out retval] dispinterface IFsiFileItem **newItem
+     );
+     [propget]
+     HRESULT __stdcall VolumeNameUDF (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall VolumeNameJoliet (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall VolumeNameISO9660 (
+       [out retval] BSTR *pVal
+     );
+     [propget]
+     HRESULT __stdcall StageFiles (
+       [out retval] WINBOOL *pVal
+     );
+     [id(30), propput]
+     HRESULT __stdcall StageFiles (
+       [in] WINBOOL argNo1
+     );
+     [id(40), propget]
+     HRESULT __stdcall MultisessionInterfaces (
+       [out retval] VARIANT pVal[]*
+     );
+     [id(40), propput]
+     HRESULT __stdcall MultisessionInterfaces (
+       [in] VARIANT argNo1[]
+     );
+   };
+   [
+     uuid(27354133-7F64-5B0F-8F00-5D77AFBE261E),
+     helpstring("Represents a single CD/DVD type device, and enables many common operations via a simplified API."),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDiscRecorder2 : IDispatch
+   {
+     [id(256)]
+     HRESULT __stdcall EjectMedia (void);
+     HRESULT __stdcall CloseTray (void);
+     HRESULT __stdcall AcquireExclusiveAccess (
+       [in] WINBOOL force,
+       [in] BSTR __MIDL__IDiscRecorder20000
+     );
+     HRESULT __stdcall ReleaseExclusiveAccess (void);
+     HRESULT __stdcall DisableMcn (void);
+     HRESULT __stdcall EnableMcn (void);
+     HRESULT __stdcall InitializeDiscRecorder (
+       [in] BSTR recorderUniqueId
+     );
+     [id(0), propget]
+     HRESULT __stdcall ActiveDiscRecorder (
+       [out retval] BSTR *value
+     );
+     [id(513), propget]
+     HRESULT __stdcall VendorId (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall ProductId (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall ProductRevision (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall VolumeName (
+       [out retval] BSTR *value
+     );
+     [propget]
+     HRESULT __stdcall VolumePathNames (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall DeviceCanLoadMedia (
+       [out retval] WINBOOL *value
+     );
+     [propget]
+     HRESULT __stdcall LegacyDeviceNumber (
+       [out retval] long *LegacyDeviceNumber
+     );
+     [propget]
+     HRESULT __stdcall SupportedFeaturePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall CurrentFeaturePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedProfiles (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall CurrentProfiles (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall SupportedModePages (
+       [out retval] VARIANT value[]*
+     );
+     [propget]
+     HRESULT __stdcall ExclusiveAccessOwner (
+       [out retval] BSTR *value
+     );
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(2C941FDF-975B-59BE-A960-9A2A262853A5),
+  helpstring("Provides notification of file system creation progress"),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DFileSystemImageEvents : IDispatch
+{
+  [id(256)]
+  HRESULT __stdcall Update (
+    [in] IDispatch * object,
+    [in] BSTR currentFile,
+    [in] long copiedSectors,
+    [in] long totalSectors
+  );
+};
+[
+  uuid(D25C30F9-4087-4366-9E24-E55BE286424B),
+  helpstring("Provides notification of file system import progress"),
+  nonextensible,
+  oleautomation,
+  dispatchable
+]
+interface DFileSystemImageImportEvents : IDispatch
+{
+  [id(257)]
+  HRESULT __stdcall UpdateImport (
+    [in] IDispatch * object,
+    [in] enum FsiFileSystems fileSystem,
+    [in] BSTR currentItem,
+    [in] long importedDirectoryItems,
+    [in] long totalDirectoryItems,
+    [in] long importedFileItems,
+    [in] long totalFileItems
+  );
+};
+[
+  uuid(0000000C-0000-0000-C000-000000000046)
+]
+interface IStream : ISequentialStream
+{
+  [id(1610743808)]
+  HRESULT __stdcall RemoteSeek (
+    [in] struct _LARGE_INTEGER dlibMove,
+    [in] UINT dwOrigin,
+    [out] struct _ULARGE_INTEGER *plibNewPosition
+  );
+  HRESULT __stdcall SetSize (
+    [in] struct _ULARGE_INTEGER libNewSize
+  );
+  HRESULT __stdcall RemoteCopyTo (
+    [in] interface IStream *pstm,
+    [in] struct _ULARGE_INTEGER cb,
+    [out] struct _ULARGE_INTEGER *pcbRead,
+    [out] struct _ULARGE_INTEGER *pcbWritten
+  );
+  HRESULT __stdcall Commit (
+    [in] UINT grfCommitFlags
+  );
+  HRESULT __stdcall Revert (void);
+  HRESULT __stdcall LockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall UnlockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall Stat (
+    [out] struct tagSTATSTG *pstatstg,
+    [in] UINT grfStatFlag
+  );
+  HRESULT __stdcall Clone (
+    [out] interface IStream **ppstm
+  );
+};
+[
+  uuid(0C733A30-2A1C-11CE-ADE5-00AA0044773D)
+]
+interface ISequentialStream : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteRead (
+    [out] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbRead
+  );
+  HRESULT __stdcall RemoteWrite (
+    [in] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbWritten
+  );
+};
+[
+  uuid(2C941FD6-975B-59BE-A960-9A2A262853A5),
+  helpstring("FileSystemImageResult progress item enumerator")
+]
+interface IEnumProgressItems : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT celt,
+    [out] dispinterface IProgressItem **rgelt,
+    [out] UINT *pceltFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT celt
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumProgressItems **ppEnum
+  );
+};
+[
+  uuid(2C941FDA-975B-59BE-A960-9A2A262853A5),
+  helpstring("FileSystemImage item enumerator")
+]
+interface IEnumFsiItems : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT celt,
+    [out] dispinterface IFsiItem **rgelt,
+    [out] UINT *pceltFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT celt
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumFsiItems **ppEnum
+  );
+};
+[
+  uuid(B196B284-BAB4-101A-B69C-00AA00341D07)
+]
+interface IConnectionPointContainer : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall EnumConnectionPoints (
+    [out] interface IEnumConnectionPoints **ppEnum
+  );
+  HRESULT __stdcall FindConnectionPoint (
+    [in] struct GUID *riid,
+    [out] interface IConnectionPoint **ppCP
+  );
+};
+[
+  uuid(B196B285-BAB4-101A-B69C-00AA00341D07)
+]
+interface IEnumConnectionPoints : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT cConnections,
+    [out] interface IConnectionPoint **ppCP,
+    [out] UINT *pcFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT cConnections
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumConnectionPoints **ppEnum
+  );
+};
+[
+  uuid(B196B286-BAB4-101A-B69C-00AA00341D07)
+]
+interface IConnectionPoint : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetConnectionInterface (
+    [out] struct GUID *pIID
+  );
+  HRESULT __stdcall GetConnectionPointContainer (
+    [out] interface IConnectionPointContainer **ppCPC
+  );
+  HRESULT __stdcall Advise (
+    [in] IUnknown * pUnkSink,
+    [out] UINT *pdwCookie
+  );
+  HRESULT __stdcall Unadvise (
+    [in] UINT dwCookie
+  );
+  HRESULT __stdcall EnumConnections (
+    [out] interface IEnumConnections **ppEnum
+  );
+};
+[
+  uuid(B196B287-BAB4-101A-B69C-00AA00341D07)
+]
+interface IEnumConnections : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteNext (
+    [in] UINT cConnections,
+    [out] struct tagCONNECTDATA *rgcd,
+    [out] UINT *pcFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT cConnections
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumConnections **ppEnum
+  );
+};
+[
+  uuid(6CA38BE5-FBBB-4800-95A1-A438865EB0D4),
+  helpstring("ISO Image Manager: Helper object for ISO image file manipulation"),
+  dispatchable
+]
+interface IIsoImageManager : IDispatch
+{
+  [id(256), propget]
+  HRESULT __stdcall path (
+    [out retval] BSTR *pVal
+  );
+  [propget]
+  HRESULT __stdcall Stream (
+    [out retval] interface IStream **Data
+  );
+  [id(512)]
+  HRESULT __stdcall SetPath (
+    [in] BSTR Val
+  );
+  HRESULT __stdcall SetStream (
+    [in] interface IStream *Data
+  );
+  HRESULT __stdcall Validate (void);
+};
+
diff --git a/mingw-w64-headers/include/ipexport.h b/mingw-w64-headers/include/ipexport.h
index a39a060..3766126 100644
--- a/mingw-w64-headers/include/ipexport.h
+++ b/mingw-w64-headers/include/ipexport.h
@@ -95,6 +95,13 @@
   ULONG64 OutMcastPkts;
 } IP_MCAST_COUNTER_INFO,*PIP_MCAST_COUNTER_INFO;
 
+typedef struct _IPV6_ADDRESS_EX_LH {
+  USHORT sin6_port;
+  ULONG  sin6_flowinfo;
+  USHORT sin6_addr[8];
+  ULONG  sin6_scope_id;
+} IPV6_ADDRESS_EX, *PIPV6_ADDRESS_EX;
+
 #define IP_STATUS_BASE 11000
 
 #define IP_SUCCESS 0
diff --git a/mingw-w64-headers/include/iphlpapi.h b/mingw-w64-headers/include/iphlpapi.h
index 9ef0576..58d39d2 100644
--- a/mingw-w64-headers/include/iphlpapi.h
+++ b/mingw-w64-headers/include/iphlpapi.h
@@ -13,6 +13,10 @@
 #include <iprtrmib.h>
 #include <ipexport.h>
 #include <iptypes.h>
+#include <netioapi.h>
+#include <tcpmib.h>
+#include <udpmib.h>
+#include <tcpestats.h>
 
   DWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf);
   DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow);
@@ -81,6 +85,159 @@
   DWORD WINAPI RestoreMediaSense(OVERLAPPED *pOverlapped,LPDWORD lpdwEnableCount);
   DWORD WINAPI GetIpErrorString(IP_STATUS ErrorCode,PWCHAR Buffer,PDWORD Size);
 
+DWORD WINAPI GetExtendedUdpTable(
+  PVOID pUdpTable,
+  PDWORD pdwSize,
+  WINBOOL bOrder,
+  ULONG ulAf,
+  UDP_TABLE_CLASS TableClass,
+  ULONG Reserved
+);
+
+DWORD WINAPI GetOwnerModuleFromTcp6Entry(
+  PMIB_TCP6ROW_OWNER_MODULE pTcpEntry,
+  TCPIP_OWNER_MODULE_INFO_CLASS Class,
+  PVOID Buffer,
+  PDWORD pdwSize
+);
+
+DWORD WINAPI GetOwnerModuleFromTcpEntry(
+  PMIB_TCPROW_OWNER_MODULE pTcpEntry,
+  TCPIP_OWNER_MODULE_INFO_CLASS Class,
+  PVOID Buffer,
+  PDWORD pdwSize
+);
+
+DWORD WINAPI GetOwnerModuleFromUdp6Entry(
+  PMIB_UDP6ROW_OWNER_MODULE pUdpEntry,
+  TCPIP_OWNER_MODULE_INFO_CLASS Class,
+  PVOID Buffer,
+  PDWORD pdwSize
+);
+
+DWORD WINAPI GetOwnerModuleFromUdpEntry(
+  PMIB_UDPROW_OWNER_MODULE pUdpEntry,
+  TCPIP_OWNER_MODULE_INFO_CLASS Class,
+  PVOID Buffer,
+  PDWORD pdwSize
+);
+
+#if (_WIN32_WINNT == 0x0502) /* Only with Win2003 SP1 and SP2 */
+  WINBOOL WINAPI CancelSecurityHealthChangeNotify(LPOVERLAPPED notifyOverlapped);
+#endif /*(_WIN32_WINNT == 0x0502)*/
+
+#if (_WIN32_WINNT >= 0x0600)
+#include <windns.h>
+
+typedef enum _NET_ADDRESS_FORMAT {
+  NET_ADDRESS_FORMAT_UNSPECIFIED   = 0,
+  NET_ADDRESS_DNS_NAME,
+  NET_ADDRESS_IPV4,
+  NET_ADDRESS_IPV6
+} NET_ADDRESS_FORMAT;
+
+typedef struct _NET_ADDRESS_INFO {
+  NET_ADDRESS_FORMAT Format;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      WCHAR Address[DNS_MAX_NAME_BUFFER_LENGTH];
+      WCHAR Port[6];
+    } NamedAddress;
+    SOCKADDR_IN  Ipv4Address;
+    SOCKADDR_IN6 Ipv6Address;
+    SOCKADDR     IpAddress;
+  };
+} NET_ADDRESS_INFO, *PNET_ADDRESS_INFO;
+
+ULONG WINAPI GetPerTcp6ConnectionEStats(
+  PMIB_TCP6ROW Row,
+  TCP_ESTATS_TYPE EstatsType,
+  PUCHAR Rw,
+  ULONG RwVersion,
+  ULONG RwSize,
+  PUCHAR Ros,
+  ULONG RosVersion,
+  ULONG RosSize,
+  PUCHAR Rod,
+  ULONG RodVersion,
+  ULONG RodSize
+);
+
+ULONG WINAPI SetPerTcp6ConnectionEStats(
+  PMIB_TCP6ROW Row,
+  TCP_ESTATS_TYPE EstatsType,
+  PUCHAR Rw,
+  ULONG RwVersion,
+  ULONG RwSize,
+  ULONG Offset
+);
+
+ULONG WINAPI SetPerTcpConnectionEStats(
+    PMIB_TCPROW Row,
+    TCP_ESTATS_TYPE EstatsType,
+    PUCHAR Rw,
+    ULONG RwVersion,
+    ULONG RwSize,
+    ULONG Offset
+);
+
+ULONG WINAPI GetTcp6Table(
+  PMIB_TCP6TABLE TcpTable,
+  PULONG SizePointer,
+  WINBOOL Order
+);
+
+ULONG WINAPI GetPerTcpConnectionEStats(
+  PMIB_TCPROW Row,
+  TCP_ESTATS_TYPE EstatsType,
+  PUCHAR Rw,
+  ULONG RwVersion,
+  ULONG RwSize,
+  PUCHAR Ros,
+  ULONG RosVersion,
+  ULONG RosSize,
+  PUCHAR Rod,
+  ULONG RodVersion,
+  ULONG RodSize
+);
+
+ULONG WINAPI GetTcp6Table2(
+  PMIB_TCP6TABLE2 TcpTable,
+  PULONG SizePointer,
+  WINBOOL Order
+);
+
+ULONG WINAPI GetTcpTable2(
+  PMIB_TCPTABLE2 TcpTable,
+  PULONG SizePointer,
+  WINBOOL Order
+);
+
+ULONG WINAPI GetUdp6Table(
+  PMIB_UDP6TABLE Udp6Table,
+  PULONG SizePointer,
+  WINBOOL Order
+);
+
+DWORD WINAPI NotifySecurityHealthChange(
+  PHANDLE pHandle,
+  LPOVERLAPPED pOverLapped,
+  PULONG SecurityHealthFlags
+);
+
+ULONG WINAPI ResolveNeighbor(
+  SOCKADDR *NetworkAddress,
+  PVOID PhysicalAddress,
+  PULONG PhysicalAddressLength
+);
+
+DWORD WINAPI SetIpStatisticsEx(
+  PMIB_IPSTATS pIpStats,
+  ULONG Family
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/ipmib.h b/mingw-w64-headers/include/ipmib.h
new file mode 100644
index 0000000..c0b45b4
--- /dev/null
+++ b/mingw-w64-headers/include/ipmib.h
@@ -0,0 +1,6 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <nldef.h>
diff --git a/mingw-w64-headers/include/iprtrmib.h b/mingw-w64-headers/include/iprtrmib.h
index 0b04407..75614a4 100644
--- a/mingw-w64-headers/include/iprtrmib.h
+++ b/mingw-w64-headers/include/iprtrmib.h
@@ -7,7 +7,9 @@
 #define __ROUTING_IPRTRMIB_H__
 
 #include <mprapi.h>
+#include <ipmib.h>
 #include <ipifcons.h>
+#include <udpmib.h>
 
 #define IPRTRMGR_PID 10000
 
@@ -730,6 +732,21 @@
   };
 } MIB_OPAQUE_INFO,*PMIB_OPAQUE_INFO;
 
+typedef struct {
+  PWCHAR pModuleName;
+  PWCHAR pModulePath;
+} TCPIP_OWNER_MODULE_BASIC_INFO, *PTCPIP_OWNER_MODULE_BASIC_INFO;
+
+typedef enum UDP_TABLE_CLASS {
+  UDP_TABLE_BASIC,
+  UDP_TABLE_OWNER_PID,
+  UDP_TABLE_OWNER_MODULE
+} UDP_TABLE_CLASS, *PUDP_TABLE_CLASS;
+
+typedef enum _TCPIP_OWNER_MODULE_INFO_CLASS {
+  TCPIP_OWNER_MODULE_INFO_BASIC
+} TCPIP_OWNER_MODULE_INFO_CLASS, *PTCPIP_OWNER_MODULE_INFO_CLASS;
+
 #define MAX_MIB_OFFSET 8
 
 #define MIB_INFO_SIZE(S) (MAX_MIB_OFFSET + sizeof(S))
diff --git a/mingw-w64-headers/include/ipsectypes.h b/mingw-w64-headers/include/ipsectypes.h
new file mode 100644
index 0000000..e932b29
--- /dev/null
+++ b/mingw-w64-headers/include/ipsectypes.h
@@ -0,0 +1,199 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_IPSECTYPES
+#define _INC_IPSECTYPES
+#include <iketypes.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef UINT8 IPSEC_AUTH_CONFIG;
+typedef UINT8 IPSEC_CIPHER_CONFIG;
+
+typedef struct IPSEC_SA_TRANSFORM0_ IPSEC_SA_TRANSFORM0;
+
+typedef enum IPSEC_FAILURE_POINT_ {
+  IPSEC_FAILURE_NONE,
+  IPSEC_FAILURE_ME,
+  IPSEC_FAILURE_PEER,
+  IPSEC_FAILURE_POINT_MAX 
+} IPSEC_FAILURE_POINT;
+
+typedef enum IPSEC_TRAFFIC_TYPE_ {
+  IPSEC_TRAFFIC_TYPE_TRANSPORT,
+  IPSEC_TRAFFIC_TYPE_TUNNEL,
+  IPSEC_TRAFFIC_TYPE_MAX 
+} IPSEC_TRAFFIC_TYPE;
+
+typedef enum IPSEC_PFS_GROUP_ {
+  IPSEC_PFS_NONE,
+  IPSEC_PFS_1,
+  IPSEC_PFS_2,
+  IPSEC_PFS_2048,
+  IPSEC_PFS_ECP_256,
+  IPSEC_PFS_ECP_384,
+  IPSEC_PFS_MM,
+  IPSEC_PFS_MAX 
+} IPSEC_PFS_GROUP;
+
+typedef enum IPSEC_TRANSFORM_TYPE_ {
+  IPSEC_TRANSFORM_AH,
+  IPSEC_TRANSFORM_ESP_AUTH,
+  IPSEC_TRANSFORM_ESP_CIPHER,
+  IPSEC_TRANSFORM_ESP_AUTH_AND_CIPHER,
+  IPSEC_TRANSFORM_ESP_AUTH_FW,
+  IPSEC_TRANSFORM_TYPE_MAX 
+} IPSEC_TRANSFORM_TYPE;
+
+typedef enum IPSEC_AUTH_TYPE_ {
+  IPSEC_AUTH_MD5,
+  IPSEC_AUTH_SHA_1,
+  IPSEC_AUTH_SHA_256,
+  IPSEC_AUTH_AES_128,
+  IPSEC_AUTH_AES_192,
+  IPSEC_AUTH_AES_256,
+  IPSEC_AUTH_MAX 
+} IPSEC_AUTH_TYPE;
+
+typedef enum IPSEC_CIPHER_TYPE_ {
+  IPSEC_CIPHER_TYPE_DES,
+  IPSEC_CIPHER_TYPE_3DES,
+  IPSEC_CIPHER_TYPE_AES_128,
+  IPSEC_CIPHER_TYPE_AES_192,
+  IPSEC_CIPHER_TYPE_AES_256,
+  IPSEC_CIPHER_TYPE_MAX 
+} IPSEC_CIPHER_TYPE;
+
+typedef enum IPSEC_CIPHER_TYPE_ {
+  IPSEC_CIPHER_TYPE_DES,
+  IPSEC_CIPHER_TYPE_3DES,
+  IPSEC_CIPHER_TYPE_AES_128,
+  IPSEC_CIPHER_TYPE_AES_192,
+  IPSEC_CIPHER_TYPE_AES_256,
+  IPSEC_CIPHER_TYPE_MAX 
+} IPSEC_CIPHER_TYPE;
+
+typedef enum IPSEC_TOKEN_MODE_ {
+  IPSEC_TOKEN_MODE_MAIN,
+  IPSEC_TOKEN_MODE_EXTENDED,
+  IPSEC_TOKEN_MODE_MAX 
+} IPSEC_TOKEN_MODE;
+
+typedef enum IPSEC_TOKEN_PRINCIPAL_ {
+  IPSEC_TOKEN_PRINCIPAL_LOCAL,
+  IPSEC_TOKEN_PRINCIPAL_PEER,
+  IPSEC_TOKEN_PRINCIPAL_MAX 
+} IPSEC_TOKEN_PRINCIPAL;
+
+typedef enum IPSEC_TOKEN_TYPE_ {
+  IPSEC_TOKEN_TYPE_MACHINE,
+  IPSEC_TOKEN_TYPE_IMPERSONATION,
+  IPSEC_TOKEN_TYPE_MAX 
+} IPSEC_TOKEN_TYPE;
+
+typedef struct IPSEC_SA_LIFETIME0_ {
+  UINT32 lifetimeSeconds;
+  UINT32 lifetimeKilobytes;
+  UINT32 lifetimePackets;
+} IPSEC_SA_LIFETIME0;
+
+typedef struct IPSEC_KEYING_POLICY0_ {
+  UINT32 numKeyMods;
+  GUID   *keyModKeys;
+} IPSEC_KEYING_POLICY0;
+
+typedef struct IPSEC_SA_IDLE_TIMEOUT0_ {
+  UINT32 idleTimeoutSeconds;
+  UINT32 idleTimeoutSecondsFailOver;
+} IPSEC_SA_IDLE_TIMEOUT0;
+
+typedef struct IPSEC_PROPOSAL0_ {
+  IPSEC_SA_LIFETIME0  lifetime;
+  UINT32              numSaTransforms;
+  IPSEC_SA_TRANSFORM0 *saTransforms;
+  IPSEC_PFS_GROUP     pfsGroup;
+} IPSEC_PROPOSAL0;
+
+typedef struct IPSEC_TRANSPORT_POLICY0_ {
+  UINT32                 numIpsecProposals;
+  IPSEC_PROPOSAL0        *ipsecProposals;
+  UINT32                 flags;
+  UINT32                 ndAllowClearTimeoutSeconds;
+  IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
+  IKEEXT_EM_POLICY0      *emPolicy;
+} IPSEC_TRANSPORT_POLICY0;
+
+typedef struct IPSEC_AUTH_TRANSFORM_ID0_ {
+  IPSEC_AUTH_TYPE   authType;
+  IPSEC_AUTH_CONFIG authConfig;
+} IPSEC_AUTH_TRANSFORM_ID0;
+
+typedef LPVOID IPSEC_CRYPTO_MODULE_ID;
+
+typedef struct IPSEC_AUTH_TRANSFORM0_ {
+  IPSEC_AUTH_TRANSFORM_ID0 authTransformId;
+  IPSEC_CRYPTO_MODULE_ID   *cryptoModuleId;
+} IPSEC_AUTH_TRANSFORM0;
+
+typedef struct IPSEC_CIPHER_TRANSFORM0_ {
+  IPSEC_CIPHER_TRANSFORM_ID0 cipherTransformId;
+  IPSEC_CRYPTO_MODULE_ID     *cryptoModuleId;
+} IPSEC_CIPHER_TRANSFORM0;
+
+typedef struct IPSEC_SA_TRANSFORM0_ {
+  IPSEC_TRANSFORM_TYPE ipsecTransformType;
+  __MINGW_EXTENSION union {
+    IPSEC_AUTH_TRANSFORM0            *ahTransform;
+    IPSEC_AUTH_TRANSFORM0            *espAuthTransform;
+    IPSEC_CIPHER_TRANSFORM0          *espCipherTransform;
+    IPSEC_AUTH_AND_CIPHER_TRANSFORM0 *espAuthAndCipherTransform;
+    IPSEC_AUTH_TRANSFORM0            *espAuthFwTransform;
+  };
+} IPSEC_SA_TRANSFORM0;
+
+typedef struct IPSEC_CIPHER_TRANSFORM_ID0_ {
+  IPSEC_CIPHER_TYPE   cipherType;
+  IPSEC_CIPHER_CONFIG cipherConfig;
+} IPSEC_CIPHER_TRANSFORM_ID0;
+
+typedef struct IPSEC_AUTH_AND_CIPHER_TRANSFORM0_ {
+  IPSEC_AUTH_TRANSFORM0   authTransform;
+  IPSEC_CIPHER_TRANSFORM0 cipherTransform;
+} IPSEC_AUTH_AND_CIPHER_TRANSFORM0;
+
+typedef struct IPSEC_TUNNEL_POLICY0_ {
+  UINT32                  flags;
+  UINT32                  numIpsecProposals;
+  IPSEC_PROPOSAL0         *ipsecProposals;
+  IPSEC_TUNNEL_ENDPOINTS0 tunnelEndpoints;
+  IPSEC_SA_IDLE_TIMEOUT0  saIdleTimeout;
+  IKEEXT_EM_POLICY0       *emPolicy;
+} IPSEC_TUNNEL_POLICY0;
+
+typedef struct IPSEC_TUNNEL_ENDPOINTS0_ {
+  FWP_IP_VERSION ipVersion;
+  __MINGW_EXTENSION union {
+    UINT32 localV4Address;
+    UINT8  localV6Address[16];
+  };
+  __MINGW_EXTENSION union {
+    UINT32 remoteV4Address;
+    UINT8  remoteV6Address[16];
+  };
+} IPSEC_TUNNEL_ENDPOINTS0;
+
+typedef struct IPSEC_V4_UDP_ENCAPSULATION0_ {
+  UINT16 localUdpEncapPort;
+  UINT16 remoteUdpEncapPort;
+} IPSEC_V4_UDP_ENCAPSULATION0;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_IPSECTYPES*/
diff --git a/mingw-w64-headers/include/iptypes.h b/mingw-w64-headers/include/iptypes.h
index 4164326..83e3f03 100644
--- a/mingw-w64-headers/include/iptypes.h
+++ b/mingw-w64-headers/include/iptypes.h
@@ -226,6 +226,15 @@
   } IP_INTERFACE_NAME_INFO,*PIP_INTERFACE_NAME_INFO;
 #endif
 
+#if (_WIN32_WINNT >= 0x0600)
+#define MAX_DNS_SUFFIX_STRING_LENGTH 256
+
+typedef struct _IP_ADAPTER_DNS_SUFFIX {
+  struct _IP_ADAPTER_DNS_SUFFIX *Next;
+  WCHAR                         String[MAX_DNS_SUFFIX_STRING_LENGTH];
+} IP_ADAPTER_DNS_SUFFIX, *PIP_ADAPTER_DNS_SUFFIX;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/iscsidsc.h b/mingw-w64-headers/include/iscsidsc.h
new file mode 100644
index 0000000..9423f3d
--- /dev/null
+++ b/mingw-w64-headers/include/iscsidsc.h
@@ -0,0 +1,755 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ISCSIDSC
+#define _INC_ISCSIDSC
+#include <ntddscsi.h>
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  typedef PVOID ISCSI_UNIQUE_SESSION_ID;
+  typedef PVOID ISCSI_UNIQUE_CONNECTION_ID;
+  typedef ISCSI_UNIQUE_SESSION_ID *PISCSI_UNIQUE_SESSION_ID;
+  typedef ISCSI_UNIQUE_CONNECTION_ID *PISCSI_UNIQUE_CONNECTION_ID;
+
+  typedef enum  {
+    ISCSI_NO_AUTH_TYPE             = 0,
+    ISCSI_CHAP_AUTH_TYPE           = 1,
+    ISCSI_MUTUAL_CHAP_AUTH_TYPE    = 2 
+  } ISCSI_AUTH_TYPES;
+
+  typedef enum  {
+    ISCSI_DIGEST_TYPE_NONE     = 0,
+    ISCSI_DIGEST_TYPE_CRC32C   = 1 
+  } ISCSI_DIGEST_TYPES;
+
+/*  typedef struct _ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED {
+    WINBOOL ISCSI_LOGIN_OPTIONS_USERNAME:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_PASSWORD:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_HEADER_DIGEST:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_DATA_DIGEST:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_MAXIMUM_CONNECTIONS:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_WAIT:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_RETAIN:1;
+    WINBOOL ISCSI_LOGIN_OPTIONS_AUTH_TYPE:1;
+  } ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED;
+
+  typedef struct _ISCSI_LOGIN_FLAGS {
+    WIBBOOL ISCSI_LOGIN_FLAG_RESERVED1:1;
+    WIBBOOL ISCSI_LOGIN_FLAG_ALLOW_PORTAL_HOPPING:1;
+    WIBBOOL ISCSI_LOGIN_FLAG_REQUIRE_IPSEC:1;
+    WIBBOOL ISCSI_LOGIN_FLAG_MULTIPATH_ENABLED:1;
+  } ISCSI_LOGIN_FLAGS;
+
+  typedef struct _ISCSI_SECURITY_FLAGS {
+    WINBOOL ISCSI_SECURITY_FLAG_TUNNEL_MODE_PREFERRED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_TRANSPORT_MODE_PREFERRED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_PFS_ENABLED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_AGGRESSIVE_MODE_ENABLED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_MAIN_MODE_ENABLED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_IKE_IPSEC_ENABLED:1;
+    WINBOOL ISCSI_SECURITY_FLAG_VALID:1;
+  } ISCSI_SECURITY_FLAGS;*/
+
+#define AddIScsiConnection __MINGW_NAME_AW(AddIScsiConnection)
+#define AddIScsiSendTargetPortal __MINGW_NAME_AW(AddIScsiSendTargetPortal)
+#define AddIScsiStaticTarget __MINGW_NAME_AW(AddIScsiStaticTarget)
+#define RemoveIScsiStaticTarget __MINGW_NAME_AW(RemoveIScsiStaticTarget)
+#define AddISNSServer __MINGW_NAME_AW(AddISNSServer)
+#define AddPersistentiScsiDevice __MINGW_NAME_AW(AddPersistentiScsiDevice)
+#define RemoveIScsiPersistentTarget __MINGW_NAME_AW(RemoveIScsiPersistentTarget)
+#define RemovePersistentIScsiDevice __MINGW_NAME_AW(RemovePersistentIScsiDevice)
+#define PERSISTENT_ISCSI_LOGIN_INFO __MINGW_NAME_AW(PERSISTENT_ISCSI_LOGIN_INFO)
+#define AddRadiusServer __MINGW_NAME_AW(AddRadiusServer)
+#define RemoveRadiusServer __MINGW_NAME_AW(RemoveRadiusServer)
+
+#define MAX_ISCSI_PORTAL_NAME_LEN 256
+#define MAX_ISCSI_PORTAL_ADDRESS_LEN 256
+#define MAX_ISCSI_HBANAME_LEN 256
+
+#define ISCSI_SECURITY_FLAG_TUNNEL_MODE_PREFERRED     (0x1UL<<25)
+#define ISCSI_SECURITY_FLAG_TRANSPORT_MODE_PREFERRED  (0x1UL<<26)
+#define ISCSI_SECURITY_FLAG_PFS_ENABLED               (0x1UL<<27)
+#define ISCSI_SECURITY_FLAG_AGGRESSIVE_MODE_ENABLED   (0x1UL<<28)
+#define ISCSI_SECURITY_FLAG_MAIN_MODE_ENABLED         (0x1UL<<29)
+#define ISCSI_SECURITY_FLAG_IKE_IPSEC_ENABLED         (0x1UL<<30)
+#define ISCSI_SECURITY_FLAG_VALID                     (0x1UL<<31)
+
+typedef DWORD ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED;
+typedef DWORD ISCSI_LOGIN_FLAGS;
+typedef DWORD ISCSI_SECURITY_FLAGS;
+
+typedef enum _TARGET_INFORMATION_CLASS {
+  ProtocolType,
+  TargetAlias,
+  DiscoveryMechanism,
+  PortalGroups,
+  PersistentTargetMappings,
+  InitiatorName,
+  TargetFlags,
+  LoginOptions 
+} TARGET_INFORMATION_CLASS;
+
+typedef enum _TARGETPROTOCOLTYPE {
+  ISCSI_TCP_PROTOCOL_TYPE 
+ 
+} TARGETPROTOCOLTYPE;
+
+typedef enum _IKE_AUTHENTICATION_METHOD {
+  IKE_AUTHENTICATION_PRESHARED_KEY_METHOD    = 1 
+} IKE_AUTHENTICATION_METHOD, *PIKE_AUTHENTICATION_METHOD;
+
+typedef struct _ISCSI_LOGIN_OPTIONS {
+  ULONG                              Version;
+  ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED InformationSpecified;
+  ISCSI_LOGIN_FLAGS                  LoginFlags;
+  ISCSI_AUTH_TYPES                   AuthType;
+  ISCSI_DIGEST_TYPES                 HeaderDigest;
+  ISCSI_DIGEST_TYPES                 DataDigest;
+  ULONG                              MaximumConnections;
+  ULONG                              DefaultTime2Wait;
+  ULONG                              DefaultTime2Retain;
+  ULONG                              UsernameLength;
+  ULONG                              PasswordLength;
+  PUCHAR                             Username;
+  PUCHAR                             Password;
+} ISCSI_LOGIN_OPTIONS, *PISCSI_LOGIN_OPTIONS, *PSCSI_LOGIN_OPTIONS, *PISCI_LOGIN_OPTIONS;
+
+typedef struct _ISCSI_TARGET_PORTALA {
+  CHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
+  CHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
+  USHORT Socket;
+} ISCSI_TARGET_PORTALA, *PISCSI_TARGET_PORTALA;
+
+typedef struct _ISCSI_TARGET_PORTALW {
+  WCHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
+  WCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
+  USHORT Socket;
+} ISCSI_TARGET_PORTALW, *PISCSI_TARGET_PORTALW;
+
+typedef struct _ISCSI_TARGET_PORTAL_GROUPA {
+  ULONG               Count;
+  ISCSI_TARGET_PORTALA Portals[1];
+} ISCSI_TARGET_PORTAL_GROUPA, *PISCSI_TARGET_PORTAL_GROUPA;
+
+typedef struct _ISCSI_TARGET_PORTAL_GROUPW {
+  ULONG               Count;
+  ISCSI_TARGET_PORTALW Portals[1];
+} ISCSI_TARGET_PORTAL_GROUPW, *PISCSI_TARGET_PORTAL_GROUPW;
+
+typedef struct _ISCSI_LUN_LIST {
+  ULONG     OSLUN;
+  ULONGLONG TargetLUN;
+} SCSI_LUN_LIST, *PSCSI_LUN_LIST;
+
+typedef struct _ISCSI_TARGET_MAPPINGA {
+  CHAR                    InitiatorName[MAX_ISCSI_HBANAME_LEN];
+  CHAR                    TargetName[MAX_ISCSI_NAME_LEN];
+  CHAR                    OSDeviceName[MAX_PATH];
+  ISCSI_UNIQUE_SESSION_ID SessionId;
+  ULONG                   OSBusNumber;
+  ULONG                   OSTargetNumber;
+  ULONG                   LUNCount;
+  PSCSI_LUN_LIST          LUNList;
+} ISCSI_TARGET_MAPPINGA, *PISCSI_TARGET_MAPPINGA;
+
+typedef struct _ISCSI_TARGET_MAPPINGW {
+  WCHAR                   InitiatorName[MAX_ISCSI_HBANAME_LEN];
+  WCHAR                   TargetName[MAX_ISCSI_NAME_LEN];
+  WCHAR                   OSDeviceName[MAX_PATH];
+  ISCSI_UNIQUE_SESSION_ID SessionId;
+  ULONG                   OSBusNumber;
+  ULONG                   OSTargetNumber;
+  ULONG                   LUNCount;
+  PSCSI_LUN_LIST          LUNList;
+} ISCSI_TARGET_MAPPINGW, *PISCSI_TARGET_MAPPINGW;
+
+typedef struct _PERSISTENT_ISCSI_LOGIN_INFOA {
+  CHAR                   TargetName[MAX_ISCSI_NAME_LEN];
+  BOOLEAN                IsInformationalSession;
+  CHAR                   InitiatorInstance[MAX_ISCSI_HBANAME_LEN];
+  ULONG                  InitiatorPortNumber;
+  ISCSI_TARGET_PORTALA   TargetPortal;
+  ISCSI_SECURITY_FLAGS   SecurityFlags;
+  PISCSI_TARGET_MAPPINGA Mappings;
+  ISCSI_LOGIN_OPTIONS    LoginOptions;
+} PERSISTENT_ISCSI_LOGIN_INFOA, *PPERSISTENT_ISCSI_LOGIN_INFOA;
+
+typedef struct _PERSISTENT_ISCSI_LOGIN_INFOW {
+  CHAR                   TargetName[MAX_ISCSI_NAME_LEN];
+  BOOLEAN                IsInformationalSession;
+  CHAR                   InitiatorInstance[MAX_ISCSI_HBANAME_LEN];
+  ULONG                  InitiatorPortNumber;
+  ISCSI_TARGET_PORTALW   TargetPortal;
+  ISCSI_SECURITY_FLAGS   SecurityFlags;
+  PISCSI_TARGET_MAPPINGW Mappings;
+  ISCSI_LOGIN_OPTIONS    LoginOptions;
+} PERSISTENT_ISCSI_LOGIN_INFOW, *PPERSISTENT_ISCSI_LOGIN_INFOW;
+
+typedef LPVOID IKE_IDENTIFICATION_PAYLOAD_TYPE; /*Unknown type*/
+
+typedef struct _IKE_AUTHENTICATION_PRESHARED_KEY {
+  ISCSI_SECURITY_FLAGS            SecurityFlags;
+  IKE_IDENTIFICATION_PAYLOAD_TYPE IdType;
+  ULONG                           IdLengthInBytes;
+  PUCHAR                          Id;
+  ULONG                           KeyLengthInBytes;
+  PUCHAR                          Key;
+} IKE_AUTHENTICATION_PRESHARED_KEY, *PIKE_AUTHENTICATION_PRESHARED_KEY;
+
+typedef struct _IKE_AUTHENTICATION_INFORMATION {
+  IKE_AUTHENTICATION_METHOD AuthMethod;
+  __MINGW_EXTENSION union {
+    IKE_AUTHENTICATION_PRESHARED_KEY PsKey;
+  };
+} IKE_AUTHENTICATION_INFORMATION, *PIKE_AUTHENTICATION_INFORMATION;
+
+typedef LPVOID ISCSI_UNIQUE_CONNECTION_ID;
+
+typedef struct _ISCSI_CONNECTION_INFOA {
+  ISCSI_UNIQUE_CONNECTION_ID ConnectionId;
+  CHAR                       InitiatorAddress;
+  CHAR                       TargetAddress;
+  USHORT                     InitiatorSocket;
+  USHORT                     TargetSocket;
+  UCHAR                      CID[2];
+} ISCSI_CONNECTION_INFOA, *PISCSI_CONNECTION_INFOA;
+
+typedef struct _ISCSI_CONNECTION_INFO {
+  ISCSI_UNIQUE_CONNECTION_ID ConnectionId;
+  TCHAR                      InitiatorAddress;
+  TCHAR                      TargetAddress;
+  USHORT                     InitiatorSocket;
+  USHORT                     TargetSocket;
+  UCHAR                      CID[2];
+} ISCSI_CONNECTION_INFOW, *PISCSI_CONNECTION_INFOW;
+
+typedef struct _ISCSI_SESSION_INFOA {
+  ISCSI_UNIQUE_SESSION_ID SessionId;
+  CHAR                    InitiatorName;
+  CHAR                    TargetName;
+  CHAR                    TargetNodeName;
+  UCHAR                   ISID[6];
+  UCHAR                   TSID[2];
+  ULONG                   ConnectionCount;
+  PISCSI_CONNECTION_INFOA Connections;
+} ISCSI_SESSION_INFOA, *PISCSI_SESSION_INFOA;
+
+typedef struct _ISCSI_SESSION_INFO {
+  ISCSI_UNIQUE_SESSION_ID SessionId;
+  WCHAR                   InitiatorName;
+  WCHAR                   TargetName;
+  WCHAR                   TargetNodeName;
+  UCHAR                   ISID[6];
+  UCHAR                   TSID[2];
+  ULONG                   ConnectionCount;
+  PISCSI_CONNECTION_INFOW Connections;
+} ISCSI_SESSION_INFOW, *PISCSI_SESSION_INFOW;
+
+typedef struct _ISCSI_VERSION_INFO {
+  ULONG MajorVersion;
+  ULONG MinorVersion;
+  ULONG BuildNumber;
+} ISCSI_VERSION_INFO, *PISCSI_VERSION_INFO;
+
+typedef struct _ISCSI_TARGET_PORTAL_INFOA {
+  CHAR   InitiatorName[MAX_ISCSI_HBANAME_LEN];
+  ULONG  InitiatorPortNumber;
+  CHAR   SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
+  TCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
+  USHORT Socket;
+} ISCSI_TARGET_PORTAL_INFOA, *PISCSI_TARGET_PORTAL_INFOA, PISCSI_TARGET_PORTAL_INFO_EXA;
+/*MS links PISCSI_TARGET_PORTAL_INFO_EX to PISCSI_TARGET_PORTAL_INFO, see:
+  http://msdn.microsoft.com/en-us/library/bb870838%28v=VS.85%29.aspx
+*/
+
+typedef struct _ISCSI_TARGET_PORTAL_INFOW {
+  WCHAR  InitiatorName[MAX_ISCSI_HBANAME_LEN];
+  ULONG  InitiatorPortNumber;
+  WCHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
+  WCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
+  USHORT Socket;
+} ISCSI_TARGET_PORTAL_INFOW, *PISCSI_TARGET_PORTAL_INFOW, PISCSI_TARGET_PORTAL_INFO_EXW;
+
+__MINGW_TYPEDEF_AW(ISCSI_CONNECTION_INFO)
+__MINGW_TYPEDEF_AW(PISCSI_CONNECTION_INFO)
+__MINGW_TYPEDEF_AW(ISCSI_SESSION_INFO)
+__MINGW_TYPEDEF_AW(PISCSI_SESSION_INFO)
+__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL_GROUP)
+__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_GROUP)
+__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL)
+__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL)
+__MINGW_TYPEDEF_AW(ISCSI_TARGET_MAPPING)
+__MINGW_TYPEDEF_AW(PISCSI_TARGET_MAPPING)
+__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL_INFO)
+__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_INFO)
+__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_INFO_EX)
+
+typedef DWORD ISCSI_TARGET_FLAGS; /*32bit, guessed*/
+
+  HRESULT WINAPI AddIScsiConnectionA(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PVOID Reserved,ULONG InitiatorPortNumber,PISCSI_TARGET_PORTALA TargetPortal,ISCSI_SECURITY_FLAGS SecurityFlags,PSCSI_LOGIN_OPTIONS LoginOptions,ULONG KeySize,PCHAR Key,PISCSI_UNIQUE_CONNECTION_ID ConnectionId);
+  HRESULT WINAPI AddIScsiConnectionW(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PVOID Reserved,ULONG InitiatorPortNumber,PISCSI_TARGET_PORTALW TargetPortal,ISCSI_SECURITY_FLAGS SecurityFlags,PSCSI_LOGIN_OPTIONS LoginOptions,ULONG KeySize,PCHAR Key,PISCSI_UNIQUE_CONNECTION_ID ConnectionId);
+
+  HRESULT WINAPI AddIScsiSendTargetPortalA(PCHAR InitiatorName,ULONG InitiatorPortNumber,PISCI_LOGIN_OPTIONS LoginOptions,ISCSI_SECURITY_FLAGS SecurityFlags,PISCSI_TARGET_PORTALA Portal);
+
+  HRESULT WINAPI AddIScsiSendTargetPortalW(PWCHAR InitiatorName,ULONG InitiatorPortNumber,PISCI_LOGIN_OPTIONS LoginOptions,ISCSI_SECURITY_FLAGS SecurityFlags,PISCSI_TARGET_PORTALW Portal);
+
+  HRESULT WINAPI AddIScsiStaticTargetA(PCHAR TargetName,PCHAR TargetAlias,ISCSI_TARGET_FLAGS TargetFlags,BOOLEAN Persist,PISCSI_TARGET_MAPPINGA Mappings,PISCSI_LOGIN_OPTIONS LoginOptions,PISCSI_TARGET_PORTAL_GROUPA PortalGroup);
+
+  HRESULT WINAPI AddIScsiStaticTargetW(PWCHAR TargetName,PWCHAR TargetAlias,ISCSI_TARGET_FLAGS TargetFlags,BOOLEAN Persist,PISCSI_TARGET_MAPPINGW Mappings,PISCSI_LOGIN_OPTIONS LoginOptions,PISCSI_TARGET_PORTAL_GROUPW PortalGroup);
+
+  HRESULT WINAPI AddISNSServerA(PCHAR Address);
+  HRESULT WINAPI AddISNSServerW(PWCHAR Address);
+
+  HRESULT WINAPI AddRadiusServerA(PCHAR Address);
+  HRESULT WINAPI AddRadiusServerW(PWCHAR Address);
+
+  HRESULT WINAPI AddPersistentiScsiDeviceA(PCHAR VolumePath);
+  HRESULT WINAPI AddPersistentiScsiDeviceW(PWCHAR VolumePath);
+
+  HRESULT WINAPI ClearPersistentiScsiDevices(void);
+
+  HRESULT WINAPI RemoveIScsiPersistentTargetA(PCHAR InitiatorInstance,ULONG InitiatorPortNumber,PCHAR TargetName,PISCSI_TARGET_PORTALA Portal);
+  HRESULT WINAPI RemoveIScsiPersistentTargetW(PWCHAR InitiatorInstance,ULONG InitiatorPortNumber,PWCHAR TargetName,PISCSI_TARGET_PORTALW Portal);
+
+  HRESULT WINAPI RemoveIScsiStaticTargetA(PCHAR TargetName);
+  HRESULT WINAPI RemoveIScsiStaticTargetW(PWCHAR TargetName);
+
+  HRESULT WINAPI RemovePersistentIScsiDeviceA(PCHAR VolumePath);
+  HRESULT WINAPI RemovePersistentIScsiDeviceW(PWCHAR VolumePath);
+
+  HRESULT WINAPI RemoveRadiusServerA(PCHAR Address);
+  HRESULT WINAPI RemoveRadiusServerW(PWCHAR Address);
+
+  HRESULT WINAPI SetupPersistentIScsiDevices(void);
+
+  HRESULT WINAPI SendScsiInquiry(PISCSI_UNIQUE_SESSION_ID *UniqueSessionId,ULONGLONG Lun,UCHAR EvpdCmddt,UCHAR PageCode,PUCHAR *ScsiStatus,PULONG *ReponseSize,PUCHAR ReponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);
+
+  HRESULT WINAPI SendScsiReadCapacity(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,ULONGLONG Lun,PUCHAR *ScsiStatus,PULONG *ResponseSize,PUCHAR ResponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);
+
+  HRESULT WINAPI SendScsiReportLuns(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PUCHAR *ScsiStatus,PULONG *ResponseSize,PUCHAR ResponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);
+
+typedef struct _ISCSI_DEVICE_ON_SESSION {
+  TCHAR                 InitiatorName[MAX_ISCSI_HBANAME_LEN];
+  TCHAR                 TargetName[MAX_ISCSI_NAME_LEN + 1];
+  SCSI_ADDRESS          ScsiAddress;
+  GUID                  DeviceInterfaceType;
+  TCHAR                 DeviceInterfaceName[MAX_PATH];
+  TCHAR                 LegacyName[MAX_PATH];
+  STORAGE_DEVICE_NUMBER StorageDeviceNumber;
+  DWORD                 DeviceInstance;
+} ISCSI_DEVICE_ON_SESSION, *PISCSI_DEVICE_ON_SESSION;
+
+HRESULT WINAPI GetDevicesForiSCSISession(
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  ULONG *DeviceCount,
+  PISCSI_DEVICE_ON_SESSION Devices
+);
+
+#define GetIScsiIKEInfo __MINGW_NAME_AW(GetIScsiIKEInfo)
+
+HRESULT WINAPI GetIScsiIKEInfoA(
+  PCHAR InitiatorName,
+  ULONG PortNumber,
+  PULONG Reserved,
+  PIKE_AUTHENTICATION_INFORMATION *AuthInfo
+);
+
+HRESULT WINAPI GetIScsiIKEInfoW(
+  PWCHAR InitiatorName,
+  ULONG PortNumber,
+  PULONG Reserved,
+  PIKE_AUTHENTICATION_INFORMATION *AuthInfo
+);
+
+#define GetIScsiInitiatorNodeName __MINGW_NAME_AW(GetIScsiInitiatorNodeName)
+
+HRESULT WINAPI GetIScsiInitiatorNodeNameA(
+    PCHAR InitiatorNodeName
+);
+
+HRESULT WINAPI GetIScsiInitiatorNodeNameW(
+    PWCHAR InitiatorNodeName
+);
+
+#define GetIScsiSessionList __MINGW_NAME_AW(GetIScsiSessionList)
+
+HRESULT WINAPI GetIScsiSessionListA(
+  ULONG *BufferSize,
+  ULONG *SessionCount,
+  PISCSI_SESSION_INFOA SessionInfo
+);
+
+HRESULT WINAPI GetIScsiSessionListW(
+  ULONG *BufferSize,
+  ULONG *SessionCount,
+  PISCSI_SESSION_INFOW SessionInfo
+);
+
+#define GetIScsiTargetInformation __MINGW_NAME_AW(GetIScsiTargetInformation)
+
+HRESULT WINAPI GetIScsiTargetInformationA(
+  PCHAR  TargetName,
+  PCHAR  DiscoveryMechanism,
+  TARGET_INFORMATION_CLASS InfoClass,
+  PULONG BufferSize,
+  PVOID Buffer
+);
+
+HRESULT WINAPI GetIScsiTargetInformationW(
+  PWCHAR TargetName,
+  PWCHAR DiscoveryMechanism,
+  TARGET_INFORMATION_CLASS InfoClass,
+  PULONG BufferSize,
+  PVOID Buffer
+);
+
+HRESULT WINAPI GetIScsiVersionInformation(
+    PISCSI_VERSION_INFO VersionInfo
+);
+
+HRESULT WINAPI LoginIScsiTargetA(
+  PCHAR TargetName,
+  BOOLEAN IsInformationalSession,
+  PCHAR InitiatorName,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALA TargetPortal,
+  ISCSI_SECURITY_FLAGS SecurityFlags,
+  PISCSI_TARGET_MAPPINGA Mappings,
+  PISCSI_LOGIN_OPTIONS LoginOptions,
+  ULONG KeySize,
+  PCHAR Key,
+  BOOLEAN IsPersistent,
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
+);
+
+HRESULT WINAPI LoginIScsiTargetW(
+  PWCHAR TargetName,
+  BOOLEAN IsInformationalSession,
+  PWCHAR InitiatorName,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALW TargetPortal,
+  ISCSI_SECURITY_FLAGS SecurityFlags,
+  PISCSI_TARGET_MAPPINGW Mappings,
+  PISCSI_LOGIN_OPTIONS LoginOptions,
+  ULONG KeySize,
+  PCHAR Key,
+  BOOLEAN IsPersistent,
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
+);
+
+HRESULT WINAPI LogoutIScsiTarget(
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId
+);
+
+HRESULT WINAPI RefreshIScsiSendTargetPortalA(
+  PCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALA Portal
+);
+
+HRESULT WINAPI RefreshIScsiSendTargetPortalW(
+  PWCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALW Portal
+);
+
+#define RefreshIScsiSendTargetPortal __MINGW_NAME_AW(RefreshIScsiSendTargetPortal)
+
+HRESULT WINAPI RefreshISNSServerA(
+  PCHAR Address
+);
+
+HRESULT WINAPI RefreshISNSServerW(
+  PWCHAR Address
+);
+
+#define RefreshISNSServer __MINGW_NAME_AW(RefreshISNSServer)
+
+HRESULT WINAPI RemoveIScsiConnection(
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
+);
+
+HRESULT WINAPI RemoveIScsiPersistentTargetA(
+  PCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PCHAR TargetName,
+  PISCSI_TARGET_PORTALA Portal
+);
+
+HRESULT WINAPI RemoveIScsiPersistentTargetW(
+  PWCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PWCHAR TargetName,
+  PISCSI_TARGET_PORTALW Portal
+);
+
+#define RemoveIScsiPersistentTarget __MINGW_NAME_AW(RemoveIScsiPersistentTarget)
+
+HRESULT WINAPI RemoveIScsiSendTargetPortalA(
+  PCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALA Portal
+);
+
+HRESULT WINAPI RemoveIScsiSendTargetPortalW(
+  PWCHAR InitiatorInstance,
+  ULONG InitiatorPortNumber,
+  PISCSI_TARGET_PORTALW Portal
+);
+
+#define RemoveIScsiSendTargetPortal __MINGW_NAME_AW(RemoveIScsiSendTargetPortal)
+
+HRESULT WINAPI RemoveIScsiStaticTargetA(
+  PCHAR TargetName
+);
+
+HRESULT WINAPI RemoveIScsiStaticTargetW(
+  PWCHAR TargetName
+);
+#define RemoveIScsiStaticTarget __MINGW_NAME_AW(RemoveIScsiStaticTarget)
+
+HRESULT WINAPI RemoveISNSServerA(
+  PCHAR Address
+);
+
+HRESULT WINAPI RemoveISNSServerW(
+  PWCHAR Address
+);
+#define RemoveISNSServer __MINGW_NAME_AW(RemoveISNSServer)
+
+HRESULT WINAPI RemovePersistentIScsiDeviceA(
+  PCHAR VolumePath
+);
+
+HRESULT WINAPI RemovePersistentIScsiDeviceW(
+  PWCHAR VolumePath
+);
+#define RemovePersistentIScsiDevice __MINGW_NAME_AW(RemovePersistentIScsiDevice)
+
+HRESULT WINAPI RemoveRadiusServerA(
+  PCHAR Address
+);
+
+HRESULT WINAPI RemoveRadiusServerW(
+  PWCHAR Address
+);
+#define RemoveRadiusServer __MINGW_NAME_AW(RemoveRadiusServer)
+
+HRESULT WINAPI ReportIScsiInitiatorListA(
+  ULONG *BufferSize,
+  PCHAR Buffer
+);
+
+HRESULT WINAPI ReportIScsiInitiatorListW(
+  ULONG *BufferSize,
+  PWCHAR Buffer
+);
+
+HRESULT WINAPI ReportIScsiPersistentLoginsA(
+  ULONG *Count,
+  PPERSISTENT_ISCSI_LOGIN_INFOA PersistentLoginInfo,
+  PULONG BufferSizeInBytes
+);
+
+HRESULT WINAPI ReportIScsiPersistentLoginsW(
+  ULONG *Count,
+  PPERSISTENT_ISCSI_LOGIN_INFOW PersistentLoginInfo,
+  PULONG BufferSizeInBytes
+);
+#define ReportIScsiPersistentLogins __MINGW_NAME_AW(ReportIScsiPersistentLogins)
+
+HRESULT WINAPI ReportIScsiSendTargetPortalsA(
+  PULONG PortalCount,
+  PISCSI_TARGET_PORTAL_INFOA PortalInfo
+);
+
+HRESULT WINAPI ReportIScsiSendTargetPortalsW(
+  PULONG PortalCount,
+  PISCSI_TARGET_PORTAL_INFOA PortalInfo
+);
+
+#define ReportIScsiSendTargetPortals __MINGW_NAME_AW(ReportIScsiSendTargetPortals)
+
+HRESULT WINAPI ReportActiveIScsiTargetMappingsA(
+  PULONG BufferSize,
+  PULONG MappingCount,
+  PISCSI_TARGET_MAPPINGA Mappings
+);
+
+HRESULT WINAPI ReportActiveIScsiTargetMappingsW(
+  PULONG BufferSize,
+  PULONG MappingCount,
+  PISCSI_TARGET_MAPPINGW Mappings
+);
+#define ReportActiveIScsiTargetMappings __MINGW_NAME_AW(ReportActiveIScsiTargetMappings)
+
+HRESULT WINAPI ReportIScsiSendTargetPortalsExA(
+  PULONG PortalCount,
+  PULONG PortalInfoSize,
+  PISCSI_TARGET_PORTAL_INFO_EXA PortalInfo
+);
+
+HRESULT WINAPI ReportIScsiSendTargetPortalsExW(
+  PULONG PortalCount,
+  PULONG PortalInfoSize,
+  PISCSI_TARGET_PORTAL_INFO_EXW PortalInfo
+);
+
+#define ReportIScsiSendTargetPortalsEx __MINGW_NAME_AW(ReportIScsiSendTargetPortalsEx)
+
+HRESULT WINAPI ReportIScsiTargetPortalsA(
+  PCHAR  InitiatorName,
+  PCHAR  TargetName,
+  PUSHORT TargetPortalTag,
+  PULONG ElementCount,
+  PISCSI_TARGET_PORTALA Portals
+);
+
+HRESULT WINAPI ReportIScsiTargetPortalsW(
+  PWCHAR InitiatorName,
+  PWCHAR TargetName,
+  PUSHORT TargetPortalTag,
+  PULONG ElementCount,
+  PISCSI_TARGET_PORTALW Portals
+);
+
+#define ReportIScsiTargetPortals __MINGW_NAME_AW(ReportIScsiTargetPortals)
+
+HRESULT WINAPI ReportIScsiTargetsA(
+  BOOLEAN ForceUpdate,
+  PULONG BufferSize,
+  PCHAR  Buffer
+);
+
+HRESULT WINAPI ReportIScsiTargetsW(
+  BOOLEAN ForceUpdate,
+  PULONG BufferSize,
+  PWCHAR Buffer
+);
+#define ReportIScsiTargets __MINGW_NAME_AW(ReportIScsiTargets)
+
+HRESULT WINAPI ReportISNSServerListA(
+  PULONG BufferSizeInChar,
+  PCHAR  Buffer
+);
+
+HRESULT WINAPI ReportISNSServerListW(
+  PULONG BufferSizeInChar,
+  PWCHAR Buffer
+);
+
+#define ReportISNSServerList __MINGW_NAME_AW(ReportISNSServerList)
+
+HRESULT WINAPI ReportPersistentiScsiDevicesA(
+  PULONG BufferSizeInChar,
+  PCHAR  Buffer
+);
+
+HRESULT WINAPI ReportPersistentiScsiDevicesW(
+  PULONG BufferSizeInChar,
+  PWCHAR Buffer
+);
+
+#define ReportPersistentiScsiDevices __MINGW_NAME_AW(ReportPersistentiScsiDevices)
+
+HRESULT WINAPI ReportRadiusServerListA(
+  PULONG BufferSizeInChar,
+  PCHAR  Buffer
+);
+
+HRESULT WINAPI ReportRadiusServerListW(
+  PULONG BufferSizeInChar,
+  PCHAR  Buffer
+);
+#define ReportRadiusServerList __MINGW_NAME_AW(ReportRadiusServerList)
+
+HRESULT WINAPI SendScsiReadCapacity(
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  ULONGLONG Lun,
+  PUCHAR *ScsiStatus,
+  PULONG *ResponseSize,
+  PUCHAR ResponseBuffer,
+  PULONG *SenseSize,
+  PUCHAR SenseBuffer
+);
+
+HRESULT WINAPI SendScsiReportLuns(
+  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
+  PUCHAR *ScsiStatus,
+  PULONG *ResponseSize,
+  PUCHAR ResponseBuffer,
+  PULONG *SenseSize,
+  PUCHAR SenseBuffer
+);
+
+HRESULT WINAPI SendScsiInquiry(
+  PISCSI_UNIQUE_SESSION_ID *UniqueSessionId,
+  ULONGLONG Lun,
+  UCHAR EvpdCmddt,
+  UCHAR PageCode,
+  PUCHAR *ScsiStatus,
+  PULONG *ReponseSize,
+  PUCHAR ReponseBuffer,
+  PULONG *SenseSize,
+  PUCHAR SenseBuffer
+);
+
+HRESULT WINAPI SetIScsiGroupPresharedKey(
+  ULONG KeyLength,
+  PUCHAR Key,
+  BOOLEAN Persist
+);
+
+HRESULT WINAPI SetIScsiInitiatorCHAPSharedSecret(
+  ULONG SharedSecretLength,
+  PUCHAR SharedSecret
+);
+
+HRESULT WINAPI SetIScsiInitiatorNodeNameA(
+  PCHAR InitiatorNodeName
+);
+
+HRESULT WINAPI SetIScsiInitiatorNodeNameW(
+  PWCHAR InitiatorNodeName
+);
+
+#define SetIScsiInitiatorNodeName __MINGW_NAME_AW(SetIScsiInitiatorNodeName)
+
+HRESULT WINAPI SetIscsiInitiatorRADIUSSharedSecret(
+  ULONG SharedSecretLength,
+  PUCHAR SharedSecret
+);
+
+HRESULT WINAPI SetIScsiTunnelModeOuterAddressA(
+  PCHAR InitiatorName,
+  ULONG InitiatorPortNumber,
+  PCHAR DestinationAddress,
+  PCHAR OuterModeAddress,
+  BOOLEAN Persist
+);
+
+HRESULT WINAPI SetIScsiTunnelModeOuterAddressW(
+  PWCHAR InitiatorName,
+  ULONG  InitiatorPortNumber,
+  PWCHAR DestinationAddress,
+  PWCHAR OuterModeAddress,
+  BOOLEAN Persist
+);
+
+#define SetIScsiTunnelModeOuterAddress __MINGW_NAME_AW(SetIScsiTunnelModeOuterAddress)
+
+HRESULT WINAPI SetupPersistentIScsiDevices(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif
diff --git a/mingw-w64-headers/include/isysmon.h b/mingw-w64-headers/include/isysmon.h
new file mode 100644
index 0000000..8ffd031
--- /dev/null
+++ b/mingw-w64-headers/include/isysmon.h
@@ -0,0 +1,31 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_ISYSMON
+#define _INC_ISYSMON
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _SysmonDataType {
+  sysmonDataAvg     = 1,
+  sysmonDataMin     = 2,
+  sysmonDataMax     = 3,
+  sysmonDataTime    = 4,
+  sysmonDataCount   = 5 
+} SysmonDataType;
+
+typedef enum _SysmonBatchReason {
+  SysmonBatchNone          = 0,
+  SysmonBatchAddFiles      = 1,
+  SysmonBatchAddCounters   = 2 
+} SysmonBatchReason;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_ISYSMON*/
diff --git a/mingw-w64-headers/include/ktmw32.h b/mingw-w64-headers/include/ktmw32.h
new file mode 100644
index 0000000..11fb134
--- /dev/null
+++ b/mingw-w64-headers/include/ktmw32.h
@@ -0,0 +1,236 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_KTMW32
+#define _INC_KTMW32
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WINBOOL WINAPI CommitComplete(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI CommitEnlistment(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI CommitTransaction(
+  HANDLE TransactionHandle
+);
+
+WINBOOL WINAPI CommitTransactionAsync(
+  HANDLE TransactionHandle
+);
+
+HANDLE WINAPI CreateEnlistment(
+  LPSECURITY_ATTRIBUTES lpEnlistmentrAttributes,
+  HANDLE ResourceManagerHandle,
+  HANDLE TransactionHandle,
+  NOTIFICATION_MASK NotificationMask,
+  DWORD CreateOptions,
+  PVOID EnlistmentKey
+);
+
+WINBOOL WINAPI SinglePhaseReject(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+HANDLE WINAPI CreateResourceManager(
+  LPSECURITY_ATTRIBUTES lpResourceManagerAttributes,
+  LPGUID ResourceManagerID,
+  DWORD CreateOptions,
+  HANDLE TmHandle,
+  LPWSTR Description
+);
+
+HANDLE WINAPI CreateTransactionManager(
+  LPSECURITY_ATTRIBUTES lpTransactionAttributes,
+  LPWSTR LogFileName,
+  ULONG CreateOptions,
+  ULONG CommitStrength
+);
+
+WINBOOL WINAPI GetCurrentClockTransactionManager(
+  HANDLE TransactionManagerHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI GetEnlistmentId(
+  HANDLE EnlistmentHandle,
+  LPGUID EnlistmentId
+);
+
+WINBOOL WINAPI GetEnlistmentRecoveryInformation(
+  HANDLE EnlistmentHandle,
+  ULONG BufferSize,
+  PVOID Buffer,
+  PULONG BufferUsed
+);
+
+WINBOOL WINAPI GetNotificationResourceManager(
+  HANDLE ResourceManagerHandle,
+  PTRANSACTION_NOTIFICATION TransactionNotification,
+  ULONG NotificationLength,
+  DWORD dwMilliseconds,
+  PULONG ReturnLength
+);
+
+WINBOOL WINAPI GetNotificationResourceManagerAsync(
+  HANDLE ResourceManagerHandle,
+  PTRANSACTION_NOTIFICATION TransactionNotification,
+  ULONG TransactionNotificationLength,
+  PULONG ReturnLength,
+  LPOVERLAPPED pOverlapped
+);
+
+WINBOOL WINAPI SetResourceManagerCompletionPort(
+  HANDLE ResourceManagerHandle,
+  HANDLE IoCompletionPortHandle,
+  ULONG_PTR CompletionKey
+);
+
+WINBOOL WINAPI GetTransactionId(
+  HANDLE TransactionHandle,
+  LPGUID TransactionId
+);
+
+WINBOOL WINAPI GetTransactionInformation(
+  HANDLE TransactionHandle,
+  PDWORD Outcome,
+  PDWORD IsolationLevel,
+  PDWORD IsolationFlags,
+  PDWORD Timeout,
+  DWORD BufferLength,
+  LPWSTR Description
+);
+
+WINBOOL WINAPI GetTransactionManagerId(
+  HANDLE TransactionManagerHandle,
+  LPGUID TransactionManagerId
+);
+
+HANDLE WINAPI OpenEnlistment(
+  DWORD dwDesiredAccess,
+  HANDLE ResourceManagerHandle,
+  LPGUID EnlistmentId
+);
+
+HANDLE WINAPI OpenResourceManager(
+  DWORD dwDesiredAccess,
+  HANDLE TmHandle,
+  LPGUID RmGuid
+);
+
+HANDLE WINAPI OpenTransaction(
+  DWORD dwDesiredAccess,
+  LPGUID TransactionId
+);
+
+HANDLE WINAPI OpenTransactionManager(
+  LPWSTR LogFileName,
+  ACCESS_MASK DesiredAccess,
+  ULONG OpenOptions
+);
+
+HANDLE WINAPI OpenTransactionManagerById(
+  LPGUID TransactionManagerId,
+  ACCESS_MASK DesiredAccess,
+  ULONG OpenOptions
+);
+
+WINBOOL WINAPI PrepareComplete(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI PrepareEnlistment(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI PrePrepareComplete(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI PrePrepareEnlistment(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI ReadOnlyEnlistment(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI RecoverEnlistment(
+  HANDLE EnlistmentHandle,
+  PVOID EnlistmentKey
+);
+
+WINBOOL WINAPI RecoverResourceManager(
+  HANDLE ResourceManagerHandle
+);
+
+WINBOOL WINAPI RecoverTransactionManager(
+  HANDLE TransactionManagerHandle
+);
+
+WINBOOL WINAPI RenameTransactionManager(
+  LPWSTR LogFileName,
+  LPGUID ExistingTransactionManagerGuid
+);
+
+WINBOOL WINAPI RollbackComplete(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI RollbackEnlistment(
+  HANDLE EnlistmentHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI RollbackTransaction(
+  HANDLE TransactionHandle
+);
+
+WINBOOL WINAPI RollbackTransactionAsync(
+  HANDLE TransactionHandle
+);
+
+WINBOOL RollforwardTransactionManager(
+  HANDLE TransactionManagerHandle,
+  PLARGE_INTEGER TmVirtualClock
+);
+
+WINBOOL WINAPI RollbackTransactionAsync(
+  HANDLE TransactionHandle
+);
+
+WINBOOL WINAPI SetEnlistmentRecoveryInformation(
+  HANDLE EnlistmentHandle,
+  ULONG BufferSize,
+  PVOID Buffer
+);
+
+WINBOOL WINAPI SetTransactionInformation(
+  HANDLE TransactionHandle,
+  DWORD IsolationLevel,
+  DWORD IsolationFlags,
+  DWORD Timeout,
+  LPWSTR Description
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_KTMW32*/
diff --git a/mingw-w64-headers/include/lmdfs.h b/mingw-w64-headers/include/lmdfs.h
index a63a0e9..1617e6c 100644
--- a/mingw-w64-headers/include/lmdfs.h
+++ b/mingw-w64-headers/include/lmdfs.h
@@ -10,6 +10,10 @@
 extern "C" {
 #endif
 
+#ifndef NET_API_FUNCTION
+#define NET_API_FUNCTION WINAPI
+#endif
+
 #define DFS_VOLUME_STATES 0xF
 
 #define DFS_VOLUME_STATE_OK 1
@@ -147,6 +151,7 @@
 #define DFS_PROPERTY_FLAG_SITE_COSTING 0x00000004
 #define DFS_PROPERTY_FLAG_TARGET_FAILBACK 0x00000008
 #define DFS_PROPERTY_FLAG_CLUSTER_ENABLED 0x00000010
+#define DFS_PROPERTY_FLAG_ABDE 0x00000020
 
   typedef struct _DFS_INFO_100 {
     LPWSTR Comment;
@@ -182,6 +187,145 @@
     DFS_TARGET_PRIORITY TargetPriority;
   } DFS_INFO_106,*PDFS_INFO_106,*LPDFS_INFO_106;
 
+#if (_WIN32_WINNT >= 0x0600)
+#define DFS_NAMESPACE_CAPABILITY_ABDE 0x0000000000000001
+
+  typedef enum _DFS_NAMESPACE_VERSION_ORIGIN {
+    DFS_NAMESPACE_VERSION_ORIGIN_COMBINED   = 0,
+    DFS_NAMESPACE_VERSION_ORIGIN_SERVER     = 1,
+    DFS_NAMESPACE_VERSION_ORIGIN_DOMAIN     = 2 
+  } DFS_NAMESPACE_VERSION_ORIGIN;
+
+typedef struct _DFS_SUPPORTED_NAMESPACE_VERSION_INFO {
+  ULONG     DomainDfsMajorVersion;
+  ULONG     NamespaceMinorVersion;
+  ULONGLONG DomainDfsCapabilities;
+  ULONG     StandaloneDfsMajorVersion;
+  ULONG     StandaloneDfsMinorVersion;
+  ULONGLONG StandaloneDfsCapabilities;
+} DFS_SUPPORTED_NAMESPACE_VERSION_INFO, *PDFS_SUPPORTED_NAMESPACE_VERSION_INFO;
+
+  typedef struct _DFS_INFO_8 {
+    LPWSTR               EntryPath;
+    LPWSTR               Comment;
+    DWORD                State;
+    ULONG                Timeout;
+    GUID                 Guid;
+    ULONG                PropertyFlags;
+    ULONG                MetadataSize;
+    ULONG                SdLengthReserved;
+    PSECURITY_DESCRIPTOR pSecurityDescriptor;
+    DWORD                NumberOfStorages;
+  } DFS_INFO_8, *PDFS_INFO_8;
+
+  typedef struct _DFS_INFO_9 {
+    LPWSTR               EntryPath;
+    LPWSTR               Comment;
+    DWORD                State;
+    ULONG                Timeout;
+    GUID                 Guid;
+    ULONG                PropertyFlags;
+    ULONG                MetadataSize;
+    ULONG                SdLengthReserved;
+    PSECURITY_DESCRIPTOR pSecurityDescriptor;
+    DWORD                NumberOfStorages;
+    LPDFS_STORAGE_INFO_1 Storage;
+  } DFS_INFO_9, *PDFS_INFO_9;
+
+  typedef struct _DFS_INFO_50 {
+    ULONG     NamespaceMajorVersion;
+    ULONG     NamespaceMinorVersion;
+    ULONGLONG NamespaceCapabilities;
+  } DFS_INFO_50, *PDFS_INFO_50;
+
+  typedef struct _DFS_INFO_107 {
+    LPWSTR               Comment;
+    DWORD                State;
+    ULONG                Timeout;
+    ULONG                PropertyFlagMask;
+    ULONG                PropertyFlags;
+    ULONG                SdLengthReserved;
+    PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  } DFS_INFO_107, *PDFS_INFO_107;
+
+  typedef struct _DFS_INFO_150 {
+    ULONG                SdLengthReserved;
+    PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  } DFS_INFO_150, *PDFS_INFO_150;
+
+NET_API_STATUS NET_API_FUNCTION NetDfsAddRootTarget(
+  LPWSTR pDfsPath,
+  LPWSTR pTargetPath,
+  ULONG MajorVersion,
+  LPWSTR pComment,
+  ULONG Flags
+);
+
+NET_API_STATUS WINAPI NetDfsGetFtContainerSecurity(
+  LPWSTR DomainName,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+  LPDWORD lpcbSecurityDescriptor
+);
+
+NET_API_STATUS WINAPI NetDfsGetSecurity(
+  LPWSTR DfsEntryPath,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+  LPDWORD lpcbSecurityDescriptor
+);
+
+NET_API_STATUS WINAPI NetDfsGetStdContainerSecurity(
+  LPWSTR MachineName,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+  LPDWORD lpcbSecurityDescriptor
+);
+
+NET_API_STATUS NET_API_FUNCTION NetDfsGetSupportedNamespaceVersion(
+  DFS_NAMESPACE_VERSION_ORIGIN Origin,
+  PWSTR pName,
+  PDFS_SUPPORTED_NAMESPACE_VERSION_INFO *ppVersionInfo
+);
+
+NET_API_STATUS NetDfsMove(
+  LPWSTR Path,
+  LPWSTR NewPath,
+  ULONG Flags
+);
+
+NET_API_STATUS NET_API_FUNCTION NetDfsRemoveRootTarget(
+  LPWSTR pDfsPath,
+  LPWSTR pTargetPath,
+  ULONG Flags
+);
+
+NET_API_STATUS WINAPI NetDfsSetFtContainerSecurity(
+  LPWSTR DomainName,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR pSecurityDescriptor
+);
+
+NET_API_STATUS WINAPI NetDfsSetSecurity(
+  LPWSTR DfsEntryPath,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR pSecurityDescriptor
+);
+
+NET_API_STATUS WINAPI NetDfsSetStdContainerSecurity(
+  LPWSTR MachineName,
+  SECURITY_INFORMATION SecurityInformation,
+  PSECURITY_DESCRIPTOR pSecurityDescriptor
+);
+
+NET_API_STATUS WINAPI NetShareDelEx(
+  LMSTR servername,
+  DWORD level,
+  LPBYTE buf
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
   typedef struct _DFS_INFO_200 {
     LPWSTR FtDfsName;
   } DFS_INFO_200,*PDFS_INFO_200,*LPDFS_INFO_200;
diff --git a/mingw-w64-headers/include/mfapi.h b/mingw-w64-headers/include/mfapi.h
new file mode 100644
index 0000000..daf3c24
--- /dev/null
+++ b/mingw-w64-headers/include/mfapi.h
@@ -0,0 +1,260 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFAPI
+#define _INC_MFAPI
+#include <dshow.h>
+#include <dvdmedia.h>
+#include <opmapi.h>
+#include <propsys.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+/*ksmedia.h needs fixing about "multi-character character constant"*/
+typedef struct _MFT_REGISTRATION_INFO MFT_REGISTRATION_INFO;
+typedef struct tagKS_VIDEOINFOHEADER KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
+typedef struct tagKS_VIDEOINFOHEADER2 KS_VIDEOINFOHEADER2, *PKS_VIDEOINFOHEADER2;
+typedef struct IMFActivate IMFActivate;
+typedef enum _EAllocationType { eAllocationTypeIgnore } EAllocationType; /*Unknown type*/
+
+typedef enum  {
+  MF_TOPOSTATUS_INVALID           = 0,
+  MF_TOPOSTATUS_READY             = 100,
+  MF_TOPOSTATUS_STARTED_SOURCE    = 200,
+  MF_TOPOSTATUS_DYNAMIC_CHANGED   = 210,
+  MF_TOPOSTATUS_SINK_SWITCHED     = 300,
+  MF_TOPOSTATUS_ENDED             = 400 
+} MF_TOPOSTATUS;
+
+typedef enum _MFVideoDRMFlags {
+  MFVideoDRMFlag_None                 = 0,
+  MFVideoDRMFlag_AnalogProtected      = 1,
+  MFVideoDRMFlag_DigitallyProtected   = 2 
+} MFVideoDRMFlags;
+
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum  {
+  MF_STANDARD_WORKQUEUE   = 0,
+  MF_WINDOW_WORKQUEUE     = 1 
+} MFASYNC_WORKQUEUE_TYPE;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef enum _MFVideoPadFlags {
+  MFVideoPadFlag_PAD_TO_None   = 0,
+  MFVideoPadFlag_PAD_TO_4x3    = 1,
+  MFVideoPadFlag_PAD_TO_16x9   = 2 
+} MFVideoPadFlags;
+
+typedef enum _MFVideoSrcContentHintFlags {
+  MFVideoSrcContentHintFlag_None    = 0,
+  MFVideoSrcContentHintFlag_16x9    = 1,
+  MFVideoSrcContentHintFlag_235_1   = 2 
+} MFVideoSrcContentHintFlags;
+
+typedef enum _MFWaveFormatExConvertFlags {
+  MFWaveFormatExConvertFlag_Normal            = 0,
+  MFWaveFormatExConvertFlag_ForceExtensible   = 1 
+} MFWaveFormatExConvertFlags;
+
+#if (_WIN32_WINNT >= 0x0601)
+#undef  INTERFACE
+#define INTERFACE IMFLocalMFTRegistration
+DECLARE_INTERFACE_(IMFLocalMFTRegistration,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFLocalMFTRegistration methods */
+    STDMETHOD_(HRESULT,RegisterMFTs)(THIS_ MFT_REGISTRATION_INFO *pMFTs,DWORD cMFTs) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFLocalMFTRegistration_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFLocalMFTRegistration_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFLocalMFTRegistration_Release(This) (This)->pVtbl->Release(This)
+#define IMFLocalMFTRegistration_RegisterMFTs(This,pMFTs,cMFTs) (This)->lpVtbl->RegisterMFTs(This,pMFTs,cMFTs)
+#endif /*COBJMACROS*/
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifdef __cplusplus
+typedef struct tagMFASYNCRESULT : public IMFAsyncResult {
+  OVERLAPPED       overlapped;
+  IMFAsyncCallback *pCallback;
+  HRESULT          hrStatusResult;
+  DWORD            dwBytesTransferred;
+  HANDLE           hEvent;
+} MFASYNCRESULT;
+#endif
+
+typedef struct _MFT_REGISTER_TYPE_INFO {
+  GUID guidMajorType;
+  GUID guidSubtype;
+} MFT_REGISTER_TYPE_INFO;
+
+typedef struct _MFFOLDDOWN_MATRIX {
+  UINT32 cbSize;
+  UINT32 cSrcChannels;
+  UINT32 cDstChannels;
+  UINT32 dwChannelMask;
+  LONG   Coeff[64];
+} MFFOLDDOWN_MATRIX;
+
+typedef struct _MT_CUSTOM_VIDEO_PRIMARIES {
+  float fRx;
+  float fRy;
+  float fGx;
+  float fGy;
+  float fBx;
+  float fBy;
+  float fWx;
+  float fWy;
+} MT_CUSTOM_VIDEO_PRIMARIES;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (*MFPERIODICCALLBACK )(IUnknown *pContext);
+typedef LPVOID MFWORKITEM_KEY;
+
+HRESULT WINAPI MFAddPeriodicCallback(MFPERIODICCALLBACK Callback,IUnknown *pContext,DWORD *pdwKey);
+HRESULT WINAPI MFRemovePeriodicCallback(DWORD dwKey);
+HRESULT WINAPI MFAllocateWorkQueue(DWORD *pdwWorkQueue);
+HRESULT WINAPI MFAllocateWorkQueueEx(MFASYNC_WORKQUEUE_TYPE WorkQueueType,DWORD *pdwWorkQueue);
+HRESULT WINAPI MFAverageTimePerFrameToFrameRate(UINT64 unAverageTimePerFrame,UINT32 *punNumerator,UINT32 *punDenominator);
+HRESULT WINAPI MFBeginCreateFile(MF_FILE_ACCESSMODE AccessMode,MF_FILE_OPENMODE OpenMode,MF_FILE_FLAGS fFlags,LPCWSTR pwszFilePath,IMFAsyncCallback *pCallback,IUnknown *pState,IUnknown **ppCancelCookie);
+HRESULT WINAPI MFBeginUnregisterWorkQueueWithMMCSS(DWORD dwWorkQueueId,IMFAsyncCallback *pDoneCallback,IUnknown *pDoneState);
+HRESULT WINAPI MFBeginRegisterWorkQueueWithMMCSS(DWORD dwWorkQueueId,LPCWSTR wszClass,DWORD dwTaskId,IMFAsyncCallback *pDoneCallback,IUnknown *pDoneState);
+HRESULT WINAPI MFBeginCreateFile(MF_FILE_ACCESSMODE AccessMode,MF_FILE_OPENMODE OpenMode,MF_FILE_FLAGS fFlags,LPCWSTR pwszFilePath,IMFAsyncCallback *pCallback,IUnknown *pState,IUnknown **ppCancelCookie);
+HRESULT WINAPI MFCalculateBitmapImageSize(const BITMAPINFOHEADER *pBMIH,UINT32 cbBufSize,UINT32 *pcbImageSize,WINBOOL *pbKnown);
+HRESULT WINAPI MFCalculateImageSize(REFGUID guidSubtype,UINT32 unWidth,UINT32 unHeight,UINT32 *pcbImageSize);
+HRESULT WINAPI MFCancelCreateFile(IUnknown *pCancelCookie);
+HRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY Key);
+WINBOOL WINAPI MFCompareFullToPartialMediaType(IMFMediaType *pMFTypeFull,IMFMediaType *pMFTypePartial);
+HRESULT WINAPI MFConvertColorInfoFromDXVA(MFVIDEOFORMAT *pToFormat,DWORD dwFromDXVA);
+HRESULT WINAPI MFConvertColorInfoToDXVA(DWORD *pdwToDXVA,const MFVIDEOFORMAT *pFromFormat);
+HRESULT WINAPI MFConvertFromFP16Array(float *pDest,const WORD *pSrc,DWORD dwCount);
+HRESULT WINAPI MFConvertToFP16Array(WORD *pDest,const float *pSrc,DWORD dwCount);
+HRESULT WINAPI MFCopyImage(BYTE *pDest,LONG lDestStride,const BYTE *pSrc,LONG lSrcStride,DWORD dwWidthInBytes,DWORD dwLines);
+HRESULT WINAPI MFCreateAudioMediaType(const WAVEFORMATEX *pAudioFormat,IMFAudioMediaType **ppIAudioMediaType);
+HRESULT WINAPI MFCreateDXSurfaceBuffer(REFIID riid,IUnknown *punkSurface,BOOL fBottomUpWhenLinear,IMFMediaBuffer **ppBuffer);
+HRESULT WINAPI MFCreateMediaType(IMFMediaType **ppMFType);
+HRESULT WINAPI MFCreateMediaBufferWrapper(IMFMediaBuffer *pBuffer,DWORD cbOffset,DWORD dwLength,IMFMediaBuffer **ppBuffer);
+HRESULT WINAPI MFCreateMediaTypeFromRepresentation(GUID guidRepresentation,LPVOID pvRepresentation,IMFMediaType **ppIMediaType);
+HRESULT WINAPI MFCreateMemoryBuffer(DWORD cbMaxLength,IMFMediaBuffer **ppBuffer);
+HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *pMFType,MFVIDEOFORMAT **ppMFVF,UINT32 *pcbSize);
+HRESULT WINAPI MFCreateSample(IMFSample **ppIMFSample);
+HRESULT WINAPI MFCreateAsyncResult(IUnknown *punkObject,IMFAsyncCallback *pCallback,IUnknown *punkState,IMFAsyncResult **ppAsyncResult);
+HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE AccessMode,MF_FILE_OPENMODE OpenMode,MF_FILE_FLAGS fFlags,LPCWSTR pwszFileURL,IMFByteStream **ppIByteStream);
+HRESULT WINAPI MFCreateTempFile(MF_FILE_ACCESSMODE AccessMode,MF_FILE_OPENMODE OpenMode,MF_FILE_FLAGS fFlags,IMFByteStream **ppIByteStream);
+HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *pMFType,const WAVEFORMATEX *pWaveFormat,UINT32 cbBufSize);
+HRESULT WINAPI MFCreateVideoMediaType(const MFVIDEOFORMAT *pVideoFormat,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateVideoMediaTypeFromBitMapInfoHeader(const BITMAPINFOHEADER *pbmihBitMapInfoHeader,DWORD dwPixelAspectRatioX,DWORD dwPixelAspectRatioY,MFVideoInterlaceMode InterlaceMode,QWORD VideoFlags,QWORD qwFramesPerSecondNumerator,QWORD qwFramesPerSecondDenominator,DWORD dwMaxBitRate,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateVideoMediaTypeFromBitMapInfoHeaderEx(const BITMAPINFOHEADER *pbmihBitMapInfoHeader,UINT32 cbBitMapInfoHeader,DWORD dwPixelAspectRatioX,DWORD dwPixelAspectRatioY,MFVideoInterlaceMode InterlaceMode,QWORD VideoFlags,DWORD dwFramesPerSecondNumerator,DWORD dwFramesPerSecondDenominator,DWORD dwMaxBitRate,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateVideoMediaTypeFromSubtype(const GUID *pAMSubtype,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader(const KS_VIDEOINFOHEADER *pVideoInfoHeader,DWORD cbVideoInfoHeader,DWORD dwPixelAspectRatioX,DWORD dwPixelAspectRatioY,MFVideoInterlaceMode InterlaceMode,QWORD VideoFlags,const GUID *pSubtype,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader2(const KS_VIDEOINFOHEADER2 *pVideoInfoHeader,DWORD cbVideoInfoHeader,QWORD AdditionalVideoFlags,const GUID *pSubtype,IMFVideoMediaType **ppIVideoMediaType);
+HRESULT WINAPI MFCreateWMAEncoderActivate(IMFMediaType *pMediaType,IPropertyStore *pEncodingConfigurationProperties,IMFActivate **ppActivate);
+HRESULT WINAPI MFEndCreateFile(IMFAsyncResult *pResult,IMFByteStream **ppFile);
+HRESULT WINAPI MFEndRegisterWorkQueueWithMMCSS(IMFAsyncResult *pResult,DWORD *pdwTaskId);
+HRESULT WINAPI MFEndUnregisterWorkQueueWithMMCSS(IMFAsyncResult *pResult);
+HRESULT WINAPI MFFrameRateToAverageTimePerFrame(UINT32 unNumerator,UINT32 unDenominator,UINT64 *punAverageTimePerFrame);
+double WINAPI MFGetAttributeDouble(IMFAttributes *pAttributes,REFGUID guidKey,double fDefault);
+HRESULT WINAPI MFGetAttributeRatio(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 *pnNumerator,UINT32 *punDenominator);
+HRESULT WINAPI MFGetAttributesAsBlob(IMFAttributes *pAttributes,UINT8 *pBuf,UINT cbBufSize);
+HRESULT WINAPI MFGetAttributesAsBlobSize(IMFAttributes *pAttributes,UINT32 *pcbBufSize);
+HRESULT WINAPI MFGetAttributeSize(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 *punWidth,UINT32 *punHeight);
+UINT32 WINAPI MFGetAttributeUINT32(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 unDefault);
+UINT64 WINAPI MFGetAttributeUINT64(IMFAttributes *pAttributes,REFGUID guidKey,UINT64 unDefault);
+HRESULT WINAPI MFGetPlaneSize(DWORD format,DWORD dwWidth,DWORD dwHeight,DWORD *pdwPlaneSize);
+HRESULT WINAPI MFGetStrideForBitmapInfoHeader(DWORD format,DWORD dwWidth,LONG *pStride);
+HRESULT WINAPI MFGetTimerPeriodicity(DWORD *Periodicity);
+DWORD WINAPI MFGetUncompressedVideoFormat(const MFVIDEOFORMAT *pVideoFormat);
+HRESULT WINAPI MFGetWorkQueueMMCSSClass(DWORD dwWorkQueueId,LPWSTR pwszClass,DWORD *pcchClass);
+HRESULT WINAPI MFGetWorkQueueMMCSSTaskId(DWORD dwWorkQueueId,LPDWORD pdwTaskId);
+void* WINAPI MFHeapAlloc(size_t nSize,ULONG dwFlags,char *pszFile,int line,EAllocationType eat);
+void WINAPI MFHeapFree(void *pv);
+HRESULT WINAPI MFInitAMMediaTypeFromMFMediaType(IMFMediaType *pMFType,GUID guidFormatBlockType,AM_MEDIA_TYPE *pAMType);
+HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *pAttributes,const UINT8 *pBuf,UINT cbBufSize);
+HRESULT WINAPI MFInitMediaTypeFromAMMediaType(IMFMediaType *pMFType,const AM_MEDIA_TYPE *pAMType);
+HRESULT WINAPI MFInitMediaTypeFromMFVideoFormat(IMFMediaType *pMFType,const MFVIDEOFORMAT *pMFVF,UINT32 cbBufSize);
+HRESULT WINAPI MFInitVideoFormat(MFVIDEOFORMAT *pVideoFormat,MFStandardVideoFormat type);
+HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *pVideoFormat,DWORD dwWidth,DWORD dwHeight,DWORD D3Dfmt);
+HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *pAsyncResult);
+WINBOOL WINAPI MFIsFormatYUV(DWORD Format);
+HRESULT WINAPI MFLockPlatform(void);
+HRESULT WINAPI MFLockWorkQueue(DWORD dwWorkQueue);
+HRESULT WINAPI MFPutWorkItem(DWORD dwQueue,IMFAsyncCallback *pCallback,IUnknown *pState);
+HRESULT WINAPI MFPutWorkItemEx(DWORD dwQueue,IMFAsyncResult *pResult);
+HRESULT WINAPI MFRemovePeriodicCallback(DWORD dwKey);
+HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pPresentationDescriptor);
+HRESULT WINAPI MFScheduleWorkItem(IMFAsyncCallback *pCallback,IUnknown *pState,INT64 Timeout,MFWORKITEM_KEY *pKey);
+HRESULT WINAPI MFSerializePresentationDescriptor(IMFPresentationDescriptor *pPD,DWORD *pcbData,BYTE **ppbData);
+HRESULT WINAPI MFSetAttribute2UINT32asUINT64(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 unHigh32,UINT32 unLow32);
+HRESULT WINAPI MFSetAttributeRatio(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 unNumerator,UINT32 unDenominator);
+HRESULT WINAPI MFSetAttributeSize(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 unWidth,UINT32 unHeight);
+HRESULT WINAPI MFShutdown(void);
+HRESULT WINAPI MFTEnum(GUID guidCategory,UINT32 Flags,MFT_REGISTER_TYPE_INFO *pInputType,MFT_REGISTER_TYPE_INFO *pOutputType,IMFAttributes *pAttributes,CLSID **ppclsidMFT,UINT32 *pcMFTs);
+HRESULT WINAPI MFTGetInfo(CLSID clsidMFT,LPWSTR *pszName,MFT_REGISTER_TYPE_INFO **ppInputTypes,UINT32 *pcInputTypes,MFT_REGISTER_TYPE_INFO **ppOutputTypes,UINT32 *pcOutputTypes,IMFAttributes **ppAttributes);
+HRESULT WINAPI MFTRegister(CLSID clsidMFT,GUID guidCategory,LPWSTR pszName,UINT32 Flags,UINT32 cInputTypes,MFT_REGISTER_TYPE_INFO *pInputTypes,UINT32 cOutputTypes,MFT_REGISTER_TYPE_INFO *pOutputTypes,IMFAttributes *pAttributes);
+HRESULT WINAPI MFTRegisterLocal(IClassFactory *pClassFactory,REFGUID guidCategory,LPCWSTR pszName,UINT32 Flags,UINT32 cInputTypes,const MFT_REGISTER_TYPE_INFO *pInputTypes,UINT32 cOutputTypes,const MFT_REGISTER_TYPE_INFO *pOutputTypes);
+HRESULT WINAPI MFTUnregister(CLSID clsidMFT);
+HRESULT WINAPI MFUnlockPlatform(void);
+HRESULT WINAPI MFUnlockWorkQueue(DWORD dwWorkQueue);
+HRESULT WINAPI MFUnwrapMediaType(IMFMediaType *pWrap,IMFMediaType **ppOrig);
+HRESULT WINAPI MFValidateMediaTypeSize(GUID FormatType,UINT8 *pBlock,UINT32 cbSize);
+HRESULT WINAPI MFWrapMediaType(IMFMediaType *pOrig,REFGUID MajorType,REFGUID SubType,IMFMediaType **ppWrap);
+HRESULT WINAPI OPMGetVideoOutputsFromHMONITOR(HMONITOR hMonitor,OPM_VIDEO_OUTPUT_SEMANTICS vos,ULONG *pulNumVideoOutputs,IOPMVideoOutput ***pppOPMVideoOutputArray);
+UINT64 WINAPI Pack2UINT32AsUINT64(UINT32 unHigh,UINT32 unLow);
+/*void Unpack2UINT32AsUINT64(UINT64 unPacked,UINT32 *punHigh,UINT32 *punLow);*/
+#define Unpack2UINT32AsUINT64(unPacked,punHigh,punLow) \
+punHigh=(unPacked&0xffff0000); \
+punLow=(unPacked&0x0000ffff);
+
+#ifdef __cplusplus
+}
+#endif
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *pStream,IMFByteStream **ppByteStream);
+HRESULT WINAPI MFGetMFTMerit(IUnknown *pMFT,UINT32 cbVerifier,const BYTE *verifier,DWORD *merit);
+HRESULT WINAPI MFGetPluginControl(IMFPluginControl **ppPluginControl);
+LONGLONG WINAPI MFllMulDiv(LONGLONG a,LONGLONG b,LONGLONG c,LONGLONG d);
+HRESULT WINAPI MFTEnumEx(GUID guidCategory,UINT32 Flags,const MFT_REGISTER_TYPE_INFO *pInputType,const MFT_REGISTER_TYPE_INFO *pOutputType,IMFActivate ***pppMFTActivate,UINT32 *pcMFTActivate);
+HRESULT WINAPI MFTRegisterLocalByCLSID(REFCLSID clisdMFT,REFGUID guidCategory,LPCWSTR pszName,UINT32 Flags,UINT32 cInputTypes,const MFT_REGISTER_TYPE_INFO *pInputTypes,UINT32 cOutputTypes,const MFT_REGISTER_TYPE_INFO *pOutputTypes);
+HRESULT WINAPI MFTUnregisterLocal(IClassFactory *pClassFactory);
+HRESULT WINAPI MFTUnregisterLocalByCLSID(CLSID clsidMFT);
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifndef __cplusplus
+HRESULT WINAPI MFCreateWaveFormatExFromMFMediaType(IMFMediaType *pMFType,WAVEFORMATEX **ppWF,UINT32 *pcbSize,UINT32 Flags);
+HRESULT WINAPI MFInitMediaTypeFromMPEG1VideoInfo(IMFMediaType *pMFType,const MPEG1VIDEOINFO *pMP1VI,UINT32 cbBufSize,const GUID *pSubtype);
+HRESULT WINAPI MFInitMediaTypeFromMPEG2VideoInfo(IMFMediaType *pMFType,const MPEG2VIDEOINFO *pMP2VI,UINT32 cbBufSize,const GUID *pSubtype);
+HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *pMFType,const VIDEOINFOHEADER *pVIH,UINT32 cbBufSize,const GUID *pSubtype);
+HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader2(IMFMediaType *pMFType,const VIDEOINFOHEADER2 *pVIH2,UINT32 cbBufSize,const GUID *pSubtype);
+HRESULT WINAPI MFStartup(ULONG Version,DWORD dwFlags);
+#else
+extern "C" HRESULT WINAPI MFCreateWaveFormatExFromMFMediaType(IMFMediaType *pMFType,WAVEFORMATEX **ppWF,UINT32 *pcbSize,UINT32 Flags = MFWaveFormatExConvertFlag_Normal);
+extern "C" HRESULT WINAPI MFInitMediaTypeFromMPEG1VideoInfo(IMFMediaType *pMFType,const MPEG1VIDEOINFO *pMP1VI,UINT32 cbBufSize,const GUID *pSubtype = NULL);
+extern "C" HRESULT WINAPI MFInitMediaTypeFromMPEG2VideoInfo(IMFMediaType *pMFType,const MPEG2VIDEOINFO *pMP2VI,UINT32 cbBufSize,const GUID *pSubtype = NULL);
+extern "C" HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *pMFType,const VIDEOINFOHEADER *pVIH,UINT32 cbBufSize,const GUID *pSubtype = NULL);
+extern "C" HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader2(IMFMediaType *pMFType,const VIDEOINFOHEADER2 *pVIH2,UINT32 cbBufSize,const GUID *pSubtype = NULL);
+extern "C" HRESULT WINAPI MFStartup(ULONG Version,DWORD dwFlags = MFSTARTUP_FULL);
+#endif
+
+#endif  /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_MFAPI*/
diff --git a/mingw-w64-headers/include/mfidl.h b/mingw-w64-headers/include/mfidl.h
new file mode 100644
index 0000000..e422bd8
--- /dev/null
+++ b/mingw-w64-headers/include/mfidl.h
@@ -0,0 +1,1889 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFIDL
+#define _INC_MFIDL
+#include <mfobjects.h>
+#include <mfapi.h>
+#include <wmcontainer.h>
+#include <evr.h>
+#include <mftransform.h>
+#include <propsys.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifndef __MFTIME_DEFINED__
+#define __MFTIME_DEFINED__
+__MINGW_EXTENSION typedef LONGLONG MFTIME;
+#endif
+
+__MINGW_EXTENSION typedef unsigned __int64 TOPOID;
+typedef DWORD MFSequencerElementId; /*Unknown type*/
+
+typedef struct _MFT_REGISTER_TYPE_INFO MFT_REGISTER_TYPE_INFO;
+typedef struct IMFStreamDescriptor IMFStreamDescriptor;
+typedef struct IMFMediaSink IMFMediaSink;
+typedef struct IMFMediaTypeHandler IMFMediaTypeHandler;
+typedef struct IMFCollection IMFCollection;
+
+typedef enum MFCLOCK_CHARACTERISTICS_FLAGS {
+  MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ   = 0x2,
+  MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING    = 0x4,
+  MFCLOCK_CHARACTERISTICS_FLAG_IS_SYSTEM_CLOCK   = 0x8 
+} MFCLOCK_CHARACTERISTICS_FLAGS;
+
+typedef enum _MF_CLOCK_STATE {
+  MFCLOCK_STATE_INVALID,
+  MFCLOCK_STATE_RUNNING,
+  MFCLOCK_STATE_STOPPED,
+  MFCLOCK_STATE_PAUSED 
+} MF_CLOCK_STATE, MFCLOCK_STATE;
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum _MF_QUALITY_ADVISE_FLAGS {
+  MF_QUALITY_CANNOT_KEEP_UP   = 0x1 
+} MF_QUALITY_ADVISE_FLAGS;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef enum _MF_QUALITY_DROP_MODE {
+  MF_DROP_MODE_NONE   = 0x0,
+  MF_DROP_MODE_1      = 0x1,
+  MF_DROP_MODE_2      = 0x2,
+  MF_DROP_MODE_3      = 0x3,
+  MF_DROP_MODE_4      = 0x4,
+  MF_DROP_MODE_5      = 0x5,
+  MF_NUM_DROP_MODES   = 0x6 
+} MF_QUALITY_DROP_MODE;
+
+typedef enum _MF_QUALITY_LEVEL {
+  MF_QUALITY_NORMAL           = 0x0,
+  MF_QUALITY_NORMAL_MINUS_1   = 0x1,
+  MF_QUALITY_NORMAL_MINUS_2   = 0x2,
+  MF_QUALITY_NORMAL_MINUS_3   = 0x3,
+  MF_QUALITY_NORMAL_MINUS_4   = 0x4,
+  MF_QUALITY_NORMAL_MINUS_5   = 0x5,
+  MF_NUM_QUALITY_LEVELS       = 0x6 
+} MF_QUALITY_LEVEL;
+
+typedef enum MF_SOURCE_READER_CONTROL_FLAG {
+  MF_SOURCE_READER_CONTROLF_DRAIN   = 0x00000001 
+} MF_SOURCE_READER_CONTROL_FLAG;
+
+typedef enum _MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS {
+  MF_TOPOLOGY_RESOLUTION_SUCCEEDED              = 0x00000000,
+  MF_OPTIONAL_NODE_REJECTED_MEDIA_TYPE          = 0x00000001,
+  MF_OPTIONAL_NODE_REJECTED_PROTECTED_PROCESS   = 0x00000002 
+} MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS;
+
+typedef enum MF_TOPOLOGY_TYPE {
+  MF_TOPOLOGY_OUTPUT_NODE,
+  MF_TOPOLOGY_SOURCESTREAM_NODE,
+  MF_TOPOLOGY_TRANSFORM_NODE,
+  MF_TOPOLOGY_TEE_NODE,
+  MF_TOPOLOGY_MAX                 = 0xffffffff 
+} MF_TOPOLOGY_TYPE;
+
+typedef enum _MF_TOPONODE_DRAIN_MODE {
+  MF_TOPONODE_DRAIN_DEFAULT,
+  MF_TOPONODE_DRAIN_ALWAYS,
+  MF_TOPONODE_DRAIN_NEVER 
+} MF_TOPONODE_DRAIN_MODE;
+
+typedef enum _MF_TOPONODE_FLUSH_MODE {
+  MF_TOPONODE_FLUSH_ALWAYS,
+  MF_TOPONODE_FLUSH_SEEK,
+  MF_TOPONODE_FLUSH_NEVER 
+} MF_TOPONODE_FLUSH_MODE;
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum _MF_TRANSCODE_TOPOLOGY_MODE_FLAGS {
+  MF_TRANSCODE_TOPOLOGYMODE_SOFTWARE_ONLY      = 0,
+  MF_TRANSCODE_TOPOLOGYMODE_HARDWARE_ALLOWED   = 1 
+} MF_TRANSCODE_TOPOLOGYMODE_FLAGS;
+
+#endif
+
+typedef enum  {
+  MF_LICENSE_URL_UNTRUSTED,
+  MF_LICENSE_URL_TRUSTED,
+  MF_LICENSE_URL_TAMPERED 
+} MF_URL_TRUST_STATUS;
+
+typedef enum MFASF_INDEXERFLAGS {
+  MFASF_INDEXER_WRITE_NEW_INDEX            = 0x00000001,
+  MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK   = 0x00000004,
+  MFASF_INDEXER_WRITE_FOR_LIVEREAD         = 0x00000008 
+} MFASF_INDEXERFLAGS;
+
+typedef enum _MFCLOCK_RELATIONAL_FLAGS {
+  MFCLOCK_RELATIONAL_FLAG_JITTER_NEVER_AHEAD   = 0x1 
+} MFCLOCK_RELATIONAL_FLAGS;
+
+typedef enum _MFMEDIASOURCE_CHARACTERISTICS {
+  MFMEDIASOURCE_IS_LIVE                      = 0x1,
+  MFMEDIASOURCE_CAN_SEEK                     = 0x2,
+  MFMEDIASOURCE_CAN_PAUSE                    = 0x4,
+  MFMEDIASOURCE_HAS_SLOW_SEEK                = 0x8,
+  MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS   = 0x10,
+  MFMEDIASOURCE_CAN_SKIPFORWARD              = 0x20,
+  MFMEDIASOURCE_CAN_SKIPBACKWARD             = 0x40 
+} MFMEDIASOURCE_CHARACTERISTICS;
+
+typedef enum _MFNET_PROXYSETTINGS {
+  MFNET_PROXYSETTING_NONE      = 0,
+  MFNET_PROXYSETTING_MANUAL    = 1,
+  MFNET_PROXYSETTING_AUTO      = 2,
+  MFNET_PROXYSETTING_BROWSER   = 3 
+} MFNET_PROXYSETTINGS;
+
+typedef enum _MFNetAuthenticationFlags {
+  MFNET_AUTHENTICATION_PROXY            = 0x00000001,
+  MFNET_AUTHENTICATION_CLEAR_TEXT       = 0x00000002,
+  MFNET_AUTHENTICATION_LOGGED_ON_USER 
+} MFNetAuthenticationFlags;
+
+typedef enum _MFNetCredentialOptions {
+  MFNET_CREDENTIAL_SAVE               = 0x00000001,
+  MFNET_CREDENTIAL_DONT_CACHE         = 0x00000002,
+  MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT   = 0x00000004 
+} MFNetCredentialOptions;
+
+typedef enum _MFNetCredentialRequirements {
+  REQUIRE_PROMPT          = 0x00000001,
+  REQUIRE_SAVE_SELECTED   = 0x00000002 
+} MFNetCredentialRequirements;
+
+typedef enum _MFNETSOURCE_CACHE_STATE {
+  MFNETSOURCE_CACHE_UNAVAILABLE,
+  MFNETSOURCE_CACHE_ACTIVE_WRITING,
+  MFNETSOURCE_CACHE_ACTIVE_COMPLETE 
+} MFNETSOURCE_CACHE_STATE;
+
+typedef enum _MFNETSOURCE_PROTOCOL_TYPE {
+  MFNETSOURCE_UNDEFINED   = 0x0,
+  MFNETSOURCE_HTTP        = 0x1,
+  MFNETSOURCE_RTSP        = 0x2,
+  MFNETSOURCE_FILE        = 0x3,
+  MFNETSOURCE_MULTICAST   = 0x4 
+} MFNETSOURCE_PROTOCOL_TYPE;
+
+typedef enum _MFNETSOURCE_STATISTICS_IDS {
+  MFNETSOURCE_RECVPACKETS_ID                = 0,
+  MFNETSOURCE_LOSTPACKETS_ID,
+  MFNETSOURCE_RESENDSREQUESTED_ID,
+  MFNETSOURCE_RESENDSRECEIVED_ID,
+  MFNETSOURCE_RECOVEREDBYECCPACKETS_ID,
+  MFNETSOURCE_RECOVEREDBYRTXPACKETS_ID,
+  MFNETSOURCE_OUTPACKETS_ID,
+  MFNETSOURCE_RECVRATE_ID,
+  MFNETSOURCE_AVGBANDWIDTHBPS_ID,
+  MFNETSOURCE_BYTESRECEIVED_ID,
+  MFNETSOURCE_PROTOCOL_ID,
+  MFNETSOURCE_TRANSPORT_ID,
+  MFNETSOURCE_CACHE_STATE_ID,
+  MFNETSOURCE_LINKBANDWIDTH_ID,
+  MFNETSOURCE_CONTENTBITRATE_ID,
+  MFNETSOURCE_SPEEDFACTOR_ID,
+  MFNETSOURCE_BUFFERSIZE_ID,
+  MFNETSOURCE_BUFFERPROGRESS_ID,
+  MFNETSOURCE_LASTBWSWITCHTS_ID,
+  MFNETSOURCE_SEEKRANGESTART_ID,
+  MFNETSOURCE_SEEKRANGEEND_ID,
+  MFNETSOURCE_BUFFERINGCOUNT_ID,
+  MFNETSOURCE_INCORRECTLYSIGNEDPACKETS_ID,
+  MFNETSOURCE_SIGNEDSESSION_ID,
+  MFNETSOURCE_MAXBITRATE_ID,
+  MFNETSOURCE_RECEPTION_QUALITY_ID,
+  MFNETSOURCE_RECOVEREDPACKETS_ID,
+  MFNETSOURCE_VBR_ID,
+  MFNETSOURCE_DOWNLOADPROGRESS_ID 
+} MFNETSOURCE_STATISTICS_IDS;
+
+typedef enum _MFNETSOURCE_TRANSPORT_TYPE {
+  MFNETSOURCE_UDP,
+  MFNETSOURCE_TCP 
+} MFNETSOURCE_TRANSPORT_TYPE;
+
+typedef enum MFPMPSESSION_CREATION_FLAGS {
+  MFPMPSESSION_UNPROTECTED_PROCESS   = 0x1 
+} MFPMPSESSION_CREATION_FLAGS;
+
+typedef enum MF_OBJECT_TYPE {
+  MF_OBJECT_MEDIASOURCE,
+  MF_OBJECT_BYTESTREAM,
+  MF_OBJECT_INVALID 
+} MF_OBJECT_TYPE;
+
+typedef enum _MFPOLICYMANAGER_ACTION {
+  PEACTION_NO          = 0,
+  PEACTION_PLAY        = 1,
+  PEACTION_COPY        = 2,
+  PEACTION_EXPORT      = 3,
+  PEACTION_EXTRACT     = 4,
+  PEACTION_RESERVED1   = 5,
+  PEACTION_RESERVED2   = 6,
+  PEACTION_RESERVED3   = 7,
+  PEACTION_LAST        = 7 
+} MFPOLICYMANAGER_ACTION;
+
+typedef enum _MFRATE_DIRECTION {
+  MFRATE_FORWARD,
+  MFRATE_REVERSE 
+} MFRATE_DIRECTION;
+
+typedef enum _MFSequencerTopologyFlags {
+  SequencerTopologyFlags_Last   = 0x00000001 
+} MFSequencerTopologyFlags;
+
+typedef enum MFSESSION_GETFULLTOPOLOGY_FLAGS {
+  MFSESSION_GETFULLTOPOLOGY_CURRENT 
+} MFSESSION_GETFULLTOPOLOGY_FLAGS;
+
+typedef enum MFSESSION_SETTOPOLOGY_FLAGS {
+  MFSESSION_SETTOPOLOGY_IMMEDIATE       = 0x1,
+  MFSESSION_SETTOPOLOGY_NORESOLUTION    = 0x2,
+  MFSESSION_SETTOPOLOGY_CLEAR_CURRENT   = 0x4 
+} MFSESSION_SETTOPOLOGY_FLAGS;
+
+typedef enum _MFSHUTDOWN_STATUS {
+  MFSHUTDOWN_INITIATED,
+  MFSHUTDOWN_COMPLETED 
+} MFSHUTDOWN_STATUS;
+
+typedef enum _MFSINK_WMDRMACTION {
+  MFSINK_WMDRMACTION_UNDEFINED    = 0,
+  MFSINK_WMDRMACTION_ENCODE       = 1,
+  MFSINK_WMDRMACTION_TRANSCODE    = 2,
+  MFSINK_WMDRMACTION_TRANSCRYPT   = 3,
+  MFSINK_WMDRMACTION_LAST         = 3 
+} MFSINK_WMDRMACTION;
+
+typedef enum MFSTREAMSINK_MARKER_TYPE {
+  MFSTREAMSINK_MARKER_DEFAULT,
+  MFSTREAMSINK_MARKER_ENDOFSEGMENT,
+  MFSTREAMSINK_MARKER_TICK,
+  MFSTREAMSINK_MARKER_EVENT 
+} MFSTREAMSINK_MARKER_TYPE;
+
+typedef enum MFTIMER_FLAGS {
+  MFTIMER_RELATIVE   = 0x00000001 
+} MFTIMER_FLAGS;
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum MFTOPLOGY_DXVA_MODE {
+  MFTOPOLOGY_DXVA_DEFAULT   = 0,
+  MFTOPOLOGY_DXVA_NONE      = 1,
+  MFTOPOLOGY_DXVA_FULL      = 2 
+} MFTOPOLOGY_DXVA_MODE;
+
+typedef enum MFTOPOLOGY_HARDWARE_MODE {
+  MFTOPOLOGY_HWMODE_SOFTWARE_ONLY   = 0,
+  MFTOPOLOGY_HWMODE_USE_HARDWARE    = 1 
+} MFTOPOLOGY_HARDWARE_MODE;
+
+typedef struct _MFT_REGISTRATION_INFO {
+  CLSID                  clsid;
+  GUID                   guidCategory;
+  UINT32                 uiFlags;
+  LPCWSTR                pszName;
+  DWORD                  cInTypes;
+  MFT_REGISTER_TYPE_INFO *pInTypes;
+  DWORD                  cOutTypes;
+  MFT_REGISTER_TYPE_INFO *pOutTypes;
+} MFT_REGISTRATION_INFO;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef struct _ASFFlatPicture {
+  BYTE  bPictureType;
+  DWORD dwDataLen;
+} ASF_FLAT_PICTURE;
+
+typedef struct _ASFFlatSynchronisedLyrics {
+  BYTE  bTimeStampFormat;
+  BYTE  bContentType;
+  DWORD dwLyricsLen;
+} ASF_FLAT_SYNCHRONISED_LYRICS;
+
+typedef enum SAMPLE_PROTECTION_VERSION {
+  SAMPLE_PROTECTION_VERSION_NO           = 0,
+  SAMPLE_PROTECTION_VERSION_BASIC_LOKI   = 1,
+  SAMPLE_PROTECTION_VERSION_SCATTER      = 2,
+  SAMPLE_PROTECTION_VERSION_RC4          = 3 
+} SAMPLE_PROTECTION_VERSION;
+
+typedef struct _MF_LEAKY_BUCKET_PAIR {
+  DWORD dwBitrate;
+  DWORD msBufferWindow;
+} MF_LEAKY_BUCKET_PAIR;
+
+typedef struct _MFBYTESTREAM_BUFFERING_PARAMS {
+  QWORD                cbTotalFileSize;
+  QWORD                cbPlayableDataSize;
+  MF_LEAKY_BUCKET_PAIR *prgBuckets;
+  DWORD                cBuckets;
+  QWORD                qwNetBufferingTime;
+  QWORD                qwExtraBufferingTimeDuringSeek;
+  QWORD                qwPlayDuration;
+  float                dRate;
+} MFBYTESTREAM_BUFFERING_PARAMS;
+
+typedef struct _MFCLOCK_PROPERTIES {
+  unsigned __int64 qwCorrelationRate;
+  GUID             guidClockId;
+  DWORD            dwClockFlags;
+  unsigned __int64 qwClockFrequency;
+  DWORD            dwClockTolerance;
+  DWORD            dwClockJitter;
+} MFCLOCK_PROPERTIES;
+
+typedef struct _MFINPUTTRUSTAUTHORITY_ACTION {
+  MFPOLICYMANAGER_ACTION Action;
+  BYTE                   *pbTicket;
+  DWORD                  cbTicket;
+} MFINPUTTRUSTAUTHORITY_ACCESS_ACTION;
+
+typedef struct _MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS {
+  DWORD                               dwSize;
+  DWORD                               dwVer;
+  DWORD                               cbSignatureOffset;
+  DWORD                               cbSignatureSize;
+  DWORD                               cbExtensionOffset;
+  DWORD                               cbExtensionSize;
+  DWORD                               cActions;
+  MFINPUTTRUSTAUTHORITY_ACCESS_ACTION rgOutputActions[1];
+} MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS;
+
+typedef struct _MFRR_COMPONENT_HASH_INFO {
+  DWORD ulReason;
+  WCHAR rgHeaderHash[MAX_HASH_LEN];
+  WCHAR rgPublicKeyHash[MAX_HASH_LEN];
+  WCHAR wszName[MAX_PATH];
+} MFRR_COMPONENT_HASH_INFO, *PMFRR_COMPONENT_HASH_INFO;
+
+typedef struct _MFNetCredentialManagerGetParam {
+  HRESULT hrOp;
+  WINBOOL    fAllowLoggedOnUser;
+  WINBOOL    fClearTextPackage;
+  LPCWSTR pszUrl;
+  LPCWSTR pszSite;
+  LPCWSTR pszRealm;
+  LPCWSTR pszPackage;
+  LONG    nRetries;
+} MFNetCredentialManagerGetParam;
+
+#undef  INTERFACE
+#define INTERFACE IMFByteStreamBuffering
+DECLARE_INTERFACE_(IMFByteStreamBuffering,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFByteStreamBuffering methods */
+    STDMETHOD_(HRESULT,EnableBuffering)(THIS_ WINBOOL fEnable) PURE;
+    STDMETHOD_(HRESULT,SetBufferingParams)(THIS_ MFBYTESTREAM_BUFFERING_PARAMS *pParams) PURE;
+    STDMETHOD_(HRESULT,StopBuffering)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFByteStreamBuffering_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFByteStreamBuffering_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFByteStreamBuffering_Release(This) (This)->pVtbl->Release(This)
+#define IMFByteStreamBuffering_EnableBuffering(This,fEnable) (This)->lpVtbl->EnableBuffering(This,fEnable)
+#define IMFByteStreamBuffering_SetBufferingParams(This,pParams) (This)->lpVtbl->SetBufferingParams(This,pParams)
+#define IMFByteStreamBuffering_StopBuffering() (This)->lpVtbl->StopBuffering(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPresentationDescriptor
+DECLARE_INTERFACE_(IMFPresentationDescriptor,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFPresentationDescriptor methods */
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFPresentationDescriptor **ppPresentationDescriptor) PURE;
+    STDMETHOD_(HRESULT,DeselectStream)(THIS_ DWORD dwDescriptorIndex) PURE;
+    STDMETHOD_(HRESULT,GetStreamDescriptorByIndex)(THIS_ DWORD dwIndex,BOOL *pfSelected,IMFStreamDescriptor **ppDescriptor) PURE;
+    STDMETHOD_(HRESULT,GetStreamDescriptorCount)(THIS_ DWORD *pdwDescriptorCount) PURE;
+    STDMETHOD_(HRESULT,SelectStream)(THIS_ DWORD dwDescriptorIndex) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPresentationDescriptor_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPresentationDescriptor_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPresentationDescriptor_Release(This) (This)->pVtbl->Release(This)
+#define IMFPresentationDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFPresentationDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFPresentationDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFPresentationDescriptor_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFPresentationDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFPresentationDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFPresentationDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFPresentationDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFPresentationDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFPresentationDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFPresentationDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFPresentationDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFPresentationDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFPresentationDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFPresentationDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFPresentationDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFPresentationDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFPresentationDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFPresentationDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFPresentationDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFPresentationDescriptor_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFPresentationDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFPresentationDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFPresentationDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFPresentationDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFPresentationDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFPresentationDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFPresentationDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFPresentationDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFPresentationDescriptor_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFPresentationDescriptor_Clone(This,ppPresentationDescriptor) (This)->lpVtbl->Clone(This,ppPresentationDescriptor)
+#define IMFPresentationDescriptor_DeselectStream(This,dwDescriptorIndex) (This)->lpVtbl->DeselectStream(This,dwDescriptorIndex)
+#define IMFPresentationDescriptor_GetStreamDescriptorByIndex(This,dwIndex,pfSelected,ppDescriptor) (This)->lpVtbl->GetStreamDescriptorByIndex(This,dwIndex,pfSelected,ppDescriptor)
+#define IMFPresentationDescriptor_GetStreamDescriptorCount(This,pdwDescriptorCount) (This)->lpVtbl->GetStreamDescriptorCount(This,pdwDescriptorCount)
+#define IMFPresentationDescriptor_SelectStream(This,dwDescriptorIndex) (This)->lpVtbl->SelectStream(This,dwDescriptorIndex)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+#undef  INTERFACE
+#define INTERFACE IMFByteStreamCacheControl
+DECLARE_INTERFACE_(IMFByteStreamCacheControl,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFByteStreamCacheControl methods */
+    STDMETHOD_(HRESULT,StopBackgroundTransfer)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFByteStreamCacheControl_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFByteStreamCacheControl_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFByteStreamCacheControl_Release(This) (This)->pVtbl->Release(This)
+#define IMFByteStreamCacheControl_StopBackgroundTransfer() (This)->lpVtbl->StopBackgroundTransfer(This)
+#endif /*COBJMACROS*/
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#define MF_1_BYTE_ALIGNMENT     0x00000000
+#define MF_2_BYTE_ALIGNMENT     0x00000001
+#define MF_4_BYTE_ALIGNMENT     0x00000003
+#define MF_8_BYTE_ALIGNMENT     0x00000007
+#define MF_16_BYTE_ALIGNMENT    0x0000000F
+#define MF_32_BYTE_ALIGNMENT    0x0000001F
+#define MF_64_BYTE_ALIGNMENT    0x0000003F
+#define MF_128_BYTE_ALIGNMENT   0x0000007F
+#define MF_256_BYTE_ALIGNMENT   0x000000FF
+#define MF_512_BYTE_ALIGNMENT   0x000001FF
+
+#define MEDIASINK_FIXED_STREAMS                 0x00000001
+#define MEDIASINK_CANNOT_MATCH_CLOCK            0x00000002
+#define MEDIASINK_RATELESS                      0x00000004
+#define MEDIASINK_CLOCK_REQUIRED                0x00000008
+#define MEDIASINK_CAN_PREROLL                   0x00000010
+#define MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE   0x00000020
+
+#define MF_RESOLUTION_MEDIASOURCE                                           0x00000001
+#define MF_RESOLUTION_BYTESTREAM                                            0x00000002
+#define MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE 0x00000010
+#define MF_RESOLUTION_KEEP_BYTE_STREAM_ALIVE_ON_FAIL                        0x00000020
+#define MF_RESOLUTION_READ                                                  0x00010000
+#define MF_RESOLUTION_WRITE                                                 0x00020000
+
+#undef  INTERFACE
+#define INTERFACE IMFClockStateSink
+DECLARE_INTERFACE_(IMFClockStateSink,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClockStateSink methods */
+    STDMETHOD_(HRESULT,OnClockPause)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockRestart)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockSetRate)(THIS_ MFTIME hnsSystemTime,float flRate) PURE;
+    STDMETHOD_(HRESULT,OnClockStart)(THIS_ MFTIME hnsSystemTime,LONGLONG llClockStartOffset) PURE;
+    STDMETHOD_(HRESULT,OnClockStop)(THIS_ MFTIME hnssSystemTime) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFClockStateSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFClockStateSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFClockStateSink_Release(This) (This)->pVtbl->Release(This)
+#define IMFClockStateSink_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
+#define IMFClockStateSink_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
+#define IMFClockStateSink_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
+#define IMFClockStateSink_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
+#define IMFClockStateSink_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFClock
+DECLARE_INTERFACE_(IMFClock,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClock methods */
+    STDMETHOD_(HRESULT,GetClockCharacteristics)(THIS_ DWORD *pdwCharacteristics) PURE;
+    STDMETHOD_(HRESULT,GetContinuityKey)(THIS_ DWORD *pdwContinuityKey) PURE;
+    STDMETHOD_(HRESULT,GetCorrelatedTime)(THIS_ DWORD dwReserved,LONGLONG *pllClockTime,MFTIME *phnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,GetProperties)(THIS_ MFCLOCK_PROPERTIES *pClockProperties) PURE;
+    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD dwReserved,MFCLOCK_STATE *peClockState) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFClock_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFClock_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFClock_Release(This) (This)->pVtbl->Release(This)
+#define IMFClock_GetClockCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetClockCharacteristics(This,pdwCharacteristics)
+#define IMFClock_GetContinuityKey(This,pdwContinuityKey) (This)->lpVtbl->GetContinuityKey(This,pdwContinuityKey)
+#define IMFClock_GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime) (This)->lpVtbl->GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime)
+#define IMFClock_GetProperties(This,pClockProperties) (This)->lpVtbl->GetProperties(This,pClockProperties)
+#define IMFClock_GetState(This,dwReserved,peClockState) (This)->lpVtbl->GetState(This,dwReserved,peClockState)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPresentationTimeSource
+DECLARE_INTERFACE_(IMFPresentationTimeSource,IMFClock)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClock methods */
+    STDMETHOD_(HRESULT,GetClockCharacteristics)(THIS_ DWORD *pdwCharacteristics) PURE;
+    STDMETHOD_(HRESULT,GetContinuityKey)(THIS_ DWORD *pdwContinuityKey) PURE;
+    STDMETHOD_(HRESULT,GetCorrelatedTime)(THIS_ DWORD dwReserved,LONGLONG *pllClockTime,MFTIME *phnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,GetProperties)(THIS_ MFCLOCK_PROPERTIES *pClockProperties) PURE;
+    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD dwReserved,MFCLOCK_STATE *peClockState) PURE;
+
+    /* IMFPresentationTimeSource methods */
+    STDMETHOD_(HRESULT,GetUnderlyingClock)(THIS_ IMFClock **ppClock) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPresentationTimeSource_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPresentationTimeSource_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPresentationTimeSource_Release(This) (This)->pVtbl->Release(This)
+#define IMFPresentationTimeSource_GetClockCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetClockCharacteristics(This,pdwCharacteristics)
+#define IMFPresentationTimeSource_GetContinuityKey(This,pdwContinuityKey) (This)->lpVtbl->GetContinuityKey(This,pdwContinuityKey)
+#define IMFPresentationTimeSource_GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime) (This)->lpVtbl->GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime)
+#define IMFPresentationTimeSource_GetProperties(This,pClockProperties) (This)->lpVtbl->GetProperties(This,pClockProperties)
+#define IMFPresentationTimeSource_GetState(This,dwReserved,peClockState) (This)->lpVtbl->GetState(This,dwReserved,peClockState)
+#define IMFPresentationTimeSource_GetUnderlyingClock(This,ppClock) (This)->lpVtbl->GetUnderlyingClock(This,ppClock)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPresentationClock
+DECLARE_INTERFACE_(IMFPresentationClock,IMFClock)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClock methods */
+    STDMETHOD_(HRESULT,GetClockCharacteristics)(THIS_ DWORD *pdwCharacteristics) PURE;
+    STDMETHOD_(HRESULT,GetContinuityKey)(THIS_ DWORD *pdwContinuityKey) PURE;
+    STDMETHOD_(HRESULT,GetCorrelatedTime)(THIS_ DWORD dwReserved,LONGLONG *pllClockTime,MFTIME *phnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,GetProperties)(THIS_ MFCLOCK_PROPERTIES *pClockProperties) PURE;
+    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD dwReserved,MFCLOCK_STATE *peClockState) PURE;
+
+    /* IMFPresentationClock methods */
+    STDMETHOD_(HRESULT,AddClockStateSink)(THIS_ IMFClockStateSink *pStateSink) PURE;
+    STDMETHOD_(HRESULT,GetTime)(THIS_ MFTIME *phnsClockTime) PURE;
+    STDMETHOD_(HRESULT,GetTimeSource)(THIS_ IMFPresentationTimeSource **ppTimeSource) PURE;
+    STDMETHOD_(HRESULT,Pause)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoveClockStateSink)(THIS_ IMFClockStateSink *pStateSink) PURE;
+    STDMETHOD_(HRESULT,SetTimeSource)(THIS_ IMFPresentationTimeSource *pTimeSource) PURE;
+    STDMETHOD_(HRESULT,Start)(THIS_ LONGLONG llClockStartOffset) PURE;
+    STDMETHOD_(HRESULT,Stop)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPresentationClock_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPresentationClock_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPresentationClock_Release(This) (This)->pVtbl->Release(This)
+#define IMFPresentationClock_GetClockCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetClockCharacteristics(This,pdwCharacteristics)
+#define IMFPresentationClock_GetContinuityKey(This,pdwContinuityKey) (This)->lpVtbl->GetContinuityKey(This,pdwContinuityKey)
+#define IMFPresentationClock_GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime) (This)->lpVtbl->GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime)
+#define IMFPresentationClock_GetProperties(This,pClockProperties) (This)->lpVtbl->GetProperties(This,pClockProperties)
+#define IMFPresentationClock_GetState(This,dwReserved,peClockState) (This)->lpVtbl->GetState(This,dwReserved,peClockState)
+#define IMFPresentationClock_AddClockStateSink(This,pStateSink) (This)->lpVtbl->AddClockStateSink(This,pStateSink)
+#define IMFPresentationClock_GetTime(This,phnsClockTime) (This)->lpVtbl->GetTime(This,phnsClockTime)
+#define IMFPresentationClock_GetTimeSource(This,ppTimeSource) (This)->lpVtbl->GetTimeSource(This,ppTimeSource)
+#define IMFPresentationClock_Pause() (This)->lpVtbl->Pause(This)
+#define IMFPresentationClock_RemoveClockStateSink(This,pStateSink) (This)->lpVtbl->RemoveClockStateSink(This,pStateSink)
+#define IMFPresentationClock_SetTimeSource(This,pTimeSource) (This)->lpVtbl->SetTimeSource(This,pTimeSource)
+#define IMFPresentationClock_Start(This,llClockStartOffset) (This)->lpVtbl->Start(This,llClockStartOffset)
+#define IMFPresentationClock_Stop() (This)->lpVtbl->Stop(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFStreamSink
+DECLARE_INTERFACE_(IMFStreamSink,IMFMediaEventGenerator)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaEventGenerator methods */
+    /*[call_as(BeginGetEvent)] */
+    STDMETHOD_(HRESULT,BeginGetEvent)(THIS_ IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,EndGetEvent)(THIS_ IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,GetEvent)(THIS_ DWORD dwFlags,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,QueueEvent)(THIS_ MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) PURE;
+    STDMETHOD_(HRESULT,RemoteEndGetEvent)(THIS_ IUnknown *pResult,DWORD *pcbEvent,BYTE **ppbEvent) PURE;
+
+    /* IMFStreamSink methods */
+    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetIdentifier)(THIS_ DWORD *pdwIdentifier) PURE;
+    STDMETHOD_(HRESULT,GetMediaSink)(THIS_ IMFMediaSink **ppMediaSink) PURE;
+    STDMETHOD_(HRESULT,GetMediaTypeHandler)(THIS_ IMFMediaTypeHandler **ppHandler) PURE;
+    STDMETHOD_(HRESULT,PlaceMarker)(THIS_ MFSTREAMSINK_MARKER_TYPE eMarkerType,const PROPVARIANT *pvarMarkerValue,const PROPVARIANT *pvarContextValue) PURE;
+    STDMETHOD_(HRESULT,ProcessSample)(THIS_ IMFSample *pSample) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFStreamSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFStreamSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFStreamSink_Release(This) (This)->pVtbl->Release(This)
+#define IMFStreamSink_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
+#define IMFStreamSink_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
+#define IMFStreamSink_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
+#define IMFStreamSink_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
+#define IMFStreamSink_RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent) (This)->lpVtbl->RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent)
+#define IMFStreamSink_Flush() (This)->lpVtbl->Flush(This)
+#define IMFStreamSink_GetIdentifier(This,pdwIdentifier) (This)->lpVtbl->GetIdentifier(This,pdwIdentifier)
+#define IMFStreamSink_GetMediaSink(This,ppMediaSink) (This)->lpVtbl->GetMediaSink(This,ppMediaSink)
+#define IMFStreamSink_GetMediaTypeHandler(This,ppHandler) (This)->lpVtbl->GetMediaTypeHandler(This,ppHandler)
+#define IMFStreamSink_PlaceMarker(This,eMarkerType,pvarMarkerValue,pvarContextValue) (This)->lpVtbl->PlaceMarker(This,eMarkerType,pvarMarkerValue,pvarContextValue)
+#define IMFStreamSink_ProcessSample(This,pSample) (This)->lpVtbl->ProcessSample(This,pSample)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaSink
+DECLARE_INTERFACE_(IMFMediaSink,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaSink methods */
+    STDMETHOD_(HRESULT,AddStreamSink)(THIS_ DWORD dwStreamSinkIdentifier,IMFMediaType *pMediaType,IMFStreamSink **ppStreamSink) PURE;
+    STDMETHOD_(HRESULT,GetCharacteristics)(THIS_ DWORD *pdwCharacteristics) PURE;
+    STDMETHOD_(HRESULT,GetPresentationClock)(THIS_ IMFPresentationClock **ppPresentationClock) PURE;
+    STDMETHOD_(HRESULT,GetStreamSinkById)(THIS_ DWORD dwStreamSinkIdentifier,IMFStreamSink **ppStreamSink) PURE;
+    STDMETHOD_(HRESULT,GetStreamSinkByIndex)(THIS_ DWORD dwIndex,IMFStreamSink **ppStreamSink) PURE;
+    STDMETHOD_(HRESULT,GetStreamSinkCount)(THIS_ DWORD *pcStreamSinkCount) PURE;
+    STDMETHOD_(HRESULT,RemoveStreamSink)(THIS_ DWORD dwStreamSinkIdentifier) PURE;
+    STDMETHOD_(HRESULT,SetPresentationClock)(THIS_ IMFPresentationClock *pPresentationClock) PURE;
+    STDMETHOD_(HRESULT,Shutdown)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaSink_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaSink_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaSink_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaSink_AddStreamSink(This,dwStreamSinkIdentifier,pMediaType,ppStreamSink) (This)->lpVtbl->AddStreamSink(This,dwStreamSinkIdentifier,pMediaType,ppStreamSink)
+#define IMFMediaSink_GetCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetCharacteristics(This,pdwCharacteristics)
+#define IMFMediaSink_GetPresentationClock(This,ppPresentationClock) (This)->lpVtbl->GetPresentationClock(This,ppPresentationClock)
+#define IMFMediaSink_GetStreamSinkById(This,dwStreamSinkIdentifier,ppStreamSink) (This)->lpVtbl->GetStreamSinkById(This,dwStreamSinkIdentifier,ppStreamSink)
+#define IMFMediaSink_GetStreamSinkByIndex(This,dwIndex,ppStreamSink) (This)->lpVtbl->GetStreamSinkByIndex(This,dwIndex,ppStreamSink)
+#define IMFMediaSink_GetStreamSinkCount(This,pcStreamSinkCount) (This)->lpVtbl->GetStreamSinkCount(This,pcStreamSinkCount)
+#define IMFMediaSink_RemoveStreamSink(This,dwStreamSinkIdentifier) (This)->lpVtbl->RemoveStreamSink(This,dwStreamSinkIdentifier)
+#define IMFMediaSink_SetPresentationClock(This,pPresentationClock) (This)->lpVtbl->SetPresentationClock(This,pPresentationClock)
+#define IMFMediaSink_Shutdown() (This)->lpVtbl->Shutdown(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSchemeHandler
+DECLARE_INTERFACE_(IMFSchemeHandler,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFSchemeHandler methods */
+    STDMETHOD_(HRESULT,BeginCreateObject)(THIS_ LPCWSTR pwszURL,DWORD dwFlags,IPropertyStore *pProps,IUnknown **ppIUnknownCancelCookie,IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,CancelObjectCreation)(THIS_ IUnknown *pIUnknownCancelCookie) PURE;
+    STDMETHOD_(HRESULT,EndCreateObject)(THIS_ IMFAsyncResult *pResult,MF_OBJECT_TYPE *pObjectType,IUnknown **ppObject) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSchemeHandler_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSchemeHandler_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSchemeHandler_Release(This) (This)->pVtbl->Release(This)
+#define IMFSchemeHandler_BeginCreateObject(This,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState) (This)->lpVtbl->BeginCreateObject(This,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState)
+#define IMFSchemeHandler_CancelObjectCreation(This,pIUnknownCancelCookie) (This)->lpVtbl->CancelObjectCreation(This,pIUnknownCancelCookie)
+#define IMFSchemeHandler_EndCreateObject(This,pResult,pObjectType,ppObject) (This)->lpVtbl->EndCreateObject(This,pResult,pObjectType,ppObject)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaSource
+DECLARE_INTERFACE_(IMFMediaSource,IMFMediaEventGenerator)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaSource methods */
+    STDMETHOD_(HRESULT,CreatePresentationDescriptor)(THIS_ IMFPresentationDescriptor **ppPresentationDescriptor) PURE;
+    STDMETHOD_(HRESULT,GetCharacteristics)(THIS_ DWORD *pdwCharacteristics) PURE;
+    STDMETHOD_(HRESULT,Pause)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoteCreatePresentationDescriptor)(THIS_ DWORD *pcbPD,BYTE **pbPD,IMFPresentationDescriptor **ppRemotePD) PURE;
+    STDMETHOD_(HRESULT,Shutdown)(THIS) PURE;
+    //[call_as(CreatePresentationDescriptor)]
+    STDMETHOD_(HRESULT,Start)(THIS_ IMFPresentationDescriptor *pPresentationDescriptor,const GUID *pguidTimeFormat,const PROPVARIANT *pvarStartPosition) PURE;
+    STDMETHOD_(HRESULT,Stop)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaSource_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaSource_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaSource_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaSource_CreatePresentationDescriptor(This,ppPresentationDescriptor) (This)->lpVtbl->CreatePresentationDescriptor(This,ppPresentationDescriptor)
+#define IMFMediaSource_GetCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetCharacteristics(This,pdwCharacteristics)
+#define IMFMediaSource_Pause() (This)->lpVtbl->Pause(This)
+#define IMFMediaSource_RemoteCreatePresentationDescriptor(This,pcbPD,pbPD,ppRemotePD) (This)->lpVtbl->RemoteCreatePresentationDescriptor(This,pcbPD,pbPD,ppRemotePD)
+#define IMFMediaSource_Shutdown() (This)->lpVtbl->Shutdown(This)
+#define IMFMediaSource_Start(This,pPresentationDescriptor,pguidTimeFormat,pvarStartPosition) (This)->lpVtbl->Start(This,pPresentationDescriptor,pguidTimeFormat,pvarStartPosition)
+#define IMFMediaSource_Stop() (This)->lpVtbl->Stop(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPMPServer
+DECLARE_INTERFACE_(IMFPMPServer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFPMPServer methods */
+    STDMETHOD_(HRESULT,CreateObjectByCLSID)(THIS_ REFCLSID clsid,REFIID riid,void **ppObject) PURE;
+    STDMETHOD_(HRESULT,LockProcess)(THIS) PURE;
+    STDMETHOD_(HRESULT,UnlockProcess)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPMPServer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPMPServer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPMPServer_Release(This) (This)->pVtbl->Release(This)
+#define IMFPMPServer_CreateObjectByCLSID(This,clsid,riid,ppObject) (This)->lpVtbl->CreateObjectByCLSID(This,clsid,riid,ppObject)
+#define IMFPMPServer_LockProcess() (This)->lpVtbl->LockProcess(This)
+#define IMFPMPServer_UnlockProcess() (This)->lpVtbl->UnlockProcess(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFTopologyNode
+DECLARE_INTERFACE_(IMFTopologyNode,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFTopologyNode methods */
+    STDMETHOD_(HRESULT,CloneFrom)(THIS_ IMFTopologyNode *pNode) PURE;
+    STDMETHOD_(HRESULT,ConnectOutput)(THIS_ DWORD dwOutputIndex,IMFTopologyNode *pDownstreamNode,DWORD dwInputIndexOnDownstreamNode) PURE;
+    STDMETHOD_(HRESULT,DisconnectOutput)(THIS_ DWORD dwOutputIndex) PURE;
+    STDMETHOD_(HRESULT,GetInput)(THIS_ DWORD dwInputIndex,IMFTopologyNode **ppUpstreamNode,DWORD *pdwOutputIndexOnUpstreamNode) PURE;
+    STDMETHOD_(HRESULT,GetInputCount)(THIS_ DWORD *pcInputs) PURE;
+    STDMETHOD_(HRESULT,GetInputPrefType)(THIS_ DWORD dwInputIndex,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetNodeType)(THIS_ MF_TOPOLOGY_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetObject)(THIS_ IUnknown **ppObject) PURE;
+    STDMETHOD_(HRESULT,GetOutput)(THIS_ DWORD dwOutputIndex,IMFTopologyNode **ppDownstreamNode,DWORD *pdwInputIndexOnDownstreamNode) PURE;
+    STDMETHOD_(HRESULT,GetOutputCount)(THIS_ DWORD *pcOutputs) PURE;
+    STDMETHOD_(HRESULT,GetOutputPrefType)(THIS_ DWORD dwOutputIndex,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetTopoNodeID)(THIS_ TOPOID *pID) PURE;
+    /* [call_as(GetInputPrefType)] */
+    STDMETHOD_(HRESULT,RemoteGetInputPrefType)(THIS_ DWORD dwInputIndex,DWORD *pcbData,BYTE **ppbData) PURE;
+    /* [call_as(GetOutputPrefType)] */
+    STDMETHOD_(HRESULT,RemoteGetOutputPrefType)(THIS_ DWORD dwOutputIndex,DWORD *pcbData,BYTE **ppbData) PURE;
+    STDMETHOD_(HRESULT,SetInputPrefType)(THIS_ DWORD dwInputIndex,IMFMediaType *pType) PURE;
+    STDMETHOD_(HRESULT,SetObject)(THIS_ IUnknown *pObject) PURE;
+    STDMETHOD_(HRESULT,SetOutputPrefType)(THIS_ DWORD dwOutputIndex,IMFMediaType *pType) PURE;
+    STDMETHOD_(HRESULT,SetTopoNodeID)(THIS_ TOPOID llTopoID) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFTopologyNode_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTopologyNode_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTopologyNode_Release(This) (This)->pVtbl->Release(This)
+#define IMFTopologyNode_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFTopologyNode_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFTopologyNode_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFTopologyNode_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFTopologyNode_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFTopologyNode_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFTopologyNode_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFTopologyNode_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFTopologyNode_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFTopologyNode_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFTopologyNode_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFTopologyNode_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFTopologyNode_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFTopologyNode_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFTopologyNode_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFTopologyNode_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFTopologyNode_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFTopologyNode_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFTopologyNode_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFTopologyNode_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFTopologyNode_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFTopologyNode_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFTopologyNode_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFTopologyNode_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFTopologyNode_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFTopologyNode_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFTopologyNode_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFTopologyNode_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFTopologyNode_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFTopologyNode_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFTopologyNode_CloneFrom(This,pNode) (This)->lpVtbl->CloneFrom(This,pNode)
+#define IMFTopologyNode_ConnectOutput(This,dwOutputIndex,pDownstreamNode,dwInputIndexOnDownstreamNode) (This)->lpVtbl->ConnectOutput(This,dwOutputIndex,pDownstreamNode,dwInputIndexOnDownstreamNode)
+#define IMFTopologyNode_DisconnectOutput(This,dwOutputIndex) (This)->lpVtbl->DisconnectOutput(This,dwOutputIndex)
+#define IMFTopologyNode_GetInput(This,dwInputIndex,ppUpstreamNode,pdwOutputIndexOnUpstreamNode) (This)->lpVtbl->GetInput(This,dwInputIndex,ppUpstreamNode,pdwOutputIndexOnUpstreamNode)
+#define IMFTopologyNode_GetInputCount(This,pcInputs) (This)->lpVtbl->GetInputCount(This,pcInputs)
+#define IMFTopologyNode_GetInputPrefType(This,dwInputIndex,ppType) (This)->lpVtbl->GetInputPrefType(This,dwInputIndex,ppType)
+#define IMFTopologyNode_GetNodeType(This,pType) (This)->lpVtbl->GetNodeType(This,pType)
+#define IMFTopologyNode_GetObject(This,ppObject) (This)->lpVtbl->GetObject(This,ppObject)
+#define IMFTopologyNode_GetOutput(This,dwOutputIndex,ppDownstreamNode,pdwInputIndexOnDownstreamNode) (This)->lpVtbl->GetOutput(This,dwOutputIndex,ppDownstreamNode,pdwInputIndexOnDownstreamNode)
+#define IMFTopologyNode_GetOutputCount(This,pcOutputs) (This)->lpVtbl->GetOutputCount(This,pcOutputs)
+#define IMFTopologyNode_GetOutputPrefType(This,dwOutputIndex,ppType) (This)->lpVtbl->GetOutputPrefType(This,dwOutputIndex,ppType)
+#define IMFTopologyNode_GetTopoNodeID(This,pID) (This)->lpVtbl->GetTopoNodeID(This,pID)
+#define IMFTopologyNode_RemoteGetInputPrefType(This,dwInputIndex,pcbData,ppbData) (This)->lpVtbl->RemoteGetInputPrefType(This,dwInputIndex,pcbData,ppbData)
+#define IMFTopologyNode_RemoteGetOutputPrefType(This,dwOutputIndex,pcbData,ppbData) (This)->lpVtbl->RemoteGetOutputPrefType(This,dwOutputIndex,pcbData,ppbData)
+#define IMFTopologyNode_SetInputPrefType(This,dwInputIndex,pType) (This)->lpVtbl->SetInputPrefType(This,dwInputIndex,pType)
+#define IMFTopologyNode_SetObject(This,pObject) (This)->lpVtbl->SetObject(This,pObject)
+#define IMFTopologyNode_SetOutputPrefType(This,dwOutputIndex,pType) (This)->lpVtbl->SetOutputPrefType(This,dwOutputIndex,pType)
+#define IMFTopologyNode_SetTopoNodeID(This,llTopoID) (This)->lpVtbl->SetTopoNodeID(This,llTopoID)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFTopology
+DECLARE_INTERFACE_(IMFTopology,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFTopology methods */
+    STDMETHOD_(HRESULT,ActivateObject)(THIS_ REFIID riid,void **ppv) PURE;
+    STDMETHOD_(HRESULT,DetachObject)(THIS) PURE;
+    STDMETHOD_(HRESULT,ShutdownObject)(THIS) PURE;
+    STDMETHOD_(HRESULT,AddNode)(THIS_ IMFTopologyNode *pNode) PURE;
+    STDMETHOD_(HRESULT,Clear)(THIS) PURE;
+    STDMETHOD_(HRESULT,CloneFrom)(THIS_ IMFTopology *pTopology) PURE;
+    STDMETHOD_(HRESULT,GetNode)(THIS_ WORD wIndex,IMFTopologyNode **ppNode) PURE;
+    STDMETHOD_(HRESULT,GetNodeByID)(THIS_ TOPOID qwTopoNodeID,IMFTopologyNode **ppNode) PURE;
+    STDMETHOD_(HRESULT,GetNodeCount)(THIS_ WORD *pwNodes) PURE;
+    STDMETHOD_(HRESULT,GetOutputNodeCollection)(THIS_ IMFCollection **ppCollection) PURE;
+    STDMETHOD_(HRESULT,GetSourceNodeCollection)(THIS_ IMFCollection **ppCollection) PURE;
+    STDMETHOD_(HRESULT,GetTopologyID)(THIS_ TOPOID *pID) PURE;
+    STDMETHOD_(HRESULT,RemoveNode)(THIS_ IMFTopologyNode *pNode) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFTopology_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTopology_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTopology_Release(This) (This)->pVtbl->Release(This)
+#define IMFTopology_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFTopology_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFTopology_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFTopology_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFTopology_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFTopology_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFTopology_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFTopology_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFTopology_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFTopology_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFTopology_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFTopology_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFTopology_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFTopology_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFTopology_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFTopology_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFTopology_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFTopology_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFTopology_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFTopology_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFTopology_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFTopology_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFTopology_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFTopology_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFTopology_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFTopology_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFTopology_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFTopology_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFTopology_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFTopology_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFTopology_ActivateObject(This,riid,ppv) (This)->lpVtbl->ActivateObject(This,riid,ppv)
+#define IMFTopology_DetachObject() (This)->lpVtbl->DetachObject(This)
+#define IMFTopology_ShutdownObject() (This)->lpVtbl->ShutdownObject(This)
+#define IMFTopology_AddNode(This,pNode) (This)->lpVtbl->AddNode(This,pNode)
+#define IMFTopology_Clear() (This)->lpVtbl->Clear(This)
+#define IMFTopology_CloneFrom(This,pTopology) (This)->lpVtbl->CloneFrom(This,pTopology)
+#define IMFTopology_GetNode(This,wIndex,ppNode) (This)->lpVtbl->GetNode(This,wIndex,ppNode)
+#define IMFTopology_GetNodeByID(This,qwTopoNodeID,ppNode) (This)->lpVtbl->GetNodeByID(This,qwTopoNodeID,ppNode)
+#define IMFTopology_GetNodeCount(This,pwNodes) (This)->lpVtbl->GetNodeCount(This,pwNodes)
+#define IMFTopology_GetOutputNodeCollection(This,ppCollection) (This)->lpVtbl->GetOutputNodeCollection(This,ppCollection)
+#define IMFTopology_GetSourceNodeCollection(This,ppCollection) (This)->lpVtbl->GetSourceNodeCollection(This,ppCollection)
+#define IMFTopology_GetTopologyID(This,pID) (This)->lpVtbl->GetTopologyID(This,pID)
+#define IMFTopology_RemoveNode(This,pNode) (This)->lpVtbl->RemoveNode(This,pNode)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFTopoLoader
+DECLARE_INTERFACE_(IMFTopoLoader,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFTopoLoader methods */
+    STDMETHOD_(HRESULT,Load)(THIS_ IMFTopology *pInputTopo,IMFTopology **ppOutputTopo,IMFTopology *pCurrentTopo) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFTopoLoader_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTopoLoader_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTopoLoader_Release(This) (This)->pVtbl->Release(This)
+#define IMFTopoLoader_Load(This,pInputTopo,ppOutputTopo,pCurrentTopo) (This)->lpVtbl->Load(This,pInputTopo,ppOutputTopo,pCurrentTopo)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaSession
+DECLARE_INTERFACE_(IMFMediaSession,IMFMediaEventGenerator)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaEventGenerator methods */
+    /*[call_as(BeginGetEvent)] */
+    STDMETHOD_(HRESULT,BeginGetEvent)(THIS_ IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,EndGetEvent)(THIS_ IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,GetEvent)(THIS_ DWORD dwFlags,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,QueueEvent)(THIS_ MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) PURE;
+    STDMETHOD_(HRESULT,RemoteEndGetEvent)(THIS_ IUnknown *pResult,DWORD *pcbEvent,BYTE **ppbEvent) PURE;
+
+    /* IMFMediaSession methods */
+    STDMETHOD_(HRESULT,ClearTopologies)(THIS) PURE;
+    STDMETHOD_(HRESULT,Close)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetClock)(THIS_ IMFClock **ppClock) PURE;
+    STDMETHOD_(HRESULT,GetFullTopology)(THIS_ DWORD dwGetFullTopologyFlags,TOPOID TopoId,IMFTopology **ppFullTopo) PURE;
+    STDMETHOD_(HRESULT,GetSessionCapabilities)(THIS_ DWORD *pdwCaps) PURE;
+    STDMETHOD_(HRESULT,Pause)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetTopology)(THIS_ DWORD dwSetTopologyFlags,IMFTopology *pTopology) PURE;
+    STDMETHOD_(HRESULT,Shutdown)(THIS) PURE;
+    STDMETHOD_(HRESULT,Start)(THIS_ const GUID *pguidTimeFormat,const PROPVARIANT *pvarStartPosition) PURE;
+    STDMETHOD_(HRESULT,Stop)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaSession_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaSession_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaSession_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaSession_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
+#define IMFMediaSession_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
+#define IMFMediaSession_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
+#define IMFMediaSession_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
+#define IMFMediaSession_RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent) (This)->lpVtbl->RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent)
+#define IMFMediaSession_ClearTopologies() (This)->lpVtbl->ClearTopologies(This)
+#define IMFMediaSession_Close() (This)->lpVtbl->Close(This)
+#define IMFMediaSession_GetClock(This,ppClock) (This)->lpVtbl->GetClock(This,ppClock)
+#define IMFMediaSession_GetFullTopology(This,dwGetFullTopologyFlags,TopoId,ppFullTopo) (This)->lpVtbl->GetFullTopology(This,dwGetFullTopologyFlags,TopoId,ppFullTopo)
+#define IMFMediaSession_GetSessionCapabilities(This,pdwCaps) (This)->lpVtbl->GetSessionCapabilities(This,pdwCaps)
+#define IMFMediaSession_Pause() (This)->lpVtbl->Pause(This)
+#define IMFMediaSession_SetTopology(This,dwSetTopologyFlags,pTopology) (This)->lpVtbl->SetTopology(This,dwSetTopologyFlags,pTopology)
+#define IMFMediaSession_Shutdown() (This)->lpVtbl->Shutdown(This)
+#define IMFMediaSession_Start(This,pguidTimeFormat,pvarStartPosition) (This)->lpVtbl->Start(This,pguidTimeFormat,pvarStartPosition)
+#define IMFMediaSession_Stop() (This)->lpVtbl->Stop(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFActivate
+DECLARE_INTERFACE_(IMFActivate,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFActivate methods */
+    STDMETHOD_(HRESULT,ActivateObject)(THIS_ REFIID riid,void **ppv) PURE;
+    STDMETHOD_(HRESULT,DetachObject)(THIS) PURE;
+    STDMETHOD_(HRESULT,ShutdownObject)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFActivate_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFActivate_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFActivate_Release(This) (This)->pVtbl->Release(This)
+#define IMFActivate_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFActivate_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFActivate_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFActivate_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFActivate_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFActivate_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFActivate_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFActivate_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFActivate_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFActivate_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFActivate_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFActivate_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFActivate_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFActivate_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFActivate_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFActivate_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFActivate_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFActivate_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFActivate_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFActivate_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFActivate_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFActivate_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFActivate_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFActivate_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFActivate_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFActivate_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFActivate_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFActivate_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFActivate_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFActivate_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFActivate_ActivateObject(This,riid,ppv) (This)->lpVtbl->ActivateObject(This,riid,ppv)
+#define IMFActivate_DetachObject() (This)->lpVtbl->DetachObject(This)
+#define IMFActivate_ShutdownObject() (This)->lpVtbl->ShutdownObject(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFStreamDescriptor
+DECLARE_INTERFACE_(IMFStreamDescriptor,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFStreamDescriptor methods */
+    STDMETHOD_(HRESULT,GetMediaTypeHandler)(THIS_ IMFMediaTypeHandler **ppMediaTypeHandler) PURE;
+    STDMETHOD_(HRESULT,GetStreamIdentifier)(THIS_ DWORD *pdwStreamIdentifier) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFStreamDescriptor_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFStreamDescriptor_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFStreamDescriptor_Release(This) (This)->pVtbl->Release(This)
+#define IMFStreamDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFStreamDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFStreamDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFStreamDescriptor_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFStreamDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFStreamDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFStreamDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFStreamDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFStreamDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFStreamDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFStreamDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFStreamDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFStreamDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFStreamDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFStreamDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFStreamDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFStreamDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFStreamDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFStreamDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFStreamDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFStreamDescriptor_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFStreamDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFStreamDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFStreamDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFStreamDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFStreamDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFStreamDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFStreamDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFStreamDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFStreamDescriptor_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFStreamDescriptor_GetMediaTypeHandler(This,ppMediaTypeHandler) (This)->lpVtbl->GetMediaTypeHandler(This,ppMediaTypeHandler)
+#define IMFStreamDescriptor_GetStreamIdentifier(This,pdwStreamIdentifier) (This)->lpVtbl->GetStreamIdentifier(This,pdwStreamIdentifier)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFRemoteDesktopPlugin
+DECLARE_INTERFACE_(IMFRemoteDesktopPlugin,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFRemoteDesktopPlugin methods */
+    STDMETHOD_(HRESULT,UpdateTopology)(THIS_ IMFTopology *pTopology) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFRemoteDesktopPlugin_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFRemoteDesktopPlugin_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFRemoteDesktopPlugin_Release(This) (This)->pVtbl->Release(This)
+#define IMFRemoteDesktopPlugin_UpdateTopology(This,pTopology) (This)->lpVtbl->UpdateTopology(This,pTopology)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFNetProxyLocator
+DECLARE_INTERFACE_(IMFNetProxyLocator,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFNetProxyLocator methods */
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFNetProxyLocator **ppProxyLocator) PURE;
+    STDMETHOD_(HRESULT,FindFirstProxy)(THIS_ LPCWSTR pszHost,LPCWSTR pszUrl,WINBOOL fReserved) PURE;
+    STDMETHOD_(HRESULT,FindNextProxy)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetCurrentProxy)(THIS_ LPWSTR pszStr,DWORD *pcchStr) PURE;
+    STDMETHOD_(HRESULT,RegisterProxyResult)(THIS_ HRESULT hrOp) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFNetProxyLocator_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFNetProxyLocator_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFNetProxyLocator_Release(This) (This)->pVtbl->Release(This)
+#define IMFNetProxyLocator_Clone(This,ppProxyLocator) (This)->lpVtbl->Clone(This,ppProxyLocator)
+#define IMFNetProxyLocator_FindFirstProxy(This,pszHost,pszUrl,fReserved) (This)->lpVtbl->FindFirstProxy(This,pszHost,pszUrl,fReserved)
+#define IMFNetProxyLocator_FindNextProxy() (This)->lpVtbl->FindNextProxy(This)
+#define IMFNetProxyLocator_GetCurrentProxy(This,pszStr,pcchStr) (This)->lpVtbl->GetCurrentProxy(This,pszStr,pcchStr)
+#define IMFNetProxyLocator_RegisterProxyResult(This,hrOp) (This)->lpVtbl->RegisterProxyResult(This,hrOp)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaTypeHandler
+DECLARE_INTERFACE_(IMFMediaTypeHandler,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaTypeHandler methods */
+    STDMETHOD_(HRESULT,GetCurrentMediaType)(THIS_ IMFMediaType **ppMediaType) PURE;
+    STDMETHOD_(HRESULT,GetMajorType)(THIS_ GUID *pguidMajorType) PURE;
+    STDMETHOD_(HRESULT,GetMediaTypeByIndex)(THIS_ DWORD dwIndex,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetMediaTypeCount)(THIS_ DWORD *pdwTypeCount) PURE;
+    STDMETHOD_(HRESULT,IsMediaTypeSupported)(THIS_ IMFMediaType *pMediaType,IMFMediaType **ppMediaType) PURE;
+    /* [call_as(GetCurrentMediaType)] */
+    STDMETHOD_(HRESULT,RemoteGetCurrentMediaType)(THIS_ BYTE **ppbData,DWORD *pcbData) PURE;
+    STDMETHOD_(HRESULT,SetCurrentMediaType)(THIS_ IMFMediaType *pMediaType) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaTypeHandler_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaTypeHandler_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaTypeHandler_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaTypeHandler_GetCurrentMediaType(This,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,ppMediaType)
+#define IMFMediaTypeHandler_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
+#define IMFMediaTypeHandler_GetMediaTypeByIndex(This,dwIndex,ppType) (This)->lpVtbl->GetMediaTypeByIndex(This,dwIndex,ppType)
+#define IMFMediaTypeHandler_GetMediaTypeCount(This,pdwTypeCount) (This)->lpVtbl->GetMediaTypeCount(This,pdwTypeCount)
+#define IMFMediaTypeHandler_IsMediaTypeSupported(This,pMediaType,ppMediaType) (This)->lpVtbl->IsMediaTypeSupported(This,pMediaType,ppMediaType)
+#define IMFMediaTypeHandler_RemoteGetCurrentMediaType(This,ppbData,pcbData) (This)->lpVtbl->RemoteGetCurrentMediaType(This,ppbData,pcbData)
+#define IMFMediaTypeHandler_SetCurrentMediaType(This,pMediaType) (This)->lpVtbl->SetCurrentMediaType(This,pMediaType)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSampleGrabberSinkCallback
+DECLARE_INTERFACE_(IMFSampleGrabberSinkCallback,IMFClockStateSink)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFClockStateSink methods */
+    STDMETHOD_(HRESULT,OnClockPause)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockRestart)(THIS_ MFTIME hnsSystemTime) PURE;
+    STDMETHOD_(HRESULT,OnClockSetRate)(THIS_ MFTIME hnsSystemTime,float flRate) PURE;
+    STDMETHOD_(HRESULT,OnClockStart)(THIS_ MFTIME hnsSystemTime,LONGLONG llClockStartOffset) PURE;
+    STDMETHOD_(HRESULT,OnClockStop)(THIS_ MFTIME hnssSystemTime) PURE;
+
+    /* IMFSampleGrabberSinkCallback methods */
+    STDMETHOD_(HRESULT,OnProcessSample)(THIS_ REFGUID guidMajorMediaType,DWORD dwSampleFlags,LONGLONG llSampleTime,LONGLONG llSampleDuration,const BYTE *pSampleBuffer,DWORD dwSampleSize) PURE;
+    STDMETHOD_(HRESULT,OnSetPresentationClock)(THIS_ IMFPresentationClock *pPresentationClock) PURE;
+    STDMETHOD_(HRESULT,OnShutdown)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSampleGrabberSinkCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSampleGrabberSinkCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSampleGrabberSinkCallback_Release(This) (This)->pVtbl->Release(This)
+#define IMFSampleGrabberSinkCallback_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
+#define IMFSampleGrabberSinkCallback_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
+#define IMFSampleGrabberSinkCallback_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
+#define IMFSampleGrabberSinkCallback_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
+#define IMFSampleGrabberSinkCallback_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
+#define IMFSampleGrabberSinkCallback_OnProcessSample(This,guidMajorMediaType,dwSampleFlags,llSampleTime,llSampleDuration,pSampleBuffer,dwSampleSize) (This)->lpVtbl->OnProcessSample(This,guidMajorMediaType,dwSampleFlags,llSampleTime,llSampleDuration,pSampleBuffer,dwSampleSize)
+#define IMFSampleGrabberSinkCallback_OnSetPresentationClock(This,pPresentationClock) (This)->lpVtbl->OnSetPresentationClock(This,pPresentationClock)
+#define IMFSampleGrabberSinkCallback_OnShutdown() (This)->lpVtbl->OnShutdown(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSequencerSource
+DECLARE_INTERFACE_(IMFSequencerSource,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFSequencerSource methods */
+    STDMETHOD_(HRESULT,AppendTopology)(THIS_ IMFTopology *pTopology,DWORD dwFlags,MFSequencerElementId *pdwId) PURE;
+    STDMETHOD_(HRESULT,DeleteTopology)(THIS_ MFSequencerElementId dwId) PURE;
+    STDMETHOD_(HRESULT,GetPresentationContext)(THIS_ IMFPresentationDescriptor *pPD,MFSequencerElementId *pId,IMFTopology **ppTopology) PURE;
+    STDMETHOD_(HRESULT,UpdateTopology)(THIS_ MFSequencerElementId dwId,IMFTopology *pTopology) PURE;
+    STDMETHOD_(HRESULT,UpdateTopologyFlags)(THIS_ MFSequencerElementId dwId,DWORD dwFlags) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSequencerSource_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSequencerSource_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSequencerSource_Release(This) (This)->pVtbl->Release(This)
+#define IMFSequencerSource_AppendTopology(This,pTopology,dwFlags,pdwId) (This)->lpVtbl->AppendTopology(This,pTopology,dwFlags,pdwId)
+#define IMFSequencerSource_DeleteTopology(This,dwId) (This)->lpVtbl->DeleteTopology(This,dwId)
+#define IMFSequencerSource_GetPresentationContext(This,pPD,pId,ppTopology) (This)->lpVtbl->GetPresentationContext(This,pPD,pId,ppTopology)
+#define IMFSequencerSource_UpdateTopology(This,dwId,pTopology) (This)->lpVtbl->UpdateTopology(This,dwId,pTopology)
+#define IMFSequencerSource_UpdateTopologyFlags(This,dwId,dwFlags) (This)->lpVtbl->UpdateTopologyFlags(This,dwId,dwFlags)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSourceResolver
+DECLARE_INTERFACE_(IMFSourceResolver,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFSourceResolver methods */
+    STDMETHOD_(HRESULT,BeginCreateObjectFromByteStream)(THIS_ IMFByteStream *pByteStream,LPCWSTR pwszURL,DWORD dwFlags,IPropertyStore *pProps,IUnknown **ppIUnknownCancelCookie,IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,BeginCreateObjectFromURL)(THIS_ LPCWSTR pwszURL,DWORD dwFlags,IPropertyStore *pProps,IUnknown **ppIUnknownCancelCookie,IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,CancelObjectCreation)(THIS_ IUnknown **ppIUnknownCancelCookie) PURE;
+    STDMETHOD_(HRESULT,CreateObjectFromByteStream)(THIS_ IMFByteStream *pByteStream,LPCWSTR pwszURL,DWORD dwFlags,IPropertyStore *pProps,MF_OBJECT_TYPE *pObjectType,IUnknown **ppObject) PURE;
+    STDMETHOD_(HRESULT,CreateObjectFromURL)(THIS_ LPCWSTR pwszURL,DWORD dwFlags,IPropertyStore *pProps,MF_OBJECT_TYPE *pObjectType,IUnknown **ppObject) PURE;
+    STDMETHOD_(HRESULT,EndCreateObjectFromByteStream)(THIS_ IMFAsyncResult *pResult,MF_OBJECT_TYPE *pObjectType,IUnknown **ppObject) PURE;
+    STDMETHOD_(HRESULT,EndCreateObjectFromURL)(THIS_ IMFAsyncResult *pResult,MF_OBJECT_TYPE *pObjectType,IUnknown **ppObject) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSourceResolver_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceResolver_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSourceResolver_Release(This) (This)->pVtbl->Release(This)
+#define IMFSourceResolver_BeginCreateObjectFromByteStream(This,pByteStream,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState) (This)->lpVtbl->BeginCreateObjectFromByteStream(This,pByteStream,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState)
+#define IMFSourceResolver_BeginCreateObjectFromURL(This,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState) (This)->lpVtbl->BeginCreateObjectFromURL(This,pwszURL,dwFlags,pProps,ppIUnknownCancelCookie,pCallback,punkState)
+#define IMFSourceResolver_CancelObjectCreation(This,ppIUnknownCancelCookie) (This)->lpVtbl->CancelObjectCreation(This,ppIUnknownCancelCookie)
+#define IMFSourceResolver_CreateObjectFromByteStream(This,pByteStream,pwszURL,dwFlags,pProps,pObjectType,ppObject) (This)->lpVtbl->CreateObjectFromByteStream(This,pByteStream,pwszURL,dwFlags,pProps,pObjectType,ppObject)
+#define IMFSourceResolver_CreateObjectFromURL(This,pwszURL,dwFlags,pProps,pObjectType,ppObject) (This)->lpVtbl->CreateObjectFromURL(This,pwszURL,dwFlags,pProps,pObjectType,ppObject)
+#define IMFSourceResolver_EndCreateObjectFromByteStream(This,pResult,pObjectType,ppObject) (This)->lpVtbl->EndCreateObjectFromByteStream(This,pResult,pObjectType,ppObject)
+#define IMFSourceResolver_EndCreateObjectFromURL(This,pResult,pObjectType,ppObject) (This)->lpVtbl->EndCreateObjectFromURL(This,pResult,pObjectType,ppObject)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFQualityManager
+DECLARE_INTERFACE_(IMFQualityManager,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFQualityManager methods */
+    STDMETHOD_(HRESULT,NotifyPresentationClock)(THIS_ IMFPresentationClock *pClock) PURE;
+    STDMETHOD_(HRESULT,NotifyProcessInput)(THIS_ IMFTopologyNode *pNode,long lInputIndex,IMFSample *pSample) PURE;
+    STDMETHOD_(HRESULT,NotifyProcessOutput)(THIS_ IMFTopologyNode *pNode,long lOutputIndex,IMFSample *pSample) PURE;
+    STDMETHOD_(HRESULT,NotifyQualityEvent)(THIS_ IUnknown *pObject,IMFMediaEvent *pEvent) PURE;
+    STDMETHOD_(HRESULT,NotifyTopology)(THIS_ IMFTopology *pTopology) PURE;
+    STDMETHOD_(HRESULT,Shutdown)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFQualityManager_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFQualityManager_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFQualityManager_Release(This) (This)->pVtbl->Release(This)
+#define IMFQualityManager_NotifyPresentationClock(This,pClock) (This)->lpVtbl->NotifyPresentationClock(This,pClock)
+#define IMFQualityManager_NotifyProcessInput(This,pNode,lInputIndex,pSample) (This)->lpVtbl->NotifyProcessInput(This,pNode,lInputIndex,pSample)
+#define IMFQualityManager_NotifyProcessOutput(This,pNode,lOutputIndex,pSample) (This)->lpVtbl->NotifyProcessOutput(This,pNode,lOutputIndex,pSample)
+#define IMFQualityManager_NotifyQualityEvent(This,pObject,pEvent) (This)->lpVtbl->NotifyQualityEvent(This,pObject,pEvent)
+#define IMFQualityManager_NotifyTopology(This,pTopology) (This)->lpVtbl->NotifyTopology(This,pTopology)
+#define IMFQualityManager_Shutdown() (This)->lpVtbl->Shutdown(This)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+#undef  INTERFACE
+#define INTERFACE IMFTranscodeProfile
+DECLARE_INTERFACE_(IMFTranscodeProfile,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFTranscodeProfile methods */
+    STDMETHOD_(HRESULT,GetAudioAttributes)(THIS_ IMFAttributes **ppAttrs) PURE;
+    STDMETHOD_(HRESULT,GetContainerAttributes)(THIS_ IMFAttributes **ppAttrs) PURE;
+    STDMETHOD_(HRESULT,GetVideoAttributes)(THIS_ IMFAttributes **ppAttrs) PURE;
+    STDMETHOD_(HRESULT,SetAudioAttributes)(THIS_ IMFAttributes *pAttrs) PURE;
+    STDMETHOD_(HRESULT,SetContainerAttributes)(THIS_ IMFAttributes *pAttrs) PURE;
+    STDMETHOD_(HRESULT,SetVideoAttributes)(THIS_ IMFAttributes *pAttrs) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFTranscodeProfile_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTranscodeProfile_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTranscodeProfile_Release(This) (This)->pVtbl->Release(This)
+#define IMFTranscodeProfile_GetAudioAttributes(This,ppAttrs) (This)->lpVtbl->GetAudioAttributes(This,ppAttrs)
+#define IMFTranscodeProfile_GetContainerAttributes(This,ppAttrs) (This)->lpVtbl->GetContainerAttributes(This,ppAttrs)
+#define IMFTranscodeProfile_GetVideoAttributes(This,ppAttrs) (This)->lpVtbl->GetVideoAttributes(This,ppAttrs)
+#define IMFTranscodeProfile_SetAudioAttributes(This,pAttrs) (This)->lpVtbl->SetAudioAttributes(This,pAttrs)
+#define IMFTranscodeProfile_SetContainerAttributes(This,pAttrs) (This)->lpVtbl->SetContainerAttributes(This,pAttrs)
+#define IMFTranscodeProfile_SetVideoAttributes(This,pAttrs) (This)->lpVtbl->SetVideoAttributes(This,pAttrs)
+#endif /*COBJMACROS*/
+
+typedef struct _MF_TRANSCODE_SINK_INFO {
+  DWORD        dwVideoStreamID;
+  IMFMediaType *pVideoMediaType;
+  DWORD        dwAudioStreamID;
+  IMFMediaType *pAudioMediaType;
+} MF_TRANSCODE_SINK_INFO;
+
+#undef  INTERFACE
+#define INTERFACE IMFTranscodeSinkInfoProvider
+DECLARE_INTERFACE_(IMFTranscodeSinkInfoProvider,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFTranscodeSinkInfoProvider methods */
+    STDMETHOD_(HRESULT,GetSinkInfo)(THIS_ MF_TRANSCODE_SINK_INFO *pSinkInfo) PURE;
+    STDMETHOD_(HRESULT,SetOutputByteStream)(THIS_ IMFActivate *pByteStreamActivate) PURE;
+    STDMETHOD_(HRESULT,SetOutputFile)(THIS_ LPCWSTR pwszFileName) PURE;
+    STDMETHOD_(HRESULT,SetProfile)(THIS_ IMFTranscodeProfile *pProfile) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFTranscodeSinkInfoProvider_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTranscodeSinkInfoProvider_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTranscodeSinkInfoProvider_Release(This) (This)->pVtbl->Release(This)
+#define IMFTranscodeSinkInfoProvider_GetSinkInfo(This,pSinkInfo) (This)->lpVtbl->GetSinkInfo(This,pSinkInfo)
+#define IMFTranscodeSinkInfoProvider_SetOutputByteStream(This,pByteStreamActivate) (This)->lpVtbl->SetOutputByteStream(This,pByteStreamActivate)
+#define IMFTranscodeSinkInfoProvider_SetOutputFile(This,pwszFileName) (This)->lpVtbl->SetOutputFile(This,pwszFileName)
+#define IMFTranscodeSinkInfoProvider_SetProfile(This,pProfile) (This)->lpVtbl->SetProfile(This,pProfile)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+typedef enum _MFVP_MESSAGE_TYPE MFVP_MESSAGE_TYPE;
+#undef  INTERFACE
+#define INTERFACE IMFVideoSampleAllocator
+DECLARE_INTERFACE_(IMFVideoSampleAllocator,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFVideoSampleAllocator methods */
+    STDMETHOD_(HRESULT,GetCurrentMediaType)(THIS_ IMFVideoMediaType **ppMediaType) PURE;
+    STDMETHOD_(HRESULT,ProcessMessage)(THIS_ MFVP_MESSAGE_TYPE eMessage,ULONG_PTR ulParam) PURE;
+    STDMETHOD_(HRESULT,AllocateSample)(THIS_ IMFSample **ppSample) PURE;
+    STDMETHOD_(HRESULT,InitializeSampleAllocator)(THIS_ DWORD cRequestedFrames,IMFMediaType *pMediaType) PURE;
+    STDMETHOD_(HRESULT,SetDirectXManager)(THIS_ IUnknown *pManager) PURE;
+    STDMETHOD_(HRESULT,UninitializeSampleAllocator)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFVideoSampleAllocator_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFVideoSampleAllocator_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFVideoSampleAllocator_Release(This) (This)->pVtbl->Release(This)
+#define IMFVideoSampleAllocator_GetCurrentMediaType(This,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,ppMediaType)
+#define IMFVideoSampleAllocator_ProcessMessage(This,eMessage,ulParam) (This)->lpVtbl->ProcessMessage(This,eMessage,ulParam)
+#define IMFVideoSampleAllocator_AllocateSample(This,ppSample) (This)->lpVtbl->AllocateSample(This,ppSample)
+#define IMFVideoSampleAllocator_InitializeSampleAllocator(This,cRequestedFrames,pMediaType) (This)->lpVtbl->InitializeSampleAllocator(This,cRequestedFrames,pMediaType)
+#define IMFVideoSampleAllocator_SetDirectXManager(This,pManager) (This)->lpVtbl->SetDirectXManager(This,pManager)
+#define IMFVideoSampleAllocator_UninitializeSampleAllocator() (This)->lpVtbl->UninitializeSampleAllocator(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFObjectReferenceStream
+DECLARE_INTERFACE_(IMFObjectReferenceStream,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFObjectReferenceStream methods */
+    STDMETHOD_(HRESULT,LoadReference)(THIS_ REFIID riid,void **ppv) PURE;
+    STDMETHOD_(HRESULT,SaveReference)(THIS_ REFIID riid,IUnknown *pUnk) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFObjectReferenceStream_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFObjectReferenceStream_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFObjectReferenceStream_Release(This) (This)->pVtbl->Release(This)
+#define IMFObjectReferenceStream_LoadReference(This,riid,ppv) (This)->lpVtbl->LoadReference(This,riid,ppv)
+#define IMFObjectReferenceStream_SaveReference(This,riid,pUnk) (This)->lpVtbl->SaveReference(This,riid,pUnk)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFWorkQueueServices
+DECLARE_INTERFACE_(IMFWorkQueueServices,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFWorkQueueServices methods */
+    STDMETHOD_(HRESULT,BeginRegisterPlatformWorkQueueWithMMCSS)(THIS_ DWORD dwPlatformWorkQueue,LPCWSTR wszClass,DWORD dwTaskId,IMFAsyncCallback *pCallback,IUnknown *pState) PURE;
+    STDMETHOD_(HRESULT,BeginRegisterTopologyWorkQueuesWithMMCSS)(THIS_ IMFAsyncCallback *pCallback,IUnknown *pState) PURE;
+    STDMETHOD_(HRESULT,BeginUnregisterPlatformWorkQueueWithMMCSS)(THIS_ DWORD dwPlatformWorkQueue,IMFAsyncCallback *pCallback,IUnknown *pState) PURE;
+    STDMETHOD_(HRESULT,BeginUnregisterTopologyWorkQueuesWithMMCSS)(THIS_ IMFAsyncCallback *pCallback,IUnknown *pState) PURE;
+    STDMETHOD_(HRESULT,EndRegisterPlatformWorkQueueWithMMCSS)(THIS_ IMFAsyncResult *pResult,DWORD *pdwTaskId) PURE;
+    STDMETHOD_(HRESULT,EndRegisterTopologyWorkQueuesWithMMCSS)(THIS_ IMFAsyncResult *pResult) PURE;
+    STDMETHOD_(HRESULT,EndUnregisterPlatformWorkQueueWithMMCSS)(THIS_ IMFAsyncResult *pResult) PURE;
+    STDMETHOD_(HRESULT,EndUnregisterTopologyWorkQueuesWithMMCSS)(THIS_ IMFAsyncResult *pResult) PURE;
+    STDMETHOD_(HRESULT,GetPlaftormWorkQueueMMCSSClass)(THIS_ DWORD dwPlatformWorkQueueId,LPWSTR pwszClass,DWORD *pcchClass) PURE;
+    STDMETHOD_(HRESULT,GetPlatformWorkQueueMMCSSTaskId)(THIS_ DWORD dwPlatformWorkQueueId,DWORD *pdwTaskId) PURE;
+    STDMETHOD_(HRESULT,GetTopologyWorkQueueMMCSSClass)(THIS_ DWORD dwTopologyWorkQueueId,LPWSTR pwszClass,DWORD *pcchClass) PURE;
+    STDMETHOD_(HRESULT,GetTopologyWorkQueueMMCSSTaskId)(THIS_ DWORD dwTopologyWorkQueueId,DWORD *pdwTaskId) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFWorkQueueServices_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFWorkQueueServices_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFWorkQueueServices_Release(This) (This)->pVtbl->Release(This)
+#define IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS(This,dwPlatformWorkQueue,wszClass,dwTaskId,pCallback,pState) (This)->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSS(This,dwPlatformWorkQueue,wszClass,dwTaskId,pCallback,pState)
+#define IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS(This,pCallback,pState) (This)->lpVtbl->BeginRegisterTopologyWorkQueuesWithMMCSS(This,pCallback,pState)
+#define IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS(This,dwPlatformWorkQueue,pCallback,pState) (This)->lpVtbl->BeginUnregisterPlatformWorkQueueWithMMCSS(This,dwPlatformWorkQueue,pCallback,pState)
+#define IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS(This,pCallback,pState) (This)->lpVtbl->BeginUnregisterTopologyWorkQueuesWithMMCSS(This,pCallback,pState)
+#define IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS(This,pResult,pdwTaskId) (This)->lpVtbl->EndRegisterPlatformWorkQueueWithMMCSS(This,pResult,pdwTaskId)
+#define IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS(This,pResult) (This)->lpVtbl->EndRegisterTopologyWorkQueuesWithMMCSS(This,pResult)
+#define IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS(This,pResult) (This)->lpVtbl->EndUnregisterPlatformWorkQueueWithMMCSS(This,pResult)
+#define IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS(This,pResult) (This)->lpVtbl->EndUnregisterTopologyWorkQueuesWithMMCSS(This,pResult)
+#define IMFWorkQueueServices_GetPlaftormWorkQueueMMCSSClass(This,dwPlatformWorkQueueId,pwszClass,pcchClass) (This)->lpVtbl->GetPlaftormWorkQueueMMCSSClass(This,dwPlatformWorkQueueId,pwszClass,pcchClass)
+#define IMFWorkQueueServices_GetPlatformWorkQueueMMCSSTaskId(This,dwPlatformWorkQueueId,pdwTaskId) (This)->lpVtbl->GetPlatformWorkQueueMMCSSTaskId(This,dwPlatformWorkQueueId,pdwTaskId)
+#define IMFWorkQueueServices_GetTopologyWorkQueueMMCSSClass(This,dwTopologyWorkQueueId,pwszClass,pcchClass) (This)->lpVtbl->GetTopologyWorkQueueMMCSSClass(This,dwTopologyWorkQueueId,pwszClass,pcchClass)
+#define IMFWorkQueueServices_GetTopologyWorkQueueMMCSSTaskId(This,dwTopologyWorkQueueId,pdwTaskId) (This)->lpVtbl->GetTopologyWorkQueueMMCSSTaskId(This,dwTopologyWorkQueueId,pdwTaskId)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+
+#undef  INTERFACE
+#define INTERFACE IMFVideoSampleAllocatorNotify
+DECLARE_INTERFACE_(IMFVideoSampleAllocatorNotify,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFVideoSampleAllocatorNotify methods */
+    STDMETHOD_(HRESULT,NotifyRelease)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFVideoSampleAllocatorNotify_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFVideoSampleAllocatorNotify_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFVideoSampleAllocatorNotify_Release(This) (This)->pVtbl->Release(This)
+#define IMFVideoSampleAllocatorNotify_NotifyRelease() (This)->lpVtbl->NotifyRelease(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFVideoSampleAllocatorCallback
+DECLARE_INTERFACE_(IMFVideoSampleAllocatorCallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFVideoSampleAllocatorCallback methods */
+    STDMETHOD_(HRESULT,GetFreeSampleCount)(THIS_ LONG *plSamples) PURE;
+    STDMETHOD_(HRESULT,SetCallback)(THIS_ IMFVideoSampleAllocatorNotify *pNotify) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFVideoSampleAllocatorCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFVideoSampleAllocatorCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFVideoSampleAllocatorCallback_Release(This) (This)->pVtbl->Release(This)
+#define IMFVideoSampleAllocatorCallback_GetFreeSampleCount(This,plSamples) (This)->lpVtbl->GetFreeSampleCount(This,plSamples)
+#define IMFVideoSampleAllocatorCallback_SetCallback(This,pNotify) (This)->lpVtbl->SetCallback(This,pNotify)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT MFCreate3GPMediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);
+HRESULT MFCreateAggregateSource(IMFCollection *pSourceCollection,IMFMediaSource **ppAggSource);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFCreateAlignedMemoryBuffer(DWORD cbMaxLength,DWORD fAlignmentFlags,IMFMediaBuffer **ppBuffer);
+HRESULT WINAPI MFCreateASFContentInfo(IMFASFContentInfo **ppIContentInfo);
+HRESULT WINAPI MFCreateASFIndexer(IMFASFIndexer **ppIIndexer);
+HRESULT WINAPI MFCreateASFIndexerByteStream(IMFByteStream *pIContentByteStream,QWORD cbIndexStartOffset,IMFByteStream **pIIndexByteStream);
+HRESULT WINAPI MFCreateASFMediaSink(IMFByteStream *pIByteStream,IMFMediaSink **ppIMediaSink);
+HRESULT WINAPI MFCreateASFMediaSinkActivate(LPCWSTR pwszFileName,IMFASFContentInfo *pContentInfo,IMFActivate **ppIActivate);
+HRESULT WINAPI MFCreateASFMultiplexer(IMFASFMultiplexer **ppIMultiplexer);
+HRESULT WINAPI MFCreateASFProfile(IMFASFProfile **ppIProfile);
+HRESULT WINAPI MFCreateASFProfileFromPresentationDescriptor(IMFPresentationDescriptor *pIPD,IMFASFProfile **ppIProfile);
+HRESULT WINAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);
+HRESULT WINAPI MFCreateMediaSession(IMFAttributes *pConfiguration,IMFMediaSession **ppMS);
+HRESULT WINAPI MFCreateMP3MediaSink(IMFByteStream *pTargetByteStream,IMFMediaSink **ppMediaSink);
+HRESULT WINAPI MFCreateMPEG4MediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);
+HRESULT WINAPI MFCreateNetSchemePlugin(REFIID riid,LPVOID *ppvHandler);
+HRESULT WINAPI MFCreatePMPServer(DWORD dwCreationFlags,IMFPMPServer **ppPMPServer);
+HRESULT WINAPI MFCreatePMPMediaSession(DWORD dwCreationFlags,IMFAttributes *pConfiguration,IMFMediaSession **ppMediaSession,IMFActivate **ppEnablerActivate);
+HRESULT WINAPI MFCreatePathFromURL(LPCWSTR pwszFileURL,LPWSTR *ppwszFilePath);
+HRESULT WINAPI MFCreatePresentationClock(IMFPresentationClock **ppPresentationClock);
+HRESULT WINAPI MFCreatePresentationDescriptor(DWORD cStreamDescriptors,IMFStreamDescriptor **apStreamDescriptors,IMFPresentationDescriptor **ppPresentationDescriptor);
+HRESULT WINAPI MFCreatePresentationDescriptorFromASFProfile(IMFASFProfile *pIProfile,IMFPresentationDescriptor **ppIPD);
+HRESULT WINAPI MFCreateProxyLocator(LPCWSTR pszProtocol,IPropertyStore *pProxyConfig,IMFNetProxyLocator **ppProxyLocator);
+HRESULT WINAPI MFCreateRemoteDesktopPlugin(IMFRemoteDesktopPlugin **ppPlugin);
+HRESULT WINAPI MFCreateSample(IMFSample **ppIMFSample);
+HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **ppCopierMFT);
+HRESULT WINAPI MFCreateSampleGrabberSinkActivate(IMFMediaType *pIMFMediaType,IMFSampleGrabberSinkCallback *pIMFSampleGrabberSinkCallback,IMFActivate **ppIActivate);
+HRESULT WINAPI MFCreateSequencerSource(IUnknown *pReserved,IMFSequencerSource **ppSequencerSource);
+HRESULT WINAPI MFCreateSimpleTypeHandler(IMFMediaTypeHandler **ppHandler);
+HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **ppQualityManager);
+HRESULT WINAPI MFCreateStreamDescriptor(DWORD dwStreamIdentifier,DWORD cMediaTypes,IMFMediaType **apMediaTypes,IMFStreamDescriptor **ppDescriptor);
+HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **ppISourceResolver);
+HRESULT WINAPI MFCreateSystemTimeSource(IMFPresentationTimeSource **ppSystemTimeSource);
+HRESULT WINAPI MFCreateTopoLoader(IMFTopoLoader **ppObj);
+HRESULT WINAPI MFCreateTopology(IMFTopology **ppTopo);
+HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE NodeType,IMFTopologyNode **ppNode);
+HRESULT WINAPI MFCreateVideoRenderer(REFIID riidRenderer,void **ppVideoRenderer);
+HRESULT WINAPI MFCreateVideoRendererActivate(HWND hwndVideo,IMFActivate **ppActivate);
+HRESULT WINAPI MFGetService(IUnknown *punkObject,REFGUID guidService,REFIID riid,LPVOID *ppvObject);
+HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *pPropVarMimeTypeArray);
+HRESULT WINAPI MFGetSupportedSchemes(PROPVARIANT *pPropVarSchemeArray);
+MFTIME WINAPI MFGetSystemTime(void);
+HRESULT WINAPI MFShutdownObject(IUnknown *pUnk);
+HRESULT WINAPI CreateNamedPropertyStore(INamedPropertyStore **ppStore);
+HRESULT WINAPI CreatePropertyStore(IPropertyStore **ppStore);
+#ifdef __cplusplus
+}
+#endif
+#if (_WIN32_WINNT >= 0x0601)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFCreateTranscodeProfile(IMFTranscodeProfile **ppTranscodeProfile);
+HRESULT WINAPI MFCreateTranscodeSinkActivate(IMFActivate **ppActivate);
+HRESULT WINAPI MFCreateTranscodeTopology(IMFMediaSource *pSrc,LPCWSTR pwszOutputFilePath,IMFTranscodeProfile *pProfile,IMFTopology **ppTranscodeTopo);
+HRESULT WINAPI MFEnumDeviceSources(IMFAttributes *pAttributes,IMFActivate ***pppSourceActivate,UINT32 *pcSourceActivate);
+HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *pNode,DWORD dwStreamIndex,WINBOOL fOutput,IMFMediaType **ppType);
+HRESULT WINAPI MFTranscodeGetAudioOutputAvailableTypes(REFGUID guidSubType,DWORD dwMFTFlags,IMFAttributes *pCodecConfig,IMFCollection **ppAvailableTypes);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_MFIDL*/
diff --git a/mingw-w64-headers/include/mfmp2dlna.h b/mingw-w64-headers/include/mfmp2dlna.h
new file mode 100644
index 0000000..fa67452
--- /dev/null
+++ b/mingw-w64-headers/include/mfmp2dlna.h
@@ -0,0 +1,33 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFMP2DLNA
+#define _INC_MFMP2DLNA
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef struct _MFMPEG2DLNASINKSTATS {
+  DWORDLONG cBytesWritten;
+  BOOL      fPAL;
+  DWORD     fccVideo;
+  DWORD     dwVideoWidth;
+  DWORD     dwVideoHeight;
+  DWORDLONG cVideoFramesReceived;
+  DWORDLONG cVideoFramesEncoded;
+  DWORDLONG cVideoFramesSkipped;
+  DWORDLONG cBlackVideoFramesEncoded;
+  DWORDLONG cVideoFramesDuplicated;
+  DWORD     cAudioSamplesPerSec;
+  DWORD     cAudioChannels;
+  DWORDLONG cAudioBytesReceived;
+  DWORDLONG cAudioFramesEncoded;
+} MFMPEG2DLNASINKSTATS;
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_MFMP2DLNA*/
diff --git a/mingw-w64-headers/include/mfobjects.h b/mingw-w64-headers/include/mfobjects.h
new file mode 100644
index 0000000..9dbf0e1
--- /dev/null
+++ b/mingw-w64-headers/include/mfobjects.h
@@ -0,0 +1,1338 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFOBJECTS
+#define _INC_MFOBJECTS
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct IMFAsyncCallback IMFAsyncCallback;
+typedef struct IMFMediaEvent IMFMediaEvent;
+typedef struct IMFPresentationDescriptor IMFPresentationDescriptor;
+typedef struct IPropertyStore IPropertyStore;
+typedef LPVOID MediaEventType;
+typedef struct PROPVARIANT *REFPROPVARIANT;
+__MINGW_EXTENSION typedef unsigned __int64 QWORD;
+
+enum MF_ATTRIBUTE_SERIALIZE_OPTIONS {
+  MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF   = 0x00000001 
+};
+
+typedef enum _MF_ATTRIBUTE_TYPE {
+  MF_ATTRIBUTE_UINT32     = VT_UI4,
+  MF_ATTRIBUTE_UINT64     = VT_UI8,
+  MF_ATTRIBUTE_DOUBLE     = VT_R8,
+  MF_ATTRIBUTE_GUID       = VT_CLSID,
+  MF_ATTRIBUTE_STRING     = VT_LPWSTR,
+  MF_ATTRIBUTE_BLOB       = VT_VECTOR | VT_UI1,
+  MF_ATTRIBUTE_IUNKNOWN   = VT_UNKNOWN 
+} MF_ATTRIBUTE_TYPE;
+
+typedef enum _MF_ATTRIBUTES_MATCH_TYPE {
+  MF_ATTRIBUTES_MATCH_OUR_ITEMS      = 0,
+  MF_ATTRIBUTES_MATCH_THEIR_ITEMS    = 1,
+  MF_ATTRIBUTES_MATCH_ALL_ITEMS      = 2,
+  MF_ATTRIBUTES_MATCH_INTERSECTION   = 3,
+  MF_ATTRIBUTES_MATCH_SMALLER        = 4 
+} MF_ATTRIBUTES_MATCH_TYPE;
+
+typedef enum _MF_CONNECT_METHOD {
+  MF_CONNECT_DIRECT                            = 0x00000000,
+  MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,
+  MF_CONNECT_ALLOW_DECODER                     = 0x00000003,
+  MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,
+  MF_CONNECT_AS_OPTIONAL                       = 0x00010000,
+  MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000 
+} MF_CONNECT_METHOD;
+
+typedef enum MF_FILE_ACCESSMODE {
+  MF_ACCESSMODE_READ        = 1,
+  MF_ACCESSMODE_WRITE       = 2,
+  MF_ACCESSMODE_READWRITE   = 3 
+} MF_FILE_ACCESSMODE;
+
+typedef enum  {
+  MF_FILEFLAGS_NONE                  = 0x00000000,
+  MF_FILEFLAGS_NOBUFFERING           = 0x00000001,
+  MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 
+} MF_FILE_FLAGS;
+
+typedef enum  {
+  MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,
+  MF_OPENMODE_FAIL_IF_EXIST       = 1,
+  MF_OPENMODE_RESET_IF_EXIST      = 2,
+  MF_OPENMODE_APPEND_IF_EXIST     = 3,
+  MF_OPENMODE_DELETE_IF_EXIST     = 4 
+} MF_FILE_OPENMODE;
+
+typedef enum _MFVideoTransferFunction {
+  MFVideoTransFunc_Unknown      = 0,
+  MFVideoTransFunc_10           = 1,
+  MFVideoTransFunc_18           = 2,
+  MFVideoTransFunc_20           = 3,
+  MFVideoTransFunc_22           = 4,
+  MFVideoTransFunc_709          = 5,
+  MFVideoTransFunc_240M         = 6,
+  MFVideoTransFunc_sRGB         = 7,
+  MFVideoTransFunc_28           = 8,
+  MFVideoTransFunc_Log_100      = 9,
+  MFVideoTransFunc_Log_316      = 10,
+  MFVideoTransFunc_709_sym      = 11,
+  MFVideoTransFunc_Last,
+  MFVideoTransFunc_ForceDWORD   = 0x7FFFFFFF 
+} MFVideoTransferFunction;
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum _MF_Plugin_Type {
+  MF_Plugin_Type_MFT           = 0,
+  MF_Plugin_Type_MediaSource   = 1 
+} MF_Plugin_Type;
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+typedef enum _MFBYTESTREAM_SEEK_ORIGIN {
+  msoBegin,
+  msoCurrent 
+} MFBYTESTREAM_SEEK_ORIGIN;
+
+typedef enum _MFNominalRange {
+  MFNominalRange_Unknown   = 0,
+  MFNominalRange_Normal    = 1,
+  MFNominalRange_Wide      = 2,
+  MFNominalRange_0_255     = 1,
+  MFNominalRange_16_235    = 2,
+  MFNominalRange_48_208    = 3,
+  MFNominalRange_64_127    = 4 
+} MFNominalRange;
+
+typedef enum _MFStandardVideoFormat {
+  MFStdVideoFormat_reserved       = 0,
+  MFStdVideoFormat_NTSC,
+  MFStdVideoFormat_PAL,
+  MFStdVideoFormat_DVD_NTSC,
+  MFStdVideoFormat_DVD_PAL,
+  MFStdVideoFormat_DV_PAL,
+  MFStdVideoFormat_DV_NTSC,
+  MFStdVideoFormat_ATSC_SD480i,
+  MFStdVideoFormat_ATSC_HD1080i,
+  MFStdVideoFormat_ATSC_HD720p 
+} MFStandardVideoFormat;
+
+typedef enum _MFVideoChromaSubsampling {
+  MFVideoChromaSubsampling_Unknown                          = 0,
+  MFVideoChromaSubsampling_ProgressiveChroma                = 0x8,
+  MFVideoChromaSubsampling_Horizontally_Cosited             = 0x4,
+  MFVideoChromaSubsampling_Vertically_Cosited               = 0x2,
+  MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes   = 0x1,
+  MFVideoChromaSubsampling_MPEG2                            = 
+    MFVideoChromaSubsampling_Horizontally_Cosited | 
+    MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+  MFVideoChromaSubsampling_MPEG1                            = 
+    MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+  MFVideoChromaSubsampling_DV_PAL                           = 
+    MFVideoChromaSubsampling_Horizontally_Cosited | 
+    MFVideoChromaSubsampling_Vertically_Cosited,
+  MFVideoChromaSubsampling_Cosited                          = 
+    MFVideoChromaSubsampling_Horizontally_Cosited | 
+    MFVideoChromaSubsampling_Vertically_Cosited | 
+    MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+  MFVideoChromaSubsampling_Last                             = MFVideoChromaSubsampling_Cosited + 1,
+  MFVideoChromaSubsampling_ForceDWORD                       = 0x7FFFFFFF 
+} MFVideoChromaSubsampling;
+
+typedef enum _MFVideoInterlaceMode {
+  MFVideoInterlace_Unknown                       = 0,
+  MFVideoInterlace_Progressive                   = 2,
+  MFVideoInterlace_FieldInterleavedUpperFirst    = 3,
+  MFVideoInterlace_FieldInterleavedLowerFirst    = 4,
+  MFVideoInterlace_FieldSingleUpper              = 5,
+  MFVideoInterlace_FieldSingleLower              = 6,
+  MFVideoInterlace_MixedInterlaceOrProgressive   = 7,
+  MFVideoInterlace_Last,
+  MFVideoInterlace_ForceDWORD                    = 0x7FFFFFFF 
+} MFVideoInterlaceMode;
+
+typedef enum _MFVideoLighting {
+  MFVideoLighting_Unknown      = 0,
+  MFVideoLighting_bright       = 1,
+  MFVideoLighting_office       = 2,
+  MFVideoLighting_dim          = 3,
+  MFVideoLighting_dark         = 4,
+  MFVideoLighting_Last,
+  MFVideoLighting_ForceDWORD   = 0x7FFFFFFF 
+} MFVideoLighting;
+
+typedef enum _MFVideoPrimaries {
+  MFVideoPrimaries_Unknown         = 0,
+  MFVideoPrimaries_reserved        = 1,
+  MFVideoPrimaries_BT709           = 2,
+  MFVideoPrimaries_BT470_2_SysM    = 3,
+  MFVideoPrimaries_BT470_2_SysBG   = 4,
+  MFVideoPrimaries_SMPTE170M       = 5,
+  MFVideoPrimaries_SMPTE240M       = 6,
+  MFVideoPrimaries_EBU3213         = 7,
+  MFVideoPrimaries_SMPTE_C         = 8,
+  MFVideoPrimaries_Last,
+  MFVideoPrimaries_ForceDWORD      = 0x7FFFFFFF 
+} MFVideoPrimaries;
+
+typedef enum _MFVideoTransferMatrix {
+  MFVideoTransferMatrix_Unknown      = 0,
+  MFVideoTransferMatrix_BT709        = 1,
+  MFVideoTransferMatrix_BT601        = 2,
+  MFVideoTransferMatrix_SMPTE240M    = 3,
+  MFVideoTransferMatrix_Last,
+  MFVideoTransferMatrix_ForceDWORD   = 0x7FFFFFFF 
+} MFVideoTransferMatrix;
+
+typedef struct _MFRatio {
+  DWORD Numerator;
+  DWORD Denominator;
+} MFRatio;
+
+typedef struct _MFOffset {
+  WORD  fract;
+  short value;
+} MFOffset;
+
+typedef struct _MFVideoArea {
+  MFOffset OffsetX;
+  MFOffset OffsetY;
+  SIZE     Area;
+} MFVideoArea;
+
+typedef enum _MFVideoFlags {
+  MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,
+  MFVideoFlag_PAD_TO_None             = 0 * 0x0001,
+  MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,
+  MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,
+  MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,
+  MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,
+  MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,
+  MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,
+  MFVideoFlag_AnalogProtected         = 0x0020,
+  MFVideoFlag_DigitallyProtected      = 0x0040,
+  MFVideoFlag_ProgressiveContent      = 0x0080,
+  MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,
+  MFVideoFlag_FieldRepeatCountShift   = 8,
+  MFVideoFlag_ProgressiveSeqReset     = 0x0800,
+  MFVideoFlag_PanScanEnabled          = 0x20000,
+  MFVideoFlag_LowerFieldFirst         = 0x40000,
+  MFVideoFlag_BottomUpLinearRep       = 0x80000,
+  MFVideoFlags_DXVASurface            = 0x100000,
+  MFVideoFlags_RenderTargetSurface    = 0x400000,
+  MFVideoFlags_ForceQWORD             = 0x7FFFFFFF 
+} MFVideoFlags;
+
+typedef struct _MFVideoCompressedInfo {
+  LONGLONG AvgBitrate;
+  LONGLONG AvgBitErrorRate;
+  DWORD    MaxKeyFrameSpacing;
+} MFVideoCompressedInfo;
+
+typedef struct _MFVideoInfo {
+  DWORD                    dwWidth;
+  DWORD                    dwHeight;
+  MFRatio                  PixelAspectRatio;
+  MFVideoChromaSubsampling SourceChromaSubsampling;
+  MFVideoInterlaceMode     InterlaceMode;
+  MFVideoTransferFunction  TransferFunction;
+  MFVideoPrimaries         ColorPrimaries;
+  MFVideoTransferMatrix    TransferMatrix;
+  MFVideoLighting          SourceLighting;
+  MFRatio                  FramesPerSecond;
+  MFNominalRange           NominalRange;
+  MFVideoArea              GeometricAperture;
+  MFVideoArea              MinimumDisplayAperture;
+  MFVideoArea              PanScanAperture;
+  unsigned __int64         VideoFlags;
+} MFVideoInfo;
+
+typedef struct _MFARGB {
+  BYTE rgbBlue;
+  BYTE rgbGreen;
+  BYTE rgbRed;
+  BYTE rgbAlpha;
+} MFARGB;
+
+typedef struct __MFAYUVSample {
+  BYTE bCrValue;
+  BYTE bCbValue;
+  BYTE bYValue;
+  BYTE bSampleAlpha8;
+} MFAYUVSample;
+
+typedef union _MFPaletteEntry {
+  MFARGB       ARGB;
+  MFAYUVSample AYCbCr;
+} MFPaletteEntry;
+
+typedef struct _MFVideoSurfaceInfo {
+  DWORD          Format;
+  DWORD          PaletteEntries;
+  MFPaletteEntry Palette[];
+} MFVideoSurfaceInfo;
+
+typedef struct _MFVIDEOFORMAT {
+  DWORD                 dwSize;
+  MFVideoInfo           videoInfo;
+  GUID                  guidFormat;
+  MFVideoCompressedInfo compressedInfo;
+  MFVideoSurfaceInfo    surfaceInfo;
+} MFVIDEOFORMAT;
+
+#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001
+#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002
+#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004
+#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008
+
+#define MFBYTESTREAM_IS_READABLE                0x00000001
+#define MFBYTESTREAM_IS_WRITABLE                0x00000002
+#define MFBYTESTREAM_IS_SEEKABLE                0x00000004
+#define MFBYTESTREAM_IS_REMOTE                  0x00000008
+#define MFBYTESTREAM_IS_DIRECTORY               0x00000080
+#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100
+#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200
+#define MFBYTESTREAM_SHARE_WRITE                0x00000400
+
+#undef  INTERFACE
+#define INTERFACE IMFRemoteAsyncCallback
+DECLARE_INTERFACE_(IMFRemoteAsyncCallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFRemoteAsyncCallback methods */
+    STDMETHOD(Invoke)(THIS) PURE; /*Not used by applications.*/
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFRemoteAsyncCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFRemoteAsyncCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFRemoteAsyncCallback_Release(This) (This)->pVtbl->Release(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFAsyncResult
+DECLARE_INTERFACE_(IMFAsyncResult,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAsyncResult methods */
+    STDMETHOD_(HRESULT,GetObject)(THIS_ IUnknown **ppObject) PURE;
+    STDMETHOD_(HRESULT,GetState)(THIS_ IUnknown **ppunkState) PURE;
+    STDMETHOD_(IUnknown *,GetStateNoAddRef)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetStatus)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetStatus)(THIS_ HRESULT hrStatus) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFAsyncResult_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFAsyncResult_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFAsyncResult_Release(This) (This)->pVtbl->Release(This)
+#define IMFAsyncResult_GetObject(This,ppObject) (This)->lpVtbl->GetObject(This,ppObject)
+#define IMFAsyncResult_GetState(This,ppunkState) (This)->lpVtbl->GetState(This,ppunkState)
+#define IMFAsyncResult_GetStateNoAddRef() (This)->lpVtbl->GetStateNoAddRef(This)
+#define IMFAsyncResult_GetStatus() (This)->lpVtbl->GetStatus(This)
+#define IMFAsyncResult_SetStatus(This,hrStatus) (This)->lpVtbl->SetStatus(This,hrStatus)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaEventGenerator
+DECLARE_INTERFACE_(IMFMediaEventGenerator,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaEventGenerator methods */
+    /*[call_as(BeginGetEvent)] */
+    STDMETHOD_(HRESULT,BeginGetEvent)(THIS_ IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,EndGetEvent)(THIS_ IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,GetEvent)(THIS_ DWORD dwFlags,IMFMediaEvent **ppEvent) PURE;
+    STDMETHOD_(HRESULT,QueueEvent)(THIS_ MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) PURE;
+    STDMETHOD_(HRESULT,RemoteEndGetEvent)(THIS_ IUnknown *pResult,DWORD *pcbEvent,BYTE **ppbEvent) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaEventGenerator_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaEventGenerator_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaEventGenerator_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaEventGenerator_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
+#define IMFMediaEventGenerator_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
+#define IMFMediaEventGenerator_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
+#define IMFMediaEventGenerator_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
+#define IMFMediaEventGenerator_RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent) (This)->lpVtbl->RemoteEndGetEvent(This,pResult,pcbEvent,ppbEvent)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaBuffer
+DECLARE_INTERFACE_(IMFMediaBuffer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFMediaBuffer methods */
+    STDMETHOD_(HRESULT,GetCurrentLength)(THIS_ DWORD *pcbCurrentLength) PURE;
+    STDMETHOD_(HRESULT,GetMaxLength)(THIS_ DWORD *pcbMaxLength) PURE;
+    STDMETHOD_(HRESULT,Lock)(THIS_ BYTE **ppbBuffer,DWORD *pcbMaxLength,DWORD *pcbCurrentLength) PURE;
+    STDMETHOD_(HRESULT,SetCurrentLength)(THIS_ DWORD cbCurrentLength) PURE;
+    STDMETHOD_(HRESULT,Unlock)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaBuffer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaBuffer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaBuffer_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaBuffer_GetCurrentLength(This,pcbCurrentLength) (This)->lpVtbl->GetCurrentLength(This,pcbCurrentLength)
+#define IMFMediaBuffer_GetMaxLength(This,pcbMaxLength) (This)->lpVtbl->GetMaxLength(This,pcbMaxLength)
+#define IMFMediaBuffer_Lock(This,ppbBuffer,pcbMaxLength,pcbCurrentLength) (This)->lpVtbl->Lock(This,ppbBuffer,pcbMaxLength,pcbCurrentLength)
+#define IMFMediaBuffer_SetCurrentLength(This,cbCurrentLength) (This)->lpVtbl->SetCurrentLength(This,cbCurrentLength)
+#define IMFMediaBuffer_Unlock() (This)->lpVtbl->Unlock(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFAttributes
+DECLARE_INTERFACE_(IMFAttributes,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFAttributes_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFAttributes_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFAttributes_Release(This) (This)->pVtbl->Release(This)
+#define IMFAttributes_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFAttributes_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFAttributes_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFAttributes_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFAttributes_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFAttributes_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFAttributes_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFAttributes_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFAttributes_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFAttributes_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFAttributes_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFAttributes_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFAttributes_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFAttributes_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFAttributes_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFAttributes_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFAttributes_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFAttributes_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFAttributes_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFAttributes_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFAttributes_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFAttributes_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFAttributes_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFAttributes_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFAttributes_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFAttributes_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFAttributes_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFAttributes_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFAttributes_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFAttributes_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaType
+DECLARE_INTERFACE_(IMFMediaType,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFMediaType methods */
+    STDMETHOD_(HRESULT,FreeRepresentation)(THIS_ GUID guidRepresentation,void *pvRepresentation) PURE;
+    STDMETHOD_(HRESULT,GetMajorType)(THIS_ GUID *pguidMajorType) PURE;
+    STDMETHOD_(HRESULT,GetRepresentation)(THIS_ GUID guidRepresentation,void **ppvRepresentation) PURE;
+    STDMETHOD_(HRESULT,IsCompressedFormat)(THIS_ WINBOOL *pfCompressed) PURE;
+    STDMETHOD_(HRESULT,IsEqual)(THIS_ IMFMediaType *pIMediaType,DWORD *pdwFlags) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaType_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaType_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaType_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFMediaType_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFMediaType_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFMediaType_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
+#define IMFMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
+#define IMFMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
+#define IMFMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
+#define IMFMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFAudioMediaType
+DECLARE_INTERFACE_(IMFAudioMediaType,IMFAudioMediaType)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+	/* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFMediaType methods */
+    STDMETHOD_(HRESULT,FreeRepresentation)(THIS_ GUID guidRepresentation,void *pvRepresentation) PURE;
+    STDMETHOD_(HRESULT,GetMajorType)(THIS_ GUID *pguidMajorType) PURE;
+    STDMETHOD_(HRESULT,GetRepresentation)(THIS_ GUID guidRepresentation,void **ppvRepresentation) PURE;
+    STDMETHOD_(HRESULT,IsCompressedFormat)(THIS_ WINBOOL *pfCompressed) PURE;
+    STDMETHOD_(HRESULT,IsEqual)(THIS_ IMFMediaType *pIMediaType,DWORD *pdwFlags) PURE;
+
+    /* IMFAudioMediaType methods */
+    STDMETHOD_(const WAVEFORMATEX *,GetAudioFormat)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFAudioMediaType_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFAudioMediaType_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFAudioMediaType_Release(This) (This)->pVtbl->Release(This)
+#define IMFAudioMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFAudioMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFAudioMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFAudioMediaType_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFAudioMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFAudioMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFAudioMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFAudioMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFAudioMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFAudioMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFAudioMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFAudioMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFAudioMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFAudioMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFAudioMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFAudioMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFAudioMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFAudioMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFAudioMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFAudioMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFAudioMediaType_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFAudioMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFAudioMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFAudioMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFAudioMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFAudioMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFAudioMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFAudioMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFAudioMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFAudioMediaType_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFAudioMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
+#define IMFAudioMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
+#define IMFAudioMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
+#define IMFAudioMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
+#define IMFAudioMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
+#define IMFAudioMediaType_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSample
+DECLARE_INTERFACE_(IMFSample,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFMediaType methods */
+    STDMETHOD_(HRESULT,FreeRepresentation)(THIS_ GUID guidRepresentation,void *pvRepresentation) PURE;
+    STDMETHOD_(HRESULT,GetMajorType)(THIS_ GUID *pguidMajorType) PURE;
+    STDMETHOD_(HRESULT,GetRepresentation)(THIS_ GUID guidRepresentation,void **ppvRepresentation) PURE;
+    STDMETHOD_(HRESULT,IsCompressedFormat)(THIS_ WINBOOL *pfCompressed) PURE;
+    STDMETHOD_(HRESULT,IsEqual)(THIS_ IMFMediaType *pIMediaType,DWORD *pdwFlags) PURE;
+
+    /* IMFSample methods */
+    STDMETHOD_(HRESULT,AddBuffer)(THIS_ IMFMediaBuffer *pBuffer) PURE;
+    STDMETHOD_(HRESULT,ConvertToContiguousBuffer)(THIS_ IMFMediaBuffer **ppBuffer) PURE;
+    STDMETHOD_(HRESULT,CopyToBuffer)(THIS_ IMFMediaBuffer *pBuffer) PURE;
+    STDMETHOD_(HRESULT,GetBufferByIndex)(THIS_ DWORD dwIndex,IMFMediaBuffer **ppBuffer) PURE;
+    STDMETHOD_(HRESULT,GetBufferCount)(THIS_ DWORD *pdwBufferCount) PURE;
+    STDMETHOD_(HRESULT,GetSampleDuration)(THIS_ LONGLONG *phnsSampleDuration) PURE;
+    STDMETHOD_(HRESULT,GetSampleFlags)(THIS_ DWORD *pdwSampleFlags) PURE;
+    STDMETHOD_(HRESULT,GetSampleTime)(THIS_ LONGLONG *phnsSampleTime) PURE;
+    STDMETHOD_(HRESULT,GetTotalLength)(THIS_ DWORD *pcbTotalLength) PURE;
+    STDMETHOD_(HRESULT,RemoveAllBuffers)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoveBufferByIndex)(THIS_ DWORD dwIndex) PURE;
+    STDMETHOD_(HRESULT,SetSampleDuration)(THIS_ LONGLONG hnsSampleDuration) PURE;
+    STDMETHOD_(HRESULT,SetSampleFlags)(THIS_ DWORD dwSampleFlags) PURE;
+    STDMETHOD_(HRESULT,SetSampleTime)(THIS_ LONGLONG hnsSampleTime) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSample_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSample_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSample_Release(This) (This)->pVtbl->Release(This)
+#define IMFSample_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFSample_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFSample_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFSample_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFSample_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFSample_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFSample_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFSample_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFSample_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFSample_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFSample_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFSample_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFSample_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFSample_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFSample_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFSample_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFSample_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFSample_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFSample_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFSample_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFSample_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFSample_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFSample_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFSample_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFSample_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFSample_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFSample_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFSample_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFSample_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFSample_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFSample_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
+#define IMFSample_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
+#define IMFSample_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
+#define IMFSample_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
+#define IMFSample_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
+#define IMFSample_AddBuffer(This,pBuffer) (This)->lpVtbl->AddBuffer(This,pBuffer)
+#define IMFSample_ConvertToContiguousBuffer(This,ppBuffer) (This)->lpVtbl->ConvertToContiguousBuffer(This,ppBuffer)
+#define IMFSample_CopyToBuffer(This,pBuffer) (This)->lpVtbl->CopyToBuffer(This,pBuffer)
+#define IMFSample_GetBufferByIndex(This,dwIndex,ppBuffer) (This)->lpVtbl->GetBufferByIndex(This,dwIndex,ppBuffer)
+#define IMFSample_GetBufferCount(This,pdwBufferCount) (This)->lpVtbl->GetBufferCount(This,pdwBufferCount)
+#define IMFSample_GetSampleDuration(This,phnsSampleDuration) (This)->lpVtbl->GetSampleDuration(This,phnsSampleDuration)
+#define IMFSample_GetSampleFlags(This,pdwSampleFlags) (This)->lpVtbl->GetSampleFlags(This,pdwSampleFlags)
+#define IMFSample_GetSampleTime(This,phnsSampleTime) (This)->lpVtbl->GetSampleTime(This,phnsSampleTime)
+#define IMFSample_GetTotalLength(This,pcbTotalLength) (This)->lpVtbl->GetTotalLength(This,pcbTotalLength)
+#define IMFSample_RemoveAllBuffers() (This)->lpVtbl->RemoveAllBuffers(This)
+#define IMFSample_RemoveBufferByIndex(This,dwIndex) (This)->lpVtbl->RemoveBufferByIndex(This,dwIndex)
+#define IMFSample_SetSampleDuration(This,hnsSampleDuration) (This)->lpVtbl->SetSampleDuration(This,hnsSampleDuration)
+#define IMFSample_SetSampleFlags(This,dwSampleFlags) (This)->lpVtbl->SetSampleFlags(This,dwSampleFlags)
+#define IMFSample_SetSampleTime(This,hnsSampleTime) (This)->lpVtbl->SetSampleTime(This,hnsSampleTime)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMF2DBuffer
+DECLARE_INTERFACE_(IMF2DBuffer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMF2DBuffer methods */
+    STDMETHOD_(HRESULT,ContiguousCopyFrom)(THIS_ const BYTE *pbSrcBuffer,DWORD cbSrcBuffer) PURE;
+    STDMETHOD_(HRESULT,ContiguousCopyTo)(THIS_ BYTE *pbDestBuffer,DWORD cbDestBuffer) PURE;
+    STDMETHOD_(HRESULT,GetContiguousLength)(THIS_ DWORD *pcbLength) PURE;
+    STDMETHOD_(HRESULT,GetScanline0AndPitch)(THIS_ BYTE **pbScanline0,LONG *plPitch) PURE;
+    STDMETHOD_(HRESULT,IsContiguousFormat)(THIS_ WINBOOL *pfIsContiguous) PURE;
+    STDMETHOD_(HRESULT,Lock2D)(THIS_ BYTE **pbScanline0,LONG *plPitch) PURE;
+    STDMETHOD_(HRESULT,Unlock2D)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMF2DBuffer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMF2DBuffer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMF2DBuffer_Release(This) (This)->pVtbl->Release(This)
+#define IMF2DBuffer_ContiguousCopyFrom(This,pbSrcBuffer,cbSrcBuffer) (This)->lpVtbl->ContiguousCopyFrom(This,pbSrcBuffer,cbSrcBuffer)
+#define IMF2DBuffer_ContiguousCopyTo(This,pbDestBuffer,cbDestBuffer) (This)->lpVtbl->ContiguousCopyTo(This,pbDestBuffer,cbDestBuffer)
+#define IMF2DBuffer_GetContiguousLength(This,pcbLength) (This)->lpVtbl->GetContiguousLength(This,pcbLength)
+#define IMF2DBuffer_GetScanline0AndPitch(This,pbScanline0,plPitch) (This)->lpVtbl->GetScanline0AndPitch(This,pbScanline0,plPitch)
+#define IMF2DBuffer_IsContiguousFormat(This,pfIsContiguous) (This)->lpVtbl->IsContiguousFormat(This,pfIsContiguous)
+#define IMF2DBuffer_Lock2D(This,pbScanline0,plPitch) (This)->lpVtbl->Lock2D(This,pbScanline0,plPitch)
+#define IMF2DBuffer_Unlock2D() (This)->lpVtbl->Unlock2D(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFAsyncCallback
+DECLARE_INTERFACE_(IMFAsyncCallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAsyncCallback methods */
+    STDMETHOD_(HRESULT,GetParameters)(THIS_ DWORD *pdwFlags,DWORD *pdwQueue) PURE;
+    STDMETHOD_(HRESULT,Invoke)(THIS_ IMFAsyncResult *pAsyncResult) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFAsyncCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFAsyncCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFAsyncCallback_Release(This) (This)->pVtbl->Release(This)
+#define IMFAsyncCallback_GetParameters(This,pdwFlags,pdwQueue) (This)->lpVtbl->GetParameters(This,pdwFlags,pdwQueue)
+#define IMFAsyncCallback_Invoke(This,pAsyncResult) (This)->lpVtbl->Invoke(This,pAsyncResult)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFByteStream
+DECLARE_INTERFACE_(IMFByteStream,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFByteStream methods */
+    STDMETHOD_(HRESULT,GetParameters)(THIS_ DWORD *pdwFlags,DWORD *pdwQueue) PURE;
+    STDMETHOD_(HRESULT,MFInvokeCallback)(THIS_ IMFAsyncResult *pAsyncResult) PURE;
+    STDMETHOD_(HRESULT,BeginRead)(THIS_ BYTE *pb,ULONG cb,IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,BeginWrite)(THIS_ const BYTE *pb,ULONG cb,IMFAsyncCallback *pCallback,IUnknown *punkState) PURE;
+    STDMETHOD_(HRESULT,Close)(THIS) PURE;
+    STDMETHOD_(HRESULT,EndRead)(THIS_ IMFAsyncResult *pResult,ULONG *pcbRead) PURE;
+    STDMETHOD_(HRESULT,EndWrite)(THIS_ IMFAsyncResult *pResult,ULONG *pcbWritten) PURE;
+    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetCapabilities)(THIS_ DWORD *pdwCapabilities) PURE;
+    STDMETHOD_(HRESULT,GetCurrentPosition)(THIS_ QWORD *pqwPosition) PURE;
+    STDMETHOD_(HRESULT,GetLength)(THIS_ QWORD *pqwLength) PURE;
+    STDMETHOD_(HRESULT,IsEndOfStream)(THIS_ WINBOOL *pfEndOfStream) PURE;
+    STDMETHOD_(HRESULT,Read)(THIS_ BYTE *pb,ULONG cb,ULONG *pcbRead) PURE;
+    STDMETHOD_(HRESULT,Seek)(THIS_ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,LONGLONG qwSeekOffset,DWORD dwSeekFlags,QWORD *pqwCurrentPosition) PURE;
+    STDMETHOD_(HRESULT,SetCurrentPosition)(THIS_ QWORD qwPosition) PURE;
+    STDMETHOD_(HRESULT,SetLength)(THIS_ QWORD qwLength) PURE;
+    STDMETHOD_(HRESULT,Write)(THIS_ const BYTE *pb,ULONG cb,ULONG *pcbWritten) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFByteStream_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFByteStream_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFByteStream_Release(This) (This)->pVtbl->Release(This)
+#define IMFByteStream_GetParameters(This,pdwFlags,pdwQueue) (This)->lpVtbl->GetParameters(This,pdwFlags,pdwQueue)
+#define IMFByteStream_MFInvokeCallback(This,pAsyncResult) (This)->lpVtbl->MFInvokeCallback(This,pAsyncResult)
+#define IMFByteStream_BeginRead(This,pb,cb,pCallback,punkState) (This)->lpVtbl->BeginRead(This,pb,cb,pCallback,punkState)
+#define IMFByteStream_BeginWrite(This,pb,cb,pCallback,punkState) (This)->lpVtbl->BeginWrite(This,pb,cb,pCallback,punkState)
+#define IMFByteStream_Close() (This)->lpVtbl->Close(This)
+#define IMFByteStream_EndRead(This,pResult,pcbRead) (This)->lpVtbl->EndRead(This,pResult,pcbRead)
+#define IMFByteStream_EndWrite(This,pResult,pcbWritten) (This)->lpVtbl->EndWrite(This,pResult,pcbWritten)
+#define IMFByteStream_Flush() (This)->lpVtbl->Flush(This)
+#define IMFByteStream_GetCapabilities(This,pdwCapabilities) (This)->lpVtbl->GetCapabilities(This,pdwCapabilities)
+#define IMFByteStream_GetCurrentPosition(This,pqwPosition) (This)->lpVtbl->GetCurrentPosition(This,pqwPosition)
+#define IMFByteStream_GetLength(This,pqwLength) (This)->lpVtbl->GetLength(This,pqwLength)
+#define IMFByteStream_IsEndOfStream(This,pfEndOfStream) (This)->lpVtbl->IsEndOfStream(This,pfEndOfStream)
+#define IMFByteStream_Read(This,pb,cb,pcbRead) (This)->lpVtbl->Read(This,pb,cb,pcbRead)
+#define IMFByteStream_Seek(This,SeekOrigin,qwSeekOffset,dwSeekFlags,pqwCurrentPosition) (This)->lpVtbl->Seek(This,SeekOrigin,qwSeekOffset,dwSeekFlags,pqwCurrentPosition)
+#define IMFByteStream_SetCurrentPosition(This,qwPosition) (This)->lpVtbl->SetCurrentPosition(This,qwPosition)
+#define IMFByteStream_SetLength(This,qwLength) (This)->lpVtbl->SetLength(This,qwLength)
+#define IMFByteStream_Write(This,pb,cb,pcbWritten) (This)->lpVtbl->Write(This,pb,cb,pcbWritten)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFMediaEvent
+DECLARE_INTERFACE_(IMFMediaEvent,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFMediaEvent methods */
+    STDMETHOD_(HRESULT,GetExtendedType)(THIS_ GUID *pguidExtendedType) PURE;
+    STDMETHOD_(HRESULT,GetStatus)(THIS_ HRESULT *phrStatus) PURE;
+    STDMETHOD_(HRESULT,GetType)(THIS_ MediaEventType *pmet) PURE;
+    STDMETHOD_(HRESULT,GetValue)(THIS_ PROPVARIANT *pvValue) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFMediaEvent_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaEvent_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFMediaEvent_Release(This) (This)->pVtbl->Release(This)
+#define IMFMediaEvent_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFMediaEvent_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFMediaEvent_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFMediaEvent_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFMediaEvent_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFMediaEvent_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFMediaEvent_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFMediaEvent_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFMediaEvent_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFMediaEvent_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFMediaEvent_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFMediaEvent_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFMediaEvent_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFMediaEvent_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFMediaEvent_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFMediaEvent_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFMediaEvent_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFMediaEvent_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFMediaEvent_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFMediaEvent_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFMediaEvent_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFMediaEvent_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFMediaEvent_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFMediaEvent_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFMediaEvent_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFMediaEvent_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFMediaEvent_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFMediaEvent_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFMediaEvent_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFMediaEvent_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFMediaEvent_GetExtendedType(This,pguidExtendedType) (This)->lpVtbl->GetExtendedType(This,pguidExtendedType)
+#define IMFMediaEvent_GetStatus(This,phrStatus) (This)->lpVtbl->GetStatus(This,phrStatus)
+#define IMFMediaEvent_GetType(This,pmet) (This)->lpVtbl->GetType(This,pmet)
+#define IMFMediaEvent_GetValue(This,pvValue) (This)->lpVtbl->GetValue(This,pvValue)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFVideoMediaType
+DECLARE_INTERFACE_(IMFVideoMediaType,IMFMediaType)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFMediaType methods */
+    STDMETHOD_(HRESULT,FreeRepresentation)(THIS_ GUID guidRepresentation,void *pvRepresentation) PURE;
+    STDMETHOD_(HRESULT,GetMajorType)(THIS_ GUID *pguidMajorType) PURE;
+    STDMETHOD_(HRESULT,GetRepresentation)(THIS_ GUID guidRepresentation,void **ppvRepresentation) PURE;
+    STDMETHOD_(HRESULT,IsCompressedFormat)(THIS_ WINBOOL *pfCompressed) PURE;
+    STDMETHOD_(HRESULT,IsEqual)(THIS_ IMFMediaType *pIMediaType,DWORD *pdwFlags) PURE;
+
+    /* IMFVideoMediaType methods */
+    STDMETHOD_(const MFVIDEOFORMAT *,GetVideoFormat)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetVideoRepresentation)(THIS_ GUID guidRepresentation,LPVOID *ppvRepresentation,LONG lStride) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFVideoMediaType_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFVideoMediaType_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFVideoMediaType_Release(This) (This)->pVtbl->Release(This)
+#define IMFVideoMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFVideoMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFVideoMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFVideoMediaType_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFVideoMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFVideoMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFVideoMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFVideoMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFVideoMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFVideoMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFVideoMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFVideoMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFVideoMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFVideoMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFVideoMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFVideoMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFVideoMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFVideoMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFVideoMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFVideoMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFVideoMediaType_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFVideoMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFVideoMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFVideoMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFVideoMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFVideoMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFVideoMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFVideoMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFVideoMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFVideoMediaType_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFVideoMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
+#define IMFVideoMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
+#define IMFVideoMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
+#define IMFVideoMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
+#define IMFVideoMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
+#define IMFVideoMediaType_GetVideoFormat() (This)->lpVtbl->GetVideoFormat(This)
+#define IMFVideoMediaType_GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride) (This)->lpVtbl->GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFCollection
+DECLARE_INTERFACE_(IMFCollection,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFCollection methods */
+    STDMETHOD_(HRESULT,AddElement)(THIS_ IUnknown *pUnkElement) PURE;
+    STDMETHOD_(HRESULT,GetElement)(THIS_ DWORD dwElementIndex,IUnknown **ppUnkElement) PURE;
+    STDMETHOD_(HRESULT,GetElementCount)(THIS_ DWORD *pcElements) PURE;
+    STDMETHOD_(HRESULT,InsertElementAt)(THIS_ DWORD dwIndex,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,RemoveAllElements)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoveElement)(THIS_ DWORD dwElementIndex,IUnknown **ppUnkElement) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFCollection_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFCollection_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFCollection_Release(This) (This)->pVtbl->Release(This)
+#define IMFCollection_AddElement(This,pUnkElement) (This)->lpVtbl->AddElement(This,pUnkElement)
+#define IMFCollection_GetElement(This,dwElementIndex,ppUnkElement) (This)->lpVtbl->GetElement(This,dwElementIndex,ppUnkElement)
+#define IMFCollection_GetElementCount(This,pcElements) (This)->lpVtbl->GetElementCount(This,pcElements)
+#define IMFCollection_InsertElementAt(This,dwIndex,pUnknown) (This)->lpVtbl->InsertElementAt(This,dwIndex,pUnknown)
+#define IMFCollection_RemoveAllElements() (This)->lpVtbl->RemoveAllElements(This)
+#define IMFCollection_RemoveElement(This,dwElementIndex,ppUnkElement) (This)->lpVtbl->RemoveElement(This,dwElementIndex,ppUnkElement)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+#undef  INTERFACE
+#define INTERFACE IMFPluginControl
+DECLARE_INTERFACE_(IMFPluginControl,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFPluginControl methods */
+    STDMETHOD_(HRESULT,GetDisabledByIndex)(THIS_ DWORD pluginType,DWORD index,CLSID *clsid) PURE;
+    STDMETHOD_(HRESULT,GetPreferredClsid)(THIS_ DWORD pluginType,LPCWSTR selector,CLSID *clsid) PURE;
+    STDMETHOD_(HRESULT,GetPreferredClsidByIndex)(THIS_ DWORD pluginType,DWORD index,LPWSTR *selector,CLSID *clsid) PURE;
+    STDMETHOD_(HRESULT,IsDisabled)(THIS_ DWORD pluginType,REFCLSID clsid) PURE;
+    STDMETHOD_(HRESULT,SetDisabled)(THIS_ DWORD pluginType,REFCLSID clsid,WINBOOL disabled) PURE;
+    STDMETHOD_(HRESULT,SetPreferredClsid)(THIS_ DWORD pluginType,LPCWSTR selector,const CLSID *clsid) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPluginControl_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPluginControl_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPluginControl_Release(This) (This)->pVtbl->Release(This)
+#define IMFPluginControl_GetDisabledByIndex(This,pluginType,index,clsid) (This)->lpVtbl->GetDisabledByIndex(This,pluginType,index,clsid)
+#define IMFPluginControl_GetPreferredClsid(This,pluginType,selector,clsid) (This)->lpVtbl->GetPreferredClsid(This,pluginType,selector,clsid)
+#define IMFPluginControl_GetPreferredClsidByIndex(This,pluginType,index,selector,clsid) (This)->lpVtbl->GetPreferredClsidByIndex(This,pluginType,index,selector,clsid)
+#define IMFPluginControl_IsDisabled(This,pluginType,clsid) (This)->lpVtbl->IsDisabled(This,pluginType,clsid)
+#define IMFPluginControl_SetDisabled(This,pluginType,clsid,disabled) (This)->lpVtbl->SetDisabled(This,pluginType,clsid,disabled)
+#define IMFPluginControl_SetPreferredClsid(This,pluginType,selector,clsid) (This)->lpVtbl->SetPreferredClsid(This,pluginType,selector,clsid)
+#endif /*COBJMACROS*/
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+HRESULT WINAPI Invoke(IMFAsyncResult *pAsyncResult);
+HRESULT WINAPI MFDeserializeAttributesFromStream(IMFAttributes *pAttr,DWORD dwOptions,IStream *pStm);
+HRESULT WINAPI MFDeserializePresentationDescriptor(DWORD cbData,BYTE *pbData,IMFPresentationDescriptor **ppPD);
+HRESULT WINAPI MFGetAttribute2UINT32asUINT64(IMFAttributes *pAttributes,REFGUID guidKey,UINT32 *punHigh32,UINT32 *punLow32);
+HRESULT WINAPI MFSerializeAttributesToStream(IMFAttributes *pAttr,DWORD dwOptions,IStream *pStm);
+
+typedef enum MF_OBJECT_TYPE MF_OBJECT_TYPE;
+
+/*[call_as(BeginCreateObjectFromByteStream)]*/
+HRESULT WINAPI RemoteBeginCreateObjectFromByteStream(
+    IMFByteStream* pByteStream,
+    LPCWSTR pwszURL,
+    IPropertyStore *pProps,
+    DWORD dwFlags,
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginCreateObjectFromURL)]*/
+HRESULT WINAPI RemoteBeginCreateObjectFromURL(
+    LPCWSTR pwszURL,
+    DWORD dwFlags,
+    IPropertyStore *pProps,
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginEnableContent)]*/
+HRESULT WINAPI RemoteBeginEnableContent(
+    REFCLSID clsidType,
+    BYTE *pbData,
+    DWORD cbData,
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginGetEvent)]*/
+HRESULT WINAPI RemoteBeginGetEvent(
+    IMFRemoteAsyncCallback* pCallback
+);
+
+/*[call_as(BeginRegisterPlatformWorkQueueWithMMCSS)]*/
+HRESULT WINAPI RemoteBeginRegisterPlatformWorkQueueWithMMCSS(
+    DWORD dwPlatformWorkQueue,
+    LPCWSTR wszClass,
+    DWORD dwTaskId,
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginRegisterTopologyWorkQueuesWithMMCSS)]*/
+HRESULT WINAPI RemoteBeginRegisterTopologyWorkQueuesWithMMCSS(
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginUnregisterPlatformWorkQueueWithMMCSS)]*/
+HRESULT WINAPI RemoteBeginUnregisterPlatformWorkQueueWithMMCSS(
+    DWORD dwPlatformWorkQueue,
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(BeginUnregisterTopologyWorkQueuesWithMMCSS)]*/
+HRESULT WINAPI RemoteBeginUnregisterTopologyWorkQueuesWithMMCSS(
+    IMFRemoteAsyncCallback *pCallback
+);
+
+/*[call_as(CreateObjectByCLSID)]*/
+HRESULT WINAPI RemoteCreateObjectByCLSID( 
+    REFCLSID clsid,
+    BYTE *pbData, 
+    DWORD cbData, 
+    REFIID riid,
+    void **ppv
+);
+
+/*[call_as(CreatePresentationDescriptor)]*/
+HRESULT WINAPI RemoteCreatePresentationDescriptor(
+    DWORD *pcbPD,
+    BYTE **pbPD,
+    IMFPresentationDescriptor **ppRemotePD
+);
+
+/*call_as(EndCreateObjectFromByteStream)]*/
+HRESULT WINAPI RemoteEndCreateObjectFromByteStream(
+    IUnknown *pResult,
+    MF_OBJECT_TYPE *pObjectType,
+    IUnknown **ppObject
+);
+
+/*[call_as(EndCreateObjectFromURL)]*/
+HRESULT WINAPI RemoteEndCreateObjectFromURL(
+    IUnknown *pResult,
+    MF_OBJECT_TYPE *pObjectType,
+    IUnknown **ppObject
+);
+
+/*[call_as(EndEnableContent)]*/
+HRESULT WINAPI RemoteEndEnableContent(
+    IUnknown *pResult
+);
+
+/*[call_as(EndGetEvent)]*/
+HRESULT WINAPI RemoteEndGetEvent(
+    IUnknown *pResult,
+    DWORD *pcbEvent,
+    BYTE **ppbEvent
+);
+
+/*[call_as(EndRegisterPlatformWorkQueueWithMMCSS)]*/
+HRESULT WINAPI RemoteEndRegisterPlatformWorkQueueWithMMCSS(
+    IUnknown *pResult,
+    DWORD *pdwTaskId
+);
+
+/*[call_as(EndRegisterTopologyWorkQueuesWithMMCSS)]*/
+HRESULT WINAPI RemoteEndRegisterTopologyWorkQueuesWithMMCSS(
+    IUnknown *pResult
+);
+
+/*[call_as(EndUnregisterPlatformWorkQueueWithMMCSS)]*/
+HRESULT WINAPI RemoteEndUnregisterPlatformWorkQueueWithMMCSS(
+    IUnknown *pResult
+);
+
+/*[call_as(EndUnregisterTopologyWorkQueuesWithMMCSS)]*/
+HRESULT WINAPI RemoteEndUnregisterTopologyWorkQueuesWithMMCSS(
+    IUnknown *pResult
+);
+
+/*[call_as(GetCurrentMediaType)]*/
+HRESULT WINAPI RemoteGetCurrentMediaType(
+    BYTE **ppbData,
+    DWORD *pcbData
+);
+
+/*[call_as(GetInputPrefType)]*/
+HRESULT WINAPI RemoteGetInputPrefType(
+    DWORD dwInputIndex,
+    DWORD *pcbData,
+    BYTE **ppbData
+);
+
+/*call_as(GetOutputPrefType)]*/
+HRESULT WINAPI RemoteGetOutputPrefType(
+    DWORD dwOutputIndex,
+    DWORD *pcbData,
+    BYTE **ppbData
+);
+
+/*[call_as(RequestSample)]*/
+HRESULT WINAPI RemoteRequestSample();
+
+#if (_WIN32_WINNT >= 0x0601)
+HRESULT WINAPI MFGetPluginControl(IMFPluginControl **ppPluginControl);
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_MFOBJECTS */
diff --git a/mingw-w64-headers/include/mfplay.h b/mingw-w64-headers/include/mfplay.h
new file mode 100644
index 0000000..516f583
--- /dev/null
+++ b/mingw-w64-headers/include/mfplay.h
@@ -0,0 +1,345 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFPLAY
+#define _INC_MFPLAY
+#include <evr.h>
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum _MFP_CREATION_OPTIONS {
+  MFP_OPTION_NONE                             = 0,
+  MFP_OPTION_FREE_THREADED_CALLBACK           = 0x00000001,
+  MFP_OPTION_NO_MMCSS                         = 0x00000002,
+  MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION   = 0x00000004 
+} _MFP_CREATION_OPTIONS;
+
+typedef enum _MFP_MEDIAITEM_CHARACTERISTICS {
+  MFP_MEDIAITEM_IS_LIVE         = 0x00000001,
+  MFP_MEDIAITEM_CAN_SEEK        = 0x00000002,
+  MFP_MEDIAITEM_CAN_PAUSE       = 0x00000004,
+  MFP_MEDIAITEM_HAS_SLOW_SEEK   = 0x00000008 
+} _MFP_MEDIAITEM_CHARACTERISTICS;
+
+typedef enum _MFP_CREDENTIAL_FLAGS {
+  MFP_CREDENTIAL_PROMPT           = 0x00000001,
+  MFP_CREDENTIAL_SAVE             = 0x00000002,
+  MFP_CREDENTIAL_DO_NOT_CACHE     = 0x00000004,
+  MFP_CREDENTIAL_CLEAR_TEXT       = 0x00000008,
+  MFP_CREDENTIAL_PROXY            = 0x00000010,
+  MFP_CREDENTIAL_LOGGED_ON_USER   = 0x00000020 
+} _MFP_CREDENTIAL_FLAGS;
+
+enum _MFT_ENUM_FLAG {
+  MFT_ENUM_FLAG_SYNCMFT          = 0x00000001,
+  MFT_ENUM_FLAG_ASYNCMFT         = 0x00000002,
+  MFT_ENUM_FLAG_HARDWARE         = 0x00000004,
+  MFT_ENUM_FLAG_FIELDOFUSE       = 0x00000008,
+  MFT_ENUM_FLAG_LOCALMFT         = 0x00000010,
+  MFT_ENUM_FLAG_TRANSCODE_ONLY   = 0x00000020,
+  MFT_ENUM_FLAG_SORTANDFILTER    = 0x00000040,
+  MFT_ENUM_FLAG_ALL              = 0x0000003F 
+};
+
+typedef enum MFP_EVENT_TYPE {
+  MFP_EVENT_TYPE_PLAY                      = 0,
+  MFP_EVENT_TYPE_PAUSE                     = 1,
+  MFP_EVENT_TYPE_STOP                      = 2,
+  MFP_EVENT_TYPE_POSITION_SET              = 3,
+  MFP_EVENT_TYPE_RATE_SET                  = 4,
+  MFP_EVENT_TYPE_MEDIAITEM_CREATED         = 5,
+  MFP_EVENT_TYPE_MEDIAITEM_SET             = 6,
+  MFP_EVENT_TYPE_FRAME_STEP                = 7,
+  MFP_EVENT_TYPE_MEDIAITEM_CLEARED         = 8,
+  MFP_EVENT_TYPE_MF                        = 9,
+  MFP_EVENT_TYPE_ERROR                     = 10,
+  MFP_EVENT_TYPE_PLAYBACK_ENDED            = 11,
+  MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL   = 12 
+} MFP_EVENT_TYPE;
+
+typedef enum MFP_MEDIAPLAYER_STATE {
+  MFP_MEDIAPLAYER_STATE_EMPTY      = 0x00000000,
+  MFP_MEDIAPLAYER_STATE_STOPPED    = 0x00000001,
+  MFP_MEDIAPLAYER_STATE_PLAYING    = 0x00000002,
+  MFP_MEDIAPLAYER_STATE_PAUSED     = 0x00000003,
+  MFP_MEDIAPLAYER_STATE_SHUTDOWN   = 0x00000004 
+} MFP_MEDIAPLAYER_STATE;
+
+#undef  INTERFACE
+#define INTERFACE IMFPMediaItem
+DECLARE_INTERFACE_(IMFPMediaItem,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFPMediaItem methods */
+    STDMETHOD_(HRESULT,GetCharacteristics)(THIS_ MFP_MEDIAITEM_CHARACTERISTICS *pCharacteristics) PURE;
+    STDMETHOD_(HRESULT,GetDuration)(THIS_ REFGUID guidPositionType,PROPVARIANT *pvDurationValue) PURE;
+    STDMETHOD_(HRESULT,GetMediaPlayer)(THIS_ IMFPMediaPlayer **ppMediaPlayer) PURE;
+    STDMETHOD_(HRESULT,GetMetadata)(THIS_ IPropertyStore **ppMetadataStore) PURE;
+    STDMETHOD_(HRESULT,GetNumberOfStreams)(THIS_ DWORD *pdwStreamCount) PURE;
+    STDMETHOD_(HRESULT,GetObject)(THIS_ IUnknown **ppIUnknown) PURE;
+    STDMETHOD_(HRESULT,GetPresentationAttribute)(THIS_ REFGUID guidMFAttribute,PROPVARIANT *pvValue) PURE;
+    STDMETHOD_(HRESULT,GetStartStopPosition)(THIS_ GUID *pguidStartPositionType,PROPVARIANT *pvStartValue,GUID *pguidStopPositionType,PROPVARIANT *pvStopValue) PURE;
+    STDMETHOD_(HRESULT,GetStreamAttribute)(THIS_ DWORD dwStreamIndex,REFGUID guidMFAttribute,PROPVARIANT *pvValue) PURE;
+    STDMETHOD_(HRESULT,GetStreamSelection)(THIS_ DWORD dwStreamIndex,WINBOOL *pfEnabled) PURE;
+    STDMETHOD_(HRESULT,GetURL)(THIS_ LPWSTR *ppwszURL) PURE;
+    STDMETHOD_(HRESULT,GetUserData)(THIS_ DWORD_PTR *pdwUserData) PURE;
+    STDMETHOD_(HRESULT,HasAudio)(THIS_ WINBOOL *pfHasAudio,WINBOOL *pfSelected) PURE;
+    STDMETHOD_(HRESULT,HasVideo)(THIS_ WINBOOL *pfHasVideo,WINBOOL *pfSelected) PURE;
+    STDMETHOD_(HRESULT,IsProtected)(THIS_ WINBOOL *pfProtected) PURE;
+    STDMETHOD_(HRESULT,SetStartStopPosition)(THIS_ const GUID *pguidStartPositionType,const PROPVARIANT *pvStartValue,const GUID *pguidStopPositionType,const PROPVARIANT *pvStopValue) PURE;
+    STDMETHOD_(HRESULT,SetStreamSelection)(THIS_ DWORD dwStreamIndex,WINBOOL fEnabled) PURE;
+    STDMETHOD_(HRESULT,SetStreamSink)(THIS_ DWORD dwStreamIndex,IUnknown *pMediaSink) PURE;
+    STDMETHOD_(HRESULT,SetUserData)(THIS_ DWORD_PTR dwUserData) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPMediaItem_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPMediaItem_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPMediaItem_Release(This) (This)->pVtbl->Release(This)
+#define IMFPMediaItem_GetCharacteristics(This,pCharacteristics) (This)->lpVtbl->GetCharacteristics(This,pCharacteristics)
+#define IMFPMediaItem_GetDuration(This,guidPositionType,pvDurationValue) (This)->lpVtbl->GetDuration(This,guidPositionType,pvDurationValue)
+#define IMFPMediaItem_GetMediaPlayer(This,ppMediaPlayer) (This)->lpVtbl->GetMediaPlayer(This,ppMediaPlayer)
+#define IMFPMediaItem_GetMetadata(This,ppMetadataStore) (This)->lpVtbl->GetMetadata(This,ppMetadataStore)
+#define IMFPMediaItem_GetNumberOfStreams(This,pdwStreamCount) (This)->lpVtbl->GetNumberOfStreams(This,pdwStreamCount)
+#define IMFPMediaItem_GetObject(This,ppIUnknown) (This)->lpVtbl->GetObject(This,ppIUnknown)
+#define IMFPMediaItem_GetPresentationAttribute(This,guidMFAttribute,pvValue) (This)->lpVtbl->GetPresentationAttribute(This,guidMFAttribute,pvValue)
+#define IMFPMediaItem_GetStartStopPosition(This,pguidStartPositionType,pvStartValue,pguidStopPositionType,pvStopValue) (This)->lpVtbl->GetStartStopPosition(This,pguidStartPositionType,pvStartValue,pguidStopPositionType,pvStopValue)
+#define IMFPMediaItem_GetStreamAttribute(This,dwStreamIndex,guidMFAttribute,pvValue) (This)->lpVtbl->GetStreamAttribute(This,dwStreamIndex,guidMFAttribute,pvValue)
+#define IMFPMediaItem_GetStreamSelection(This,dwStreamIndex,pfEnabled) (This)->lpVtbl->GetStreamSelection(This,dwStreamIndex,pfEnabled)
+#define IMFPMediaItem_GetURL(This,ppwszURL) (This)->lpVtbl->GetURL(This,ppwszURL)
+#define IMFPMediaItem_GetUserData(This,pdwUserData) (This)->lpVtbl->GetUserData(This,pdwUserData)
+#define IMFPMediaItem_HasAudio(This,pfHasAudio,pfSelected) (This)->lpVtbl->HasAudio(This,pfHasAudio,pfSelected)
+#define IMFPMediaItem_HasVideo(This,pfHasVideo,pfSelected) (This)->lpVtbl->HasVideo(This,pfHasVideo,pfSelected)
+#define IMFPMediaItem_IsProtected(This,pfProtected) (This)->lpVtbl->IsProtected(This,pfProtected)
+#define IMFPMediaItem_SetStartStopPosition(This,pguidStartPositionType,pvStartValue,pguidStopPositionType,pvStopValue) (This)->lpVtbl->SetStartStopPosition(This,pguidStartPositionType,pvStartValue,pguidStopPositionType,pvStopValue)
+#define IMFPMediaItem_SetStreamSelection(This,dwStreamIndex,fEnabled) (This)->lpVtbl->SetStreamSelection(This,dwStreamIndex,fEnabled)
+#define IMFPMediaItem_SetStreamSink(This,dwStreamIndex,pMediaSink) (This)->lpVtbl->SetStreamSink(This,dwStreamIndex,pMediaSink)
+#define IMFPMediaItem_SetUserData(This,dwUserData) (This)->lpVtbl->SetUserData(This,dwUserData)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPMediaPlayer
+DECLARE_INTERFACE_(IMFPMediaPlayer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFPMediaPlayer methods */
+    STDMETHOD_(HRESULT,ClearMediaItem)(THIS) PURE;
+    STDMETHOD_(HRESULT,CreateMediaItemFromObject)(THIS_ IUnknown *pIUnknownObj,BOOL fSync,DWORD_PTR dwUserData,IMFPMediaItem **ppMediaItem) PURE;
+    STDMETHOD_(HRESULT,CreateMediaItemFromURL)(THIS_ LPCWSTR pwszURL,BOOL fSync,DWORD_PTR dwUserData,IMFPMediaItem **ppMediaItem) PURE;
+    STDMETHOD_(HRESULT,FrameStep)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetAspectRatioMode)(THIS_ DWORD *pdwAspectRatioMode) PURE;
+    STDMETHOD_(HRESULT,GetBalance)(THIS_ float *pflBalance) PURE;
+    STDMETHOD_(HRESULT,GetBorderColor)(THIS_ COLORREF *pClr) PURE;
+    STDMETHOD_(HRESULT,GetDuration)(THIS_ REFGUID guidPositionType,PROPVARIANT *pvDurationValue) PURE;
+    STDMETHOD_(HRESULT,GetIdealVideoSize)(THIS_ SIZE *pszMin,SIZE *pszMax) PURE;
+    STDMETHOD_(HRESULT,GetMediaItem)(THIS_ IMFPMediaItem **ppIMFPMediaItem) PURE;
+    STDMETHOD_(HRESULT,GetMute)(THIS_ WINBOOL *pfMute) PURE;
+    STDMETHOD_(HRESULT,GetNativeVideoSize)(THIS_ SIZE *pszVideo,SIZE *pszARVideo) PURE;
+    STDMETHOD_(HRESULT,GetPosition)(THIS_ REFGUID guidPositionType,PROPVARIANT *pvPositionValue) PURE;
+    STDMETHOD_(HRESULT,GetRate)(THIS_ float *pflRate) PURE;
+    STDMETHOD_(HRESULT,GetState)(THIS_ MFP_MEDIAPLAYER_STATE *peState) PURE;
+    STDMETHOD_(HRESULT,GetSupportedRates)(THIS_ WINBOOL fForwardDirection,float *pflSlowestRate,float *pflFastestRate) PURE;
+    STDMETHOD_(HRESULT,GetVideoSourceRect)(THIS_ MFVideoNormalizedRect *pnrcSource) PURE;
+    STDMETHOD_(HRESULT,GetVideoWindow)(THIS_ HWND *phwndVideo) PURE;
+    STDMETHOD_(HRESULT,GetVolume)(THIS_ float *pflVolume) PURE;
+    STDMETHOD_(HRESULT,InsertEffect)(THIS_ IUnknown *pEffect,WINBOOL fOptional) PURE;
+    STDMETHOD_(HRESULT,Pause)(THIS) PURE;
+    STDMETHOD_(HRESULT,Play)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoveAllEffects)(THIS) PURE;
+    STDMETHOD_(HRESULT,RemoveEffect)(THIS_ IUnknown *pEffect) PURE;
+    STDMETHOD(SetAspectRatioMode)(THIS_ DWORD dwAspectRatioMode) PURE;
+    STDMETHOD_(HRESULT,SetBalance)(THIS_ float flBalance) PURE;
+    STDMETHOD_(HRESULT,SetBorderColor)(THIS_ COLORREF Clr) PURE;
+    STDMETHOD_(HRESULT,SetMediaItem)(THIS_ IMFPMediaItem *pIMFPMediaItem) PURE;
+    STDMETHOD_(HRESULT,SetMute)(THIS_ WINBOOL fMute) PURE;
+    STDMETHOD_(HRESULT,SetPosition)(THIS_ REFGUID guidPositionType,const PROPVARIANT *pvPositionValue) PURE;
+    STDMETHOD_(HRESULT,SetRate)(THIS_ float flRate) PURE;
+    STDMETHOD_(HRESULT,SetVideoSourceRect)(THIS_ const MFVideoNormalizedRect *pnrcSource) PURE;
+    STDMETHOD_(HRESULT,SetVolume)(THIS_ float flVolume) PURE;
+    STDMETHOD_(HRESULT,Shutdown)(THIS) PURE;
+    STDMETHOD_(HRESULT,Stop)(THIS) PURE;
+    STDMETHOD_(HRESULT,UpdateVideo)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPMediaPlayer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPMediaPlayer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPMediaPlayer_Release(This) (This)->pVtbl->Release(This)
+#define IMFPMediaPlayer_ClearMediaItem() (This)->lpVtbl->ClearMediaItem(This)
+#define IMFPMediaPlayer_CreateMediaItemFromObject(This,pIUnknownObj,fSync,dwUserData,ppMediaItem) (This)->lpVtbl->CreateMediaItemFromObject(This,pIUnknownObj,fSync,dwUserData,ppMediaItem)
+#define IMFPMediaPlayer_CreateMediaItemFromURL(This,pwszURL,fSync,dwUserData,ppMediaItem) (This)->lpVtbl->CreateMediaItemFromURL(This,pwszURL,fSync,dwUserData,ppMediaItem)
+#define IMFPMediaPlayer_FrameStep() (This)->lpVtbl->FrameStep(This)
+#define IMFPMediaPlayer_GetAspectRatioMode(This,pdwAspectRatioMode) (This)->lpVtbl->GetAspectRatioMode(This,pdwAspectRatioMode)
+#define IMFPMediaPlayer_GetBalance(This,pflBalance) (This)->lpVtbl->GetBalance(This,pflBalance)
+#define IMFPMediaPlayer_GetBorderColor(This,pClr) (This)->lpVtbl->GetBorderColor(This,pClr)
+#define IMFPMediaPlayer_GetDuration(This,guidPositionType,pvDurationValue) (This)->lpVtbl->GetDuration(This,guidPositionType,pvDurationValue)
+#define IMFPMediaPlayer_GetIdealVideoSize(This,pszMin,pszMax) (This)->lpVtbl->GetIdealVideoSize(This,pszMin,pszMax)
+#define IMFPMediaPlayer_GetMediaItem(This,ppIMFPMediaItem) (This)->lpVtbl->GetMediaItem(This,ppIMFPMediaItem)
+#define IMFPMediaPlayer_GetMute(This,pfMute) (This)->lpVtbl->GetMute(This,pfMute)
+#define IMFPMediaPlayer_GetNativeVideoSize(This,pszVideo,pszARVideo) (This)->lpVtbl->GetNativeVideoSize(This,pszVideo,pszARVideo)
+#define IMFPMediaPlayer_GetPosition(This,guidPositionType,pvPositionValue) (This)->lpVtbl->GetPosition(This,guidPositionType,pvPositionValue)
+#define IMFPMediaPlayer_GetRate(This,pflRate) (This)->lpVtbl->GetRate(This,pflRate)
+#define IMFPMediaPlayer_GetState(This,peState) (This)->lpVtbl->GetState(This,peState)
+#define IMFPMediaPlayer_GetSupportedRates(This,fForwardDirection,pflSlowestRate,pflFastestRate) (This)->lpVtbl->GetSupportedRates(This,fForwardDirection,pflSlowestRate,pflFastestRate)
+#define IMFPMediaPlayer_GetVideoSourceRect(This,pnrcSource) (This)->lpVtbl->GetVideoSourceRect(This,pnrcSource)
+#define IMFPMediaPlayer_GetVideoWindow(This,phwndVideo) (This)->lpVtbl->GetVideoWindow(This,phwndVideo)
+#define IMFPMediaPlayer_GetVolume(This,pflVolume) (This)->lpVtbl->GetVolume(This,pflVolume)
+#define IMFPMediaPlayer_InsertEffect(This,pEffect,fOptional) (This)->lpVtbl->InsertEffect(This,pEffect,fOptional)
+#define IMFPMediaPlayer_Pause() (This)->lpVtbl->Pause(This)
+#define IMFPMediaPlayer_Play() (This)->lpVtbl->Play(This)
+#define IMFPMediaPlayer_RemoveAllEffects() (This)->lpVtbl->RemoveAllEffects(This)
+#define IMFPMediaPlayer_RemoveEffect(This,pEffect) (This)->lpVtbl->RemoveEffect(This,pEffect)
+#define IMFPMediaPlayer_SetAspectRatioMode(This,dwAspectRatioMode) (This)->lpVtbl->SetAspectRatioMode(This,dwAspectRatioMode)
+#define IMFPMediaPlayer_SetBalance(This,flBalance) (This)->lpVtbl->SetBalance(This,flBalance)
+#define IMFPMediaPlayer_SetBorderColor(This,Clr) (This)->lpVtbl->SetBorderColor(This,Clr)
+#define IMFPMediaPlayer_SetMediaItem(This,pIMFPMediaItem) (This)->lpVtbl->SetMediaItem(This,pIMFPMediaItem)
+#define IMFPMediaPlayer_SetMute(This,fMute) (This)->lpVtbl->SetMute(This,fMute)
+#define IMFPMediaPlayer_SetPosition(This,guidPositionType,pvPositionValue) (This)->lpVtbl->SetPosition(This,guidPositionType,pvPositionValue)
+#define IMFPMediaPlayer_SetRate(This,flRate) (This)->lpVtbl->SetRate(This,flRate)
+#define IMFPMediaPlayer_SetVideoSourceRect(This,pnrcSource) (This)->lpVtbl->SetVideoSourceRect(This,pnrcSource)
+#define IMFPMediaPlayer_SetVolume(This,flVolume) (This)->lpVtbl->SetVolume(This,flVolume)
+#define IMFPMediaPlayer_Shutdown() (This)->lpVtbl->Shutdown(This)
+#define IMFPMediaPlayer_Stop() (This)->lpVtbl->Stop(This)
+#define IMFPMediaPlayer_UpdateVideo() (This)->lpVtbl->UpdateVideo(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFPMediaPlayerCallback
+DECLARE_INTERFACE_(IMFPMediaPlayerCallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFPMediaPlayerCallback methods */
+    STDMETHOD(OnMediaPlayerEvent)(THIS_ MFP_EVENT_HEADER *pEventHeader) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFPMediaPlayerCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPMediaPlayerCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFPMediaPlayerCallback_Release(This) (This)->pVtbl->Release(This)
+#define IMFPMediaPlayerCallback_OnMediaPlayerEvent(This,pEventHeader) (This)->lpVtbl->OnMediaPlayerEvent(This,pEventHeader)
+#endif /*COBJMACROS*/
+
+typedef struct MFP_EVENT_HEADER {
+  MFP_EVENT_TYPE        eEventType;
+  HRESULT               hrEvent;
+  IMFPMediaPlayer       *pMediaPlayer;
+  MFP_MEDIAPLAYER_STATE eState;
+  IPropertyStore        *pPropertyStore;
+} MFP_EVENT_HEADER;
+
+typedef struct MFP_PLAY_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_PLAY_EVENT;
+
+typedef struct MFP_PAUSE_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_PAUSE_EVENT;
+
+typedef struct MFP_STOP_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_STOP_EVENT;
+
+typedef struct MFP_POSITION_SET_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_POSITION_SET_EVENT;
+
+typedef struct MFP_RATE_SET_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+  float            flRate;
+} MFP_RATE_SET_EVENT;
+
+typedef struct MFP_MEDIAITEM_CREATED_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+  DWORD_PTR        dwUserData;
+} MFP_MEDIAITEM_CREATED_EVENT;
+
+typedef struct MFP_MEDIAITEM_SET_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_MEDIAITEM_SET_EVENT;
+
+typedef struct MFP_FRAME_STEP_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_FRAME_STEP_EVENT;
+
+typedef struct MFP_MEDIAITEM_CLEARED_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_MEDIAITEM_CLEARED_EVENT;
+
+typedef struct MFP_MF_EVENT {
+  MFP_EVENT_HEADER header;
+  MediaEventType   MFEventType;
+  IMFMediaEvent    *pMFMediaEvent;
+  IMFPMediaItem    *pMediaItem;
+} MFP_MF_EVENT;
+
+typedef struct MFP_ERROR_EVENT {
+  MFP_EVENT_HEADER header;
+} MFP_ERROR_EVENT;
+
+typedef struct MFP_PLAYBACK_ENDED_EVENT {
+  MFP_EVENT_HEADER header;
+  IMFPMediaItem    *pMediaItem;
+} MFP_PLAYBACK_ENDED_EVENT;
+
+typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT {
+  MFP_EVENT_HEADER     header;
+  DWORD_PTR            dwUserData;
+  BOOL                 fProceedWithAuthentication;
+  HRESULT              hrAuthenticationStatus;
+  LPCWSTR              pwszURL;
+  LPCWSTR              pwszSite;
+  LPCWSTR              pwszRealm;
+  LPCWSTR              pwszPackage;
+  LONG                 nRetries;
+  MFP_CREDENTIAL_FLAGS flags;
+  IMFNetCredential     *pCredential;
+} MFP_ACQUIRE_USER_CREDENTIAL_EVENT;
+
+typedef UINT32 MFP_CREATION_OPTIONS;
+typedef UINT32 MFP_MEDIAITEM_CHARACTERISTICS;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFPCreateMediaPlayer(LPCWSTR pwszURL,WINBOOL fStartPlayback,MFP_CREATION_OPTIONS creationOptions,IMFPMediaPlayerCallback *pCallback,HWND hWnd,IMFPMediaPlayer **ppMediaPlayer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*_INC_MFPLAY*/
diff --git a/mingw-w64-headers/include/mfreadwrite.h b/mingw-w64-headers/include/mfreadwrite.h
new file mode 100644
index 0000000..28f369d
--- /dev/null
+++ b/mingw-w64-headers/include/mfreadwrite.h
@@ -0,0 +1,143 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFREADWRITE
+#define _INC_MFREADWRITE
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef enum MF_SOURCE_READER_FLAG {
+  MF_SOURCE_READERF_ERROR                     = 0x00000001,
+  MF_SOURCE_READERF_ENDOFSTREAM               = 0x00000002,
+  MF_SOURCE_READERF_NEWSTREAM                 = 0x00000004,
+  MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED    = 0x00000010,
+  MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED   = 0x00000020,
+  MF_SOURCE_READERF_STREAMTICK                = 0x00000100 
+} MF_SOURCE_READER_FLAG;
+
+typedef struct _MF_SINK_WRITER_STATISTICS {
+  DWORD    cb;
+  LONGLONG llLastTimestampReceived;
+  LONGLONG llLastTimestampEncoded;
+  LONGLONG llLastTimestampProcessed;
+  LONGLONG llLastStreamTickReceived;
+  LONGLONG llLastSinkSampleRequest;
+  QWORD    qwNumSamplesReceived;
+  QWORD    qwNumSamplesEncoded;
+  QWORD    qwNumSamplesProcessed;
+  QWORD    qwNumStreamTicksReceived;
+  DWORD    dwByteCountQueued;
+  QWORD    qwByteCountProcessed;
+  DWORD    dwNumOutstandingSinkSampleRequests;
+  DWORD    dwAverageSampleRateReceived;
+  DWORD    dwAverageSampleRateEncoded;
+  DWORD    dwAverageSampleRateProcessed;
+} MF_SINK_WRITER_STATISTICS;
+
+#undef  INTERFACE
+#define INTERFACE IMFSinkWriter
+DECLARE_INTERFACE_(IMFSinkWriter,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFSinkWriter methods */
+    STDMETHOD_(HRESULT,AddStream)(THIS_ IMFMediaType *pTargetMediaType,DWORD *pdwStreamIndex) PURE;
+    STDMETHOD_(HRESULT,BeginWriting)(THIS) PURE;
+    STDMETHOD_(HRESULT,Finalize)(THIS) PURE;
+    STDMETHOD_(HRESULT,Flush)(THIS_ DWORD dwStreamIndex) PURE;
+    STDMETHOD_(HRESULT,GetServiceForStream)(THIS_ DWORD dwStreamIndex,REFGUID guidService,REFIID riid,LPVOID *ppvObject) PURE;
+    STDMETHOD_(HRESULT,GetStatistics)(THIS_ DWORD dwStreamIndex,MF_SINK_WRITER_STATISTICS *pStats) PURE;
+    STDMETHOD_(HRESULT,NotifyEndOfSegment)(THIS_ DWORD dwStreamIndex) PURE;
+    STDMETHOD_(HRESULT,PlaceMarker)(THIS_ DWORD dwStreamIndex,LPVOID pvContext) PURE;
+    STDMETHOD_(HRESULT,SendStreamTick)(THIS_ DWORD dwStreamIndex,LONGLONG llTimestamp) PURE;
+    STDMETHOD_(HRESULT,SetInputMediaType)(THIS_ DWORD dwStreamIndex,IMFMediaType *pInputMediaType,IMFAttributes *pEncodingParameters) PURE;
+    STDMETHOD_(HRESULT,WriteSample)(THIS_ DWORD dwStreamIndex,IMFSample *pSample) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSinkWriter_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSinkWriter_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSinkWriter_Release(This) (This)->pVtbl->Release(This)
+#define IMFSinkWriter_AddStream(This,pTargetMediaType,pdwStreamIndex) (This)->lpVtbl->AddStream(This,pTargetMediaType,pdwStreamIndex)
+#define IMFSinkWriter_BeginWriting() (This)->lpVtbl->BeginWriting(This)
+#define IMFSinkWriter_Finalize() (This)->lpVtbl->Finalize(This)
+#define IMFSinkWriter_Flush(This,dwStreamIndex) (This)->lpVtbl->Flush(This,dwStreamIndex)
+#define IMFSinkWriter_GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject) (This)->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject)
+#define IMFSinkWriter_GetStatistics(This,dwStreamIndex,pStats) (This)->lpVtbl->GetStatistics(This,dwStreamIndex,pStats)
+#define IMFSinkWriter_NotifyEndOfSegment(This,dwStreamIndex) (This)->lpVtbl->NotifyEndOfSegment(This,dwStreamIndex)
+#define IMFSinkWriter_PlaceMarker(This,dwStreamIndex,pvContext) (This)->lpVtbl->PlaceMarker(This,dwStreamIndex,pvContext)
+#define IMFSinkWriter_SendStreamTick(This,dwStreamIndex,llTimestamp) (This)->lpVtbl->SendStreamTick(This,dwStreamIndex,llTimestamp)
+#define IMFSinkWriter_SetInputMediaType(This,dwStreamIndex,pInputMediaType,pEncodingParameters) (This)->lpVtbl->SetInputMediaType(This,dwStreamIndex,pInputMediaType,pEncodingParameters)
+#define IMFSinkWriter_WriteSample(This,dwStreamIndex,pSample) (This)->lpVtbl->WriteSample(This,dwStreamIndex,pSample)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFSourceReader
+DECLARE_INTERFACE_(IMFSourceReader,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFSourceReader methods */
+    STDMETHOD_(HRESULT,Flush)(THIS_ DWORD dwStreamIndex) PURE;
+    STDMETHOD_(HRESULT,GetCurrentMediaType)(THIS_ DWORD dwStreamIndex,IMFMediaType **ppMediaType) PURE;
+    STDMETHOD_(HRESULT,GetNativeMediaType)(THIS_ DWORD dwStreamIndex,DWORD dwMediaTypeIndex,IMFMediaType **ppMediaType) PURE;
+    STDMETHOD_(HRESULT,GetPresentationAttribute)(THIS_ DWORD dwStreamIndex,REFGUID guidAttribute,PROPVARIANT *pvarAttribute) PURE;
+    STDMETHOD_(HRESULT,GetServiceForStream)(THIS_ DWORD dwStreamIndex,REFGUID guidService,REFIID riid,LPVOID *ppvObject) PURE;
+    STDMETHOD_(HRESULT,GetStreamSelection)(THIS_ DWORD dwStreamIndex,BOOL *pfSelected) PURE;
+    STDMETHOD_(HRESULT,ReadSample)(THIS_ DWORD dwStreamIndex,DWORD dwControlFlags,DWORD *pdwActualStreamIndex,DWORD *pdwStreamFlags,LONGLONG *pllTimestamp,IMFSample **ppSample) PURE;
+    STDMETHOD_(HRESULT,SetCurrentMediaType)(THIS_ DWORD dwStreamIndex,DWORD *pdwReserved,IMFMediaType *pMediaType) PURE;
+    STDMETHOD_(HRESULT,SetCurrentPosition)(THIS_ REFGUID guidTimeFormat,REFPROPVARIANT varPosition) PURE;
+    STDMETHOD_(HRESULT,SetStreamSelection)(THIS_ DWORD dwStreamIndex,BOOL fSelected) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFSourceReader_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceReader_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFSourceReader_Release(This) (This)->pVtbl->Release(This)
+#define IMFSourceReader_Flush(This,dwStreamIndex) (This)->lpVtbl->Flush(This,dwStreamIndex)
+#define IMFSourceReader_GetCurrentMediaType(This,dwStreamIndex,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,dwStreamIndex,ppMediaType)
+#define IMFSourceReader_GetNativeMediaType(This,dwStreamIndex,dwMediaTypeIndex,ppMediaType) (This)->lpVtbl->GetNativeMediaType(This,dwStreamIndex,dwMediaTypeIndex,ppMediaType)
+#define IMFSourceReader_GetPresentationAttribute(This,dwStreamIndex,guidAttribute,pvarAttribute) (This)->lpVtbl->GetPresentationAttribute(This,dwStreamIndex,guidAttribute,pvarAttribute)
+#define IMFSourceReader_GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject) (This)->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject)
+#define IMFSourceReader_GetStreamSelection(This,dwStreamIndex,pfSelected) (This)->lpVtbl->GetStreamSelection(This,dwStreamIndex,pfSelected)
+#define IMFSourceReader_ReadSample(This,dwStreamIndex,dwControlFlags,pdwActualStreamIndex,pdwStreamFlags,pllTimestamp,ppSample) (This)->lpVtbl->ReadSample(This,dwStreamIndex,dwControlFlags,pdwActualStreamIndex,pdwStreamFlags,pllTimestamp,ppSample)
+#define IMFSourceReader_SetCurrentMediaType(This,dwStreamIndex,pdwReserved,pMediaType) (This)->lpVtbl->SetCurrentMediaType(This,dwStreamIndex,pdwReserved,pMediaType)
+#define IMFSourceReader_SetCurrentPosition(This,guidTimeFormat,varPosition) (This)->lpVtbl->SetCurrentPosition(This,guidTimeFormat,varPosition)
+#define IMFSourceReader_SetStreamSelection(This,dwStreamIndex,fSelected) (This)->lpVtbl->SetStreamSelection(This,dwStreamIndex,fSelected)
+#endif /*COBJMACROS*/
+
+#define MF_SOURCE_READER_FIRST_VIDEO_STREAM 0xFFFFFFFC
+#define MF_SOURCE_READER_FIRST_AUDIO_STREAM 0xFFFFFFFD
+#define MF_SOURCE_READER_ALL_STREAMS        0xFFFFFFFE
+#define MF_SOURCE_READER_MEDIASOURCE        0xFFFFFFFF
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *pMediaSink,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
+HRESULT WINAPI MFCreateSinkWriterFromURL(LPCWSTR pwszOutputURL,IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
+HRESULT WINAPI MFCreateSourceReaderFromByteStream(IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
+HRESULT WINAPI MFCreateSourceReaderFromMediaSource(IMFMediaSource *pMediaSource,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
+HRESULT WINAPI MFCreateSourceReaderFromURL(LPCWSTR pwszURL,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+#endif /*_INC_MFREADWRITE*/
diff --git a/mingw-w64-headers/include/mftransform.h b/mingw-w64-headers/include/mftransform.h
new file mode 100644
index 0000000..2a635a1
--- /dev/null
+++ b/mingw-w64-headers/include/mftransform.h
@@ -0,0 +1,208 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MFTRANSFORM
+#define _INC_MFTRANSFORM
+
+#include <mfidl.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+/*Not supported.*/
+  enum _MFT_DRAIN_TYPE {
+    MFT_DRAIN_PRODUCE_TAILS   = 0x00000000,
+    MFT_DRAIN_NO_TAILS        = 0x00000001 
+  };
+
+#if (_WIN32_WINNT >= 0x0601)
+  enum _MFT_ENUM_FLAG {
+  MFT_ENUM_FLAG_SYNCMFT          = 0x00000001,
+  MFT_ENUM_FLAG_ASYNCMFT         = 0x00000002,
+  MFT_ENUM_FLAG_HARDWARE         = 0x00000004,
+  MFT_ENUM_FLAG_FIELDOFUSE       = 0x00000008,
+  MFT_ENUM_FLAG_LOCALMFT         = 0x00000010,
+  MFT_ENUM_FLAG_TRANSCODE_ONLY   = 0x00000020,
+  MFT_ENUM_FLAG_SORTANDFILTER    = 0x00000040,
+  MFT_ENUM_FLAG_ALL              = 0x0000003F 
+};
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+  enum _MFT_INPUT_STATUS_FLAGS {
+    MFT_INPUT_STATUS_ACCEPT_DATA   = 0x00000001 
+  };
+
+  enum _MFT_INPUT_DATA_BUFFER_FLAGS {
+    MFT_INPUT_DATA_BUFFER_PLACEHOLDER   = 0xFFFFFFFF 
+  };
+
+  enum _MFT_OUTPUT_STREAM_INFO_FLAGS {
+    MFT_OUTPUT_STREAM_WHOLE_SAMPLES              = 0x00000001,
+    MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER   = 0x00000002,
+    MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE          = 0x00000004,
+    MFT_OUTPUT_STREAM_DISCARDABLE                = 0x00000008,
+    MFT_OUTPUT_STREAM_OPTIONAL                   = 0x00000010,
+    MFT_OUTPUT_STREAM_PROVIDES_SAMPLES           = 0x00000100,
+    MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES        = 0x00000200,
+    MFT_OUTPUT_STREAM_LAZY_READ                  = 0x00000400,
+    MFT_OUTPUT_STREAM_REMOVABLE                  = 0x00000800 
+  };
+
+  enum _MFT_OUTPUT_STATUS_FLAGS {
+    MFT_OUTPUT_STATUS_SAMPLE_READY   = 0x00000001 
+  };
+
+  enum _MFT_OUTPUT_DATA_BUFFER_FLAGS {
+    MFT_OUTPUT_DATA_BUFFER_INCOMPLETE      = 0x01000000,
+    MFT_OUTPUT_DATA_BUFFER_FORMAT_CHANGE   = 0x00000100,
+    MFT_OUTPUT_DATA_BUFFER_STREAM_END      = 0x00000200,
+    MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE       = 0x00000300 
+  };
+
+  enum _MFT_INPUT_STREAM_INFO_FLAGS {
+    MFT_INPUT_STREAM_WHOLE_SAMPLES              = 0x00000001,
+    MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER   = 0x00000002,
+    MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE          = 0x00000004,
+    MFT_INPUT_STREAM_HOLDS_BUFFERS              = 0x00000008,
+    MFT_INPUT_STREAM_DOES_NOT_ADDREF            = 0x00000100,
+    MFT_INPUT_STREAM_REMOVABLE                  = 0x00000200,
+    MFT_INPUT_STREAM_OPTIONAL                   = 0x00000400,
+    MFT_INPUT_STREAM_PROCESSES_IN_PLACE         = 0x00000800 
+  };
+
+  typedef enum _VSS_HARDWARE_OPTIONS {
+    VSS_BREAKEX_FLAG_MASK_LUNS                      = 0x00000001,
+    VSS_BREAKEX_FLAG_MAKE_READ_WRITE                = 0x00000002,
+    VSS_BREAKEX_FLAG_REVERT_IDENTITY_ALL            = 0x00000004,
+    VSS_BREAKEX_FLAG_REVERT_IDENTITY_NONE           = 0x00000008,
+    VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE          = 0x00000100,
+    VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY    = 0x00000200,
+    VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY   = 0x00000400,
+    VSS_ONLUNSTATECHANGE_DO_MASK_LUNS               = 0x00000800 
+  } VSS_HARDWARE_OPTIONS, *PVSS_HARDWARE_OPTIONS;
+
+  enum _MFT_SET_TYPE_FLAGS {
+    MFT_SET_TYPE_TEST_ONLY   = 0x00000001 
+  };
+
+  enum _MFT_PROCESS_OUTPUT_STATUS {
+    MFT_PROCESS_OUTPUT_STATUS_NEW_STREAMS   = 0x00000100 
+  };
+
+  enum _MFT_PROCESS_OUTPUT_FLAGS {
+    MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER   = 0x00000001 
+  };
+
+typedef enum _MFT_MESSAGE_TYPE {
+  MFT_MESSAGE_COMMAND_FLUSH            = 0x00000000,
+  MFT_MESSAGE_COMMAND_DRAIN            = 0x00000001,
+  MFT_MESSAGE_SET_D3D_MANAGER          = 0x00000002,
+  MFT_MESSAGE_NOTIFY_BEGIN_STREAMING   = 0x10000000,
+  MFT_MESSAGE_NOTIFY_END_STREAMING     = 0x10000001,
+  MFT_MESSAGE_NOTIFY_END_OF_STREAM     = 0x10000002,
+  MFT_MESSAGE_NOTIFY_START_OF_STREAM   = 0x10000003,
+  MFT_MESSAGE_COMMAND_MARKER           = 0x20000000 
+} MFT_MESSAGE_TYPE;
+
+typedef struct _MFT_INPUT_STREAM_INFO {
+  LONGLONG hnsMaxLatency;
+  DWORD    dwFlags;
+  DWORD    cbSize;
+  DWORD    cbMaxLookahead;
+  DWORD    cbAlignment;
+} MFT_INPUT_STREAM_INFO;
+
+typedef struct _MFT_OUTPUT_STREAM_INFO {
+  DWORD dwFlags;
+  DWORD cbSize;
+  DWORD cbAlignment;
+} MFT_OUTPUT_STREAM_INFO;
+
+typedef struct _MFT_OUTPUT_DATA_BUFFER {
+  DWORD         dwStreamID;
+  IMFSample     *pSample;
+  DWORD         dwStatus;
+  IMFCollection *pEvents;
+} MFT_OUTPUT_DATA_BUFFER;
+
+#undef  INTERFACE
+#define INTERFACE IMFTransform
+DECLARE_INTERFACE_(IMFTransform,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFTransform methods */
+    STDMETHOD_(HRESULT,AddInputStreams)(THIS_ DWORD cStreams,DWORD *adwStreamIDs) PURE;
+    STDMETHOD_(HRESULT,DeleteInputStream)(THIS_ DWORD dwStreamID) PURE;
+    STDMETHOD_(HRESULT,GetAttributes)(THIS_ IMFAttributes **pAttributes) PURE;
+    STDMETHOD_(HRESULT,GetInputAvailableType)(THIS_ DWORD dwInputStreamID,DWORD dwTypeIndex,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetInputCurrentType)(THIS_ DWORD dwInputStreamID,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetInputStatus)(THIS_ DWORD dwInputStreamID,DWORD *pdwFlags) PURE;
+    STDMETHOD_(HRESULT,GetInputStreamAttributes)(THIS_ DWORD dwInputStreamID,IMFAttributes **ppAttributes) PURE;
+    STDMETHOD_(HRESULT,GetInputStreamInfo)(THIS_ DWORD dwInputStreamID,MFT_INPUT_STREAM_INFO *pStreamInfo) PURE;
+    STDMETHOD_(HRESULT,GetOutputAvailableType)(THIS_ DWORD dwOutputStreamID,DWORD dwTypeIndex,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetOutputCurrentType)(THIS_ DWORD dwOutputStreamID,IMFMediaType **ppType) PURE;
+    STDMETHOD_(HRESULT,GetOutputStatus)(THIS_ DWORD *pdwFlags) PURE;
+    STDMETHOD_(HRESULT,GetOutputStreamAttributes)(THIS_ DWORD dwOutputStreamID,IMFAttributes **ppAttributes) PURE;
+    STDMETHOD_(HRESULT,GetOutputStreamInfo)(THIS_ DWORD dwOutputStreamID,MFT_OUTPUT_STREAM_INFO *pStreamInfo) PURE;
+    STDMETHOD_(HRESULT,GetStreamCount)(THIS_ DWORD *pcInputStreams,DWORD *pcOutputStreams) PURE;
+    STDMETHOD_(HRESULT,GetStreamIDs)(THIS_ DWORD dwInputIDArraySize,DWORD *pdwInputIDs,DWORD dwOutputIDArraySize,DWORD *pdwOutputIDs) PURE;
+    STDMETHOD_(HRESULT,GetStreamLimits)(THIS_ DWORD *pdwInputMinimum,DWORD *pdwInputMaximum,DWORD *pdwOutputMinimum,DWORD *pdwOutputMaximum) PURE;
+    STDMETHOD_(HRESULT,ProcessEvent)(THIS_ DWORD dwInputStreamID,IMFMediaEvent *pEvent) PURE;
+    STDMETHOD_(HRESULT,ProcessInput)(THIS_ DWORD dwInputStreamID,IMFSample *pSample,DWORD dwFlags) PURE;
+    STDMETHOD_(HRESULT,ProcessMessage)(THIS_ MFT_MESSAGE_TYPE eMessage,ULONG_PTR ulParam) PURE;
+    STDMETHOD_(HRESULT,ProcessOutput)(THIS_ DWORD dwFlags,DWORD cOutputBufferCount,MFT_OUTPUT_DATA_BUFFER *pOutputSamples,DWORD *pdwStatus) PURE;
+    STDMETHOD_(HRESULT,SetInputType)(THIS_ DWORD dwInputStreamID,IMFMediaType *pType,DWORD dwFlags) PURE;
+    STDMETHOD_(HRESULT,SetOutputBounds)(THIS_ LONGLONG hnsLowerBound,LONGLONG hnsUpperBound) PURE;
+    STDMETHOD_(HRESULT,SetOutputType)(THIS_ DWORD dwOutputStreamID,IMFMediaType *pType,DWORD dwFlags) PURE;
+
+    END_INTERFACE
+};
+
+#ifdef COBJMACROS
+#define IMFTransform_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFTransform_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFTransform_Release(This) (This)->pVtbl->Release(This)
+#define IMFTransform_AddInputStreams(This,cStreams,adwStreamIDs) (This)->lpVtbl->AddInputStreams(This,cStreams,adwStreamIDs)
+#define IMFTransform_DeleteInputStream(This,dwStreamID) (This)->lpVtbl->DeleteInputStream(This,dwStreamID)
+#define IMFTransform_GetAttributes(This,pAttributes) (This)->lpVtbl->GetAttributes(This,pAttributes)
+#define IMFTransform_GetInputAvailableType(This,dwInputStreamID,dwTypeIndex,ppType) (This)->lpVtbl->GetInputAvailableType(This,dwInputStreamID,dwTypeIndex,ppType)
+#define IMFTransform_GetInputCurrentType(This,dwInputStreamID,ppType) (This)->lpVtbl->GetInputCurrentType(This,dwInputStreamID,ppType)
+#define IMFTransform_GetInputStatus(This,dwInputStreamID,pdwFlags) (This)->lpVtbl->GetInputStatus(This,dwInputStreamID,pdwFlags)
+#define IMFTransform_GetInputStreamAttributes(This,dwInputStreamID,ppAttributes) (This)->lpVtbl->GetInputStreamAttributes(This,dwInputStreamID,ppAttributes)
+#define IMFTransform_GetInputStreamInfo(This,dwInputStreamID,pStreamInfo) (This)->lpVtbl->GetInputStreamInfo(This,dwInputStreamID,pStreamInfo)
+#define IMFTransform_GetOutputAvailableType(This,dwOutputStreamID,dwTypeIndex,ppType) (This)->lpVtbl->GetOutputAvailableType(This,dwOutputStreamID,dwTypeIndex,ppType)
+#define IMFTransform_GetOutputCurrentType(This,dwOutputStreamID,ppType) (This)->lpVtbl->GetOutputCurrentType(This,dwOutputStreamID,ppType)
+#define IMFTransform_GetOutputStatus(This,pdwFlags) (This)->lpVtbl->GetOutputStatus(This,pdwFlags)
+#define IMFTransform_GetOutputStreamAttributes(This,dwOutputStreamID,ppAttributes) (This)->lpVtbl->GetOutputStreamAttributes(This,dwOutputStreamID,ppAttributes)
+#define IMFTransform_GetOutputStreamInfo(This,dwOutputStreamID,pStreamInfo) (This)->lpVtbl->GetOutputStreamInfo(This,dwOutputStreamID,pStreamInfo)
+#define IMFTransform_GetStreamCount(This,pcInputStreams,pcOutputStreams) (This)->lpVtbl->GetStreamCount(This,pcInputStreams,pcOutputStreams)
+#define IMFTransform_GetStreamIDs(This,dwInputIDArraySize,pdwInputIDs,dwOutputIDArraySize,pdwOutputIDs) (This)->lpVtbl->GetStreamIDs(This,dwInputIDArraySize,pdwInputIDs,dwOutputIDArraySize,pdwOutputIDs)
+#define IMFTransform_GetStreamLimits(This,pdwInputMinimum,pdwInputMaximum,pdwOutputMinimum,pdwOutputMaximum) (This)->lpVtbl->GetStreamLimits(This,pdwInputMinimum,pdwInputMaximum,pdwOutputMinimum,pdwOutputMaximum)
+#define IMFTransform_ProcessEvent(This,dwInputStreamID,pEvent) (This)->lpVtbl->ProcessEvent(This,dwInputStreamID,pEvent)
+#define IMFTransform_ProcessInput(This,dwInputStreamID,pSample,dwFlags) (This)->lpVtbl->ProcessInput(This,dwInputStreamID,pSample,dwFlags)
+#define IMFTransform_ProcessMessage(This,eMessage,ulParam) (This)->lpVtbl->ProcessMessage(This,eMessage,ulParam)
+#define IMFTransform_ProcessOutput(This,dwFlags,cOutputBufferCount,pOutputSamples,pdwStatus) (This)->lpVtbl->ProcessOutput(This,dwFlags,cOutputBufferCount,pOutputSamples,pdwStatus)
+#define IMFTransform_SetInputType(This,dwInputStreamID,pType,dwFlags) (This)->lpVtbl->SetInputType(This,dwInputStreamID,pType,dwFlags)
+#define IMFTransform_SetOutputBounds(This,hnsLowerBound,hnsUpperBound) (This)->lpVtbl->SetOutputBounds(This,hnsLowerBound,hnsUpperBound)
+#define IMFTransform_SetOutputType(This,dwOutputStreamID,pType,dwFlags) (This)->lpVtbl->SetOutputType(This,dwOutputStreamID,pType,dwFlags)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+#ifdef __cplusplus
+extern "C" {
+#endif
+HRESULT WINAPI MFCreateTransformActivate(IMFActivate **ppActivate);
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_MFTRANSFORM*/
diff --git a/mingw-w64-headers/include/mmreg.h b/mingw-w64-headers/include/mmreg.h
index 8653f6d..bad1ea7 100644
--- a/mingw-w64-headers/include/mmreg.h
+++ b/mingw-w64-headers/include/mmreg.h
@@ -2598,6 +2598,24 @@
 #define MIXERCONTROL_CONTROLTYPE_SRS_SYNTHSELECT (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 8)
 #endif
 
+#if (_WIN32_WINNT >= 0x0600)
+#define WAVE_FORMAT_MPEG_HEAAC 0x1610
+
+typedef struct heaacwaveinfo_tag {
+  WAVEFORMATEX wfx;
+  WORD         wPayloadType;
+  WORD         wAudioProfileLevelIndication;
+  WORD         wStructType;
+  WORD         wReserved1;
+  DWORD        dwReserved2;
+} HEAACWAVEINFO, *PHEAACWAVEINFO;
+
+typedef struct heaacwaveformat_tag {
+  HEAACWAVEINFO wfInfo;
+  BYTE          pbAudioSpecificConfig[1];
+} HEAACWAVEFORMAT, *PHEAACWAVEFORMAT;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifndef RC_INVOKED
 #include "poppack.h"
 #endif
diff --git a/mingw-w64-headers/include/mprapi.h b/mingw-w64-headers/include/mprapi.h
index efc2b0a..49ac3fd 100644
--- a/mingw-w64-headers/include/mprapi.h
+++ b/mingw-w64-headers/include/mprapi.h
@@ -13,6 +13,10 @@
 extern "C" {
 #endif
 
+#ifndef CALLBACK
+#define CALLBACK WINAPI
+#endif
+
 #define RRAS_SERVICE_NAME TEXT("RemoteAccess")
 
 #define PID_IPX 0x0000002B
@@ -506,9 +510,6 @@
   WINBOOL WINAPI MprAdminAcceptNewConnection(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1);
   WINBOOL WINAPI MprAdminAcceptNewConnection2(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1,RAS_CONNECTION_2 *pRasConnection2);
   WINBOOL WINAPI MprAdminAcceptNewLink (RAS_PORT_0 *pRasPort0,RAS_PORT_1 *pRasPort1);
-#if (_WIN32_WINNT >= 0x0600)
-  WINBOOL WINAPI MprAdminAcceptReauthentication(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1,RAS_CONNECTION_2 *pRasConnection2,RAS_CONNECTION_3 *pRasConnection3);
-#endif
   VOID WINAPI MprAdminConnectionHangupNotification(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1);
   VOID WINAPI MprAdminConnectionHangupNotification2(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1,RAS_CONNECTION_2 *pRasConnection2);
   DWORD WINAPI MprAdminConnectionRemoveQuarantine(HANDLE hRasServer,HANDLE hRasConnection,WINBOOL fIsIpAddress);
@@ -615,6 +616,313 @@
 
 #define MprInfoBlockExists(h,t) (MprInfoBlockFind((h),(t),NULL,NULL,NULL)==NO_ERROR)
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _RAS_QUARANTINE_STATE {
+  RAS_QUAR_STATE_NORMAL,
+  RAS_QUAR_STATE_QUARANTINE,
+  RAS_QUAR_STATE_PROBATION,
+  RAS_QUAR_STATE_NOT_CAPABLE
+} RAS_QUARANTINE_STATE;
+
+typedef struct _MPR_FILTER_0 {
+  WINBOOL fEnabled;
+} MPR_FILTER_0, *PMPR_FILTER_0;
+
+typedef struct _MPR_SERVER_2 {
+  DWORD dwNumPptpPorts;
+  DWORD dwPptpPortFlags;
+  DWORD dwNumL2tpPorts;
+  DWORD dwL2tpPortFlags;
+  DWORD dwNumSstpPorts;
+  DWORD dwSstpPortFlags;
+} MPR_SERVER_2, *PMPR_SERVER_2;
+
+typedef struct _PPP_IPV6CP_INFO {
+  DWORD dwVersion;
+  DWORD dwSize;
+  DWORD dwError;
+  BYTE  bInterfaceIdentifier[8];
+  BYTE  bRemoteInterfaceIdentifier[8];
+  DWORD dwOptions;
+  DWORD dwRemoteOptions;
+  BYTE  bPrefix[8];
+  DWORD dwPrefixLength;
+} PPP_IPV6_CP_INFO, *PPPP_IPV6_CP_INFO;
+
+typedef struct _PPP_INFO_3 {
+  PPP_NBFCP_INFO   nbf;
+  PPP_IPCP_INFO2   ip;
+  PPP_IPV6_CP_INFO ipv6;
+  PPP_CCP_INFO     ccp;
+  PPP_LCP_INFO     lcp;
+} PPP_INFO_3;
+
+typedef struct _RAS_CONNECTION_3 {
+  DWORD                 dwVersion;
+  DWORD                 dwSize;
+  HANDLE                hConnection;
+  WCHAR                 wszUserName[UNLEN + 1];
+  ROUTER_INTERFACE_TYPE dwInterfaceType;
+  GUID                  guid;
+  PPP_INFO_3            PppInfo3;
+  RAS_QUARANTINE_STATE  rasQuarState;
+  FILETIME              timer;
+} RAS_CONNECTION_3, *PRAS_CONNECTION_3;
+
+WINBOOL CALLBACK MprAdminAcceptNewConnection3(
+  RAS_CONNECTION_0 *pRasConnection0,
+  RAS_CONNECTION_1 *pRasConnection1,
+  RAS_CONNECTION_2 *pRasConnection2,
+  RAS_CONNECTION_3 *pRasConnection3
+);
+
+WINBOOL CALLBACK MprAdminAcceptReauthentication(
+  RAS_CONNECTION_0 *pRasConnection0,
+  RAS_CONNECTION_1 *pRasConnection1,
+  RAS_CONNECTION_2 *pRasConnection2,
+  RAS_CONNECTION_3 *pRasConnection3
+);
+
+void CALLBACK MprAdminConnectionHangupNotification3(
+  RAS_CONNECTION_0 *pRasConnection0,
+  RAS_CONNECTION_1 *pRasConnection1,
+  RAS_CONNECTION_2 *pRasConnection2,
+  RAS_CONNECTION_3 *pRasConnection3
+);
+
+DWORD MprAdminConnectionRemoveQuarantine(
+  HANDLE  hRasServer,
+  HANDLE  hRasConnection,
+  WINBOOL fIsIpAddress
+);
+
+DWORD CALLBACK MprAdminGetIpv6AddressForUser(
+  WCHAR *lpwszUserName,
+  WCHAR *lpwszPortName,
+  in6_addr *lpdwIpv6Address,
+  WINBOOL *bNotifyRelease
+);
+
+DWORD CALLBACK MprAdminReleaseIpv6AddressForUser(
+  WCHAR *lpwszUserName,
+  WCHAR *lpwszPortName,
+  in6_addr *lpdwIpv6Address
+);
+
+DWORD WINAPI MprConfigFilterGetInfo(
+  HANDLE hMprConfig,
+  DWORD dwLevel,
+  DWORD dwTransportId,
+  LPBYTE lpBuffer
+);
+
+DWORD WINAPI MprConfigFilterSetInfo(
+  HANDLE hMprConfig,
+  DWORD dwLevel,
+  DWORD dwTransportId,
+  LPBYTE lpBuffer
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#if (_WIN32_WINNT >= 0x0601)
+#define MPRAPI_RAS_CONNECTION_OBJECT_REVISION_1 0x01
+#define MPRAPI_MPR_SERVER_OBJECT_REVISION_1 0x01
+#define MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_1 0x01
+
+typedef enum  {
+  MPRAPI_OBJECT_TYPE_RAS_CONNECTION_OBJECT          = 0x1,
+  MPRAPI_OBJECT_TYPE_MPR_SERVER_OBJECT              = 0x2,
+  MPRAPI_OBJECT_TYPE_MPR_SERVER_SET_CONFIG_OBJECT   = 0x3,
+  MPRAPI_OBJECT_TYPE_AUTH_VALIDATION_OBJECT         = 0x4,
+  MPRAPI_OBJECT_TYPE_UPDATE_CONNECTION_OBJECT       = 0x5 
+} MPRAPI_OBJECT_TYPE;
+
+typedef struct _MPRAPI_OBJECT_HEADER {
+  UCHAR revision;
+} MPRAPI_OBJECT_HEADER, *PMPRAPI_OBJECT_HEADER;
+
+typedef struct _AUTH_VALIDATION_EX {
+  MPRAPI_OBJECT_HEADER         Header;
+  HANDLE                       hRasConnection;
+  WCHAR                        wszUserName[UNLEN + 1 ];
+  WCHAR                        wszLogonDomain[DNLEN + 1 ];
+  DWORD                        AuthInfoSize;
+  BYTE                         AuthInfo[1];
+} AUTH_VALIDATION_EX, *PAUTH_VALIDATION_EX;
+
+#define RAS_FLAGS_PPP_CONNECTION 0x00000001
+#define RAS_FLAGS_MESSENGER_PRESENT 0x00000002
+#define RAS_FLAGS_QUARANTINE_PRESENT 0x00000008
+#define RAS_FLAGS_ARAP_CONNECTION 0x00000010
+#define RAS_FLAGS_IKEV2_CONNECTION 0x00000010
+#define RAS_FLAGS_DORMANT 0x00000020
+
+#define IPADDRESSLEN 15
+
+typedef struct _PPP_PROJECTION_INFO {
+  DWORD   dwIPv4NegotiationError;
+  WCHAR   wszAddress[IPADDRESSLEN + 1];
+  WCHAR   wszRemoteAddress[IPADDRESSLEN + 1];
+  DWORD   dwIPv4Options;
+  DWORD   dwIPv4RemoteOptions;
+  ULONG64 IPv4SubInterfaceIndex;
+  DWORD   dwIPv6NegotiationError;
+  BYTE    bInterfaceIdentifier[8];
+  BYTE    bRemoteInterfaceIdentifier[8];
+  BYTE    bPrefix[8];
+  DWORD   dwPrefixLength;
+  ULONG64 IPv6SubInterfaceIndex;
+  DWORD   dwLcpError;
+  DWORD   dwAuthenticationProtocol;
+  DWORD   dwAuthenticationData;
+  DWORD   dwRemoteAuthenticationProtocol;
+  DWORD   dwRemoteAuthenticationData;
+  DWORD   dwLcpTerminateReason;
+  DWORD   dwLcpRemoteTerminateReason;
+  DWORD   dwLcpOptions;
+  DWORD   dwLcpRemoteOptions;
+  DWORD   dwEapTypeId;
+  DWORD   dwRemoteEapTypeId;
+  DWORD   dwCcpError;
+  DWORD   dwCompressionAlgorithm;
+  DWORD   dwCcpOptions;
+  DWORD   dwRemoteCompressionAlgorithm;
+  DWORD   dwCcpRemoteOptions;
+} PPP_PROJECTION_INFO, *PPP_PROJECTION_INFO;
+
+typedef struct _IKEV2_PROJECTION_INFO {
+  DWORD   dwIPv4NegotiationError;
+  WCHAR   wszAddress[IPADDRESSLEN  + 1];
+  WCHAR   wszRemoteAddress[IPADDRESSLEN  + 1];
+  ULONG64 IPv4SubInterfaceIndex;
+  DWORD   dwIPv6NegotiationError;
+  BYTE    bInterfaceIdentifier[8];
+  BYTE    bRemoteInterfaceIdentifier[8];
+  BYTE    bPrefix[8];
+  DWORD   dwPrefixLength;
+  ULONG64 IPv6SubInterfaceIndex;
+  DWORD   dwOptions;
+  DWORD   dwAuthenticationProtocol;
+  DWORD   dwEapTypeId;
+  DWORD   dwCompressionAlgorithm;
+  DWORD   dwEncryptionMethod;
+} IKEV2_PROJECTION_INFO, *PIKEV2_PROJECTION_INFO;
+
+typedef struct _PROJECTION_INFO {
+  UCHAR projectionInfoType;
+  __MINGW_EXTENSION union {
+    IKEV2_PROJECTION_INFO Ikev2ProjectionInfo;
+    PPP_PROJECTION_INFO   PppProjectionInfo;
+  } DUMMYUNIONNAME;
+} PROJECTION_INFO, *PPROJECTION_INFO;
+
+typedef struct _RAS_CONNECTION_EX {
+  MPRAPI_OBJECT_HEADER  Header;
+  DWORD                 dwConnectDuration;
+  ROUTER_INTERFACE_TYPE dwInterfaceType;
+  DWORD                 dwConnectionFlags;
+  WCHAR                 wszInterfaceName[MAX_INTERFACE_NAME_LEN + 1];
+  WCHAR                 wszUserName[UNLEN + 1];
+  WCHAR                 wszLogonDomain[DNLEN + 1];
+  WCHAR                 wszRemoteComputer[NETBIOS_NAME_LEN + 1];
+  GUID                  guid;
+  RAS_QUARANTINE_STATE  rasQuarState;
+  FILETIME              probationTime;
+  DWORD                 dwBytesXmited;
+  DWORD                 dwBytesRcved;
+  DWORD                 dwFramesXmited;
+  DWORD                 dwFramesRcved;
+  DWORD                 dwCrcErr;
+  DWORD                 dwTimeoutErr;
+  DWORD                 dwAlignmentErr;
+  DWORD                 dwHardwareOverrunErr;
+  DWORD                 dwFramingErr;
+  DWORD                 dwBufferOverrunErr;
+  DWORD                 dwCompressionRatioIn;
+  DWORD                 dwCompressionRatioOut;
+  DWORD                 dwNumSwitchOvers;
+  WCHAR                 wszRemoteEndpointAddress[MAXIPADRESSLEN+1];
+  WCHAR                 wszLocalEndpointAddress[MAXIPADRESSLEN+1];
+  PROJECTION_INFO       ProjectionInfo;
+  HANDLE                hConnection;
+  HANDLE                hInterface;
+} RAS_CONNECTION_EX, *PRAS_CONNECTION_EX;
+
+typedef struct _RAS_UPDATE_CONNECTION {
+  MPRAPI_OBJECT_HEADER Header;
+  DWORD                dwIfIndex;
+  WCHAR                wszLocalEndpointAddress[MAXIPADRESSLEN+1];
+  WCHAR                wszRemoteEndpointAddress[MAXIPADRESSLEN+1];
+} RAS_UPDATE_CONNECTION, *PRAS_UPDATE_CONNECTION;
+
+#define MPRAPI_IKEV2_SET_TUNNEL_CONFIG_PARAMS 0x01
+
+typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS {
+  DWORD          dwIdleTimeout;
+  DWORD          dwNetworkBlackoutTime;
+  DWORD          dwSaLifeTime;
+  DWORD          dwSaDataSizeForRenegotiation;
+  DWORD          dwConfigOptions;
+  DWORD          dwTotalCertificates;
+  CERT_NAME_BLOB *certificateNames;
+} IKEV2_TUNNEL_CONFIG_PARAMS, *PIKEV2_TUNNEL_CONFIG_PARAMS;
+
+typedef struct _IKEV2_CONFIG_PARAMS {
+  DWORD                      dwNumPorts;
+  DWORD                      dwPortFlags;
+  DWORD                      dwTunnelConfigParamFlags;
+  IKEV2_TUNNEL_CONFIG_PARAMS TunnelConfigParams;
+} IKEV2_CONFIG_PARAMS, *PIKEV2_CONFIG_PARAMS;
+
+typedef struct _PPTP_CONFIG_PARAMS {
+  DWORD dwNumPorts;
+  DWORD dwPortFlags;
+} PPTP_CONFIG_PARAMS, *PPPTP_CONFIG_PARAMS;
+
+typedef struct _L2TP_CONFIG_PARAMS {
+  DWORD dwNumPorts;
+  DWORD dwPortFlags;
+} L2TP_CONFIG_PARAMS, *L2TP_CONFIG_PARAMS;
+
+typedef struct _SSTP_CERT_INFO {
+  BOOL            isDefault;
+  CRYPT_HASH_BLOB certBlob;
+} SSTP_CERT_INFO, *SSTP_CERT_INFO;
+
+typedef struct _SSTP_CONFIG_PARAMS {
+  DWORD          dwNumPorts;
+  DWORD          dwPortFlags;
+  BOOL           isUseHttps;
+  DWORD          certAlgorithm;
+  SSTP_CERT_INFO sstpCertDetails;
+} SSTP_CONFIG_PARAMS, *SSTP_CONFIG_PARAMS;
+
+typedef struct _MPRAPI_TUNNEL_CONFIG_PARAMS {
+  IKEV2_CONFIG_PARAMS IkeConfigParams;
+  PPTP_CONFIG_PARAMS  PptpConfigParams;
+  L2TP_CONFIG_PARAMS  L2tpConfigParams;
+  SSTP_CONFIG_PARAMS  SstpConfigParams;
+} MPRAPI_TUNNEL_CONFIG_PARAMS, *PMPRAPI_TUNNEL_CONFIG_PARAMS;
+
+typedef struct _MPR_SERVER_SET_CONFIG_EX {
+  MPRAPI_OBJECT_HEADER        Header;
+  DWORD                       setConfigForProtocols;
+  MPRAPI_TUNNEL_CONFIG_PARAMS ConfigParams;
+} MPR_SERVER_SET_CONFIG_EX, *PMPR_SERVER_SET_CONFIG_EX;
+
+DWORD APIENTRY MprConfigServerConnect(
+  LPWSTR lpwsServerName,
+  HANDLE *phMprConfig
+);
+
+DWORD APIENTRY MprConfigServerSetInfo(
+  HANDLE hMprConfig,
+  MPR_SERVER_SET_CONFIG_EX *pSetServerConfig
+);
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/msctfmonitorapi.h b/mingw-w64-headers/include/msctfmonitorapi.h
new file mode 100644
index 0000000..ebb8421
--- /dev/null
+++ b/mingw-w64-headers/include/msctfmonitorapi.h
@@ -0,0 +1,19 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_MSCTFMONITORAPI
+#define _INC_MSCTFMONITORAPI
+
+#if (_WIN32_WINNT >= 0x0600)
+/* CALLBACKS
+HRESULT CALLBACK UninitLocalMsCtfMonitor(void);
+HRESULT CALLBACK InitLocalMsCtfMonitor(
+  DWORD dwFlags
+);
+*/
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif _INC_MSCTFMONITORAPI
diff --git a/mingw-w64-headers/include/msdrm.h b/mingw-w64-headers/include/msdrm.h
new file mode 100644
index 0000000..a272345
--- /dev/null
+++ b/mingw-w64-headers/include/msdrm.h
@@ -0,0 +1,50 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NDHELPER
+#define _INC_NDHELPER
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPVOID DRMHSESSION;
+
+HRESULT WINAPI DRMCreateClientSession(
+  DRMCALLBACK pfnCallback,
+  UINT uCallbackVersion,
+  PWSTR wszGroupIDProviderType,
+  PWSTR wszGroupID,
+  DRMHSESSION *phClient
+);
+
+HRESULT WINAPI DRMAcquireIssuanceLicenseTemplate(
+  DRMHSESSION hClient,
+  UINT uFlags,
+  VOID *pvReserved,
+  UINT cReserved,
+  PWSTR *pwszReserved,
+  PWSTR wszURL,
+  VOID *pvContext
+);
+
+HRESULT DRMIsWindowProtected(
+  HWND hwnd,
+  WINBOOL *pfProtected
+);
+
+HRESULT DRMRegisterProtectedWindow(
+  DRMENVHANDLE hEnv,
+  HWND hwnd
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NDHELPER*/
diff --git a/mingw-w64-headers/include/msrdc.h b/mingw-w64-headers/include/msrdc.h
new file mode 100644
index 0000000..47f94d2
--- /dev/null
+++ b/mingw-w64-headers/include/msrdc.h
@@ -0,0 +1,315 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MSRDC
+#define _INC_MSRDC
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef LPVOID SimilarityFileIndexT;
+
+typedef enum _GeneratorParametersType {
+  RDCGENTYPE_Unused      = 0,
+  RDCGENTYPE_FilterMax   = 1 
+} GeneratorParametersType;
+
+typedef enum _RdcCreatedTables {
+  RDCTABLE_InvalidOrUnknown   = 0,
+  RDCTABLE_Existing           = 1,
+  RDCTABLE_New                = 2 
+} RdcCreatedTables;
+
+typedef enum _RdcMappingAccessMode {
+  RDCMAPPING_Undefined   = 0,
+  RDCMAPPING_ReadOnly    = 1,
+  RDCMAPPING_ReadWrite   = 2 
+} RdcMappingAccessMode;
+
+typedef enum _RDC_ErrorCode {
+  RDC_NoError                  = 0,
+  RDC_HeaderVersionNewer       = 1,
+  RDC_HeaderVersionOlder       = 2,
+  RDC_HeaderMissingOrCorrupt   = 3,
+  RDC_HeaderWrongType          = 4,
+  RDC_DataMissingOrCorrupt     = 5,
+  RDC_DataTooManyRecords       = 6,
+  RDC_FileChecksumMismatch     = 7,
+  RDC_ApplicationError         = 8,
+  RDC_Aborted                  = 9,
+  RDC_Win32Error               = 10 
+} RDC_ErrorCode;
+
+typedef enum _RdcNeedType {
+  RDCNEED_SOURCE     = 0,
+  RDCNEED_TARGET     = 1,
+  RDCNEED_SEED       = 2,
+  RDCNEED_SEED_MAX   = 255 
+} RdcNeedType;
+
+typedef struct _FindSimilarFileIndexResults {
+  SimilarityFileIndexT m_FileIndex;
+  unsigned             m_MatchCount;
+} FindSimilarFileIndexResults;
+
+typedef struct _RdcBufferPointer {
+  ULONG m_Size;
+  ULONG m_Used;
+  BYTE  *m_Data;
+} RdcBufferPointer;
+
+typedef struct _RdcNeed {
+  RdcNeedType      m_BlockType;
+  unsigned __int64 m_FileOffset;
+  unsigned __int64 m_BlockLength;
+} RdcNeed;
+
+typedef struct _RdcNeedPointer {
+  ULONG   m_Size;
+  ULONG   m_Used;
+  RdcNeed *m_Data;
+} RdcNeedPointer;
+
+typedef struct _RdcSignature {
+  BYTE   m_Signature[MSRDC_SIGNATURE_HASHSIZE];
+  USHORT m_BlockLength;
+} RdcSignature;
+
+typedef struct _RdcSignaturePointer {
+  ULONG        m_Size;
+  ULONG        m_Used;
+  RdcSignature *m_Data;
+} RdcSignaturePointer;
+
+typedef struct _SimilarityData {
+  unsigned char m_Data[16];
+} SimilarityData;
+
+typedef struct _SimilarityDumpData {
+  SimilarityFileIndexT m_FileIndex;
+  SimilarityData       m_Data;
+} SimilarityDumpData;
+
+typedef struct _SimilarityFileId {
+  byte m_FileId[SimilarityFileIdMaxSize];
+} SimilarityFileId;
+
+struct SimilarityMappedViewInfo {
+  unsigned char *m_Data;
+  DWORD         m_Length;
+};
+
+#undef  INTERFACE
+#define INTERFACE IRdcFileWriter
+DECLARE_INTERFACE_(IRdcFileWriter,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IRdcFileWriter methods */
+    STDMETHOD_(HRESULT,Write)(THIS_ ULONGLONG offsetFileStart,ULONG bytesToWrite,BYTE *buffer) PURE;
+    STDMETHOD_(HRESULT,Truncate)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteOnClose)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IRdcFileWriter_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IRdcFileWriter_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IRdcFileWriter_Release(This) (This)->pVtbl->Release(This)
+#define IRdcFileWriter_Write(This,offsetFileStart,bytesToWrite,buffer) (This)->lpVtbl->Write(This,offsetFileStart,bytesToWrite,buffer)
+#define IRdcFileWriter_Truncate() (This)->lpVtbl->Truncate(This)
+#define IRdcFileWriter_DeleteOnClose() (This)->lpVtbl->DeleteOnClose(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE ISimilarityFileIdTable
+DECLARE_INTERFACE_(ISimilarityFileIdTable,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* ISimilarityFileIdTable methods */
+    STDMETHOD_(HRESULT,CreateTable)(THIS_ wchar_t *path,WINBOOL truncate,BYTE *securityDescriptor,DWORD recordSize,RdcCreatedTables *isNew) PURE;
+    STDMETHOD_(HRESULT,CreateTableIndirect)(THIS_ IRdcFileWriter *fileIdFile,WINBOOL truncate,DWORD recordSize,RdcCreatedTables *isNew) PURE;
+    STDMETHOD_(HRESULT,CloseTable)(THIS_ WINBOOL isValid) PURE;
+    STDMETHOD_(HRESULT,Append)(THIS_ SimilarityFileId *similarityFileId,SimilarityFileIndexT *similarityFileIndex) PURE;
+    STDMETHOD_(HRESULT,Lookup)(THIS_ SimilarityFileIndexT similarityFileIndex,SimilarityFileId *similarityFileId) PURE;
+    STDMETHOD_(HRESULT,Invalidate)(THIS_ SimilarityFileIndexT similarityFileIndex) PURE;
+    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *recordCount) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define ISimilarityFileIdTable_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define ISimilarityFileIdTable_AddRef(This) (This)->pVtbl->AddRef(This)
+#define ISimilarityFileIdTable_Release(This) (This)->pVtbl->Release(This)
+#define ISimilarityFileIdTable_CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew) (This)->lpVtbl->CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew)
+#define ISimilarityFileIdTable_CreateTableIndirect(This,fileIdFile,truncate,recordSize,isNew) (This)->lpVtbl->CreateTableIndirect(This,fileIdFile,truncate,recordSize,isNew)
+#define ISimilarityFileIdTable_CloseTable(This,isValid) (This)->lpVtbl->CloseTable(This,isValid)
+#define ISimilarityFileIdTable_Append(This,similarityFileId,similarityFileIndex) (This)->lpVtbl->Append(This,similarityFileId,similarityFileIndex)
+#define ISimilarityFileIdTable_Lookup(This,similarityFileIndex,similarityFileId) (This)->lpVtbl->Lookup(This,similarityFileIndex,similarityFileId)
+#define ISimilarityFileIdTable_Invalidate(This,similarityFileIndex) (This)->lpVtbl->Invalidate(This,similarityFileIndex)
+#define ISimilarityFileIdTable_GetRecordCount(This,recordCount) (This)->lpVtbl->GetRecordCount(This,recordCount)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE ISimilarityTraitsMappedView
+DECLARE_INTERFACE_(ISimilarityTraitsMappedView,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* ISimilarityTraitsMappedView methods */
+    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
+    STDMETHOD_(HRESULT,Unmap)(THIS) PURE;
+    STDMETHOD_(HRESULT,Get)(THIS_ unsigned __int64 fileOffset,WINBOOL dirty,DWORD numElements,SimilarityMappedViewInfo *viewInfo) PURE;
+    STDMETHOD(GetView)(THIS_ unsigned char const **mappedPageBegin,unsigned char const **mappedPageEnd) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define ISimilarityTraitsMappedView_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define ISimilarityTraitsMappedView_AddRef(This) (This)->pVtbl->AddRef(This)
+#define ISimilarityTraitsMappedView_Release(This) (This)->pVtbl->Release(This)
+#define ISimilarityTraitsMappedView_Flush() (This)->lpVtbl->Flush(This)
+#define ISimilarityTraitsMappedView_Unmap() (This)->lpVtbl->Unmap(This)
+#define ISimilarityTraitsMappedView_Get(This,fileOffset,dirty,numElements,viewInfo) (This)->lpVtbl->Get(This,fileOffset,dirty,numElements,viewInfo)
+#define ISimilarityTraitsMappedView_GetView(This,mappedPageBegin,mappedPageEnd) (This)->lpVtbl->GetView(This,mappedPageBegin,mappedPageEnd)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IFindSimilarResults
+DECLARE_INTERFACE_(IFindSimilarResults,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IFindSimilarResults methods */
+    STDMETHOD_(HRESULT,GetSize)(THIS_ DWORD *size) PURE;
+    STDMETHOD_(HRESULT,GetNextFileId)(THIS_ DWORD *numTraitsMatched,SimilarityFileId *similarityFileId) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IFindSimilarResults_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IFindSimilarResults_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IFindSimilarResults_Release(This) (This)->pVtbl->Release(This)
+#define IFindSimilarResults_GetSize(This,size) (This)->lpVtbl->GetSize(This,size)
+#define IFindSimilarResults_GetNextFileId(This,numTraitsMatched,similarityFileId) (This)->lpVtbl->GetNextFileId(This,numTraitsMatched,similarityFileId)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE ISimilarityTraitsMapping
+DECLARE_INTERFACE_(ISimilarityTraitsMapping,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* ISimilarityTraitsMapping methods */
+    STDMETHOD(CloseMapping)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetFileSize)(THIS_ unsigned __int64 *fileSize) PURE;
+    STDMETHOD_(HRESULT,GetFileSize)(THIS_ unsigned __int64 *fileSize) PURE;
+    STDMETHOD_(HRESULT,OpenMapping)(THIS_ RdcMappingAccessMode accessMode,unsigned __int64 begin,unsigned __int64 end,unsigned __int64 *actualEnd) PURE;
+    STDMETHOD_(HRESULT,ResizeMapping)(THIS_ RdcMappingAccessMode accessMode,unsigned __int64 begin,unsigned __int64 end,unsigned __int64 *actualEnd) PURE;
+    STDMETHOD(GetPageSize)(THIS_ DWORD *pageSize) PURE;
+    STDMETHOD_(HRESULT,CreateView)(THIS_ DWORD minimumMappedPages,RdcMappingAccessMode accessMode,ISimilarityTraitsMappedView **mappedView) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define ISimilarityTraitsMapping_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define ISimilarityTraitsMapping_AddRef(This) (This)->pVtbl->AddRef(This)
+#define ISimilarityTraitsMapping_Release(This) (This)->pVtbl->Release(This)
+#define ISimilarityTraitsMapping_CloseMapping() (This)->lpVtbl->CloseMapping(This)
+#define ISimilarityTraitsMapping_SetFileSize(This,fileSize) (This)->lpVtbl->SetFileSize(This,fileSize)
+#define ISimilarityTraitsMapping_GetFileSize(This,fileSize) (This)->lpVtbl->GetFileSize(This,fileSize)
+#define ISimilarityTraitsMapping_OpenMapping(This,accessMode,begin,end,actualEnd) (This)->lpVtbl->OpenMapping(This,accessMode,begin,end,actualEnd)
+#define ISimilarityTraitsMapping_ResizeMapping(This,accessMode,begin,end,actualEnd) (This)->lpVtbl->ResizeMapping(This,accessMode,begin,end,actualEnd)
+#define ISimilarityTraitsMapping_GetPageSize(This,pageSize) (This)->lpVtbl->GetPageSize(This,pageSize)
+#define ISimilarityTraitsMapping_CreateView(This,minimumMappedPages,accessMode,mappedView) (This)->lpVtbl->CreateView(This,minimumMappedPages,accessMode,mappedView)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE ISimilarityReportProgress
+DECLARE_INTERFACE_(ISimilarityReportProgress,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* ISimilarityReportProgress methods */
+    STDMETHOD_(HRESULT,ReportProgress)(THIS_ DWORD percentCompleted) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define ISimilarityReportProgress_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define ISimilarityReportProgress_AddRef(This) (This)->pVtbl->AddRef(This)
+#define ISimilarityReportProgress_Release(This) (This)->pVtbl->Release(This)
+#define ISimilarityReportProgress_ReportProgress(This,percentCompleted) (This)->lpVtbl->ReportProgress(This,percentCompleted)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE ISimilarity
+DECLARE_INTERFACE_(ISimilarity,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* ISimilarity methods */
+    STDMETHOD_(HRESULT,CreateTable)(THIS_ wchar_t *path,WINBOOL truncate,BYTE *securityDescriptor,DWORD recordSize,RdcCreatedTables *isNew) PURE;
+    STDMETHOD_(HRESULT,CreateTableIndirect)(THIS_ ISimilarityTraitsMapping *mapping,IRdcFileWriter *fileIdFile,WINBOOL truncate,DWORD recordSize,RdcCreatedTables *isNew) PURE;
+    STDMETHOD_(HRESULT,CloseTable)(THIS_ WINBOOL isValid) PURE;
+    STDMETHOD_(HRESULT,Append)(THIS_ SimilarityFileId *similarityFileId,SimilarityData *similarityData) PURE;
+    STDMETHOD_(HRESULT,FindSimilarFileId)(THIS_ SimilarityData *similarityData,DWORD resultsSize,IFindSimilarResults **findSimilarResults) PURE;
+    STDMETHOD_(HRESULT,CopyAndSwap)(THIS_ ISimilarityReportProgress *reportProgress) PURE;
+    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *recordCount) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define ISimilarity_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define ISimilarity_AddRef(This) (This)->pVtbl->AddRef(This)
+#define ISimilarity_Release(This) (This)->pVtbl->Release(This)
+#define ISimilarity_CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew) (This)->lpVtbl->CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew)
+#define ISimilarity_CreateTableIndirect(This,mapping,fileIdFile,truncate,recordSize,isNew) (This)->lpVtbl->CreateTableIndirect(This,mapping,fileIdFile,truncate,recordSize,isNew)
+#define ISimilarity_CloseTable(This,isValid) (This)->lpVtbl->CloseTable(This,isValid)
+#define ISimilarity_Append(This,similarityFileId,similarityData) (This)->lpVtbl->Append(This,similarityFileId,similarityData)
+#define ISimilarity_FindSimilarFileId(This,similarityData,resultsSize,findSimilarResults) (This)->lpVtbl->FindSimilarFileId(This,similarityData,resultsSize,findSimilarResults)
+#define ISimilarity_CopyAndSwap(This,reportProgress) (This)->lpVtbl->CopyAndSwap(This,reportProgress)
+#define ISimilarity_GetRecordCount(This,recordCount) (This)->lpVtbl->GetRecordCount(This,recordCount)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_MSRDC */
+
diff --git a/mingw-w64-headers/include/mstcpip.h b/mingw-w64-headers/include/mstcpip.h
index 68b9fee..1664d69 100644
--- a/mingw-w64-headers/include/mstcpip.h
+++ b/mingw-w64-headers/include/mstcpip.h
@@ -6,6 +6,8 @@
 #ifndef _MSTCPIP_
 #define _MSTCPIP_
 
+#include <_mingw_unicode.h>
+
 struct tcp_keepalive {
   u_long onoff;
   u_long keepalivetime;
@@ -28,5 +30,162 @@
 #define RCVALL_ON 1
 #define RCVALL_SOCKETLEVELONLY 2
 
+#if (_WIN32_WINNT >= 0x0600)
+#define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION 0x00000001
+#define SOCKET_SETTINGS_ALLOW_INSECURE 0x00000002
+
+typedef enum _SOCKET_SECURITY_PROTOCOL {
+  SOCKET_SECURITY_PROTOCOL_DEFAULT,
+  SOCKET_SECURITY_PROTOCOL_IPSEC,
+  SOCKET_SECURITY_PROTOCOL_INVALID 
+} SOCKET_SECURITY_PROTOCOL;
+
+typedef enum _SOCKET_USAGE_TYPE {
+  SYSTEM_CRITICAL_SOCKET   = 1 
+} SOCKET_USAGE_TYPE;
+
+typedef struct _SOCKET_PEER_TARGET_NAME {
+  SOCKET_SECURITY_PROTOCOL SecurityProtocol;
+  SOCKADDR_STORAGE         PeerAddress;
+  ULONG                    PeerTargetNameStringLen;
+  wchar_t                  AllStrings[];
+} SOCKET_PEER_TARGET_NAME;
+
+typedef struct _SOCKET_SECURITY_QUERY_INFO {
+  SOCKET_SECURITY_PROTOCOL SecurityProtocol;
+  ULONG                    Flags;
+  UINT64                   PeerApplicationAccessTokenHandle;
+  UINT64                   PeerMachineAccessTokenHandle;
+} SOCKET_SECURITY_QUERY_INFO;
+
+typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE {
+  SOCKET_SECURITY_PROTOCOL SecurityProtocol;
+  SOCKADDR_STORAGE         PeerAddress;
+  ULONG                    PeerTokenAccessMask;
+} SOCKET_SECURITY_QUERY_TEMPLATE;
+
+typedef struct _SOCKET_SECURITY_SETTINGS {
+  SOCKET_SECURITY_PROTOCOL SecurityProtocol;
+  ULONG                    SecurityFlags;
+} SOCKET_SECURITY_SETTINGS;
+
+#define SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION 0x00000001
+
+typedef struct _SOCKET_SECURITY_SETTINGS_IPSEC {
+  SOCKET_SECURITY_PROTOCOL SecurityProtocol;
+  ULONG                    SecurityFlags;
+  ULONG                    IpsecFlags;
+  GUID                     AuthipMMPolicyKey;
+  GUID                     AuthipQMPolicyKey;
+  GUID                     Reserved;
+  UINT64                   Reserved2;
+  ULONG                    UserNameStringLen;
+  ULONG                    DomainNameStringLen;
+  ULONG                    PasswordStringLen;
+  wchar_t                  AllStrings[];
+} SOCKET_SECURITY_SETTINGS_IPSEC;
+
+#define RtlIpv6AddressToString __MINGW_NAME_AW(RtlIpv6AddressToString)
+#define RtlIpv6AddressToStringEx __MINGW_NAME_AW(RtlIpv6AddressToStringEx)
+
+LPWSTR NTAPI RtlIpv6AddressToStringA(
+  const IN6_ADDR *Addr,
+  LPSTR S
+);
+
+LPSTR NTAPI RtlIpv6AddressToStringW(
+  const IN6_ADDR *Addr,
+  LPWSTR S
+);
+
+LONG NTAPI RtlIpv6AddressToStringExA(
+  const IN6_ADDR *Address,
+  ULONG ScopeId,
+  USHORT Port,
+  LPSTR AddressString,
+  PULONG AddressStringLength
+);
+
+LONG NTAPI RtlIpv6AddressToStringExW(
+  const IN6_ADDR *Address,
+  ULONG ScopeId,
+  USHORT Port,
+  LPWSTR AddressString,
+  PULONG AddressStringLength
+);
+
+#define RtlIpv4AddressToString __MINGW_NAME_AW(RtlIpv4AddressToString)
+LPTSTR NTAPI RtlIpv4AddressToStringA(
+  const IN_ADDR *Addr,
+  LPSTR S
+);
+
+LPTSTR NTAPI RtlIpv4AddressToStringW(
+  const IN_ADDR *Addr,
+  LPWSTR S
+);
+
+#define RtlIpv4AddressToStringEx __MINGW_NAME_AW(RtlIpv4AddressToStringEx)
+LONG NTAPI RtlIpv4AddressToStringExA(
+  const IN_ADDR *Address,
+  USHORT Port,
+  LPSTR AddressString,
+  PULONG AddressStringLength
+);
+
+LONG NTAPI RtlIpv4AddressToStringExW(
+  const IN_ADDR *Address,
+  USHORT Port,
+  LPWSTR AddressString,
+  PULONG AddressStringLength
+);
+
+#define RtlIpv4StringToAddress __MINGW_NAME_AW(RtlIpv4StringToAddress)
+LONG NTAPI RtlIpv4StringToAddressA(
+  PCSTR S,
+  BOOLEAN Strict,
+  LPSTR *Terminator,
+  IN_ADDR *Addr
+);
+
+LONG NTAPI RtlIpv4StringToAddressW(
+  PCWSTR S,
+  BOOLEAN Strict,
+  LPWSTR *Terminator,
+  IN_ADDR *Addr
+);
+
+#define RtlIpv4StringToAddressEx __MINGW_NAME_AW(RtlIpv4StringToAddressEx)
+LONG NTAPI RtlIpv4StringToAddressExA(
+  PCSTR AddressString,
+  BOOLEAN Strict,
+  IN_ADDR *Address,
+  PUSHORT Port
+);
+
+LONG NTAPI RtlIpv4StringToAddressExW(
+  PCWSTR AddressString,
+  BOOLEAN Strict,
+  IN_ADDR *Address,
+  PUSHORT Port
+);
+
+#define RtlIpv6StringToAddressEx __MINGW_NAME_AW(RtlIpv6StringToAddressEx)
+LONG NTAPI RtlIpv6StringToAddressExA(
+  PCSTR AddressString,
+  IN6_ADDR *Address,
+  PULONG ScopeId,
+  PUSHORT Port
+);
+
+LONG NTAPI RtlIpv6StringToAddressExW(
+  PCSTR AddressString,
+  IN6_ADDR *Address,
+  PULONG ScopeId,
+  PUSHORT Port
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #endif /* _MSTCPIP_ */
 
diff --git a/mingw-w64-headers/include/mswsock.h b/mingw-w64-headers/include/mswsock.h
index 4d461b2..94d10e9 100644
--- a/mingw-w64-headers/include/mswsock.h
+++ b/mingw-w64-headers/include/mswsock.h
@@ -184,6 +184,23 @@
 
 #define WSAID_WSARECVMSG {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
 
+#if (_WIN32_WINNT >= 0x0600)
+int WSAAPI WSAPoll(
+  WSAPOLLFD fdarray[],
+  ULONG nfds,
+  INT timeout
+);
+
+int WSAAPI WSASendMsg(
+  SOCKET s,
+  LPWSAMSG lpMsg,
+  DWORD dwFlags,
+  LPDWORD lpNumberOfBytesSent,
+  LPWSAOVERLAPPED lpOverlapped,
+  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/muiload.h b/mingw-w64-headers/include/muiload.h
new file mode 100644
index 0000000..f5be23f
--- /dev/null
+++ b/mingw-w64-headers/include/muiload.h
@@ -0,0 +1,27 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_MUILOAD
+#define _INC_MUILOAD
+
+/*Fixme: These are static functions as opposed to dllimported*/
+
+WINBOOL WINAPI FreeMUILibrary(
+  HMODULE hResModule
+);
+
+HINSTANCE WINAPI LoadMUILibrary(
+  LPCTSTR pszFullModuleName,
+  DWORD dwLangConvention,
+  LANGID LangID
+);
+
+WINBOOL WINAPI GetUILanguageFallbackList(
+  PWSTR pFallbackList,
+  ULONG cchFallbackList,
+  PULONG pcchFallbackListOut
+);
+#endif /*_INC_MUILOAD*/
diff --git a/mingw-w64-headers/include/mxdc.h b/mingw-w64-headers/include/mxdc.h
new file mode 100644
index 0000000..23112b8
--- /dev/null
+++ b/mingw-w64-headers/include/mxdc.h
@@ -0,0 +1,61 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_MXDC
+#define _INC_MXDC
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagMxdcEscapeHeader {
+  ULONG cbInput;
+  ULONG cbOutput;
+  ULONG opCode;
+} MXDC_ESCAPE_HEADER_T, *P_MXDC_ESCAPE_HEADER_T;
+
+typedef struct _tagMxdcGetFileNameData {
+  ULONG   cbOutput;
+  wchar_t wszData[1];
+} MXDC_GET_FILENAME_DATA_T, *P_MXDC_GET_FILENAME_DATA_T;
+
+typedef struct tagMxdcPrintTicketData {
+  DWORD dwDataSize;
+  BYTE  bData[1];
+} MXDC_PRINTTICKET_DATA_T, *P_MXDC_PRINTTICKET_DATA_T;
+
+typedef struct tagMxdcPrintTicketEscape {
+  MXDC_ESCAPE_HEADER_T    mxdcEscape;
+  MXDC_PRINTTICKET_DATA_T printTicketData;
+} MXDC_PRINTTICKET_ESCAPE_T, *P_MXDC_PRINTTICKET_ESCAPE_T;
+
+typedef struct tagMxdcS0PageData {
+  ULONG dwSize;
+  BYTE  bData[1];
+} MXDC_S0PAGE_DATA_T, *P_MXDC_S0PAGE_DATA_T;
+
+typedef struct tagMxdcS0PagePassthroughEscape {
+  MXDC_ESCAPE_HEADER_T mxdcEscape;
+  MXDC_S0PAGE_DATA_T   xpsS0PageData;
+} MXDC_S0PAGE_PASSTHROUGH_ESCAPE_T, *P_MXDC_S0PAGE_PASSTHROUGH_ESCAPE_T;
+
+typedef struct tagMxdcXpsS0PageResource {
+  DWORD dwSize;
+  DWORD dwResourceType;
+  BYTE  szUri[MAX_PATH];
+  DWORD dwDataSize;
+  BYTE  bData[1];
+} MXDC_XPS_S0PAGE_RESOURCE_T, *P_MXDC_XPS_S0PAGE_RESOURCE_T;
+
+typedef struct tagMxdcS0PageResourceEscape {
+  MXDC_ESCAPE_HEADER_T       mxdcEscape;
+  MXDC_XPS_S0PAGE_RESOURCE_T xpsS0PageResourcePassthrough;
+} MXDC_S0PAGE_RESOURCE_ESCAPE_T, *P_MXDC_S0PAGE_RESOURCE_ESCAPE_T;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_MXDC*/
diff --git a/mingw-w64-headers/include/napenforcementclient.h b/mingw-w64-headers/include/napenforcementclient.h
new file mode 100644
index 0000000..4c0f893
--- /dev/null
+++ b/mingw-w64-headers/include/napenforcementclient.h
@@ -0,0 +1,39 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPENFORCEMENTCLIENT
+#define _INC_NAPENFORCEMENTCLIENT
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#define defaultProtocolMaxSize    0x0FA0
+#define maxProtocolMaxSize        0xFFFF
+#define minProtocolMaxSize        0x012C
+#define ProtocolMaxSize           range(minProtocolMaxSize, maxProtocolMaxSize)
+
+  typedef struct tagConnections {
+    UINT16                          count;
+    INapEnforcementClientConnection **connections;
+  }Connections;
+
+#ifndef NAPTypes
+#define NAPTypes
+  typedef FILETIME ProbationTime;
+  typedef UINT32 ProtocolMaxSize;
+  typedef UINT32 NapComponentId;
+  typedef NapComponentId SystemHealthEntityId;
+  typedef NapComponentId EnforcementEntityId;
+  typedef UINT16 SystemHealthEntityCount;
+  typedef UINT16 EnforcementEntityCount;
+  typedef CountedString StringCorrelationId;
+  typedef GUID ConnectionId;
+  typedef UINT8 Percentage;
+  typedef UINT32 MessageId;
+#endif /* NAPTypes */
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPENFORCEMENTCLIENT */
+
diff --git a/mingw-w64-headers/include/naperror.h b/mingw-w64-headers/include/naperror.h
new file mode 100644
index 0000000..3f8e838
--- /dev/null
+++ b/mingw-w64-headers/include/naperror.h
@@ -0,0 +1,39 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPERROR
+#define _INC_NAPERROR
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#define NAP_E_INVALID_PACKET            _HRESULT_TYPEDEF_(0x80270001L)
+#define NAP_E_MISSING_SOH               _HRESULT_TYPEDEF_(0x80270002L)
+#define NAP_E_CONFLICTING_ID            _HRESULT_TYPEDEF_(0x80270003L)
+#define NAP_E_NO_CACHED_SOH             _HRESULT_TYPEDEF_(0x80270004L)
+#define NAP_E_STILL_BOUND               _HRESULT_TYPEDEF_(0x80270005L)
+#define NAP_E_NOT_REGISTERED            _HRESULT_TYPEDEF_(0x80270006L)
+#define NAP_E_NOT_INITIALIZED           _HRESULT_TYPEDEF_(0x80270007L)
+#define NAP_E_MISMATCHED_ID             _HRESULT_TYPEDEF_(0x80270008L)
+#define NAP_E_NOT_PENDING               _HRESULT_TYPEDEF_(0x80270009L)
+#define NAP_E_ID_NOT_FOUND              _HRESULT_TYPEDEF_(0x8027000AL)
+#define NAP_E_MAXSIZE_TOO_SMALL         _HRESULT_TYPEDEF_(0x8027000BL)
+#define NAP_E_SERVICE_NOT_RUNNING       _HRESULT_TYPEDEF_(0x8027000CL)
+#define NAP_S_CERT_ALREADY_PRESENT      _HRESULT_TYPEDEF_(0x0027000DL)
+#define NAP_E_ENTITY_DISABLED           _HRESULT_TYPEDEF_(0x8027000EL)
+#define NAP_E_NETSH_GROUPPOLICY_ERROR   _HRESULT_TYPEDEF_(0x8027000FL)
+#define NAP_E_TOO_MANY_CALLS            _HRESULT_TYPEDEF_(0x80270010L)
+
+#if (_WIN32_WINNT >= 0x0601)
+
+#define NAP_E_SHV_CONFIG_EXISTED        _HRESULT_TYPEDEF_(0x80270011L)
+#define NAP_E_SHV_CONFIG_NOT_FOUND      _HRESULT_TYPEDEF_(0x80270012L)
+#define NAP_E_SHV_TIMEOUT               _HRESULT_TYPEDEF_(0x80270013L)
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPERROR */
+
diff --git a/mingw-w64-headers/include/napmicrosoftvendorids.h b/mingw-w64-headers/include/napmicrosoftvendorids.h
new file mode 100644
index 0000000..87ab682
--- /dev/null
+++ b/mingw-w64-headers/include/napmicrosoftvendorids.h
@@ -0,0 +1,25 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPMICROSOFTVENDORIDS
+#define _INC_NAPMICROSOFTVENDORIDS
+
+#if (_WIN32_WINNT >= 0x0600)
+#define NapSystemId                     0x00013700
+#define NapDhcpEnforcementId            0x00013701
+#define NapRasEnforcementId             0x00013702
+#define NapIpsecEnforcementId           0x00013703
+#define Nap8021xEnforcementId           0x00013704
+#define NapAnywhereAccessEnforcementId  0x00013705
+#define NapIsaEnforcementId             0x00013706
+#define NapEapEnforcementId             0x00013707
+#define NapOutOfBoxSystemHealthId       0x00013780
+#define NapSmsSystemHealthId            0x00013781
+#define NapFCSv1SystemHealthId          0x00013782
+#define NapFCSv2SystemHealthId          0x00013783
+#define NapTpmSystemHealthId            0x00013784
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPMICROSOFTVENDORIDS */
diff --git a/mingw-w64-headers/include/napprotocol.h b/mingw-w64-headers/include/napprotocol.h
new file mode 100644
index 0000000..d0d944f
--- /dev/null
+++ b/mingw-w64-headers/include/napprotocol.h
@@ -0,0 +1,64 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPTYPES
+#define _INC_NAPTYPES
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum tagSoHAttributeType {
+  sohAttributeTypeSystemHealthId           = 2,
+  sohAttributeTypeIpv4FixupServers         = 3,
+  sohAttributeTypeComplianceResultCodes    = 4,
+  sohAttributeTypeTimeOfLastUpdate         = 5,
+  sohAttributeTypeClientId                 = 6,
+  sohAttributeTypeVendorSpecific           = 7,
+  sohAttributeTypeHealthClass              = 8,
+  sohAttributeTypeSoftwareVersion          = 9,
+  sohAttributeTypeProductName              = 10,
+  sohAttributeTypeHealthClassStatus        = 11,
+  sohAttributeTypeSoHGenerationTime        = 12,
+  sohAttributeTypeErrorCodes               = 13,
+  sohAttributeTypeFailureCategory          = 14,
+  sohAttributeTypeIpv6FixupServers         = 15,
+  sohAttributeTypeExtendedIsolationState   = 16
+} SoHAttributeType;
+
+typedef union tagSoHAttributeValue {
+  SystemHealthEntityId     idVal;
+  struct tagIpv4Addresses {
+    UINT16 count;
+    Ipv4Address *addresses;
+  } v4AddressesVal;
+  struct tagIpv6Addresses {
+    UINT16 count;
+    Ipv6Address *addresses;
+  } v6AddressesVal;
+  ResultCodes              codesVal;
+  FILETIME                 dateTimeVal;
+  struct tagVendorSpecific {
+    UINT32 vendorId;
+    UINT16 size;
+    BYTE *vendorSpecificData;
+  } vendorSpecificVal;
+  UINT8                    uint8Val;
+  struct tagOctetString {
+    UINT16 size;
+    BYTE *data;
+  } octetStringVal;
+}SoHAttributeValue;
+
+typedef enum tagHealthClassValue {
+  healthClassFirewall         = 0,
+  healthClassPatchLevel       = 1,
+  healthClassAntiVirus        = 2,
+  healthClassCriticalUpdate   = 3,
+  healthClassReserved         = 128
+} HealthClassValue;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPTYPES */
+
diff --git a/mingw-w64-headers/include/naptypes.h b/mingw-w64-headers/include/naptypes.h
new file mode 100644
index 0000000..a8a5d6e
--- /dev/null
+++ b/mingw-w64-headers/include/naptypes.h
@@ -0,0 +1,213 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPTYPES
+#define _INC_NAPTYPES
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define maxSoHAttributeCount          0x64
+#define maxSoHAttributeSize           0xFA0
+#define minNetworkSoHSize             0xC
+#define maxNetworkSoHSize             0xFA0
+#define maxDwordCountPerSoHAttribute  (maxSoHAttributeSize / sizeof(DWORD))
+#define maxIpv4CountPerSoHAttribute   (maxSoHAttributeSize / 0x4)
+#define maxIpv6CountPerSoHAttribute   (maxSoHAttributeSize / 0x10)
+#define maxStringLength               0x400
+#define maxStringLengthInBytes        ((maxStringLength + 1) * sizeof(WCHAR))
+#define maxSystemHealthEntityCount    0x14
+#define SystemHealthEntityCount       0x14 /*[range(0, maxSystemHealthEntityCount)]*/
+#define maxEnforcerCount              0x14
+#define EnforcementEntityCount        0x14 /*[range(0, maxEnforcerCount)]*/
+#define maxPrivateDataSize            0xC8
+#define maxConnectionCountPerEnforcer 0x14
+#define maxCachedSoHCount             (maxSystemHealthEntityCount * maxEnforcerCount * maxConnectionCountPerEnforcer)
+#define freshSoHRequest               0x1
+#define shaFixup                      0x1
+#define failureCategoryCount          0x5
+#define ComponentTypeEnforcementClientSoH 0x1
+#define ComponentTypeEnforcementClientRp  0x2
+
+#ifndef NAPTypes
+#define NAPTypes
+  typedef FILETIME ProbationTime;
+  typedef UINT32 ProtocolMaxSize;
+  typedef UINT32 NapComponentId;
+  typedef NapComponentId SystemHealthEntityId;
+  typedef NapComponentId EnforcementEntityId;
+  typedef UINT16 SystemHealthEntityCount;
+  typedef UINT16 EnforcementEntityCount;
+  typedef CountedString StringCorrelationId;
+  typedef GUID ConnectionId;
+  typedef UINT8 Percentage;
+  typedef UINT32 MessageId;
+#endif /* NAPTypes */
+
+  typedef enum tagFixupState {
+    fixupStateSuccess          = 0,
+    fixupStateInProgress       = 1,
+    fixupStateCouldNotUpdate   = 2
+  } FixupState;
+
+typedef enum tagFailureCategory {
+  failureCategoryNone                  = 0,
+  failureCategoryOther                 = 1,
+  failureCategoryClientComponent       = 2,
+  failureCategoryClientCommunication   = 3,
+  failureCategoryServerComponent       = 4,
+  failureCategoryServerCommunication   = 5
+} FailureCategory;
+
+  typedef enum tagIsolationState {
+    isolationStateNotRestricted      = 1,
+    isolationStateInProbation        = 2,
+    isolationStateRestrictedAccess   = 3
+  } IsolationState;
+
+  typedef enum tagExtendedIsolationState {
+    extendedIsolationStateNoData       = 0,
+    extendedIsolationStateTransition   = 1,
+    extendedIsolationStateInfected     = 2,
+    extendedIsolationStateUnknown      = 3
+  } ExtendedIsolationState;
+
+  typedef enum tagRemoteConfigurationType {
+    remoteConfigTypeMachine      = 1,
+    remoteConfigTypeConfigBlob   = 2
+  } RemoteConfigurationType;
+
+  typedef enum tagNapNotifyType {
+    napNotifyTypeUnknown        = 0,
+    napNotifyTypeServiceState   = 1,
+    napNotifyTypeQuarState      = 2
+  } NapNotifyType;
+  
+  typedef enum _NAPI_PROVIDER_LEVEL {
+    ProviderLevel_None        = 0,
+    ProviderLevel_Secondary,
+    ProviderLevel_Primary
+  } NAPI_PROVIDER_LEVEL;
+
+  typedef enum _NAPI_PROVIDER_TYPE {
+    ProviderType_Application   = 1,
+    ProviderType_Service
+  } NAPI_PROVIDER_TYPE;
+
+  typedef struct tagResultCodes {
+    UINT16  count;
+    HRESULT *results;
+  } ResultCodes;
+
+  typedef struct tagCorrelationId {
+    GUID     connId;
+    FILETIME timeStamp;
+  } CorrelationId;
+
+  typedef struct tagSoHAttribute {
+    UINT16 type;
+    UINT16 size;
+    BYTE * value;
+  } SoHAttribute;
+
+  typedef struct tagCountedString {
+    UINT16 length;
+    WCHAR *string;
+  } CountedString;
+
+  typedef struct tagIpv4Address {
+    BYTE addr[4];
+  } Ipv4Address;
+
+  typedef struct tagIpv6Address {
+    BYTE addr[16];
+  } Ipv6Address;
+
+  typedef struct tagSoH {
+    UINT16       count;
+    SoHAttribute *attributes;
+  } SoH, SoHRequest, SoHResponse;
+
+  typedef struct tagFixupInfo {
+    FixupState  state;
+    Percentage  percentage;
+    ResultCodes resultCodes;
+    MessageId   fixupMsgId;
+  } FixupInfo;
+
+#define failureCategoryCount 5
+
+  typedef struct tagFailureCategoryMapping {
+    WINBOOL mappingCompliance[failureCategoryCount];
+  } FailureCategoryMapping;
+
+  typedef struct tagIsolationInfo {
+    IsolationState isolationState;
+    ProbationTime  probEndTime;
+    CountedString  failureUrl;
+  } IsolationInfo;
+
+  typedef struct tagIsolationInfoEx {
+    IsolationState         isolationState;
+    ExtendedIsolationState extendedIsolationState;
+    ProbationTime          probEndTime;
+    CountedString          failureUrl;
+  } IsolationInfoEx;
+
+  typedef struct tagNapComponentRegistrationInfo {
+    NapComponentId id;
+    CountedString  friendlyName;
+    CountedString  description;
+    CountedString  version;
+    CountedString  vendorName;
+    CLSID          infoClsid;
+    CLSID          configClsid;
+    FILETIME       registrationDate;
+    UINT32         componentType;
+  } NapComponentRegistrationInfo;
+
+  typedef struct tagPrivateData {
+    UINT16 size;
+    BYTE * data;
+  } PrivateData;
+
+  typedef struct tagNetworkSoH {
+    UINT16 size;
+    BYTE * data;
+  } NetworkSoH, NetworkSoHRequest, NetworkSoHResponse;
+
+  typedef struct tagSystemHealthAgentState {
+    SystemHealthEntityId id;
+    ResultCodes          shaResultCodes;
+    FailureCategory      failureCategory;
+    FixupInfo            fixupInfo;
+  }SystemHealthAgentState;
+  
+typedef struct _NAPI_DOMAIN_DESCRIPTION_BLOB {
+  DWORD AuthLevel;
+  DWORD cchDomainName;
+  DWORD OffsetNextDomainDescription;
+  DWORD OffsetThisDomainName;
+} NAPI_DOMAIN_DESCRIPTION_BLOB, *PNAPI_DOMAIN_DESCRIPTION_BLOB;
+
+typedef struct _NAPI_PROVIDER_INSTALLATION_BLOB {
+  DWORD dwVersion;
+  DWORD dwProviderType;
+  DWORD fSupportsWildCard;
+  DWORD cDomains;
+  DWORD OffsetFirstDomain;
+} NAPI_PROVIDER_INSTALLATION_BLOB, *PNAPI_PROVIDER_INSTALLATION_BLOB;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPTYPES */
+
diff --git a/mingw-w64-headers/include/naputil.h b/mingw-w64-headers/include/naputil.h
new file mode 100644
index 0000000..d55fac5
--- /dev/null
+++ b/mingw-w64-headers/include/naputil.h
@@ -0,0 +1,43 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPUTIL
+#define _INC_NAPUTIL
+
+#include <naptypes.h>
+/* Duplicated in naputil.w */
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NAPAPI DECLSPEC_IMPORT
+
+  NAPAPI HRESULT WINAPI AllocConnections(Connections **connections,UINT16 connectionsCount);
+  NAPAPI VOID WINAPI FreeConnections(Connections *connections);
+  NAPAPI HRESULT WINAPI AllocFixupInfo(FixupInfo **fixupInfo,UINT16 countResultCodes);
+  NAPAPI VOID WINAPI FreeCountedString(CountedString *countedString);
+  NAPAPI VOID WINAPI FreeFixupInfo(FixupInfo *fixupInfo);
+  NAPAPI VOID WINAPI FreeIsolationInfo(IsolationInfo *isolationInfo);
+  NAPAPI VOID WINAPI FreeIsolationInfoEx(IsolationInfoEx *isolationInfo);
+  NAPAPI VOID WINAPI FreeNapComponentRegistrationInfoArray(UINT16 count,NapComponentRegistrationInfo **info);
+  NAPAPI VOID WINAPI FreeNetworkSoH(NetworkSoH *networkSoh);
+  NAPAPI VOID WINAPI FreePrivateData(PrivateData *privateData);
+  NAPAPI VOID WINAPI FreeSoH(SoH *soh);
+  NAPAPI VOID WINAPI FreeSoHAttributeValue(SoHAttributeType type,SoHAttributeValue *value);
+  NAPAPI VOID WINAPI FreeSystemHealthAgentState(SystemHealthAgentState *state);
+  NAPAPI HRESULT WINAPI InitializeNapAgentNotifier(NapNotifyType type,HANDLE hNotifyEvent);
+  NAPAPI VOID WINAPI UninitializeNapAgentNotifier(NapNotifyType type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPUTIL */
+
diff --git a/mingw-w64-headers/include/naputil.w b/mingw-w64-headers/include/naputil.w
new file mode 100644
index 0000000..7425a0a
--- /dev/null
+++ b/mingw-w64-headers/include/naputil.w
@@ -0,0 +1,43 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NAPUTIL
+#define _INC_NAPUTIL
+
+#include <naptypes.h>
+/* Duplicated in naputil.h */
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NAPAPI DECLSPEC_IMPORT
+
+  NAPAPI HRESULT WINAPI AllocConnections(Connections **connections,UINT16 connectionsCount);
+  NAPAPI VOID WINAPI FreeConnections(Connections *connections);
+  NAPAPI HRESULT WINAPI AllocFixupInfo(FixupInfo **fixupInfo,UINT16 countResultCodes);
+  NAPAPI VOID WINAPI FreeCountedString(CountedString *countedString);
+  NAPAPI VOID WINAPI FreeFixupInfo(FixupInfo *fixupInfo);
+  NAPAPI VOID WINAPI FreeIsolationInfo(IsolationInfo *isolationInfo);
+  NAPAPI VOID WINAPI FreeIsolationInfoEx(IsolationInfoEx *isolationInfo);
+  NAPAPI VOID WINAPI FreeNapComponentRegistrationInfoArray(UINT16 count,NapComponentRegistrationInfo **info);
+  NAPAPI VOID WINAPI FreeNetworkSoH(NetworkSoH *networkSoh);
+  NAPAPI VOID WINAPI FreePrivateData(PrivateData *privateData);
+  NAPAPI VOID WINAPI FreeSoH(SoH *soh);
+  NAPAPI VOID WINAPI FreeSoHAttributeValue(SoHAttributeType type,SoHAttributeValue *value);
+  NAPAPI VOID WINAPI FreeSystemHealthAgentState(SystemHealthAgentState *state);
+  NAPAPI HRESULT WINAPI InitializeNapAgentNotifier(NapNotifyType type,HANDLE hNotifyEvent);
+  NAPAPI VOID WINAPI UninitializeNapAgentNotifier(NapNotifyType type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /* _INC_NAPUTIL */
+
diff --git a/mingw-w64-headers/include/ncrypt.h b/mingw-w64-headers/include/ncrypt.h
new file mode 100644
index 0000000..491ccf7
--- /dev/null
+++ b/mingw-w64-headers/include/ncrypt.h
@@ -0,0 +1,313 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NCRYPT
+#define _INC_NCRYPT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NCRYPTBUFFER_SSL_CLIENT_RANDOM 20
+#define NCRYPTBUFFER_SSL_SERVER_RANDOM 21
+#define NCRYPTBUFFER_SSL_HIGHEST_VERSION 22
+#define NCRYPTBUFFER_SSL_CLEAR_KEY 23
+#define NCRYPTBUFFER_SSL_KEY_ARG_DATA 24
+#define NCRYPTBUFFER_PKCS_OID 40
+#define NCRYPTBUFFER_PKCS_ALG_OID 41
+#define NCRYPTBUFFER_PKCS_ALG_PARAM 42
+#define NCRYPTBUFFER_PKCS_ALG_ID 43
+#define NCRYPTBUFFER_PKCS_ATTRS 44
+#define NCRYPTBUFFER_PKCS_KEY_NAME 45
+#define NCRYPTBUFFER_PKCS_SECRET 46
+#define NCRYPTBUFFER_CERT_BLOB 47
+
+#ifndef __SECSTATUS_DEFINED__
+  typedef LONG SECURITY_STATUS;
+#define __SECSTATUS_DEFINED__
+#endif
+
+#ifndef __NCRYPT_KEY_HANDLE__
+#define __NCRYPT_KEY_HANDLE__
+/*in wincrypt.h too*/
+typedef LPVOID NCRYPT_KEY_HANDLE;
+#endif
+
+typedef LPVOID NCRYPT_PROV_HANDLE;
+typedef LPVOID NCRYPT_SECRET_HANDLE;
+typedef LPVOID NCRYPT_HANDLE;
+
+#ifndef __HCRYPTKEY__
+#define __HCRYPTKEY__
+/* In wincrypt.h too */
+  typedef ULONG_PTR HCRYPTPROV;
+  typedef ULONG_PTR HCRYPTKEY;
+#endif
+
+typedef struct _NCryptBuffer {
+  ULONG cbBuffer;
+  ULONG BufferType;
+  PVOID pvBuffer;
+} NCryptBuffer, *PNCryptBuffer;
+
+typedef struct _NCryptBufferDesc {
+  ULONG         ulVersion;
+  ULONG         cBuffers;
+  PNCryptBuffer pBuffers;
+} NCryptBufferDesc, *PNCryptBufferDesc;
+
+typedef struct __NCRYPT_SUPPORTED_LENGTHS {
+  DWORD dwMinLength;
+  DWORD dwMaxLength;
+  DWORD dwIncrement;
+  DWORD dwDefaultLength;
+} NCRYPT_SUPPORTED_LENGTHS;
+
+#define NCRYPT_UI_PROTECT_KEY_FLAG 0x00000001
+#define NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG 0x00000002
+
+typedef struct __NCRYPT_UI_POLICY {
+  DWORD   dwVersion;
+  DWORD   dwFlags;
+  LPCWSTR pszCreationTitle;
+  LPCWSTR pszFriendlyName;
+  LPCWSTR pszDescription;
+} NCRYPT_UI_POLICY;
+
+typedef struct __NCRYPT_UI_POLICY_BLOB {
+  DWORD dwVersion;
+  DWORD dwFlags;
+  DWORD cbCreationTitle;
+  DWORD cbFriendlyName;
+  DWORD cbDescription;
+} NCRYPT_UI_POLICY_BLOB;
+
+typedef struct NCryptKeyName {
+  LPWSTR pszName;
+  LPWSTR pszAlgid;
+  DWORD  dwLegacyKeySpec;
+  DWORD  dwFlags;
+} NCryptKeyName;
+
+#define NCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x00000003
+#define NCRYPT_SECRET_AGREEMENT_INTERFACE 0x00000004
+#define NCRYPT_SIGNATURE_INTERFACE 0x00000005
+
+#define NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004
+#define NCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008
+#define NCRYPT_SIGNATURE_OPERATION 0x00000010
+
+typedef struct _NCryptAlgorithmName {
+  LPWSTR pszName;
+  DWORD  dwClass;
+  DWORD  dwAlgOperations;
+  DWORD  dwFlags;
+} NCryptAlgorithmName;
+
+typedef struct NCryptProviderName {
+  LPWSTR pszName;
+  LPWSTR pszComment;
+} NCryptProviderName;
+
+SECURITY_STATUS WINAPI NCryptExportKey(
+  NCRYPT_KEY_HANDLE hKey,
+  NCRYPT_KEY_HANDLE hExportKey,
+  LPCWSTR pszBlobType,
+  NCryptBufferDesc *pParameterList,
+  PBYTE pbOutput,
+  DWORD cbOutput,
+  DWORD *pcbResult,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptCreatePersistedKey(
+  NCRYPT_PROV_HANDLE hProvider,
+  NCRYPT_KEY_HANDLE *phKey,
+  LPCWSTR pszAlgId,
+  LPCWSTR pszKeyName,
+  DWORD dwLegacyKeySpec,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptDecrypt(
+  NCRYPT_KEY_HANDLE hKey,
+  PBYTE pbInput,
+  DWORD cbInput,
+  VOID *pPaddingInfo,
+  PBYTE pbOutput,
+  DWORD cbOutput,
+  DWORD *pcbResult,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptDeleteKey(
+  NCRYPT_KEY_HANDLE hKey,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptDeriveKey(
+  NCRYPT_SECRET_HANDLE hSharedSecret,
+  LPCWSTR pwszKDF,
+  NCryptBufferDesc *pParameterList,
+  PBYTE pbDerivedKey,
+  DWORD cbDerivedKey,
+  DWORD *pcbResult,
+  ULONG dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptEncrypt(
+  NCRYPT_KEY_HANDLE hKey,
+  PBYTE pbInput,
+  DWORD cbInput,
+  VOID *pPaddingInfo,
+  PBYTE pbOutput,
+  DWORD cbOutput,
+  DWORD *pcbResult,
+  DWORD dwFlags
+);
+
+#define NCRYPT_CIPHER_OPERATION 0x00000001
+#define NCRYPT_HASH_OPERATION 0x00000002
+#define NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004
+#define NCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008
+#define NCRYPT_SIGNATURE_OPERATION 0x00000010
+#define NCRYPT_RNG_OPERATION 0x00000020
+
+SECURITY_STATUS WINAPI NCryptEnumAlgorithms(
+  NCRYPT_PROV_HANDLE hProvider,
+  DWORD dwAlgOperations,
+  DWORD *pdwAlgCount,
+  NCryptAlgorithmName **ppAlgList,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptEnumKeys(
+  NCRYPT_PROV_HANDLE hProvider,
+  LPCWSTR pszScope,
+  NCryptKeyName **ppKeyName,
+  PVOID *ppEnumState,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptEnumStorageProviders(
+  DWORD *pdwProviderCount,
+  NCryptProviderName **ppProviderList,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS NCryptFinalizeKey(
+  NCRYPT_KEY_HANDLE hKey,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptFreeBuffer(
+  PVOID pvInput
+);
+
+SECURITY_STATUS WINAPI NCryptFreeObject(
+  NCRYPT_HANDLE hObject
+);
+
+SECURITY_STATUS WINAPI NCryptGetProperty(
+  NCRYPT_HANDLE hObject,
+  LPCWSTR pszProperty,
+  PBYTE pbOutput,
+  DWORD cbOutput,
+  DWORD *pcbResult,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptImportKey(
+  NCRYPT_PROV_HANDLE hProvider,
+  NCRYPT_KEY_HANDLE hImportKey,
+  LPCWSTR pszBlobType,
+  NCryptBufferDesc *pParameterList,
+  NCRYPT_KEY_HANDLE *phKey,
+  PBYTE pbData,
+  DWORD cbData,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptIsAlgSupported(
+  NCRYPT_PROV_HANDLE hProvider,
+  LPCWSTR pszAlgId,
+  DWORD dwFlags
+);
+
+WINBOOL WINAPI NCryptIsKeyHandle(
+  NCRYPT_KEY_HANDLE hKey
+);
+
+SECURITY_STATUS WINAPI NCryptNotifyChangeKey(
+  NCRYPT_PROV_HANDLE hProvider,
+  HANDLE *phEvent,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptOpenKey(
+  NCRYPT_PROV_HANDLE hProvider,
+  NCRYPT_KEY_HANDLE *phKey,
+  LPCWSTR pszKeyName,
+  DWORD dwLegacyKeySpec,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptOpenStorageProvider(
+  NCRYPT_PROV_HANDLE *phProvider,
+  LPCWSTR pszProviderName,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptSecretAgreement(
+  NCRYPT_KEY_HANDLE hPrivKey,
+  NCRYPT_KEY_HANDLE hPubKey,
+  NCRYPT_SECRET_HANDLE *phSecret,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptSetProperty(
+  NCRYPT_HANDLE hObject,
+  LPCWSTR pszProperty,
+  PBYTE pbInput,
+  DWORD cbInput,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptSignHash(
+  NCRYPT_KEY_HANDLE hKey,
+  VOID *pPaddingInfo,
+  PBYTE pbHashValue,
+  DWORD cbHashValue,
+  PBYTE pbSignature,
+  DWORD cbSignature,
+  DWORD *pcbResult,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptTranslateHandle(
+  NCRYPT_PROV_HANDLE *phProvider,
+  NCRYPT_KEY_HANDLE *phKey,
+  HCRYPTPROV hLegacyProv,
+  HCRYPTKEY hLegacyKey,
+  DWORD dwLegacyKeySpec,
+  DWORD dwFlags
+);
+
+SECURITY_STATUS WINAPI NCryptVerifySignature(
+  NCRYPT_KEY_HANDLE hKey,
+  VOID *pPaddingInfo,
+  PBYTE pbHashValue,
+  DWORD cbHashValue,
+  PBYTE pbSignature,
+  DWORD cbSignature,
+  DWORD dwFlags
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_NCRYPT*/
diff --git a/mingw-w64-headers/include/ndattrib.h b/mingw-w64-headers/include/ndattrib.h
new file mode 100644
index 0000000..e252878
--- /dev/null
+++ b/mingw-w64-headers/include/ndattrib.h
@@ -0,0 +1,179 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NDATTRIB
+#define _INC_NDATTRIB
+
+#if (_WIN32_WINNT >= 0x0600)
+
+/* In ndhelper.idl
+typedef struct tagDIAG_SOCKADDR {
+  USHORT family;
+  CHAR   data[126];
+} DIAG_SOCKADDR, *PDIAG_SOCKADDR;
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagDIAG_SOCKADDR DIAG_SOCKADDR;
+
+typedef enum tagATTRIBUTE_TYPE {
+  AT_INVALID        = 0,
+  AT_BOOLEAN,
+  AT_INT8,
+  AT_UINT8,
+  AT_INT16,
+  AT_UINT16,
+  AT_INT32,
+  AT_UINT32,
+  AT_INT64,
+  AT_UINT64,
+  AT_STRING,
+  AT_GUID,
+  AT_LIFE_TIME,
+  AT_SOCKADDR,
+  AT_OCTET_STRING
+} ATTRIBUTE_TYPE;
+
+typedef enum tagREPAIR_SCOPE {
+  RS_SYSTEM        = 0,
+  RS_USER          = 1,
+  RS_APPLICATION   = 2,
+  RS_PROCESS       = 3
+} REPAIR_SCOPE;
+
+typedef enum tagREPAIR_RISK {
+  RR_NOROLLBACK   = 0,
+  RR_ROLLBACK     = 1,
+  RR_NORISK       = 2
+} REPAIR_RISK;
+
+typedef enum tagUI_INFO_TYPE {
+  UIT_NONE            = 0,
+  UIT_SHELL_COMMAND,
+  UIT_HELP_PANE,
+  UIT_DUI
+} UI_INFO_TYPE;
+
+typedef enum tagPROBLEM_TYPE {
+  PT_LOW_HEALTH              = 1,
+  PT_LOWER_HEALTH            = 2,
+  PT_DOWN_STREAM_HEALTH      = 4,
+  PT_HIGH_UTILIZATION        = 8,
+  PT_HIGHER_UTILIZATION      = 16,
+  PT_UP_STREAM_UTILIZATION   = 32
+} PROBLEM_TYPE;
+
+typedef enum tagREPAIR_STATUS {
+  RS_NOT_IMPLEMENTED   = 0,
+  RS_REPAIRED          = 1,
+  RS_UNREPAIRED        = 2,
+  RS_DEFERRED          = 3,
+  RS_USER_ACTION       = 4
+} REPAIR_STATUS;
+
+typedef struct tagLIFE_TIME {
+  FILETIME startTime;
+  FILETIME endTime;
+} LIFE_TIME, *PLIFE_TIME;
+
+typedef struct tagOCTET_STRING {
+  DWORD dwLength;
+  BYTE  *lpValue;
+} OCTET_STRING, *POCTET_STRING;
+
+typedef struct tagUiInfo {
+  UI_INFO_TYPE type;
+  __MINGW_EXTENSION union {
+    LPWSTR pwzNull;
+    ShellCommandInfo ShellInfo;
+    LPWSTR pwzHelpURL;
+    LPWSTR pwzDui;
+  };
+} UiInfo, *PUiInfo;
+
+typedef struct tagRepairInfo {
+  GUID            guid;
+  LPWSTR          pwszClassName;
+  LPWSTR          pwszDescription;
+  DWORD           sidType;
+  long            cost;
+  ULONG           flags;
+  REPAIR_SCOPE    scope;
+  REPAIR_RISK     risk;
+  UiInfo          UiInfo;
+} RepairInfo, *PRepairInfo;
+
+typedef struct tagShellCommandInfo {
+  LPWSTR pwszOperation;
+  LPWSTR pwszFile;
+  LPWSTR pwszParameters;
+  LPWSTR pwszDirectory;
+  ULONG  nShowCmd;
+} ShellCommandInfo, *PShellCommandInfo;
+
+typedef struct tagHELPER_ATTRIBUTE {
+  LPWSTR pwszName;
+  ATTRIBUTE_TYPE  type;
+  __MINGW_EXTENSION union {
+    WINBOOL Boolean;
+    char Char;
+    byte Byte;
+    short Short;
+    WORD Word;
+    int Int;
+    DWORD DWord;
+    LONGLONG Int64;
+    ULONGLONG UInt64;
+    LPWSTR PWStr;
+    GUID Guid;
+    LIFE_TYPE LifeTime;
+    DIAG_SOCKADDR Address;
+    OCTET_STRING OctetString;
+  };
+} HELPER_ATTRIBUTE;
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#if (_WIN32_WINNT >= 0x0601)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RCF_ISLEAF 0x1
+#define RCF_ISCONFIRMED 0x2
+#define RCF_ISTHIRDPARTY 0x4
+
+typedef struct tagRepairInfoEx {
+  RepairInfo repair;
+  USHORT     repairRank;
+} RepairInfoEx, *PRepairInfoEx;
+
+typedef struct tagRootCauseInfo {
+  LPWSTR       pwszDescription;
+  GUID         rootCauseID;
+  DWORD        rootCauseFlags;
+  GUID         networkInterfaceID;
+  RepairInfoEx *pRepairs;
+  USHORT       repairCount;
+} RootCauseInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NDATTRIB*/
+
diff --git a/mingw-w64-headers/include/ndfapi.h b/mingw-w64-headers/include/ndfapi.h
new file mode 100644
index 0000000..8924457
--- /dev/null
+++ b/mingw-w64-headers/include/ndfapi.h
@@ -0,0 +1,75 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NDFAPI
+#define _INC_NDFAPI
+
+#include <ndattrib.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT NdfCloseIncident(
+  NDFHANDLE handle
+);
+
+HRESULT WINAPI NdfCreateConnectivityIncident(
+  NDFHANDLE *handle
+);
+
+HRESULT WINAPI NdfCreateDNSIncident(
+  LPCWSTR hostname,
+  WORD querytype,
+  NDFHANDLE *handle
+);
+
+HRESULT NdfCreateIncident(
+  LPCWSTR helperClassName,
+  ULONG celt,
+  HELPER_ATTRIBUTE *attributes,
+  NDFHANDLE *handle
+);
+
+HRESULT WINAPI NdfCreateSharingIncident(
+  LPCWSTR sharename,
+  NDFHANDLE *handle
+);
+
+HRESULT WINAPI NdfCreateWebIncident(
+  LPCWSTR url,
+  NDFHANDLE *handle
+);
+
+HRESULT WINAPI NdfCreateWebIncidentEx(
+  LPCWSTR url,
+  WINBOOL useWinHTTP,
+  LPWSTR moduleName,
+  NDFHANDLE *handle
+);
+
+HRESULT NdfCreateWinSockIncident(
+  SOCKET sock,
+  LPCWSTR host,
+  USHORT port,
+  LPCWSTR appID,
+  SID *userId,
+  NDFHANDLE *handle
+);
+
+HRESULT NdfExecuteDiagnosis(
+  NDFHANDLE handle,
+  HWND hwnd
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NDFAPI*/
diff --git a/mingw-w64-headers/include/ndhelper.h b/mingw-w64-headers/include/ndhelper.h
new file mode 100644
index 0000000..cf0d87d
--- /dev/null
+++ b/mingw-w64-headers/include/ndhelper.h
@@ -0,0 +1,178 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NDHELPER
+#define _INC_NDHELPER
+
+#include <ndattrib.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagDiagnosticsInfo {
+  long  cost;
+  ULONG flags;
+} DiagnosticsInfo, *PDiagnosticsInfo;
+
+typedef struct tagHYPOTHESIS {
+  LPWSTR                  pwszClassName;
+  LPWSTR                  pwszDescription;
+  ULONG                   celt;
+  PHELPER_ATTRIBUTE rgAttributes[ ];
+} HYPOTHESIS, *PHYPOTHESIS;
+
+typedef struct tagHelperAttributeInfo {
+  LPWSTR pwszName;
+  ATTRIBUTE_TYPE  type;
+} HelperAttributeInfo, *PHelperAttributeInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef  INTERFACE
+#define INTERFACE INetDiagHelperInfo
+DECLARE_INTERFACE_(INetDiagHelperInfo,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* INetDiagHelperInfo methods */
+    STDMETHOD_(HRESULT,GetAttributeInfo)(THIS_ ULONG *pcelt,HelperAttributeInfo **pprgAttributeInfos) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define INetDiagHelperInfo_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define INetDiagHelperInfo_AddRef(This) (This)->pVtbl->AddRef(This)
+#define INetDiagHelperInfo_Release(This) (This)->pVtbl->Release(This)
+#define INetDiagHelperInfo_GetAttributeInfo(This,pcelt,pprgAttributeInfos) (This)->lpVtbl->GetAttributeInfo(This,pcelt,pprgAttributeInfos)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE INetDiagHelper
+DECLARE_INTERFACE_(INetDiagHelper,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* INetDiagHelper methods */
+    STDMETHOD_(HRESULT,Cancel)(THIS) PURE;
+    STDMETHOD_(HRESULT,Cleanup)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetAttributes)(THIS_ ULONG *pcelt,HELPER_ATTRIBUTE **pprgAttributes) PURE;
+    STDMETHOD_(HRESULT,GetCacheTime)(THIS_ FILETIME *pCacheTime) PURE;
+    STDMETHOD_(HRESULT,GetDiagnosticsInfo)(THIS_ RETVAL DiagnosticsInfo **ppInfo) PURE;
+    STDMETHOD_(HRESULT,GetDownStreamHypotheses)(THIS_ ULONG *pcelt,HYPOTHESIS **pprgHypotheses) PURE;
+    STDMETHOD_(HRESULT,GetHigherHypotheses)(THIS_ ULONG *pcelt,HYPOTHESIS **pprgHypotheses) PURE;
+    STDMETHOD_(HRESULT,GetKeyAttributes)(THIS_ ULONG *pcelt,HELPER_ATTRIBUTE **pprgAttributes) PURE;
+    STDMETHOD_(HRESULT,GetLifeTime)(THIS_ LIFE_TIME *pLifeTime) PURE;
+    STDMETHOD_(HRESULT,GetLowerHypotheses)(THIS_ ULONG *pcelt,HYPOTHESIS **pprgHypotheses) PURE;
+    STDMETHOD_(HRESULT,GetRepairInfo)(THIS_ PROBLEM_TYPE problem,ULONG pcelt,RepairInfo **ppInfo) PURE;
+    STDMETHOD_(HRESULT,GetUpStreamHypotheses)(THIS_ ULONG *pcelt,HYPOTHESIS **pprgHypotheses) PURE;
+    STDMETHOD_(HRESULT,HighUtilization)(THIS_ STRING LPWSTR pwszInstanceDescription,STRING LPWSTR *ppwszDescription,LONG *pDeferredTime,DIAGNOSTICS_STATUS *pStatus) PURE;
+    STDMETHOD_(HRESULT,Initialize)(THIS_ ULONG celt,HELPER_ATTRIBUTE rgAttributes) PURE;
+    STDMETHOD_(HRESULT,LowHealth)(THIS_ STRING LPWSTR pwszInstanceDescription,STRING LPWSTR *ppwszDescription,LONG *pDeferredTime,DIAGNOSTICS_STATUS *pStatus) PURE;
+    STDMETHOD_(HRESULT,Repair)(THIS_ REPAIRINFO *pInfo,LONG *pDeferredTime,REPAIR_STATUS *pStatus) PURE;
+    STDMETHOD_(HRESULT,SetLifeTime)(THIS_ LIFE_TIME lifeTime) PURE;
+    STDMETHOD_(HRESULT,Validate)(THIS_ PROBLEM_TYPE problem,ULONG *pDeferredTime,REPAIR_STATUS *pStatus) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define INetDiagHelper_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define INetDiagHelper_AddRef(This) (This)->pVtbl->AddRef(This)
+#define INetDiagHelper_Release(This) (This)->pVtbl->Release(This)
+#define INetDiagHelper_Cancel() (This)->lpVtbl->Cancel(This)
+#define INetDiagHelper_Cleanup() (This)->lpVtbl->Cleanup(This)
+#define INetDiagHelper_GetAttributes(This,pcelt,pprgAttributes) (This)->lpVtbl->GetAttributes(This,pcelt,pprgAttributes)
+#define INetDiagHelper_GetCacheTime(This,pCacheTime) (This)->lpVtbl->GetCacheTime(This,pCacheTime)
+#define INetDiagHelper_GetDiagnosticsInfo(This,ppInfo) (This)->lpVtbl->GetDiagnosticsInfo(This,ppInfo)
+#define INetDiagHelper_GetDownStreamHypotheses(This,pcelt,pprgHypotheses) (This)->lpVtbl->GetDownStreamHypotheses(This,pcelt,pprgHypotheses)
+#define INetDiagHelper_GetHigherHypotheses(This,pcelt,pprgHypotheses) (This)->lpVtbl->GetHigherHypotheses(This,pcelt,pprgHypotheses)
+#define INetDiagHelper_GetKeyAttributes(This,pcelt,pprgAttributes) (This)->lpVtbl->GetKeyAttributes(This,pcelt,pprgAttributes)
+#define INetDiagHelper_GetLifeTime(This,pLifeTime) (This)->lpVtbl->GetLifeTime(This,pLifeTime)
+#define INetDiagHelper_GetLowerHypotheses(This,pcelt,pprgHypotheses) (This)->lpVtbl->GetLowerHypotheses(This,pcelt,pprgHypotheses)
+#define INetDiagHelper_GetRepairInfo(This,problem,pcelt,ppInfo) (This)->lpVtbl->GetRepairInfo(This,problem,pcelt,ppInfo)
+#define INetDiagHelper_GetUpStreamHypotheses(This,pcelt,pprgHypotheses) (This)->lpVtbl->GetUpStreamHypotheses(This,pcelt,pprgHypotheses)
+#define INetDiagHelper_HighUtilization(This,pwszInstanceDescription,ppwszDescription,pDeferredTime,pStatus) (This)->lpVtbl->HighUtilization(This,pwszInstanceDescription,ppwszDescription,pDeferredTime,pStatus)
+#define INetDiagHelper_Initialize(This,celt,rgAttributes) (This)->lpVtbl->Initialize(This,celt,rgAttributes)
+#define INetDiagHelper_LowHealth(This,pwszInstanceDescription,ppwszDescription,pDeferredTime,pStatus) (This)->lpVtbl->LowHealth(This,pwszInstanceDescription,ppwszDescription,pDeferredTime,pStatus)
+#define INetDiagHelper_Repair(This,pInfo,pDeferredTime,pStatus) (This)->lpVtbl->Repair(This,pInfo,pDeferredTime,pStatus)
+#define INetDiagHelper_SetLifeTime(This,lifeTime) (This)->lpVtbl->SetLifeTime(This,lifeTime)
+#define INetDiagHelper_Validate(This,problem,pDeferredTime,pStatus) (This)->lpVtbl->Validate(This,problem,pDeferredTime,pStatus)
+#endif /*COBJMACROS*/
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef struct tagHypothesisResult {
+  HYPOTHESIS       hypothesis;
+  DIAGNOSIS_STATUS pathStatus;
+} HypothesisResult;
+
+#undef  INTERFACE
+#define INTERFACE INetDiagHelperUtilFactory
+DECLARE_INTERFACE_(INetDiagHelperUtilFactory,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* INetDiagHelperUtilFactory methods */
+    STDMETHOD(CreateUtilityInstance)(THIS_ REFIID *riid,void **ppvObject) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define INetDiagHelperUtilFactory_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define INetDiagHelperUtilFactory_AddRef(This) (This)->pVtbl->AddRef(This)
+#define INetDiagHelperUtilFactory_Release(This) (This)->pVtbl->Release(This)
+#define INetDiagHelperUtilFactory_CreateUtilityInstance(This,riid,ppvObject) (This)->lpVtbl->CreateUtilityInstance(This,riid,ppvObject)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE INetDiagHelperEx
+DECLARE_INTERFACE_(INetDiagHelperEx,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* INetDiagHelperEx methods */
+    STDMETHOD_(HRESULT,ReconfirmLowHealth)(THIS_ ULONG celt,HypothesisResult *pResults,string LPWSTR *ppwszUpdatedDescription,DIAGNOSIS_STATUS *pUpdatedStatus) PURE;
+    STDMETHOD(ReproduceFailure)(THIS) PURE;
+    STDMETHOD(SetUtilities)(THIS_ INetDiagHelperUtilFactory *pUtilities) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define INetDiagHelperEx_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define INetDiagHelperEx_AddRef(This) (This)->pVtbl->AddRef(This)
+#define INetDiagHelperEx_Release(This) (This)->pVtbl->Release(This)
+#define INetDiagHelperEx_ReconfirmLowHealth(This,celt,pResults,ppwszUpdatedDescription,pUpdatedStatus) (This)->lpVtbl->ReconfirmLowHealth(This,celt,pResults,ppwszUpdatedDescription,pUpdatedStatus)
+#define INetDiagHelperEx_ReproduceFailure() (This)->lpVtbl->ReproduceFailure(This)
+#define INetDiagHelperEx_SetUtilities(This,pUtilities) (This)->lpVtbl->SetUtilities(This,pUtilities)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NDHELPER*/
diff --git a/mingw-w64-headers/include/netioapi.h b/mingw-w64-headers/include/netioapi.h
new file mode 100644
index 0000000..eebdeb7
--- /dev/null
+++ b/mingw-w64-headers/include/netioapi.h
@@ -0,0 +1,600 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NETIOAPI
+#define _INC_NETIOAPI
+
+#include <iprtrmib.h>
+#include <ifdef.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __IPHLPAPI_H__
+#define NETIO_STATUS DWORD
+#define NETIOAPI_API_ WINAPI
+#else
+#define NETIO_STATUS NTSTATUS
+#define NETIOAPI_API_ NTAPI
+#endif
+
+#define NETIOAPI_API NETIO_STATUS NETIOAPI_API_
+#define ConvertInterfaceLuidToName __MINGW_NAME_AW(ConvertInterfaceLuidToName)
+#define ConvertInterfaceNameToLuid __MINGW_NAME_AW(ConvertInterfaceNameToLuid)
+
+typedef LPVOID NET_IFINDEX;
+
+typedef enum _MIB_NOTIFICATION_TYPE {
+  MibParameterNotification   = 0,
+  MibAddInstance             = 1,
+  MibDeleteInstance          = 2,
+  MibInitialNotification     = 3
+} MIB_NOTIFICATION_TYPE, *PMIB_NOTIFICATION_TYPE;
+
+typedef struct _MIB_ANYCASTIPADDRESS_ROW {
+  SOCKADDR_INET Address;
+  NET_LUID      InterfaceLuid;
+  NET_IFINDEX   InterfaceIndex;
+  SCOPE_ID      ScopeId;
+} MIB_ANYCASTIPADDRESS_ROW, *PMIB_ANYCASTIPADDRESS_ROW;
+
+typedef struct _MIB_ANYCASTIPADDRESS_TABLE {
+  ULONG                    NumEntries;
+  MIB_ANYCASTIPADDRESS_ROW Table[ANY_SIZE];
+} MIB_ANYCASTIPADDRESS_TABLE, *PMIB_ANYCASTIPADDRESS_TABLE;
+
+typedef struct _MIB_IPFORWARD_ROW2 {
+  NET_LUID          InterfaceLuid;
+  NET_IFINDEX       InterfaceIndex;
+  IP_ADDRESS_PREFIX DestinationPrefix;
+  SOCKADDR_INET     NextHop;
+  UCHAR             SitePrefixLength;
+  ULONG             ValidLifetime;
+  ULONG             PreferredLifetime;
+  ULONG             Metric;
+  NL_ROUTE_PROTOCOL Protocol;
+  BOOLEAN           Loopback;
+  BOOLEAN           AutoconfigureAddress;
+  BOOLEAN           Publish;
+  BOOLEAN           Immortal;
+  ULONG             Age;
+  NL_ROUTE_ORIGIN   Origin;
+} MIB_IPFORWARD_ROW2, *PMIB_IPFORWARD_ROW2;
+
+typedef struct _MIB_IPNET_ROW2 {
+  SOCKADDR_INET     Address;
+  NET_IFINDEX       InterfaceIndex;
+  NET_LUID          InterfaceLuid;
+  UCHAR             PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
+  ULONG             PhysicalAddressLength;
+  NL_NEIGHBOR_STATE State;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      BOOLEAN IsRouter  :1;
+      BOOLEAN IsUnreachable  :1;
+    };
+    UCHAR  Flags;
+  };
+  __MINGW_EXTENSION union {
+    ULONG LastReachable;
+    ULONG LastUnreachable;
+  } ReachabilityTime;
+} MIB_IPNET_ROW2, *PMIB_IPNET_ROW2;
+
+typedef struct _MIB_IPNET_TABLE2 {
+  ULONG          NumEntries;
+  MIB_IPNET_ROW2 Table[ANY_SIZE];
+} MIB_IPNET_TABLE2, *PMIB_IPNET_TABLE2;
+
+typedef struct _MIB_IPFORWARD_TABLE2 {
+  ULONG              NumEntries;
+  MIB_IPFORWARD_ROW2 Table[ANY_SIZE];
+} MIB_IPFORWARD_TABLE2, *PMIB_IPFORWARD_TABLE2;
+
+typedef struct _IP_ADDRESS_PREFIX {
+  SOCKADDR_INET Prefix;
+  UINT8         PrefixLength;
+} IP_ADDRESS_PREFIX, *PIP_ADDRESS_PREFIX;
+
+typedef struct _MIB_IPINTERFACE_ROW {
+  ADDRESS_FAMILY                 Family;
+  NET_LUID                       InterfaceLuid;
+  NET_IFINDEX                    InterfaceIndex;
+  ULONG                          MaxReassemblySize;
+  ULONG64                        InterfaceIdentifier;
+  ULONG                          MinRouterAdvertisementInterval;
+  ULONG                          MaxRouterAdvertisementInterval;
+  BOOLEAN                        AdvertisingEnabled;
+  BOOLEAN                        ForwardingEnabled;
+  BOOLEAN                        WeakHostSend;
+  BOOLEAN                        WeakHostReceive;
+  BOOLEAN                        UseAutomaticMetric;
+  BOOLEAN                        UseNeighborUnreachabilityDetection;
+  BOOLEAN                        ManagedAddressConfigurationSupported;
+  BOOLEAN                        OtherStatefulConfigurationSupported;
+  BOOLEAN                        AdvertiseDefaultRoute;
+  NL_ROUTER_DISCOVERY_BEHAVIOR   RouterDiscoveryBehavior;
+  ULONG                          DadTransmits;
+  ULONG                          BaseReachableTime;
+  ULONG                          RetransmitTime;
+  ULONG                          PathMtuDiscoveryTimeout;
+  NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
+  ULONG                          LinkLocalAddressTimeout;
+  ULONG                          ZoneIndices[ScopeLevelCount];
+  ULONG                          SitePrefixLength;
+  ULONG                          Metric;
+  ULONG                          NlMtu;
+  BOOLEAN                        Connected;
+  BOOLEAN                        SupportsWakeUpPatterns;
+  BOOLEAN                        SupportsNeighborDiscovery;
+  BOOLEAN                        SupportsRouterDiscovery;
+  ULONG                          ReachableTime;
+  NL_INTERFACE_OFFLOAD_ROD       TransmitOffload;
+  NL_INTERFACE_OFFLOAD_ROD       ReceiveOffload;
+  BOOLEAN                        DisableDefaultRoutes;
+} MIB_IPINTERFACE_ROW, *PMIB_IPINTERFACE_ROW;
+
+typedef struct _MIB_IPINTERFACE_TABLE {
+  ULONG               NumEntries;
+  MIB_IPINTERFACE_ROW Table[ANY_SIZE];
+} MIB_IPINTERFACE_TABLE, *PMIB_IPINTERFACE_TABLE;
+
+typedef struct _MIB_UNICASTIPADDRESS_ROW {
+  SOCKADDR_INET    Address;
+  NET_LUID         InterfaceLuid;
+  NET_IFINDEX      InterfaceIndex;
+  NL_PREFIX_ORIGIN PrefixOrigin;
+  NL_SUFFIX_ORIGIN SuffixOrigin;
+  ULONG            ValidLifetime;
+  ULONG            PreferredLifetime;
+  UINT8            OnLinkPrefixLength;
+  BOOLEAN          SkipAsSource;
+  NL_DAD_STATE     DadState;
+  SCOPE_ID         ScopeId;
+  LARGE_INTEGER    CreationTimeStamp;
+} MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW;
+
+typedef struct _MIB_UNICASTIPADDRESS_TABLE {
+  ULONG                    NumEntries;
+  MIB_UNICASTIPADDRESS_ROW Table[ANY_SIZE];
+} MIB_UNICASTIPADDRESS_TABLE, *PMIB_UNICASTIPADDRESS_TABLE;
+
+typedef struct _MIB_IF_ROW2 {
+  NET_LUID                   InterfaceLuid;
+  NET_IFINDEX                InterfaceIndex;
+  GUID                       InterfaceGuid;
+  WCHAR                      Alias[IF_MAX_STRING_SIZE + 1];
+  WCHAR                      Description[IF_MAX_STRING_SIZE + 1];
+  ULONG                      PhysicalAddressLength;
+   UCHAR                     PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
+   UCHAR                     PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
+  ULONG                      Mtu;
+  IFTYPE                     Type;
+  TUNNEL_TYPE                TunnelType;
+  NDIS_MEDIUM                MediaType;
+  NDIS_PHYSICAL_MEDIUM       PhysicalMediumType;
+  NET_IF_ACCESS_TYPE         AccessType;
+  NET_IF_DIRECTION_TYPE      DirectionType;
+  __MINGW_EXTENSION struct {
+    BOOLEAN HardwareInterface  :1;
+    BOOLEAN FilterInterface  :1;
+    BOOLEAN ConnectorPresent   :1;
+    BOOLEAN NotAuthenticated  :1;
+    BOOLEAN NotMediaConnected  :1;
+    BOOLEAN Paused  :1;
+    BOOLEAN LowPower  :1;
+    BOOLEAN EndPointInterface  :1;
+  } InterfaceAndOperStatusFlags;
+  IF_OPER_STATUS             OperStatus;
+  NET_IF_ADMIN_STATUS        AdminStatus;
+  NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
+  NET_IF_NETWORK_GUID        NetworkGuid;
+  NET_IF_CONNECTION_TYPE     ConnectionType;
+  ULONG64                    TransmitLinkSpeed;
+  ULONG64                    ReceiveLinkSpeed;
+  ULONG64                    InOctets;
+  ULONG64                    InUcastPkts;
+  ULONG64                    InNUcastPkts;
+  ULONG64                    InDiscards;
+  ULONG64                    InErrors;
+  ULONG64                    InUnknownProtos;
+  ULONG64                    InUcastOctets;
+  ULONG64                    InMulticastOctets;
+  ULONG64                    InBroadcastOctets;
+  ULONG64                    OutOctets;
+  ULONG64                    OutUcastPkts;
+  ULONG64                    OutNUcastPkts;
+  ULONG64                    OutDiscards;
+  ULONG64                    OutErrors;
+  ULONG64                    OutUcastOctets;
+  ULONG64                    OutMulticastOctets;
+  ULONG64                    OutBroadcastOctets;
+  ULONG64                    OutQLen;
+} MIB_IF_ROW2, *PMIB_IF_ROW2;
+
+typedef struct _MIB_IF_TABLE2 {
+  ULONG       NumEntries;
+  MIB_IF_ROW2 Table[ANY_SIZE];
+} MIB_IF_TABLE2, *PMIB_IF_TABLE2;
+
+typedef struct _MIB_IFSTACK_ROW {
+  NET_IFINDEX HigherLayerInterfaceIndex;
+  NET_IFINDEX LowerLayerInterfaceIndex;
+} MIB_IFSTACK_ROW, *PMIB_IFSTACK_ROW;
+
+typedef struct _MIB_IFSTACK_TABLE {
+  ULONG           NumEntries;
+  MIB_IFSTACK_ROW Table[ANY_SIZE];
+} MIB_IFSTACK_TABLE, *PMIB_IFSTACK_TABLE;
+
+typedef struct _MIB_INVERTEDIFSTACK_ROW {
+  NET_IFINDEX LowerLayerInterfaceIndex;
+  NET_IFINDEX HigherLayerInterfaceIndex;
+} MIB_INVERTEDIFSTACK_ROW, *PMIB_INVERTEDIFSTACK_ROW;
+
+typedef struct _MIB_INVERTEDIFSTACK_TABLE {
+  ULONG                   NumEntries;
+  MIB_INVERTEDIFSTACK_ROW Table[ANY_SIZE];
+} MIB_INVERTEDIFSTACK_TABLE, *PMIB_INVERTEDIFSTACK_TABLE;
+
+typedef struct _MIB_IPPATH_ROW {
+  SOCKADDR_INET Source;
+  SOCKADDR_INET Destination;
+  NET_LUID      InterfaceLuid;
+  NET_IFINDEX   InterfaceIndex;
+  SOCKADDR_INET CurrentNextHop;
+  ULONG         PathMtu;
+  ULONG         RttMean;
+  ULONG         RttDeviation;
+  __MINGW_EXTENSION union {
+    ULONG LastReachable;
+    ULONG LastUnreachable;
+  };
+  BOOLEAN       IsReachable;
+  ULONG64       LinkTransmitSpeed;
+  ULONG64       LinkReceiveSpeed;
+} MIB_IPPATH_ROW, *PMIB_IPPATH_ROW;
+
+typedef struct _MIB_IPPATH_TABLE {
+  ULONG          NumEntries;
+  MIB_IPPATH_ROW Table[ANY_SIZE];
+} MIB_IPPATH_TABLE, *PMIB_IPPATH_TABLE;
+
+typedef struct _MIB_MULTICASTIPADDRESS_ROW {
+  SOCKADDR_INET Address;
+  NET_IFINDEX   InterfaceIndex;
+  NET_LUID      InterfaceLuid;
+  SCOPE_ID      ScopeId;
+} MIB_MULTICASTIPADDRESS_ROW, *PMIB_MULTICASTIPADDRESS_ROW;
+
+typedef struct _MIB_MULTICASTIPADDRESS_TABLE {
+  ULONG                      NumEntries;
+  MIB_MULTICASTIPADDRESS_ROW Table[ANY_SIZE];
+} MIB_MULTICASTIPADDRESS_TABLE, *PMIB_MULTICASTIPADDRESS_TABLE;
+
+NETIOAPI_API CancelMibChangeNotify2(
+  HANDLE NotificationHandle
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceAliasToLuid(
+  const WCHAR *InterfaceAlias,
+  PNET_LUID InterfaceLuid
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceLuidToNameA(
+  const NET_LUID *InterfaceLuid,
+  PSTR InterfaceName,
+  SIZE_T Length
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceLuidToNameW(
+  const NET_LUID *InterfaceLuid,
+  PWSTR InterfaceName,
+  SIZE_T Length
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceNameToLuidA(
+  const CHAR *InterfaceName,
+  PNET_LUID InterfaceLuid
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceNameToLuidW(
+  const WCHAR *InterfaceName,
+  PNET_LUID InterfaceLuid
+);
+
+PCHAR WINAPI if_indextoname(
+  NET_IFINDEX InterfaceIndex,
+  PCHAR InterfaceName
+);
+
+NET_IFINDEX WINAPI if_nametoindex(
+  PCSTR InterfaceName
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceGuidToLuid(
+  const GUID *InterfaceGuid,
+  PNET_LUID InterfaceLuid
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceIndexToLuid(
+  NET_IFINDEX InterfaceIndex,
+  PNET_LUID InterfaceLuid
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceLuidToAlias(
+  const NET_LUID *InterfaceLuid,
+  PWSTR InterfaceAlias,
+  SIZE_T Length
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceLuidToGuid(
+  const NET_LUID *InterfaceLuid,
+  GUID *InterfaceGuid
+);
+
+NETIO_STATUS WINAPI ConvertInterfaceLuidToIndex(
+  const NET_LUID *InterfaceLuid,
+  PNET_IFINDEX InterfaceIndex
+);
+
+NETIO_STATUS WINAPI ConvertIpv4MaskToLength(
+  ULONG Mask,
+  PUINT8 MaskLength
+);
+
+NETIO_STATUS WINAPI ConvertLengthToIpv4Mask(
+  ULONG MaskLength,
+  PULONG Mask
+);
+
+NETIOAPI_API CreateAnycastIpAddressEntry(
+  const MIB_ANYCASTIPADDRESS_ROW *Row
+);
+
+NETIOAPI_API CreateIpForwardEntry2(
+  const MIB_IPFORWARD_ROW2 *Row
+);
+
+NETIOAPI_API GetIpNetTable2(
+  ADDRESS_FAMILY Family,
+  PMIB_IPNET_TABLE2 *Table
+);
+
+NETIOAPI_API GetIpNetEntry2(
+  PMIB_IPNET_ROW2 Row
+);
+
+NETIOAPI_API CreateIpNetEntry2(
+  const MIB_IPNET_ROW2 *Row
+);
+
+NETIOAPI_API CreateSortedAddressPairs(
+  const PSOCKADDR_IN6 SourceAddressList,
+  ULONG SourceAddressCount,
+  const PSOCKADDR_IN6 DestinationAddressList,
+  ULONG DestinationAddressCount,
+  ULONG AddressSortOptions,
+  PSOCKADDR_IN6_PAIR *SortedAddressPairList,
+  ULONG *SortedAddressPairCount
+);
+
+NETIOAPI_API CreateIpNetEntry2(
+  const MIB_IPNET_ROW2 *Row
+);
+
+NETIOAPI_API CreateUnicastIpAddressEntry(
+  const MIB_UNICASTIPADDRESS_ROW *Row
+);
+
+NETIOAPI_API DeleteIpForwardEntry2(
+  const MIB_IPFORWARD_ROW2 *Row
+);
+
+NETIOAPI_API GetIpForwardTable2(
+  ADDRESS_FAMILY  Family,
+  PMIB_IPFORWARD_TABLE2 *Table
+);
+
+VOID NETIOAPI_API_ FreeMibTable(
+  PVOID Memory
+);
+
+NETIOAPI_API DeleteIpNetEntry2(
+  const MIB_IPNET_ROW2 *Row
+);
+
+NETIOAPI_API GetIpNetTable2(
+  ADDRESS_FAMILY  Family,
+  PMIB_IPNET_TABLE2 *Table
+);
+
+NETIOAPI_API DeleteUnicastIpAddressEntry(
+  const MIB_UNICASTIPADDRESS_ROW *Row
+);
+
+NETIOAPI_API GetUnicastIpAddressEntry(
+  PMIB_UNICASTIPADDRESS_ROW Row
+);
+
+NETIOAPI_API DeleteAnycastIpAddressEntry(
+  const MIB_ANYCASTIPADDRESS_ROW *Row
+);
+
+NETIOAPI_API FlushIpNetTable2(
+  ADDRESS_FAMILY  Family,
+  NET_IFINDEX InterfaceIndex
+);
+
+NETIOAPI_API FlushIpPathTable(
+  ADDRESS_FAMILY  Family
+);
+
+NETIOAPI_API GetAnycastIpAddressEntry(
+  PMIB_ANYCASTIPADDRESS_ROW Row
+);
+
+NETIOAPI_API GetAnycastIpAddressTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_ANYCASTIPADDRESS_TABLE *Table
+);
+
+NETIOAPI_API GetBestRoute2(
+  NET_LUID *InterfaceLuid,
+  NET_IFINDEX InterfaceIndex,
+  const SOCKADDR_INET *SourceAddress,
+  const SOCKADDR_INET *DestinationAddress,
+  ULONG AddressSortOptions,
+  PMIB_IPFORWARD_ROW2 BestRoute,
+  SOCKADDR_INET *BestSourceAddress
+);
+
+NETIOAPI_API GetIfEntry2(
+  PMIB_IF_ROW2 Row
+);
+
+NETIOAPI_API GetIfTable2(
+  PMIB_IF_TABLE2 *Table
+);
+
+NETIOAPI_API  GetIfStackTable(
+  PMIB_IFSTACK_TABLE *Table
+);
+
+NETIOAPI_API GetIfTable2Ex(
+  MIB_IF_TABLE_LEVEL Level,
+  PMIB_IF_TABLE2 *Table
+);
+
+NETIOAPI_API  GetInvertedIfStackTable(
+  PMIB_INVERTEDIFSTACK_TABLE *Table
+);
+
+NETIOAPI_API GetIpForwardEntry2(
+  PMIB_IPFORWARD_ROW2 Row
+);
+
+NETIOAPI_API GetIpInterfaceEntry(
+  PMIB_IPINTERFACE_ROW Row
+);
+
+NETIOAPI_API  GetIpInterfaceTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_IPINTERFACE_TABLE *Table
+);
+
+NETIOAPI_API GetIpNetEntry2(
+  PMIB_IPNET_ROW2 Row
+);
+
+NETIOAPI_API GetIpPathEntry(
+  PMIB_IPPATH_ROW Row
+);
+
+NETIOAPI_API GetIpPathTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_IPPATH_TABLE *Table
+);
+
+NETIOAPI_API GetMulticastIpAddressEntry(
+  PMIB_MULTICASTIPADDRESS_ROW Row
+);
+
+NETIOAPI_API GetMulticastIpAddressTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_MULTICASTIPADDRESS_TABLE *Table
+);
+
+NETIOAPI_API GetTeredoPort(
+  USHORT *Port
+);
+
+/*Unknown*/
+typedef LPVOID PTEREDO_PORT_CHANGE_CALLBACK;
+
+NETIOAPI_API NotifyTeredoPortChange(
+  PTEREDO_PORT_CHANGE_CALLBACK Callback,
+  PVOID CallerContext,
+  BOOLEAN InitialNotification,
+  HANDLE *NotificationHandle
+);
+
+/*Unknown*/
+typedef LPVOID PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK;
+
+NETIOAPI_API NotifyStableUnicastIpAddressTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_UNICASTIPADDRESS_TABLE *Table,
+  PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK CallerCallback,
+  PVOID CallerContext,
+  HANDLE *NotificationHandle
+);
+
+typedef void (WINAPI *PUNICAST_IPADDRESS_CHANGE_CALLBACK)(void* callerContext, PMIB_UNICASTIPADDRESS_ROW row, MIB_NOTIFICATION_TYPE type);
+
+NETIOAPI_API NotifyUnicastIpAddressChange(
+  ADDRESS_FAMILY Family,
+  PUNICAST_IPADDRESS_CHANGE_CALLBACK Callback,
+  PVOID CallerContext,
+  BOOLEAN InitialNotification,
+  HANDLE *NotificationHandle
+);
+
+NETIOAPI_API GetUnicastIpAddressTable(
+  ADDRESS_FAMILY  Family,
+  PMIB_UNICASTIPADDRESS_TABLE *Table
+);
+
+typedef LPVOID PIPINTERFACE_CHANGE_CALLBACK;
+
+NETIOAPI_API NotifyIpInterfaceChange(
+  ADDRESS_FAMILY Family,
+  PIPINTERFACE_CHANGE_CALLBACK Callback,
+  PVOID CallerContext,
+  BOOLEAN InitialNotification,
+  HANDLE *NotificationHandle
+);
+
+typedef LPVOID PIPFORWARD_CHANGE_CALLBACK;
+
+NETIOAPI_API NotifyRouteChange2(
+  ADDRESS_FAMILY Family,
+  PIPFORWARD_CHANGE_CALLBACK Callback,
+  PVOID CallerContext,
+  BOOLEAN InitialNotification,
+  HANDLE *NotificationHandle
+);
+
+NETIOAPI_API ResolveIpNetEntry2(
+  PMIB_IPNET_ROW2 Row,
+  const SOCKADDR_INET *SourceAddress
+);
+
+NETIOAPI_API SetIpForwardEntry2(
+  const MIB_IPFORWARD_ROW2 *Route
+);
+
+NETIOAPI_API SetIpInterfaceEntry(
+  PMIB_IPINTERFACE_ROW Row
+);
+
+NETIOAPI_API SetIpNetEntry2(
+  PMIB_IPNET_ROW2 Row
+);
+
+NETIOAPI_API SetUnicastIpAddressEntry(
+  const MIB_UNICASTIPADDRESS_ROW *Row
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NETIOAPI*/
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
new file mode 100644
index 0000000..91a87d1
--- /dev/null
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -0,0 +1,68 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NETLISTMGR
+#define _INC_NETLISTMGR
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum NLM_CONNECTION_PROPERTY_CHANGE {
+  NLM_CONNECTION_PROPERTY_CHANGE_AUTHENTICATION   = 0x01
+} NLM_CONNECTION_PROPERTY_CHANGE;
+
+typedef enum NLM_CONNECTIVITY {
+  NLM_CONNECTIVITY_DISCONNECTED        = 0x0000,
+  NLM_CONNECTIVITY_IPV4_NOTRAFFIC      = 0x0001,
+  NLM_CONNECTIVITY_IPV6_NOTRAFFIC      = 0x0002,
+  NLM_CONNECTIVITY_IPV4_SUBNET         = 0x0010,
+  NLM_CONNECTIVITY_IPV4_LOCALNETWORK   = 0x0020,
+  NLM_CONNECTIVITY_IPV4_INTERNET       = 0x0040,
+  NLM_CONNECTIVITY_IPV6_SUBNET         = 0x0100,
+  NLM_CONNECTIVITY_IPV6_LOCALNETWORK   = 0x0200,
+  NLM_CONNECTIVITY_IPV6_INTERNET       = 0x0400
+} NLM_CONNECTIVITY;
+
+typedef enum NLM_DOMAIN_TYPE {
+  NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK     = 0x0,
+  NLM_DOMAIN_TYPE_DOMAIN_NETWORK         = 0x01,
+  NLM_DOMAIN_TYPE_DOMAIN_AUTHENTICATED   = 0x02
+} NLM_DOMAIN_TYPE;
+
+typedef enum NLM_ENUM_NETWORK {
+  NLM_ENUM_NETWORK_CONNECTED      = 0x01,
+  NLM_ENUM_NETWORK_DISCONNECTED   = 0x02,
+  NLM_ENUM_NETWORK_ALL            = 0x03
+} NLM_ENUM_NETWORK;
+
+typedef enum NLM_NETWORK_CATEGORY {
+  NLM_NETWORK_CATEGORY_PUBLIC                 = 0x00,
+  NLM_NETWORK_CATEGORY_PRIVATE                = 0x01,
+  NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED   = 0x02
+} NLM_NETWORK_CATEGORY;
+
+typedef enum _NLM_NETWORK_CLASS {
+  NLM_NETWORK_IDENTIFYING    = 0x01,
+  NLM_NETWORK_IDENTIFIED     = 0x02,
+  NLM_NETWORK_UNIDENTIFIED   = 0x03
+} NLM_NETWORK_CLASS;
+
+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_CATEGORY_VALUE   = 0x10
+} NLM_NETWORK_PROPERTY_CHANGE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NETLISTMGR*/
diff --git a/mingw-w64-headers/include/nldef.h b/mingw-w64-headers/include/nldef.h
new file mode 100644
index 0000000..3b1b3c5
--- /dev/null
+++ b/mingw-w64-headers/include/nldef.h
@@ -0,0 +1,147 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_NLDEF
+#define _INC_NLDEF
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _NL_ADDRESS_TYPE {
+  NlatUnspecified,
+  NlatUnicast,
+  NlatAnycast,
+  NlatMulticast,
+  NlatBroadcast,
+  NlatInvalid
+} NL_ADDRESS_TYPE, *PNL_ADDRESS_TYPE;
+
+typedef enum _NL_DAD_STATE {
+  NldsInvalid,
+  NldsTentative,
+  NldsDuplicate,
+  NldsDeprecated,
+  NldsPreferred,
+  IpDadStateInvalid   = 0,
+  IpDadStateTentative,
+  IpDadStateDuplicate,
+  IpDadStateDeprecated,
+  IpDadStatePreferred
+} NL_DAD_STATE;
+
+typedef enum _NL_LINK_LOCAL_ADDRESS_BEHAVIOR {
+  LinkLocalAlwaysOff   = 0,
+  LinkLocalDelayed,
+  LinkLocalAlwaysOn,
+  LinkLocalUnchanged   = -1
+} NL_LINK_LOCAL_ADDRESS_BEHAVIOR;
+
+typedef enum _NL_NEIGHBOR_STATE {
+  NlnsUnreachable,
+  NlnsIncomplete,
+  NlnsProbe,
+  NlnsDelay,
+  NlnsStale,
+  NlnsReachable,
+  NlnsPermanent,
+  NlnsMaximum
+} NL_NEIGHBOR_STATE, *PNL_NEIGHBOR_STATE;
+
+typedef enum  {
+  IpPrefixOriginOther           = 0,
+  IpPrefixOriginManual,
+  IpPrefixOriginWellKnown,
+  IpPrefixOriginDhcp,
+  IpPrefixOriginRouterAdvertisement,
+  IpPrefixOriginUnchanged  = 1 << 4
+} NL_PREFIX_ORIGIN;
+
+typedef enum _NL_ROUTE_ORIGIN {
+  NlroManual,
+  NlroWellKnown,
+  NlroDHCP,
+  NlroRouterAdvertisement,
+  Nlro6to4 
+} NL_ROUTE_ORIGIN, *PNL_ROUTE_ORIGIN;
+
+typedef enum _NL_ROUTE_PROTOCOL {
+  RouteProtocolOther              = 1,
+  RouteProtocolLocal,
+  RouteProtocolNetMgmt,
+  RouteProtocolIcmp,
+  RouteProtocolEgp,
+  RouteProtocolGgp,
+  RouteProtocolHello,
+  RouteProtocolRip,
+  RouteProtocolIsIs,
+  RouteProtocolEsIs,
+  RouteProtocolCisco,
+  RouteProtocolBbn,
+  RouteProtocolOspf,
+  RouteProtocolBgp,
+  MIB_IPPROTO_OTHER               = 1,
+  MIB_IPPROTO_LOCAL               = 2,
+  MIB_IPPROTO_NETMGMT             = 3,
+  MIB_IPPROTO_ICMP                = 4,
+  MIB_IPPROTO_EGP                 = 5,
+  MIB_IPPROTO_GGP                 = 6,
+  MIB_IPPROTO_HELLO               = 7,
+  MIB_IPPROTO_RIP                 = 8,
+  MIB_IPPROTO_IS_IS               = 9,
+  MIB_IPPROTO_ES_IS               = 10,
+  MIB_IPPROTO_CISCO               = 11,
+  MIB_IPPROTO_BBN                 = 12,
+  MIB_IPPROTO_OSPF                = 13,
+  MIB_IPPROTO_BGP                 = 14,
+  MIB_IPPROTO_NT_AUTOSTATIC       = 10002,
+  MIB_IPPROTO_NT_STATIC           = 10006,
+  MIB_IPPROTO_NT_STATIC_NON_DOD   = 10007
+} NL_ROUTE_PROTOCOL, *PNL_ROUTE_PROTOCOL;
+
+typedef enum _NL_ROUTER_DISCOVERY_BEHAVIOR {
+  RouterDiscoveryDisabled    = 0,
+  RouterDiscoveryEnabled,
+  RouterDiscoveryDhcp,
+  RouterDiscoveryUnchanged   = -1
+} NL_ROUTER_DISCOVERY_BEHAVIOR;
+
+typedef enum  {
+  NlsoOther,
+  NlsoManual,
+  NlsoWellKnown,
+  NlsoDhcp,
+  NlsoLinkLayerAddress,
+  NlsoRandom,
+  IpSuffixOriginOther        = 0,
+  IpSuffixOriginManual,
+  IpSuffixOriginWellKnown,
+  IpSuffixOriginDhcp,
+  IpSuffixOriginLinkLayerAddress,
+  IpSuffixOriginRandom,
+  IpSuffixOriginUnchanged = 1 << 4
+} NL_SUFFIX_ORIGIN;
+
+typedef struct _NL_INTERFACE_OFFLOAD_ROD {
+  BOOLEAN NlChecksumSupported  :1;
+  BOOLEAN NlOptionsSupported  :1;
+  BOOLEAN TlDatagramChecksumSupported  :1;
+  BOOLEAN TlStreamChecksumSupported  :1;
+  BOOLEAN TlStreamOptionsSupported  :1;
+  BOOLEAN TlStreamFastPathCompatible  :1;
+  BOOLEAN TlDatagramFastPathCompatible  :1;
+  BOOLEAN TlLargeSendOffloadSupported  :1;
+  BOOLEAN TlGiantSendOffloadSupported  :1;
+} NL_INTERFACE_OFFLOAD_ROD, *PNL_INTERFACE_OFFLOAD_ROD;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_NLDEF*/
diff --git a/mingw-w64-headers/include/ntdsapi.h b/mingw-w64-headers/include/ntdsapi.h
index 3543236..33a3f6c 100644
--- a/mingw-w64-headers/include/ntdsapi.h
+++ b/mingw-w64-headers/include/ntdsapi.h
@@ -7,7 +7,9 @@
 #define _NTDSAPI_H_
 
 #include <_mingw_unicode.h>
+
 #include <schedule.h>
+#include <rpc.h>
 
 #if !defined(_NTDSAPI_)
 #define NTDSAPI DECLSPEC_IMPORT
@@ -892,6 +894,79 @@
   NTDSAPI WINBOOL WINAPI DsIsMangledDnA(LPCSTR pszDn,DS_MANGLE_FOR eDsMangleFor);
   NTDSAPI WINBOOL WINAPI DsIsMangledDnW(LPCWSTR pszDn,DS_MANGLE_FOR eDsMangleFor);
 
+#if (_WIN32_WINNT >= 0x0600)
+#define NTDSAPI_BIND_FIND_BINDING (0x00000002)
+#define NTDSAPI_BIND_FORCE_KERBEROS (0x00000004)
+
+#define DSSI_READ_ONLY 0x00000001
+#define DSSI_NO_ACCESS_CHECK  0x00000002
+#define DSSI_NO_EDIT_SACL  0x00000004
+#define DSSI_NO_EDIT_OWNER  0x00000008
+#define DSSI_IS_ROOT  0x00000010
+#define DSSI_NO_FILTER  0x00000020
+#define DSSI_NO_READONLY_MESSAGE  0x00000040
+
+NTDSAPI DWORD WINAPI DsBindingSetTimeout(
+  HANDLE hDS,
+  ULONG cTimeoutSecs
+);
+
+#define DsAddSidHistory __MINGW_NAME_AW(DsBindToISTG)
+
+NTDSAPI DWORD WINAPI DsBindToISTGW(
+  LPCWSTR SiteName,
+  HANDLE *phDS
+);
+
+NTDSAPI DWORD WINAPI DsBindToISTGA(
+  LPCWSTR SiteName,
+  HANDLE *phDS
+);
+
+#define DsBindWithSpnEx __MINGW_NAME_AW(DsBindWithSpnEx)
+
+NTDSAPI DWORD WINAPI DsBindWithSpnExA(
+  LPCSTR DomainControllerName,
+  LPCSTR DnsDomainName,
+  RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
+  LPCSTR ServicePrincipalName,
+  DWORD BindFlags,
+  HANDLE *phDS
+);
+
+NTDSAPI DWORD WINAPI DsBindWithSpnExW(
+  LPCWSTR DomainControllerName,
+  LPCWSTR DnsDomainName,
+  RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
+  LPCWSTR ServicePrincipalName,
+  DWORD BindFlags,
+  HANDLE *phDS
+);
+
+NTDSAPI DWORD WINAPI DsQuerySitesByCostA(
+  HANDLE hDS,
+  LPSTR pwszFromSite,
+  LPSTR *rgwszToSites,
+  DWORD cToSites,
+  DWORD dwFlags,
+  PDS_SITE_COST_INFO *prgSiteInfo
+);
+
+NTDSAPI DWORD WINAPI DsQuerySitesByCostW(
+  HANDLE hDS,
+  LPWSTR pwszFromSite,
+  LPWSTR *rgwszToSites,
+  DWORD cToSites,
+  DWORD dwFlags,
+  PDS_SITE_COST_INFO *prgSiteInfo
+);
+
+NTDSAPI void WINAPI DsQuerySitesFree(
+  PDS_SITE_COST_INFO rgSiteInfo
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/ntmsapi.h b/mingw-w64-headers/include/ntmsapi.h
index 348d251..41426b1 100644
--- a/mingw-w64-headers/include/ntmsapi.h
+++ b/mingw-w64-headers/include/ntmsapi.h
@@ -977,6 +977,20 @@
   DWORD WINAPI GetVolumesFromDriveW(LPWSTR pszDriveName,LPWSTR *VolumeNameBufferPtr,LPWSTR *DriveLetterBufferPtr);
   DWORD WINAPI GetVolumesFromDriveA(LPSTR pszDriveName,LPSTR *VolumeNameBufferPtr,LPSTR *DriveLetterBufferPtr);
 
+#if (_WIN32_WINNT >= 0x0600)
+DWORD WINAPI GetVolumesFromDriveA(
+  LPSTR  pszDriveName,
+  LPSTR * VolumeNameBufferPtr,
+  LPSTR * DriveLetterBufferPtr
+);
+
+DWORD WINAPI GetVolumesFromDriveW(
+  LPWSTR  pszDriveName,
+  LPWSTR * VolumeNameBufferPtr,
+  LPWSTR * DriveLetterBufferPtr
+);
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/ntsecapi.h b/mingw-w64-headers/include/ntsecapi.h
index 681c2a9..373fbea 100644
--- a/mingw-w64-headers/include/ntsecapi.h
+++ b/mingw-w64-headers/include/ntsecapi.h
@@ -957,6 +957,11 @@
   typedef enum _KERB_LOGON_SUBMIT_TYPE {
     KerbInteractiveLogon = 2,KerbSmartCardLogon = 6,KerbWorkstationUnlockLogon = 7,KerbSmartCardUnlockLogon = 8,KerbProxyLogon = 9,
     KerbTicketLogon = 10,KerbTicketUnlockLogon = 11,KerbS4ULogon = 12
+#ifdef (_WIN32_WINNT >= 0x0600)
+   ,KerbCertificateLogon         = 13,
+    KerbCertificateS4ULogon      = 14,
+    KerbCertificateUnlockLogon   = 15 
+#endif
   } KERB_LOGON_SUBMIT_TYPE,*PKERB_LOGON_SUBMIT_TYPE;
 
   typedef struct _KERB_INTERACTIVE_LOGON {
@@ -1299,6 +1304,176 @@
     ULONG Flags;
   } KERB_TRANSFER_CRED_REQUEST,*PKERB_TRANSFER_CRED_REQUEST;
 
+#if (_WIN32_WINNT >= 0x0600)
+
+  typedef enum _POLICY_AUDIT_EVENT_TYPE {
+    AuditCategorySystem,
+    AuditCategoryLogon,
+    AuditCategoryObjectAccess,
+    AuditCategoryPrivilegeUse,
+    AuditCategoryDetailedTracking,
+    AuditCategoryPolicyChange,
+    AuditCategoryAccountManagement,
+    AuditCategoryDirectoryServiceAccess,
+    AuditCategoryAccountLogon 
+  } POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE;
+
+#define POLICY_AUDIT_EVENT_UNCHANGED 0x00000000
+#define POLICY_AUDIT_EVENT_SUCCESS 0x00000001
+#define POLICY_AUDIT_EVENT_FAILURE 0x00000002
+#define POLICY_AUDIT_EVENT_NONE 0x00000004
+#define PER_USER_POLICY_UNCHANGED 0x00
+#define PER_USER_AUDIT_SUCCESS_INCLUDE 0x01
+#define PER_USER_AUDIT_SUCCESS_EXCLUDE 0x02
+#define PER_USER_AUDIT_FAILURE_INCLUDE 0x04
+#define PER_USER_AUDIT_FAILURE_EXCLUDE 0x08
+#define PER_USER_AUDIT_NONE 0x10
+
+  typedef struct _AUDIT_POLICY_INFORMATION {
+    GUID  AuditSubCategoryGuid;
+    ULONG AuditingInformation;
+    GUID  AuditCategoryGuid;
+  } AUDIT_POLICY_INFORMATION, *PAUDIT_POLICY_INFORMATION, *PCAUDIT_POLICY_INFORMATION;
+
+  typedef struct _POLICY_AUDIT_SID_ARRAY {
+    ULONG UsersCount;
+    PSID  *UserSidArray;
+  } POLICY_AUDIT_SID_ARRAY, *PPOLICY_AUDIT_SID_ARRAY;
+
+  typedef struct _KERB_CERTIFICATE_LOGON {
+    KERB_LOGON_SUBMIT_TYPE MessageType;
+    UNICODE_STRING         DomainName;
+    UNICODE_STRING         UserName;
+    UNICODE_STRING         Pin;
+    ULONG                  Flags;
+    ULONG                  CspDataLength;
+    PUCHAR                 CspData;
+  } KERB_CERTIFICATE_LOGON, *PKERB_CERTIFICATE_LOGON;
+
+  typedef struct _KERB_CERTIFICATE_UNLOCK_LOGON {
+    KERB_CERTIFICATE_LOGON Logon;
+    LUID                   LogonId;
+  } KERB_CERTIFICATE_UNLOCK_LOGON, *PKERB_CERTIFICATE_UNLOCK_LOGON;
+
+  typedef struct _KERB_SMARTCARD_CSP_INFO {
+    DWORD dwCspInfoLen;
+    DWORD MessageType;
+    __MINGW_EXTENSION union {
+      PVOID   ContextInformation;
+      ULONG64 SpaceHolderForWow64;
+    };
+    DWORD flags;
+    DWORD KeySpec;
+    ULONG nCardNameOffset;
+    ULONG nReaderNameOffset;
+    ULONG nContainerNameOffset;
+    ULONG nCSPNameOffset;
+    TCHAR bBuffer;
+  } KERB_SMARTCARD_CSP_INFO, *PKERB_SMARTCARD_CSP_INFO;
+
+  BOOLEAN WINAPI AuditComputeEffectivePolicyBySid(
+    const PSID pSid,
+    const GUID *pSubCategoryGuids,
+    ULONG PolicyCount,
+    PAUDIT_POLICY_INFORMATION *ppAuditPolicy
+  );
+
+  VOID WINAPI AuditFree(
+    PVOID Buffer
+  );
+
+  BOOLEAN WINAPI AuditSetSystemPolicy(
+    PCAUDIT_POLICY_INFORMATION pAuditPolicy,
+    ULONG PolicyCount
+  );
+
+  BOOLEAN WINAPI AuditQuerySystemPolicy(
+    const GUID *pSubCategoryGuids,
+    ULONG PolicyCount,
+    PAUDIT_POLICY_INFORMATION *ppAuditPolicy
+  );
+
+  BOOLEAN WINAPI AuditSetPerUserPolicy(
+    const PSID pSid,
+    PCAUDIT_POLICY_INFORMATION pAuditPolicy,
+    ULONG PolicyCount
+  );
+
+  BOOLEAN WINAPI AuditQueryPerUserPolicy(
+    const PSID pSid,
+    const GUID *pSubCategoryGuids,
+    ULONG PolicyCount,
+    PAUDIT_POLICY_INFORMATION *ppAuditPolicy
+  );
+
+  BOOLEAN WINAPI AuditComputeEffectivePolicyByToken(
+    HANDLE hTokenHandle,
+    const GUID *pSubCategoryGuids,
+    ULONG PolicyCount,
+    PAUDIT_POLICY_INFORMATION *ppAuditPolicy
+  );
+
+  BOOLEAN WINAPI AuditEnumerateCategories(
+    GUID **ppAuditCategoriesArray,
+    PULONG pCountReturned
+  );
+
+  BOOLEAN WINAPI AuditEnumeratePerUserPolicy(
+    PPOLICY_AUDIT_SID_ARRAY *ppAuditSidArray
+  );
+
+  BOOLEAN WINAPI AuditEnumerateSubCategories(
+    const GUID *pAuditCategoryGuid,
+    BOOLEAN bRetrieveAllSubCategories,
+    GUID **ppAuditSubCategoriesArray,
+    PULONG pCountReturned
+  );
+
+  BOOLEAN WINAPI AuditLookupCategoryGuidFromCategoryId(
+    POLICY_AUDIT_EVENT_TYPE AuditCategoryId,
+    GUID *pAuditCategoryGuid
+  );
+
+  BOOLEAN WINAPI AuditQuerySecurity(
+    SECURITY_INFORMATION SecurityInformation,
+    PSECURITY_DESCRIPTOR *ppSecurityDescriptor
+  );
+
+#define AuditLookupSubCategoryName __MINGW_NAME_AW(AuditLookupSubCategoryName)
+#define AuditLookupCategoryName __MINGW_NAME_AW(AuditLookupCategoryName)
+
+  BOOLEAN WINAPI AuditLookupSubCategoryNameA(
+    const GUID *pAuditSubCategoryGuid,
+    LPSTR *ppszSubCategoryName
+  );
+
+  BOOLEAN WINAPI AuditLookupSubCategoryNameW(
+    const GUID *pAuditSubCategoryGuid,
+    LPWSTR *ppszSubCategoryName
+  );
+
+  BOOLEAN WINAPI AuditLookupCategoryNameA(
+    const GUID *pAuditCategoryGuid,
+    LPSTR *ppszCategoryName
+  );
+
+  BOOLEAN WINAPI AuditLookupCategoryNameW(
+    const GUID *pAuditCategoryGuid,
+    LPWSTR *ppszCategoryName
+  );
+
+  BOOLEAN WINAPI AuditLookupCategoryIdFromCategoryGuid(
+    const GUID *pAuditCategoryGuid,
+    PPOLICY_AUDIT_EVENT_TYPE pAuditCategoryId
+  );
+
+  BOOLEAN WINAPI AuditSetSecurity(
+    __in  SECURITY_INFORMATION SecurityInformation,
+    __in  PSECURITY_DESCRIPTOR pSecurityDescriptor
+  );
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/objbase.h b/mingw-w64-headers/include/objbase.h
index 2e21014..0aaaf99 100644
--- a/mingw-w64-headers/include/objbase.h
+++ b/mingw-w64-headers/include/objbase.h
@@ -327,6 +327,10 @@
 
 WINOLEAPI CreateStdProgressIndicator(HWND hwndParent,LPCOLESTR pszTitle,IBindStatusCallback *pIbscCaller,IBindStatusCallback **ppIbsc);
 
+#if (_WIN32_WINNT >= 0x0600)
+HRESULT WINAPI CoDisconnectContext(DWORD dwTimeout);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifndef RC_INVOKED
 #include <poppack.h>
 #endif
diff --git a/mingw-w64-headers/include/objidl.h b/mingw-w64-headers/include/objidl.h
index cf08875..f4421d3 100644
--- a/mingw-w64-headers/include/objidl.h
+++ b/mingw-w64-headers/include/objidl.h
@@ -5081,6 +5081,31 @@
   void WINAPI AsyncIAdviseSink2_Finish_OnLinkSrcChange_Proxy(AsyncIAdviseSink2 *This);
   HRESULT WINAPI AsyncIAdviseSink2_Finish_OnLinkSrcChange_Stub(AsyncIAdviseSink2 *This);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct tagBIND_OPTS3 {
+  DWORD        cbStruct;
+  DWORD        grfFlags;
+  DWORD        grfMode;
+  DWORD        dwTickCountDeadline;
+  DWORD        dwTrackFlags;
+  DWORD        dwClassContext;
+  LCID         locale;
+  COSERVERINFO *pServerInfo;
+  HWND         hwnd;
+} BIND_OPTS3, *LPBIND_OPTS3;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef enum  {
+  APTTYPEQUALIFIER_NONE                 = 0,
+  APTTYPEQUALIFIER_IMPLICIT_MTA         = 1,
+  APTTYPEQUALIFIER_NA_ON_MTA            = 2,
+  APTTYPEQUALIFIER_NA_ON_STA            = 3,
+  APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA   = 4,
+  APTTYPEQUALIFIER_NA_ON_MAINSTA        = 5 
+} APTTYPEQUALIFIER;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/opmapi.h b/mingw-w64-headers/include/opmapi.h
new file mode 100644
index 0000000..568540a
--- /dev/null
+++ b/mingw-w64-headers/include/opmapi.h
@@ -0,0 +1,246 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_OPMAPI
+#define _INC_OPMAPI
+
+#include <dxva2api.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#define OPM_OMAC_SIZE                                16
+#define OPM_CONFIGURE_SETTING_DATA_SIZE              4056
+#define OPM_REQUESTED_INFORMATION_SIZE               4076
+#define OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE 256
+#define OPM_GET_INFORMATION_PARAMETERS_SIZE          4056
+#define OPM_HDCP_KEY_SELECTION_VECTOR_SIZE           5
+#define OPM_128_BIT_RANDOM_NUMBER_SIZE               16
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _OPM_VIDEO_OUTPUT_SEMANTICS {
+  OPM_VOS_COPP_SEMANTICS   = 0,
+  OPM_VOS_OPM_SEMANTICS    = 1
+} OPM_VIDEO_OUTPUT_SEMANTICS;
+
+typedef enum _OPM_ACP_PROTECTION_LEVEL {
+  OPM_ACP_OFF           = 0,
+  OPM_ACP_LEVEL_ONE     = 1,
+  OPM_ACP_LEVEL_TWO     = 2,
+  OPM_ACP_LEVEL_THREE   = 3,
+  OPM_ACP_FORCE_ULONG   = 0x7fffffff
+} OPM_ACP_PROTECTION_LEVEL;
+
+typedef enum _OPM_DPCP_PROTECTION_LEVEL {
+  OPM_DPCP_OFF           = 0,
+  OPM_DPCP_ON            = 1,
+  OPM_DPCP_FORCE_ULONG   = 0x7fffffff
+} OPM_DPCP_PROTECTION_LEVEL;
+
+typedef enum _OPM_HDCP_PROTECTION_LEVEL {
+  OPM_HDCP_OFF           = 0,
+  OPM_HDCP_ON            = 1,
+  OPM_HDCP_FORCE_ULONG   = 0x7fffffff
+} OPM_HDCP_PROTECTION_LEVEL;
+
+typedef enum _OPM_IMAGE_ASPECT_RATIO_EN300294 {
+  OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3                    = 0,
+  OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_CENTER                    = 1,
+  OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_TOP                       = 2,
+  OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_CENTER                    = 3,
+  OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_TOP                       = 4,
+  OPM_ASPECT_RATIO_EN300294_BOX_GT_16_BY_9_CENTER                 = 5,
+  OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3_PROTECTED_CENTER   = 6,
+  OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_16_BY_9_ANAMORPHIC        = 7,
+  OPM_ASPECT_RATIO_FORCE_ULONG                                    = 0x7FFFFFFF
+} OPM_IMAGE_ASPECT_RATIO_EN300294;
+
+typedef struct _OPM_OMAC {
+  BYTE abOMAC[OPM_OMAC_SIZE];
+} OPM_OMAC;
+
+typedef struct _OPM_REQUESTED_INFORMATION {
+  OPM_OMAC omac;
+  ULONG    cbRequestedInformationSize;
+  BYTE     abRequestedInformation[OPM_REQUESTED_INFORMATION_SIZE];
+} OPM_REQUESTED_INFORMATION;
+
+typedef struct _OPM_ENCRYPTED_INITIALIZATION_PARAMETERS {
+  BYTE abEncryptedInitializationParameters[OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE];
+} OPM_ENCRYPTED_INITIALIZATION_PARAMETERS;
+
+typedef struct _OPM_RANDOM_NUMBER {
+  BYTE abRandomNumber[OPM_128_BIT_RANDOM_NUMBER_SIZE];
+} OPM_RANDOM_NUMBER;
+
+typedef struct _OPM_GET_INFO_PARAMETERS {
+  OPM_OMAC          omac;
+  OPM_RANDOM_NUMBER rnRandomNumber;
+  GUID              guidInformation;
+  ULONG             ulSequenceNumber;
+  ULONG             cbParametersSize;
+  BYTE              abParameters[OPM_GET_INFORMATION_PARAMETERS_SIZE];
+} OPM_GET_INFO_PARAMETERS;
+
+typedef struct _OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS {
+  OPM_RANDOM_NUMBER rnRandomNumber;
+  GUID              guidInformation;
+  ULONG             ulSequenceNumber;
+  ULONG             cbParametersSize;
+  BYTE              abParameters[OPM_GET_INFORMATION_PARAMETERS_SIZE];
+} OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS;
+
+typedef struct _OPM_ACP_AND_CGMSA_SIGNALING {
+  OPM_RANDOM_NUMBER rnRandomNumber;
+  ULONG             ulStatusFlags;
+  ULONG             ulAvailableTVProtectionStandards;
+  ULONG             ulActiveTVProtectionStandard;
+  ULONG             ulReserved;
+  ULONG             ulAspectRatioValidMask1;
+  ULONG             ulAspectRatioData1;
+  ULONG             ulAspectRatioValidMask2;
+  ULONG             ulAspectRatioData2;
+  ULONG             ulAspectRatioValidMask3;
+  ULONG             ulAspectRatioData3;
+  ULONG             ulReserved2[4];
+  ULONG             ulReserved3[4];
+} OPM_ACP_AND_CGMSA_SIGNALING;
+
+typedef struct _OPM_ACTUAL_OUTPUT_FORMAT {
+  OPM_RANDOM_NUMBER  rnRandomNumber;
+  ULONG              ulStatusFlags;
+  ULONG              ulDisplayWidth;
+  ULONG              ulDisplayHeight;
+  DXVA2_SampleFormat dsfSampleInterleaveFormat;
+  D3DFORMAT          d3dFormat;
+  ULONG              ulFrequencyNumerator;
+  ULONG              ulFrequencyDenominator;
+} OPM_ACTUAL_OUTPUT_FORMAT;
+
+typedef struct _OPM_CONFIGURE_PARAMETERS {
+  OPM_OMAC omac;
+  GUID     guidSetting;
+  ULONG    ulSequenceNumber;
+  ULONG    cbParametersSize;
+  BYTE     abParameters[OPM_CONFIGURE_SETTING_DATA_SIZE];
+} OPM_CONFIGURE_PARAMETERS;
+
+typedef struct _OPM_HDCP_KEY_SELECTION_VECTOR {
+  BYTE abKeySelectionVector[OPM_HDCP_KEY_SELECTION_VECTOR_SIZE];
+} OPM_HDCP_KEY_SELECTION_VECTOR;
+
+#define OPM_HDCP_FLAG_NONE 0x00
+#define OPM_HDCP_FLAG_REPEATER 0x01
+
+typedef struct _OPM_CONNECTED_HDCP_DEVICE_INFORMATION {
+  OPM_RANDOM_NUMBER             rnRandomNumber;
+  ULONG                         ulStatusFlags;
+  ULONG                         ulHDCPFlags;
+  OPM_HDCP_KEY_SELECTION_VECTOR ksvB;
+  BYTE                          Reserved[11];
+  BYTE                          Reserved2[16];
+  BYTE                          Reserved3[16];
+} OPM_CONNECTED_HDCP_DEVICE_INFORMATION;
+
+typedef struct _OPM_OUTPUT_ID_DATA {
+  OPM_RANDOM_NUMBER rnRandomNumber;
+  ULONG             ulStatusFlags;
+  UINT64            OutputId;
+} OPM_OUTPUT_ID_DATA;
+
+typedef struct _OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS {
+  ULONG ulNewTVProtectionStandard;
+  ULONG ulAspectRatioChangeMask1;
+  ULONG ulAspectRatioData1;
+  ULONG ulAspectRatioChangeMask2;
+  ULONG ulAspectRatioData2;
+  ULONG ulAspectRatioChangeMask3;
+  ULONG ulAspectRatioData3;
+  ULONG ulReserved[4];
+  ULONG ulReserved2[4];
+  ULONG ulReserved3;
+} OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS;
+
+typedef struct _OPM_SET_HDCP_SRM_PARAMETERS {
+  ULONG ulSRMVersion;
+} OPM_SET_HDCP_SRM_PARAMETERS;
+
+typedef struct _OPM_SET_PROTECTION_LEVEL_PARAMETERS {
+  ULONG ulProtectionType;
+  ULONG ulProtectionLevel;
+  ULONG Reserved;
+  ULONG Reserved2;
+} OPM_SET_PROTECTION_LEVEL_PARAMETERS;
+
+typedef struct _OPM_STANDARD_INFORMATION {
+  OPM_RANDOM_NUMBER rnRandomNumber;
+  ULONG             ulStatusFlags;
+  ULONG             ulInformation;
+  ULONG             ulReserved;
+  ULONG             ulReserved2;
+} OPM_STANDARD_INFORMATION;
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef  INTERFACE
+#define INTERFACE IOPMVideoOutput
+DECLARE_INTERFACE_(IOPMVideoOutput,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IOPMVideoOutput methods */
+    STDMETHOD_(HRESULT,Configure)(THIS_ const OPM_CONFIGURE_PARAMETERS *pParameters,ULONG ulAdditionalParametersSize,const BYTE *pbAdditionalParameters) PURE;
+    STDMETHOD_(HRESULT,COPPCompatibleGetInformation)(THIS_ const OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS *pParameters,OPM_REQUESTED_INFORMATION *pRequestedInformation) PURE;
+    STDMETHOD_(HRESULT,FinishInitialization)(THIS_ const OPM_ENCRYPTED_INITIALIZATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD_(HRESULT,GetInformation)(THIS_ const OPM_GET_INFO_PARAMETERS *pParameters,OPM_REQUESTED_INFORMATION *pRequestedInformation) PURE;
+    STDMETHOD_(HRESULT,StartInitialization)(THIS_ OPM_RANDOM_NUMBER *prnRandomNumber,BYTE **ppbCertificate,ULONG *pulCertificateLength) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IOPMVideoOutput_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IOPMVideoOutput_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IOPMVideoOutput_Release(This) (This)->pVtbl->Release(This)
+#define IOPMVideoOutput_Configure(This,pParameters,ulAdditionalParametersSize,pbAdditionalParameters) (This)->lpVtbl->Configure(This,pParameters,ulAdditionalParametersSize,pbAdditionalParameters)
+#define IOPMVideoOutput_COPPCompatibleGetInformation(This,pParameters,pRequestedInformation) (This)->lpVtbl->COPPCompatibleGetInformation(This,pParameters,pRequestedInformation)
+#define IOPMVideoOutput_FinishInitialization(This,pParameters) (This)->lpVtbl->FinishInitialization(This,pParameters)
+#define IOPMVideoOutput_GetInformation(This,pParameters,pRequestedInformation) (This)->lpVtbl->GetInformation(This,pParameters,pRequestedInformation)
+#define IOPMVideoOutput_StartInitialization(This,prnRandomNumber,ppbCertificate,pulCertificateLength) (This)->lpVtbl->StartInitialization(This,prnRandomNumber,ppbCertificate,pulCertificateLength)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI OPMGetVideoOutputsFromHMONITOR(
+  HMONITOR hMonitor,
+  OPM_VIDEO_OUTPUT_SEMANTICS vos,
+  ULONG *pulNumVideoOutputs,
+  IOPMVideoOutput ***pppOPMVideoOutputArray
+);
+
+HRESULT WINAPI OPMGetVideoOutputsFromIDirect3DDevice9Object(
+  IDirect3DDevice9 *pDirect3DDevice9,
+  OPM_VIDEO_OUTPUT_SEMANTICS vos,
+  ULONG *pulNumVideoOutputs,
+  IOPMVideoOutput ***pppOPMVideoOutputArray
+);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_OPMAPI*/
+
diff --git a/mingw-w64-headers/include/p2p.h b/mingw-w64-headers/include/p2p.h
new file mode 100644
index 0000000..366f332
--- /dev/null
+++ b/mingw-w64-headers/include/p2p.h
@@ -0,0 +1,440 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_P2P
+#define _INC_P2P
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _PEER_APPLICATION_REGISTRATION_TYPE {
+  PEER_APPLICATION_CURRENT_USER,
+  PEER_APPLICATION_ALL_USERS 
+} PEER_APPLICATION_REGISTRATION_TYPE, PEER_APPLICATION_REGISTRATION_FLAGS;
+
+typedef enum _PEER_CHANGE_TYPE {
+  PEER_CHANGE_ADDED,
+  PEER_CHANGE_DELETED,
+  PEER_CHANGE_UPDATED 
+} PEER_CHANGE_TYPE;
+
+typedef enum _PEER_COLLAB_EVENT_TYPE {
+  PEER_EVENT_WATCHLIST_CHANGED,
+  PEER_EVENT_ENDPOINT_CHANGED,
+  PEER_EVENT_ENDPOINT_PRESENCE_CHANGED,
+  PEER_EVENT_ENDPOINT_APPLICATION_CHANGED,
+  PEER_EVENT_ENDPOINT_OBJECT_CHANGED,
+  PEER_EVENT_MY_ENDPOINT_CHANGED,
+  PEER_EVENT_MY_PRESENCE_CHANGED,
+  PEER_EVENT_MY_APPLICATION_CHANGED,
+  PEER_EVENT_MY_OBJECT_CHANGED,
+  PEER_EVENT_PEOPLE_NEAR_ME_CHANGED,
+  PEER_EVENT_REQUEST_STATUS_CHANGED 
+} PEER_COLLAB_EVENT_TYPE;
+
+typedef enum _PEER_GROUP_AUTHENTICATION_SCHEME {
+  PEER_GROUP_GMC_AUTHENTICATION        = 0x00000001,
+  PEER_GROUP_PASSWORD_AUTHENTICATION   = 0x00000002 
+} PEER_GROUP_AUTHENTICATION_SCHEME;
+
+typedef enum _PEER_GROUP_ISSUE_CREDENTIAL_FLAGS {
+  PEER_GROUP_STORE_CREDENTIALS   = 0x0001 
+} PEER_GROUP_ISSUE_CREDENTIAL_FLAGS;
+
+typedef enum _PEER_INVITATION_RESPONSE_TYPE {
+  PEER_INVITATION_RESPONSE_DECLINED,
+  PEER_INVITATION_RESPONSE_ACCEPTED,
+  PEER_INVITATION_RESPONSE_EXPIRED,
+  PEER_INVITATION_RESPONSE_ERROR 
+} PEER_INVITATION_RESPONSE_TYPE;
+
+typedef enum _PEER_PRESENCE_STATUS {
+  PEER_PRESENCE_OFFLINE,
+  PEER_PRESENCE_OUT_TO_LUNCH,
+  PEER_PRESENCE_AWAY,
+  PEER_PRESENCE_BE_RIGHT_BACK,
+  PEER_PRESENCE_IDLE,
+  PEER_PRESENCE_BUSY,
+  PEER_PRESENCE_ON_THE_PHONE,
+  PEER_PRESENCE_ONLINE 
+} PEER_PRESENCE_STATUS;
+
+typedef enum _PEER_PUBLICATION_SCOPE {
+  PEER_PUBLICATION_SCOPE_NONE,
+  PEER_PUBLICATION_SCOPE_NEAR_ME,
+  PEER_PUBLICATION_SCOPE_INTERNET,
+  PEER_PUBLICATION_SCOPE_ALL 
+} PEER_PUBLICATION_SCOPE;
+
+typedef enum _PEER_SIGNIN_FLAGS {
+  PEER_SIGNIN_NONE,
+  PEER_SIGNIN_NEAR_ME,
+  PEER_SIGNIN_INTERNET,
+  PEER_SIGNIN_ALL 
+} PEER_SIGNIN_FLAGS;
+
+typedef enum _PEER_WATCH_PERMISSION {
+  PEER_WATCH_BLOCKED,
+  PEER_WATCH_ALLOWED 
+} PEER_WATCH_PERMISSION;
+
+typedef struct _PEER_CONTACT *PPEER_CONTACT;
+typedef struct _PEER_ENDPOINT *PPEER_ENDPOINT;
+typedef struct _PEER_INVITATION *PPEER_INVITATION;
+typedef struct _PEER_OBJECT *PPEER_OBJECT;
+typedef struct _PEER_PEOPLE_NEAR_ME *PPEER_PEOPLE_NEAR_ME;
+typedef struct _PEER_PRESENCE_INFO *PPEER_PRESENCE_INFO;
+typedef LPVOID HPEERENUM;
+typedef LPVOID HPEEREVENT;
+
+typedef struct peer_address_tag {
+  DWORD        dwSize;
+  SOCKADDR_IN6 sin6;
+} PEER_ADDRESS, *PPEER_ADDRESS;
+
+typedef struct _PEER_APP_LAUNCH_INFO {
+  PPEER_CONTACT    pContact;
+  PPEER_ENDPOINT   pEndpoint;
+  PPEER_INVITATION pInvitation;
+} PEER_APP_LAUNCH_INFO, *PPEER_APP_LAUNCH_INFO;
+typedef const PEER_APP_LAUNCH_INFO *PCPEER_APP_LAUNCH_INFO;
+
+typedef struct peer_data_tag {
+  ULONG cbData;
+  PBYTE pbData;
+} PEER_DATA, *PPEER_DATA;
+
+typedef struct _PEER_APPLICATION {
+  GUID      id;
+  PEER_DATA data;
+  PWSTR     pwzDescription;
+} PEER_APPLICATION, *PPEER_APPLICATION;
+typedef const PEER_APPLICATION *PCPEER_APPLICATION;
+
+typedef struct _PEER_APPLICATION_REGISTRATION_INFO {
+  PEER_APPLICATION application;
+  PWSTR            pwzApplicationToLaunch;
+  PWSTR            pwzApplicationArguments;
+  DWORD            dwPublicationScope;
+} PEER_APPLICATION_REGISTRATION_INFO, *PPEER_APPLICATION_REGISTRATION_INFO;
+typedef const PEER_APPLICATION_REGISTRATION_INFO *PCPEER_APPLICATION_REGISTRATION_INFO;
+
+typedef struct _PEER_EVENT_APPLICATION_CHANGED_DATA {
+  PPEER_CONTACT     pContact;
+  PPEER_ENDPOINT    pEndpoint;
+  PEER_CHANGE_TYPE  changeType;
+  PPEER_APPLICATION pApplication;
+} PEER_EVENT_APPLICATION_CHANGED_DATA, *PPEER_EVENT_APPLICATION_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_ENDPOINT_CHANGED_DATA {
+  PPEER_CONTACT  pContact;
+  PPEER_ENDPOINT pEndpoint;
+} PEER_EVENT_ENDPOINT_CHANGED_DATA, *PPEER_EVENT_ENDPOINT_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_OBJECT_CHANGED_DATA {
+  PPEER_CONTACT    pContact;
+  PPEER_ENDPOINT   pEndpoint;
+  PEER_CHANGE_TYPE changeType;
+  PPEER_OBJECT     pObject;
+} PEER_EVENT_OBJECT_CHANGED_DATA, *PPEER_EVENT_OBJECT_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA {
+  PEER_CHANGE_TYPE     changeType;
+  PPEER_PEOPLE_NEAR_ME pPeopleNearMe;
+} PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA, *PPEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_PRESENCE_CHANGED_DATA {
+  PPEER_CONTACT       pContact;
+  PPEER_ENDPOINT      pEndpoint;
+  PEER_CHANGE_TYPE    changeType;
+  PPEER_PRESENCE_INFO pPresenceInfo;
+} PEER_EVENT_PRESENCE_CHANGED_DATA, *PPEER_EVENT_PRESENCE_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_REQUEST_STATUS_CHANGED_DATA {
+  PPEER_ENDPOINT pEndpoint;
+  HRESULT        hrChange;
+} PEER_EVENT_REQUEST_STATUS_CHANGED_DATA, *PPEER_EVENT_REQUEST_STATUS_CHANGED_DATA;
+
+typedef struct _PEER_EVENT_WATCHLIST_CHANGED_DATA {
+  PPEER_CONTACT    pContact;
+  PEER_CHANGE_TYPE changeType;
+} PEER_EVENT_WATCHLIST_CHANGED_DATA, *PPEER_EVENT_WATCHLIST_CHANGED_DATA;
+
+typedef struct _PEER_INVITATION {
+  GUID      applicationId;
+  PEER_DATA applicationData;
+  PWSTR     pwzMessage;
+} PEER_INVITATION, *PPEER_INVITATION;
+typedef const PEER_INVITATION *PCPEER_INVITATION;
+
+typedef union _PEER_COLLAB_EVENT_DATA {
+  PEER_COLLAB_EVENT_TYPE eventType;
+  __MINGW_EXTENSION union {
+    PEER_EVENT_WATCHLIST_CHANGED_DATA watchlistChangedData;
+    PEER_EVENT_PRESENCE_CHANGED_DATA presenceChangedData;
+    PEER_EVENT_APPLICATION_CHANGED_DATA applicationChangedData;
+    PEER_EVENT_OBJECT_CHANGED_DATA objectChangedData;
+    PEER_EVENT_ENDPOINT_CHANGED_DATA endpointChangedData;
+    PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA peopleNearMeChangedData;
+    PEER_EVENT_REQUEST_STATUS_CHANGED_DATA requestStatusChangedData;
+  } DUMMYUNIONNAME;
+} PEER_COLLAB_EVENT_DATA, *PPEER_COLLAB_EVENT_DATA;
+
+typedef struct _PEER_COLLAB_EVENT_REGISTRATION{
+  PEER_COLLAB_EVENT_TYPE eventType;
+  GUID *                 pInstance;
+} PEER_COLLAB_EVENT_REGISTRATION, *PPEER_COLLAB_EVENT_REGISTRATION;
+typedef const PEER_COLLAB_EVENT_REGISTRATION *PCPEER_COLLAB_EVENT_REGISTRATION;
+
+typedef struct {
+  PEER_INVITATION_RESPONSE_TYPE action;
+  PWSTR                         pwzMessage;
+  HRESULT                       hrExtendedInfo;
+} PEER_INVITATION_RESPONSE, *PPEER_INVITATION_RESPONSE;
+typedef const PEER_INVITATION_RESPONSE *PCPEER_INVITATION_RESPONSE;
+
+typedef struct _PEER_CONTACT {
+  PWSTR                 pwzPeerName;
+  PWSTR                 pwzNickName;
+  PWSTR                 pwzDisplayName;
+  PWSTR                 pwzEmailAddress;
+  WINBOOL              fWatch;
+  PEER_WATCH_PERMISSION WatcherPermissions;
+  PEER_DATA             credentials;
+} PEER_CONTACT, *PPEER_CONTACT;
+typedef const PEER_CONTACT *PCPEER_CONTACT;
+
+typedef struct _PEER_ENDPOINT {
+  PEER_ADDRESS address;
+  PWSTR        pwzEndpointName;
+} PEER_ENDPOINT, *PPEER_ENDPOINT;
+typedef const PEER_ENDPOINT *PCPEER_ENDPOINT;
+
+typedef struct _PEER_OBJECT {
+  GUID      id;
+  PEER_DATA data;
+  DWORD     dwPublicationScope;
+} PEER_OBJECT, *PPEER_OBJECT;
+typedef const PEER_OBJECT *PCPEER_OBJECT;
+
+typedef struct _PEER_PEOPLE_NEAR_ME {
+  PWSTR         pwzNickName;
+  PEER_ENDPOINT endpoint;
+  GUID          id;
+} PEER_PEOPLE_NEAR_ME, *PPEER_PEOPLE_NEAR_ME, *PCPEER_PEOPLE_NEAR_ME, **PPPEER_PEOPLE_NEAR_ME;
+
+typedef struct _PEER_PRESENCE_INFO {
+  PEER_PRESENCE_STATUS status;
+  PWSTR                pwzDescriptiveText;
+} PEER_PRESENCE_INFO, *PPEER_PRESENCE_INFO;
+typedef const PEER_PRESENCE_INFO *PCPEER_PRESENCE_INFO;
+
+HRESULT WINAPI PeerCollabAddContact(
+  PCWSTR pwzContactData,
+  PPEER_CONTACT *ppContact
+);
+
+HRESULT WINAPI PeerCollabAsyncInviteContact(
+  PCPEER_CONTACT pcContact,
+  PPEER_ENDPOINT pcEndpoint,
+  PCPEER_INVITATION pcInvitation,
+  HANDLE hEvent,
+  HANDLE *phInvitation
+);
+
+HRESULT WINAPI PeerCollabAsyncInviteEndpoint(
+  PPEER_ENDPOINT pcEndpoint,
+  PCPEER_INVITATION pcInvitation,
+  HANDLE hEvent,
+  HANDLE *phInvitation
+);
+
+HRESULT WINAPI PeerCollabCancelInvitation(
+  HANDLE hInvitation
+);
+
+HRESULT WINAPI PeerCollabCloseHandle(
+  HANDLE handle
+);
+
+HRESULT WINAPI PeerCollabDeleteContact(
+  PCWSTR pwzPeerName
+);
+
+HRESULT WINAPI PeerCollabDeleteEndpointData(
+  PCPEER_ENDPOINT pcEndpoint
+);
+
+HRESULT WINAPI PeerCollabDeleteObject(
+  const GUID *pObjectId
+);
+
+HRESULT WINAPI PeerCollabEnumApplicationRegistrationInfo(
+  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT WINAPI PeerCollabEnumApplications(
+  PCPEER_ENDPOINT pcEndpoint,
+  const GUID *pApplicationId,
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT WINAPI PeerCollabEnumContacts(
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT WINAPI PeerCollabEnumEndpoints(
+  PCPEER_CONTACT pcContact,
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT  WINAPI PeerCollabEnumObjects(
+  PCPEER_ENDPOINT pcEndpoint,
+  const GUID *pObjectId,
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT WINAPI PeerCollabEnumPeopleNearMe(
+  HPEERENUM *phPeerEnum
+);
+
+HRESULT WINAPI PeerCollabExportContact(
+  PWSTR pwzPeerName,
+  PWSTR *ppwzContactData
+);
+
+HRESULT  WINAPI PeerCollabGetAppLaunchInfo(
+  PPEER_APP_LAUNCH_INFO *ppLaunchInfo
+);
+
+HRESULT WINAPI PeerCollabGetApplicationRegistrationInfo(
+  const GUID *pApplicationId,
+  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
+  PPEER_APPLICATION_REGISTRATION_INFO *ppRegInfo
+);
+
+HRESULT WINAPI PeerCollabGetContact(
+  PWSTR pwzPeerName,
+  PCPEER_CONTACT *ppContact
+);
+
+HRESULT WINAPI PeerCollabGetEndpointName(
+  PWSTR *ppwzEndpointName
+);
+
+HRESULT WINAPI PeerCollabGetEventData(
+  HPEEREVENT hPeerEvent,
+  PPEER_COLLAB_EVENT_DATA *ppEventData
+);
+
+HRESULT  WINAPI PeerCollabGetInvitationResponse(
+  HANDLE hInvitation,
+  PPEER_INVITATION_RESPONSE *ppInvitationResponse
+);
+
+HRESULT WINAPI PeerCollabGetPresenceInfo(
+  PCPEER_ENDPOINT pEndpoint,
+  PPEER_PRESENCE_INFO *ppPresenceInfo
+);
+
+HRESULT  WINAPI PeerCollabGetSigninOptions(
+  DWORD *dwSigninOptions
+);
+
+HRESULT WINAPI PeerCollabInviteContact(
+  PCPEER_CONTACT pcContact,
+  PCPEER_ENDPOINT pcEndpoint,
+  const PCPEER_INVITATION pcInvitation,
+  PPEER_INVITATION_RESPONSE *ppResponse
+);
+
+HRESULT  WINAPI PeerCollabInviteEndpoint(
+  PCPEER_ENDPOINT pcEndpoint,
+  PCPEER_INVITATION pcInvitation,
+  PPEER_INVITATION_RESPONSE *ppResponse
+);
+
+HRESULT WINAPI PeerCollabParseContact(
+  PWSTR pwzContactData,
+  PCPEER_CONTACT *ppContact
+);
+
+HRESULT WINAPI PeerCollabQueryContactData(
+  PCPEER_ENDPOINT pcEndpoint,
+  PWSTR *ppwzContactData
+);
+
+HRESULT WINAPI PeerCollabRefreshEndpointData(
+  PCPEER_ENDPOINT pcEndpoint
+);
+
+HRESULT  WINAPI PeerCollabRegisterApplication(
+  PCPEER_APPLICATION_REGISTRATION_INFO pcApplication,
+  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
+);
+
+HRESULT  WINAPI PeerCollabRegisterEvent(
+  HANDLE hEvent,
+  DWORD cEventRegistration,
+  PPEER_COLLAB_EVENT_REGISTRATION pEventRegistrations,
+  HPEEREVENT *phPeerEvent
+);
+
+HRESULT WINAPI PeerCollabSetEndpointName(
+  PCWSTR pwzEndpointName
+);
+
+HRESULT  WINAPI PeerCollabSetObject(
+  PCPEER_OBJECT pcObject
+);
+
+HRESULT WINAPI PeerCollabSetPresenceInfo(
+  PCPEER_PRESENCE_INFO pcPresenceInfo
+);
+
+HRESULT WINAPI PeerCollabShutdown(void);
+
+HRESULT  WINAPI PeerCollabSignin(
+  HWND hwndParent,
+  DWORD dwSigninOptions
+);
+
+HRESULT  WINAPI PeerCollabSignout(
+  DWORD dwSignoutOptions
+);
+
+HRESULT  WINAPI PeerCollabStartup(
+  WORD wVersionRequested
+);
+
+HRESULT WINAPI PeerCollabSubscribeEndpointData(
+  PCPEER_ENDPOINT pcEndpoint
+);
+
+HRESULT  WINAPI PeerCollabUnregisterApplication(
+  const GUID *pApplicationID,
+  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
+);
+
+HRESULT  WINAPI PeerCollabUnregisterEvent(
+  HPEEREVENT hPeerEvent
+);
+
+HRESULT WINAPI PeerCollabUnsubscribeEndpointData(
+  PCPEER_ENDPOINT pcEndpoint
+);
+
+HRESULT  WINAPI PeerCollabUpdateContact(
+  PCPEER_CONTACT pContact
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_P2P*/
diff --git a/mingw-w64-headers/include/pdh.h b/mingw-w64-headers/include/pdh.h
index fe3e95b..fa941c2 100644
--- a/mingw-w64-headers/include/pdh.h
+++ b/mingw-w64-headers/include/pdh.h
@@ -554,6 +554,42 @@
 #define PdhCreateSQLTables __MINGW_NAME_AW(PdhCreateSQLTables)
 #define PdhVerifySQLDB __MINGW_NAME_AW(PdhVerifySQLDB)
 
+#if (_WIN32_WINNT >= 0x0600)
+PDH_STATUS PdhAddEnglishCounterA(
+  PDH_HQUERY hQuery,
+  LPCSTR szFullCounterPath,
+  DWORD_PTR dwUserData,
+  PDH_HCOUNTER *phCounter
+);
+
+PDH_STATUS PdhAddEnglishCounterW(
+  PDH_HQUERY hQuery,
+  LPCWSTR szFullCounterPath,
+  DWORD_PTR dwUserData,
+  PDH_HCOUNTER *phCounter
+);
+
+#define PdhAddEnglishCounter __MINGW_NAME_AW(PdhAddEnglishCounter)
+
+PDH_STATUS PdhCollectQueryDataWithTime(
+  PDH_HQUERY hQuery,
+  LONGLONG *pllTimeStamp
+);
+
+PDH_STATUS PdhValidatePathExA(
+  PDH_HLOG hDataSource,
+  LPCSTR szFullPathBuffer
+);
+
+PDH_STATUS PdhValidatePathExA(
+  PDH_HLOG hDataSource,
+  LPCWSTR szFullPathBuffer
+);
+
+#define PdhValidatePathEx __MINGW_NAME_AW(PdhValidatePathEx)
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/perflib.h b/mingw-w64-headers/include/perflib.h
new file mode 100644
index 0000000..92e4ce8
--- /dev/null
+++ b/mingw-w64-headers/include/perflib.h
@@ -0,0 +1,161 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_PERFLIB
+#define _INC_PERFLIB
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINADVAPI
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+typedef LPVOID (CALLBACK *PERF_MEM_ALLOC)(SIZE_T AllocSize,LPVOID pContext);
+typedef ULONG (WINAPI *PERFLIBREQUEST)(ULONG RequestCode,PVOID Buffer,ULONG BufferSize);
+typedef void (CALLBACK *PERF_MEM_FREE)(LPVOID pBuffer,LPVOID pContext);
+
+typedef struct _PERF_PROVIDER_CONTEXT {
+  DWORD          ContextSize;
+  DWORD          Reserved;
+  PERFLIBREQUEST ControlCallback;
+  PERF_MEM_ALLOC MemAllocRoutine;
+  PERF_MEM_FREE  MemFreeRoutine;
+  LPVOID         pMemContext;
+} PERF_PROVIDER_CONTEXT, *PPERF_PROVIDER_CONTEXT;
+
+typedef struct _PERF_COUNTER_IDENTITY {
+  GUID  CounterSetGuid;
+  ULONG BufferSize;
+  ULONG CounterId;
+  ULONG InstanceId;
+  ULONG MachineOffset;
+  ULONG NameOffset;
+  ULONG Reserved;
+} PERF_COUNTER_IDENTITY, *PPERF_COUNTER_IDENTITY;
+
+typedef struct _PERF_COUNTER_INFO {
+  ULONG     CounterId;
+  ULONG     Type;
+  ULONGLONG Attrib;
+  ULONG     Size;
+  ULONG     DetailLevel;
+  LONG      Scale;
+  ULONG     Offset;
+} PERF_COUNTER_INFO, *PPERF_COUNTER_INFO;
+
+typedef struct _PERF_COUNTERSET_INFO {
+  GUID  CounterSetGuid;
+  GUID  ProviderGuid;
+  ULONG NumCounters;
+  ULONG InstanceType;
+} PERF_COUNTERSET_INFO, *PPERF_COUNTERSET_INFO;
+
+typedef struct _PERF_COUNTERSET_INSTANCE {
+  GUID  CounterSetGuid;
+  ULONG dwSize;
+  ULONG InstanceId;
+  ULONG InstanceNameOffset;
+  ULONG InstanceNameSize;
+} PERF_COUNTERSET_INSTANCE, *PPERF_COUNTERSET_INSTANCE;
+
+WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfCreateInstance(
+  HANDLE hProvider,
+  LPCGUID CounterSetGuid,
+  LPCWSTR szInstanceName,
+  ULONG dwInstance
+);
+
+WINADVAPI ULONG WINAPI PerfDecrementULongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONG lValue
+);
+
+WINADVAPI ULONG WINAPI PerfDecrementULongLongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONGLONG llValue
+);
+
+WINADVAPI ULONG WINAPI PerfDeleteInstance(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE InstanceBlock
+);
+
+WINADVAPI ULONG WINAPI PerfIncrementULongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONG lValue
+);
+
+WINADVAPI ULONG WINAPI PerfIncrementULongLongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONGLONG llValue
+);
+
+WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfQueryInstance(
+  HANDLE hProvider,
+  LPCGUID CounterSetGuid,
+  LPCWSTR szInstance,
+  ULONG dwInstance
+);
+
+WINADVAPI ULONG WINAPI PerfSetCounterRefValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  PVOID lpAddr
+);
+
+WINADVAPI ULONG WINAPI PerfSetCounterSetInfo(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INFO pTemplate,
+  ULONG dwTemplateSize
+);
+
+WINADVAPI ULONG WINAPI PerfSetULongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONG lValue
+);
+
+WINADVAPI ULONG WINAPI PerfSetULongLongCounterValue(
+  HANDLE hProvider,
+  PPERF_COUNTERSET_INSTANCE pInstance,
+  ULONG CounterId,
+  ULONGLONG llValue
+);
+
+WINADVAPI ULONG WINAPI PerfStartProvider(
+  LPGUID ProviderGuid,
+  PERFLIBREQUEST ControlCallback,
+  HANDLE *phProvider
+);
+
+WINADVAPI ULONG WINAPI PerfStartProviderEx(
+  LPGUID ProviderGuid,
+  PPERF_PROVIDER_CONTEXT ProviderContext,
+  HANDLE *phProvider
+);
+
+WINADVAPI ULONG WINAPI PerfStopProvider(
+  HANDLE hProvider
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_PERFLIB*/
diff --git a/mingw-w64-headers/include/pla.h b/mingw-w64-headers/include/pla.h
new file mode 100644
index 0000000..15de64d
--- /dev/null
+++ b/mingw-w64-headers/include/pla.h
@@ -0,0 +1,86 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_PLA
+#define _INC_PLA
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum _AutoPathFormat {
+  plaNone                 = 0x0000,
+  plaPattern              = 0x0001,
+  plaComputer             = 0x0002,
+  plaMonthDayHour         = 0x0100,
+  plaSerialNumber         = 0x0200,
+  plaYearDayOfYear        = 0x0400,
+  plaYearMonth            = 0x0800,
+  plaYearMonthDay         = 0x1000,
+  plaYearMonthDayHour     = 0x2000,
+  plaMonthDayHourMinute   = 0x4000 
+} AutoPathFormat;
+
+typedef enum _ClockType {
+  plaTimeStamp     = 0,
+  plaPerformance   = 1,
+  plaSystem        = 2,
+  plaCycle         = 3 
+} ClockType;
+
+typedef enum _CommitMode {
+  plaCreateNew               = 0x0001,
+  plaModify                  = 0x0002,
+  plaCreateOrModify          = 0x0003,
+  plaUpdateRunningInstance   = 0x0010,
+  plaFlushTrace              = 0x0020,
+  plaValidateOnly            = 0x1000 
+} CommitMode;
+
+typedef enum _FileFormat {
+  plaCommaSeparated   = 0,
+  plaTabSeparated     = 1,
+  plaSql              = 2,
+  plaBinary           = 3 
+} FileFormat;
+
+typedef enum _FolderActionSteps {
+  plaCreateCab      = 0x01,
+  plaDeleteData     = 0x02,
+  plaSendCab        = 0x04,
+  plaDeleteCab      = 0x08,
+  plaDeleteReport   = 0x10 
+} FolderActionSteps;
+
+typedef enum _ResourcePolicy {
+  plaDeleteLargest   = 0,
+  plaDeleteOldest    = 1 
+} ResourcePolicy;
+
+typedef enum _StreamMode {
+  plaFile        = 0x0001,
+  plaRealTime    = 0x0002,
+  plaBoth        = 0x0003,
+  plaBuffering   = 0x0004 
+} StreamMode;
+
+typedef enum _ValueMapType {
+  plaIndex        = 1,
+  plaFlag         = 2,
+  plaFlagArray    = 3,
+  plaValidation   = 4 
+} ValueMapType;
+
+typedef enum  {
+  plaRunOnce     = 0x00,
+  plaSunday      = 0x01,
+  plaMonday      = 0x02,
+  plaTuesday     = 0x04,
+  plaWednesday   = 0x08,
+  plaThursday    = 0x10,
+  plaFriday      = 0x20,
+  plaSaturday    = 0x40,
+  plaEveryday    = 0x7F 
+} WeekDays;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_PLA*/
diff --git a/mingw-w64-headers/include/pla.idl b/mingw-w64-headers/include/pla.idl
new file mode 100644
index 0000000..df2dcf8
--- /dev/null
+++ b/mingw-w64-headers/include/pla.idl
@@ -0,0 +1,1730 @@
+/* Automated generated idl file <plalibrary>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Union record forward declarations.  */
+dispinterface IDataCollectorSet;
+dispinterface IDataCollectorCollection;
+dispinterface IDataCollector;
+dispinterface IValueMap;
+dispinterface IValueMapItem;
+dispinterface IScheduleCollection;
+dispinterface ISchedule;
+dispinterface IDataManager;
+dispinterface IFolderActionCollection;
+dispinterface IFolderAction;
+dispinterface IPerformanceCounterDataCollector;
+dispinterface ITraceDataCollector;
+dispinterface ITraceDataProviderCollection;
+dispinterface ITraceDataProvider;
+dispinterface IConfigurationDataCollector;
+dispinterface IAlertDataCollector;
+dispinterface IApiTracingDataCollector;
+dispinterface IDataCollectorSetCollection;
+
+/* Union record forward declarations.  */
+coclass DataCollectorSet;
+coclass TraceSession;
+coclass TraceSessionCollection;
+coclass TraceDataProvider;
+coclass TraceDataProviderCollection;
+coclass DataCollectorSetCollection;
+coclass LegacyDataCollectorSet;
+coclass LegacyDataCollectorSetCollection;
+coclass LegacyTraceSession;
+coclass LegacyTraceSessionCollection;
+coclass ServerDataCollectorSet;
+coclass ServerDataCollectorSetCollection;
+coclass SystemDataCollectorSet;
+coclass SystemDataCollectorSetCollection;
+coclass BootTraceSession;
+coclass BootTraceSessionCollection;
+
+/* Enumeration declarations.  */
+enum __MIDL___MIDL_itf_pla_0000_0000_0001
+{
+  plaPerformanceCounter = (int) 201326592,
+  plaTrace = (int) 201326593,
+  plaConfiguration = (int) 201326594,
+  plaAlert = (int) 201326595,
+  plaApiTrace = (int) 201326596
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0003
+{
+  plaNone = (int) 201326592,
+  plaPattern = (int) 201326593,
+  plaComputer = (int) 201326594,
+  plaMonthDayHour = (int) 201326848,
+  plaSerialNumber = (int) 201327104,
+  plaYearDayOfYear = (int) 201327616,
+  plaYearMonth = (int) 201328640,
+  plaYearMonthDay = (int) 201330688,
+  plaYearMonthDayHour = (int) 201334784,
+  plaMonthDayHourMinute = (int) 201342976
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0008
+{
+  plaIndex = (int) 201326593,
+  plaFlag = (int) 201326594,
+  plaFlagArray = (int) 201326595,
+  plaValidation = (int) 201326596
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0004
+{
+  plaStopped = (int) 201326592,
+  plaRunning = (int) 201326593,
+  plaCompiling = (int) 201326594,
+  plaPending = (int) 201326595,
+  plaUndefined = (int) 201326596
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0009
+{
+  plaRunOnce = (int) 201326592,
+  plaSunday = (int) 201326593,
+  plaMonday = (int) 201326594,
+  plaTuesday = (int) 201326596,
+  plaWednesday = (int) 201326600,
+  plaThursday = (int) 201326608,
+  plaFriday = (int) 201326624,
+  plaSaturday = (int) 201326656,
+  plaEveryday = (int) 201326719
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0010
+{
+  plaDeleteLargest = (int) 201326592,
+  plaDeleteOldest = (int) 201326593
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0012
+{
+  plaCreateCab = (int) 201326593,
+  plaDeleteData = (int) 201326594,
+  plaSendCab = (int) 201326596,
+  plaDeleteCab = (int) 201326600,
+  plaDeleteReport = (int) 201326608
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0011
+{
+  plaCreateReport = (int) 201326593,
+  plaRunRules = (int) 201326594,
+  plaCreateHtml = (int) 201326596,
+  plaFolderActions = (int) 201326600,
+  plaResourceFreeing = (int) 201326608
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0007
+{
+  plaCreateNew = (int) 201326593,
+  plaModify = (int) 201326594,
+  plaCreateOrModify = (int) 201326595,
+  plaUpdateRunningInstance = (int) 201326608,
+  plaFlushTrace = (int) 201326624,
+  plaValidateOnly = (int) 201330688
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0002
+{
+  plaCommaSeparated = (int) 201326592,
+  plaTabSeparated = (int) 201326593,
+  plaSql = (int) 201326594,
+  plaBinary = (int) 201326595
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0005
+{
+  plaTimeStamp = (int) 201326592,
+  plaPerformance = (int) 201326593,
+  plaSystem = (int) 201326594,
+  plaCycle = (int) 201326595
+};
+enum __MIDL___MIDL_itf_pla_0000_0000_0006
+{
+  plaFile = (int) 201326593,
+  plaRealTime = (int) 201326594,
+  plaBoth = (int) 201326595,
+  plaBuffering = (int) 201326596
+};
+
+/* Type definitions.  */
+[
+  uuid(03837504-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0001 DataCollectorType;
+[
+  uuid(03837508-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0003 AutoPathFormat;
+[
+  uuid(03837535-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0008 ValueMapType;
+[
+  uuid(0383750A-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0004 DataCollectorSetStatus;
+[
+  uuid(0383753B-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0009 WeekDays;
+[
+  uuid(0383753F-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0010 ResourcePolicy;
+[
+  uuid(03837542-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0012 FolderActionSteps;
+[
+  uuid(03837540-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0011 DataManagerSteps;
+[
+  uuid(0383751F-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0007 CommitMode;
+[
+  uuid(03837507-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0002 FileFormat;
+[
+  uuid(0383750D-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0005 ClockType;
+[
+  uuid(0383750E-098B-11D8-9414-505054503030)
+]
+typedef enum __MIDL___MIDL_itf_pla_0000_0000_0006 StreamMode;
+
+[
+  uuid(03837500-098B-11D8-9414-505054503030),
+  version(1.0),
+  helpstring("Performance Data Service")
+]
+library plalibrary
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(03837521-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass DataCollectorSet
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(0383751C-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass TraceSession
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837530-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass TraceSessionCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837513-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass TraceDataProvider
+   {
+     dispinterface ITraceDataProvider;
+   };
+   [
+     uuid(03837511-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass TraceDataProviderCollection
+   {
+     dispinterface ITraceDataProviderCollection;
+   };
+   [
+     uuid(03837525-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass DataCollectorSetCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837526-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass LegacyDataCollectorSet
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837527-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass LegacyDataCollectorSetCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837528-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass LegacyTraceSession
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837529-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass LegacyTraceSessionCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837531-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass ServerDataCollectorSet
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837532-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass ServerDataCollectorSetCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837546-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass SystemDataCollectorSet
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837547-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass SystemDataCollectorSetCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+   [
+     uuid(03837538-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass BootTraceSession
+   {
+     dispinterface IDataCollectorSet;
+   };
+   [
+     uuid(03837539-098B-11D8-9414-505054503030),
+     cancreate,
+     control
+   ]
+   coclass BootTraceSessionCollection
+   {
+     dispinterface IDataCollectorSetCollection;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(03837520-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDataCollectorSet : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall DataCollectors (
+       [out retval] dispinterface IDataCollectorCollection **collectors
+     );
+     [propget]
+     HRESULT __stdcall Duration (
+       [out retval] UINT *seconds
+     );
+     [id(1610743809), propput]
+     HRESULT __stdcall Duration (
+       [in] UINT argNo1
+     );
+     [id(1610743811), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *Description
+     );
+     [id(1610743811), propput]
+     HRESULT __stdcall Description (
+       [in] BSTR argNo1
+     );
+     [id(1610743813), propget]
+     HRESULT __stdcall DescriptionUnresolved (
+       [out retval] BSTR *Descr
+     );
+     [propget]
+     HRESULT __stdcall DisplayName (
+       [out retval] BSTR *DisplayName
+     );
+     [id(1610743814), propput]
+     HRESULT __stdcall DisplayName (
+       [in] BSTR argNo1
+     );
+     [id(1610743816), propget]
+     HRESULT __stdcall DisplayNameUnresolved (
+       [out retval] BSTR *name
+     );
+     [propget]
+     HRESULT __stdcall Keywords (
+       [out retval] BSTR Keywords[]*
+     );
+     [id(1610743817), propput]
+     HRESULT __stdcall Keywords (
+       [in] BSTR argNo1[]
+     );
+     [id(1610743819), propget]
+     HRESULT __stdcall LatestOutputLocation (
+       [out retval] BSTR *path
+     );
+     [id(1610743819), propput]
+     HRESULT __stdcall LatestOutputLocation (
+       [in] BSTR argNo1
+     );
+     [id(0), propget]
+     HRESULT __stdcall name (
+       [out retval] BSTR *name
+     );
+     [id(1610743822), propget]
+     HRESULT __stdcall OutputLocation (
+       [out retval] BSTR *path
+     );
+     [propget]
+     HRESULT __stdcall RootPath (
+       [out retval] BSTR *folder
+     );
+     [id(1610743823), propput]
+     HRESULT __stdcall RootPath (
+       [in] BSTR argNo1
+     );
+     [id(1610743825), propget]
+     HRESULT __stdcall Segment (
+       [out retval] WINBOOL *Segment
+     );
+     [id(1610743825), propput]
+     HRESULT __stdcall Segment (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743827), propget]
+     HRESULT __stdcall SegmentMaxDuration (
+       [out retval] UINT *seconds
+     );
+     [id(1610743827), propput]
+     HRESULT __stdcall SegmentMaxDuration (
+       [in] UINT argNo1
+     );
+     [id(1610743829), propget]
+     HRESULT __stdcall SegmentMaxSize (
+       [out retval] UINT *size
+     );
+     [id(1610743829), propput]
+     HRESULT __stdcall SegmentMaxSize (
+       [in] UINT argNo1
+     );
+     [id(1610743831), propget]
+     HRESULT __stdcall SerialNumber (
+       [out retval] UINT *Index
+     );
+     [id(1610743831), propput]
+     HRESULT __stdcall SerialNumber (
+       [in] UINT argNo1
+     );
+     [id(1610743833), propget]
+     HRESULT __stdcall Server (
+       [out retval] BSTR *Server
+     );
+     [propget]
+     HRESULT __stdcall Status (
+       [out retval] DataCollectorSetStatus *Status
+     );
+     [propget]
+     HRESULT __stdcall Subdirectory (
+       [out retval] BSTR *folder
+     );
+     [id(1610743835), propput]
+     HRESULT __stdcall Subdirectory (
+       [in] BSTR argNo1
+     );
+     [id(1610743837), propget]
+     HRESULT __stdcall SubdirectoryFormat (
+       [out retval] AutoPathFormat *format
+     );
+     [id(1610743837), propput]
+     HRESULT __stdcall SubdirectoryFormat (
+       [in] AutoPathFormat argNo1
+     );
+     [id(1610743839), propget]
+     HRESULT __stdcall SubdirectoryFormatPattern (
+       [out retval] BSTR *pattern
+     );
+     [id(1610743839), propput]
+     HRESULT __stdcall SubdirectoryFormatPattern (
+       [in] BSTR argNo1
+     );
+     [id(1610743841), propget]
+     HRESULT __stdcall Task (
+       [out retval] BSTR *Task
+     );
+     [id(1610743841), propput]
+     HRESULT __stdcall Task (
+       [in] BSTR argNo1
+     );
+     [id(1610743843), propget]
+     HRESULT __stdcall TaskRunAsSelf (
+       [out retval] WINBOOL *RunAsSelf
+     );
+     [id(1610743843), propput]
+     HRESULT __stdcall TaskRunAsSelf (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743845), propget]
+     HRESULT __stdcall TaskArguments (
+       [out retval] BSTR *Task
+     );
+     [id(1610743845), propput]
+     HRESULT __stdcall TaskArguments (
+       [in] BSTR argNo1
+     );
+     [id(1610743847), propget]
+     HRESULT __stdcall TaskUserTextArguments (
+       [out retval] BSTR *UserText
+     );
+     [id(1610743847), propput]
+     HRESULT __stdcall TaskUserTextArguments (
+       [in] BSTR argNo1
+     );
+     [id(1610743849), propget]
+     HRESULT __stdcall Schedules (
+       [out retval] dispinterface IScheduleCollection **ppSchedules
+     );
+     [propget]
+     HRESULT __stdcall SchedulesEnabled (
+       [out retval] WINBOOL *Enabled
+     );
+     [id(1610743850), propput]
+     HRESULT __stdcall SchedulesEnabled (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743852), propget]
+     HRESULT __stdcall UserAccount (
+       [out retval] BSTR *user
+     );
+     [propget]
+     HRESULT __stdcall Xml (
+       [out retval] BSTR *Xml
+     );
+     [propget]
+     HRESULT __stdcall Security (
+       [out retval] BSTR *pbstrSecurity
+     );
+     [id(1610743854), propput]
+     HRESULT __stdcall Security (
+       [in] BSTR argNo1
+     );
+     [id(1610743856), propget]
+     HRESULT __stdcall StopOnCompletion (
+       [out retval] WINBOOL *Stop
+     );
+     [id(1610743856), propput]
+     HRESULT __stdcall StopOnCompletion (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743858), propget]
+     HRESULT __stdcall DataManager (
+       [out retval] dispinterface IDataManager **DataManager
+     );
+     HRESULT __stdcall SetCredentials (
+       BSTR user,
+       BSTR password
+     );
+     HRESULT __stdcall Query (
+       [in] BSTR name,
+       [in] BSTR Server
+     );
+     HRESULT __stdcall Commit (
+       [in] BSTR name,
+       [in] BSTR Server,
+       CommitMode mode,
+       [out retval] dispinterface IValueMap **Validation
+     );
+     HRESULT __stdcall Delete (void);
+     HRESULT __stdcall start (
+       [in] WINBOOL Synchronous
+     );
+     HRESULT __stdcall Stop (
+       [in] WINBOOL Synchronous
+     );
+     HRESULT __stdcall SetXml (
+       [in] BSTR Xml,
+       [out retval] dispinterface IValueMap **Validation
+     );
+     HRESULT __stdcall SetValue (
+       BSTR Key,
+       BSTR Value
+     );
+     HRESULT __stdcall GetValue (
+       BSTR Key,
+       [out retval] BSTR *Value
+     );
+   };
+   [
+     uuid(03837502-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDataCollectorCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *retVal
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface IDataCollector **collector
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **retVal
+     );
+     [id(1610743811)]
+     HRESULT __stdcall Add (
+       dispinterface IDataCollector *collector
+     );
+     HRESULT __stdcall Remove (
+       VARIANT collector
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface IDataCollectorCollection *collectors
+     );
+     HRESULT __stdcall CreateDataCollectorFromXml (
+       [in] BSTR bstrXml,
+       [out] dispinterface IValueMap **pValidation,
+       [out retval] dispinterface IDataCollector **pCollector
+     );
+     HRESULT __stdcall CreateDataCollector (
+       [in] DataCollectorType type,
+       [out retval] dispinterface IDataCollector **collector
+     );
+   };
+   [
+     uuid(038374FF-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDataCollector : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall DataCollectorSet (
+       [out retval] dispinterface IDataCollectorSet **group
+     );
+     [id(1610743808), propput, restricted, hidden]
+     HRESULT __stdcall DataCollectorSet (
+       [in] dispinterface IDataCollectorSet *argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall DataCollectorType (
+       [out retval] DataCollectorType *type
+     );
+     [propget]
+     HRESULT __stdcall FileName (
+       [out retval] BSTR *name
+     );
+     [id(1610743811), propput]
+     HRESULT __stdcall FileName (
+       [in] BSTR argNo1
+     );
+     [id(1610743813), propget]
+     HRESULT __stdcall FileNameFormat (
+       [out retval] AutoPathFormat *format
+     );
+     [id(1610743813), propput]
+     HRESULT __stdcall FileNameFormat (
+       [in] AutoPathFormat argNo1
+     );
+     [id(1610743815), propget]
+     HRESULT __stdcall FileNameFormatPattern (
+       [out retval] BSTR *pattern
+     );
+     [id(1610743815), propput]
+     HRESULT __stdcall FileNameFormatPattern (
+       [in] BSTR argNo1
+     );
+     [id(1610743817), propget]
+     HRESULT __stdcall LatestOutputLocation (
+       [out retval] BSTR *path
+     );
+     [id(1610743817), propput]
+     HRESULT __stdcall LatestOutputLocation (
+       [in] BSTR argNo1
+     );
+     [id(1610743819), propget]
+     HRESULT __stdcall LogAppend (
+       [out retval] WINBOOL *append
+     );
+     [id(1610743819), propput]
+     HRESULT __stdcall LogAppend (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743821), propget]
+     HRESULT __stdcall LogCircular (
+       [out retval] WINBOOL *circular
+     );
+     [id(1610743821), propput]
+     HRESULT __stdcall LogCircular (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743823), propget]
+     HRESULT __stdcall LogOverwrite (
+       [out retval] WINBOOL *overwrite
+     );
+     [id(1610743823), propput]
+     HRESULT __stdcall LogOverwrite (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743825), propget]
+     HRESULT __stdcall name (
+       [out retval] BSTR *name
+     );
+     [id(1610743825), propput]
+     HRESULT __stdcall name (
+       [in] BSTR argNo1
+     );
+     [id(1610743827), propget]
+     HRESULT __stdcall OutputLocation (
+       [out retval] BSTR *path
+     );
+     [propget]
+     HRESULT __stdcall Index (
+       [out retval] long *Index
+     );
+     [id(1610743828), propput, restricted, hidden]
+     HRESULT __stdcall Index (
+       [in] long argNo1
+     );
+     [id(1610743830), propget]
+     HRESULT __stdcall Xml (
+       [out retval] BSTR *Xml
+     );
+     HRESULT __stdcall SetXml (
+       [in] BSTR Xml,
+       [out retval] dispinterface IValueMap **Validation
+     );
+     HRESULT __stdcall CreateOutputLocation (
+       [in] WINBOOL Latest,
+       [out retval] BSTR *Location
+     );
+   };
+   [
+     uuid(03837534-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IValueMap : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *retVal
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface IValueMapItem **Value
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **retVal
+     );
+     [id(1610743811), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *Description
+     );
+     [id(1610743811), propput]
+     HRESULT __stdcall Description (
+       [in] BSTR argNo1
+     );
+     [id(1610743813), propget]
+     HRESULT __stdcall Value (
+       [out retval] VARIANT *Value
+     );
+     [id(1610743813), propput]
+     HRESULT __stdcall Value (
+       [in] VARIANT argNo1
+     );
+     [id(1610743815), propget]
+     HRESULT __stdcall ValueMapType (
+       [out retval] ValueMapType *type
+     );
+     [id(1610743815), propput]
+     HRESULT __stdcall ValueMapType (
+       [in] ValueMapType argNo1
+     );
+     [id(1610743817)]
+     HRESULT __stdcall Add (
+       VARIANT Value
+     );
+     HRESULT __stdcall Remove (
+       VARIANT Value
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface IValueMap *map
+     );
+     HRESULT __stdcall CreateValueMapItem (
+       [out retval] dispinterface IValueMapItem **Item
+     );
+   };
+   [
+     uuid(03837533-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IValueMapItem : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *Description
+     );
+     [id(1610743808), propput]
+     HRESULT __stdcall Description (
+       [in] BSTR argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall Enabled (
+       [out retval] WINBOOL *Enabled
+     );
+     [id(1610743810), propput]
+     HRESULT __stdcall Enabled (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743812), propget]
+     HRESULT __stdcall Key (
+       [out retval] BSTR *Key
+     );
+     [id(1610743812), propput]
+     HRESULT __stdcall Key (
+       [in] BSTR argNo1
+     );
+     [id(1610743814), propget]
+     HRESULT __stdcall Value (
+       [out retval] VARIANT *Value
+     );
+     [id(1610743814), propput]
+     HRESULT __stdcall Value (
+       [in] VARIANT argNo1
+     );
+     [id(1610743816), propget]
+     HRESULT __stdcall ValueMapType (
+       [out retval] ValueMapType *type
+     );
+     [id(1610743816), propput]
+     HRESULT __stdcall ValueMapType (
+       [in] ValueMapType argNo1
+     );
+   };
+   [
+     uuid(0383753D-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IScheduleCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *retVal
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface ISchedule **ppSchedule
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ienum
+     );
+     [id(1610743811)]
+     HRESULT __stdcall Add (
+       dispinterface ISchedule *pSchedule
+     );
+     HRESULT __stdcall Remove (
+       VARIANT vSchedule
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface IScheduleCollection *pSchedules
+     );
+     HRESULT __stdcall CreateSchedule (
+       [out retval] dispinterface ISchedule **Schedule
+     );
+   };
+   [
+     uuid(0383753A-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISchedule : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall StartDate (
+       [out retval] VARIANT *start
+     );
+     [id(1610743808), propput]
+     HRESULT __stdcall StartDate (
+       [in] VARIANT argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall EndDate (
+       [out retval] VARIANT *end
+     );
+     [id(1610743810), propput]
+     HRESULT __stdcall EndDate (
+       [in] VARIANT argNo1
+     );
+     [id(1610743812), propget]
+     HRESULT __stdcall StartTime (
+       [out retval] VARIANT *start
+     );
+     [id(1610743812), propput]
+     HRESULT __stdcall StartTime (
+       [in] VARIANT argNo1
+     );
+     [id(1610743814), propget]
+     HRESULT __stdcall Days (
+       [out retval] WeekDays *Days
+     );
+     [id(1610743814), propput]
+     HRESULT __stdcall Days (
+       [in] WeekDays argNo1
+     );
+   };
+   [
+     uuid(03837541-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDataManager : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall Enabled (
+       [out retval] WINBOOL *pfEnabled
+     );
+     [id(1610743808), propput]
+     HRESULT __stdcall Enabled (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall CheckBeforeRunning (
+       [out retval] WINBOOL *pfCheck
+     );
+     [id(1610743810), propput]
+     HRESULT __stdcall CheckBeforeRunning (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743812), propget]
+     HRESULT __stdcall MinFreeDisk (
+       [out retval] UINT *MinFreeDisk
+     );
+     [id(1610743812), propput]
+     HRESULT __stdcall MinFreeDisk (
+       [in] UINT argNo1
+     );
+     [id(1610743814), propget]
+     HRESULT __stdcall MaxSize (
+       [out retval] UINT *pulMaxSize
+     );
+     [id(1610743814), propput]
+     HRESULT __stdcall MaxSize (
+       [in] UINT argNo1
+     );
+     [id(1610743816), propget]
+     HRESULT __stdcall MaxFolderCount (
+       [out retval] UINT *pulMaxFolderCount
+     );
+     [id(1610743816), propput]
+     HRESULT __stdcall MaxFolderCount (
+       [in] UINT argNo1
+     );
+     [id(1610743818), propget]
+     HRESULT __stdcall ResourcePolicy (
+       [out retval] ResourcePolicy *pPolicy
+     );
+     [id(1610743818), propput]
+     HRESULT __stdcall ResourcePolicy (
+       [in] ResourcePolicy argNo1
+     );
+     [id(1610743820), propget]
+     HRESULT __stdcall FolderActions (
+       [out retval] dispinterface IFolderActionCollection **Actions
+     );
+     [propget]
+     HRESULT __stdcall ReportSchema (
+       [out retval] BSTR *ReportSchema
+     );
+     [id(1610743821), propput]
+     HRESULT __stdcall ReportSchema (
+       [in] BSTR argNo1
+     );
+     [id(1610743823), propget]
+     HRESULT __stdcall ReportFileName (
+       [out retval] BSTR *pbstrFilename
+     );
+     [id(1610743823), propput]
+     HRESULT __stdcall ReportFileName (
+       [in] BSTR argNo1
+     );
+     [id(1610743825), propget]
+     HRESULT __stdcall RuleTargetFileName (
+       [out retval] BSTR *FileName
+     );
+     [id(1610743825), propput]
+     HRESULT __stdcall RuleTargetFileName (
+       [in] BSTR argNo1
+     );
+     [id(1610743827), propget]
+     HRESULT __stdcall EventsFileName (
+       [out retval] BSTR *pbstrFilename
+     );
+     [id(1610743827), propput]
+     HRESULT __stdcall EventsFileName (
+       [in] BSTR argNo1
+     );
+     [id(1610743829), propget]
+     HRESULT __stdcall Rules (
+       [out retval] BSTR *pbstrXml
+     );
+     [id(1610743829), propput]
+     HRESULT __stdcall Rules (
+       [in] BSTR argNo1
+     );
+     [id(1610743831)]
+     HRESULT __stdcall Run (
+       [in] DataManagerSteps Steps,
+       [in] BSTR bstrFolder,
+       [out retval] dispinterface IValueMap **Errors
+     );
+     HRESULT __stdcall Extract (
+       [in] BSTR CabFilename,
+       [in] BSTR DestinationPath
+     );
+   };
+   [
+     uuid(03837544-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFolderActionCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] UINT *Count
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface IFolderAction **Action
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **Enum
+     );
+     [id(1610743811)]
+     HRESULT __stdcall Add (
+       dispinterface IFolderAction *Action
+     );
+     HRESULT __stdcall Remove (
+       VARIANT Index
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface IFolderActionCollection *Actions
+     );
+     HRESULT __stdcall CreateFolderAction (
+       [out retval] dispinterface IFolderAction **FolderAction
+     );
+   };
+   [
+     uuid(03837543-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IFolderAction : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall Age (
+       [out retval] UINT *pulAge
+     );
+     [id(1610743808), propput]
+     HRESULT __stdcall Age (
+       [in] UINT argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall size (
+       [out retval] UINT *pulAge
+     );
+     [id(1610743810), propput]
+     HRESULT __stdcall size (
+       [in] UINT argNo1
+     );
+     [id(1610743812), propget]
+     HRESULT __stdcall Actions (
+       [out retval] FolderActionSteps *Steps
+     );
+     [id(1610743812), propput]
+     HRESULT __stdcall Actions (
+       [in] FolderActionSteps argNo1
+     );
+     [id(1610743814), propget]
+     HRESULT __stdcall SendCabTo (
+       [out retval] BSTR *pbstrDestination
+     );
+     [id(1610743814), propput]
+     HRESULT __stdcall SendCabTo (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(03837506-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IPerformanceCounterDataCollector : IDataCollector
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall DataSourceName (
+       [out retval] BSTR *dsn
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall DataSourceName (
+       [in] BSTR argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall PerformanceCounters (
+       [out retval] BSTR counters[]*
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall PerformanceCounters (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall LogFileFormat (
+       [out retval] FileFormat *format
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall LogFileFormat (
+       [in] FileFormat argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall SampleInterval (
+       [out retval] UINT *interval
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall SampleInterval (
+       [in] UINT argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall SegmentMaxRecords (
+       [out retval] UINT *records
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall SegmentMaxRecords (
+       [in] UINT argNo1
+     );
+   };
+   [
+     uuid(0383750B-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITraceDataCollector : IDataCollector
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall BufferSize (
+       [out retval] UINT *size
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall BufferSize (
+       [in] UINT argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall BuffersLost (
+       [out retval] UINT *buffers
+     );
+     [id(1610809346), propput, restricted, hidden]
+     HRESULT __stdcall BuffersLost (
+       [in] UINT argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall BuffersWritten (
+       [out retval] UINT *buffers
+     );
+     [id(1610809348), propput, restricted, hidden]
+     HRESULT __stdcall BuffersWritten (
+       [in] UINT argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall ClockType (
+       [out retval] ClockType *clock
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall ClockType (
+       [in] ClockType argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall EventsLost (
+       [out retval] UINT *events
+     );
+     [id(1610809352), propput, restricted, hidden]
+     HRESULT __stdcall EventsLost (
+       [in] UINT argNo1
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall ExtendedModes (
+       [out retval] UINT *mode
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall ExtendedModes (
+       [in] UINT argNo1
+     );
+     [id(1610809356), propget]
+     HRESULT __stdcall FlushTimer (
+       [out retval] UINT *seconds
+     );
+     [id(1610809356), propput]
+     HRESULT __stdcall FlushTimer (
+       [in] UINT argNo1
+     );
+     [id(1610809358), propget]
+     HRESULT __stdcall FreeBuffers (
+       [out retval] UINT *buffers
+     );
+     [id(1610809358), propput, restricted, hidden]
+     HRESULT __stdcall FreeBuffers (
+       [in] UINT argNo1
+     );
+     [id(1610809360), propget]
+     HRESULT __stdcall Guid (
+       [out retval] struct GUID *Guid
+     );
+     [id(1610809360), propput]
+     HRESULT __stdcall Guid (
+       [in] struct GUID argNo1
+     );
+     [id(1610809362), propget]
+     HRESULT __stdcall IsKernelTrace (
+       [out retval] WINBOOL *kernel
+     );
+     [propget]
+     HRESULT __stdcall MaximumBuffers (
+       [out retval] UINT *buffers
+     );
+     [id(1610809363), propput]
+     HRESULT __stdcall MaximumBuffers (
+       [in] UINT argNo1
+     );
+     [id(1610809365), propget]
+     HRESULT __stdcall MinimumBuffers (
+       [out retval] UINT *buffers
+     );
+     [id(1610809365), propput]
+     HRESULT __stdcall MinimumBuffers (
+       [in] UINT argNo1
+     );
+     [id(1610809367), propget]
+     HRESULT __stdcall NumberOfBuffers (
+       [out retval] UINT *buffers
+     );
+     [id(1610809367), propput]
+     HRESULT __stdcall NumberOfBuffers (
+       [in] UINT argNo1
+     );
+     [id(1610809369), propget]
+     HRESULT __stdcall PreallocateFile (
+       [out retval] WINBOOL *allocate
+     );
+     [id(1610809369), propput]
+     HRESULT __stdcall PreallocateFile (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809371), propget]
+     HRESULT __stdcall ProcessMode (
+       [out retval] WINBOOL *process
+     );
+     [id(1610809371), propput]
+     HRESULT __stdcall ProcessMode (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809373), propget]
+     HRESULT __stdcall RealTimeBuffersLost (
+       [out retval] UINT *buffers
+     );
+     [id(1610809373), propput, restricted, hidden]
+     HRESULT __stdcall RealTimeBuffersLost (
+       [in] UINT argNo1
+     );
+     [id(1610809375), propget]
+     HRESULT __stdcall SessionId (
+       [out retval] ULONGLONG *id
+     );
+     [id(1610809375), propput, restricted, hidden]
+     HRESULT __stdcall SessionId (
+       [in] ULONGLONG argNo1
+     );
+     [id(1610809377), propget]
+     HRESULT __stdcall SessionName (
+       [out retval] BSTR *name
+     );
+     [id(1610809377), propput]
+     HRESULT __stdcall SessionName (
+       [in] BSTR argNo1
+     );
+     [id(1610809379), propget]
+     HRESULT __stdcall SessionThreadId (
+       [out retval] UINT *tid
+     );
+     [id(1610809379), propput, restricted, hidden]
+     HRESULT __stdcall SessionThreadId (
+       [in] UINT argNo1
+     );
+     [id(1610809381), propget]
+     HRESULT __stdcall StreamMode (
+       [out retval] StreamMode *mode
+     );
+     [id(1610809381), propput]
+     HRESULT __stdcall StreamMode (
+       [in] StreamMode argNo1
+     );
+     [id(1610809383), propget]
+     HRESULT __stdcall TraceDataProviders (
+       [out retval] dispinterface ITraceDataProviderCollection **providers
+     );
+   };
+   [
+     uuid(03837510-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITraceDataProviderCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *retVal
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface ITraceDataProvider **ppProvider
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **retVal
+     );
+     [id(1610743811)]
+     HRESULT __stdcall Add (
+       dispinterface ITraceDataProvider *pProvider
+     );
+     HRESULT __stdcall Remove (
+       VARIANT vProvider
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface ITraceDataProviderCollection *providers
+     );
+     HRESULT __stdcall CreateTraceDataProvider (
+       [out retval] dispinterface ITraceDataProvider **Provider
+     );
+     HRESULT __stdcall GetTraceDataProviders (
+       [in] BSTR Server
+     );
+     HRESULT __stdcall GetTraceDataProvidersByProcess (
+       [in] BSTR Server,
+       [in] UINT Pid
+     );
+   };
+   [
+     uuid(03837512-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITraceDataProvider : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall DisplayName (
+       [out retval] BSTR *name
+     );
+     [id(1610743808), propput]
+     HRESULT __stdcall DisplayName (
+       [in] BSTR argNo1
+     );
+     [id(1610743810), propget]
+     HRESULT __stdcall Guid (
+       [out retval] struct GUID *Guid
+     );
+     [id(1610743810), propput]
+     HRESULT __stdcall Guid (
+       [in] struct GUID argNo1
+     );
+     [id(1610743812), propget]
+     HRESULT __stdcall Level (
+       [out retval] dispinterface IValueMap **ppLevel
+     );
+     [propget]
+     HRESULT __stdcall KeywordsAny (
+       [out retval] dispinterface IValueMap **ppKeywords
+     );
+     [propget]
+     HRESULT __stdcall KeywordsAll (
+       [out retval] dispinterface IValueMap **ppKeywords
+     );
+     [propget]
+     HRESULT __stdcall Properties (
+       [out retval] dispinterface IValueMap **ppProperties
+     );
+     [propget]
+     HRESULT __stdcall FilterEnabled (
+       [out retval] WINBOOL *FilterEnabled
+     );
+     [id(1610743816), propput]
+     HRESULT __stdcall FilterEnabled (
+       [in] WINBOOL argNo1
+     );
+     [id(1610743818), propget]
+     HRESULT __stdcall FilterType (
+       [out retval] UINT *pulType
+     );
+     [id(1610743818), propput]
+     HRESULT __stdcall FilterType (
+       [in] UINT argNo1
+     );
+     [id(1610743820), propget]
+     HRESULT __stdcall FilterData (
+       [out retval] UCHAR ppData[]*
+     );
+     [id(1610743820), propput]
+     HRESULT __stdcall FilterData (
+       [in] UCHAR argNo1[]
+     );
+     [id(1610743822)]
+     HRESULT __stdcall Query (
+       [in] BSTR bstrName,
+       [in] BSTR bstrServer
+     );
+     HRESULT __stdcall Resolve (
+       [in] IDispatch * pFrom
+     );
+     HRESULT __stdcall SetSecurity (
+       [in] BSTR Sddl
+     );
+     HRESULT __stdcall GetSecurity (
+       [in] UINT SecurityInfo,
+       [out retval] BSTR *Sddl
+     );
+     HRESULT __stdcall GetRegisteredProcesses (
+       [out] dispinterface IValueMap **Processes
+     );
+   };
+   [
+     uuid(03837514-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IConfigurationDataCollector : IDataCollector
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall FileMaxCount (
+       [out retval] UINT *Count
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall FileMaxCount (
+       [in] UINT argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall FileMaxRecursiveDepth (
+       [out retval] UINT *depth
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall FileMaxRecursiveDepth (
+       [in] UINT argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall FileMaxTotalSize (
+       [out retval] UINT *size
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall FileMaxTotalSize (
+       [in] UINT argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall Files (
+       [out retval] BSTR Files[]*
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall Files (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall ManagementQueries (
+       [out retval] BSTR Queries[]*
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall ManagementQueries (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall QueryNetworkAdapters (
+       [out retval] WINBOOL *network
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall QueryNetworkAdapters (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809356), propget]
+     HRESULT __stdcall RegistryKeys (
+       [out retval] BSTR Query[]*
+     );
+     [id(1610809356), propput]
+     HRESULT __stdcall RegistryKeys (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809358), propget]
+     HRESULT __stdcall RegistryMaxRecursiveDepth (
+       [out retval] UINT *depth
+     );
+     [id(1610809358), propput]
+     HRESULT __stdcall RegistryMaxRecursiveDepth (
+       [in] UINT argNo1
+     );
+     [id(1610809360), propget]
+     HRESULT __stdcall SystemStateFile (
+       [out retval] BSTR *FileName
+     );
+     [id(1610809360), propput]
+     HRESULT __stdcall SystemStateFile (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(03837516-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IAlertDataCollector : IDataCollector
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall AlertThresholds (
+       [out retval] BSTR alerts[]*
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall AlertThresholds (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall EventLog (
+       [out retval] WINBOOL *log
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall EventLog (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall SampleInterval (
+       [out retval] UINT *interval
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall SampleInterval (
+       [in] UINT argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall Task (
+       [out retval] BSTR *Task
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall Task (
+       [in] BSTR argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall TaskRunAsSelf (
+       [out retval] WINBOOL *RunAsSelf
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall TaskRunAsSelf (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall TaskArguments (
+       [out retval] BSTR *Task
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall TaskArguments (
+       [in] BSTR argNo1
+     );
+     [id(1610809356), propget]
+     HRESULT __stdcall TaskUserTextArguments (
+       [out retval] BSTR *Task
+     );
+     [id(1610809356), propput]
+     HRESULT __stdcall TaskUserTextArguments (
+       [in] BSTR argNo1
+     );
+     [id(1610809358), propget]
+     HRESULT __stdcall TriggerDataCollectorSet (
+       [out retval] BSTR *name
+     );
+     [id(1610809358), propput]
+     HRESULT __stdcall TriggerDataCollectorSet (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(0383751A-098B-11D8-9414-505054503030),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IApiTracingDataCollector : IDataCollector
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall LogApiNamesOnly (
+       [out retval] WINBOOL *logapinames
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall LogApiNamesOnly (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall LogApisRecursively (
+       [out retval] WINBOOL *logrecursively
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall LogApisRecursively (
+       [in] WINBOOL argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall ExePath (
+       [out retval] BSTR *ExePath
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall ExePath (
+       [in] BSTR argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall LogFilePath (
+       [out retval] BSTR *LogFilePath
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall LogFilePath (
+       [in] BSTR argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall IncludeModules (
+       [out retval] BSTR IncludeModules[]*
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall IncludeModules (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall IncludeApis (
+       [out retval] BSTR IncludeApis[]*
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall IncludeApis (
+       [in] BSTR argNo1[]
+     );
+     [id(1610809356), propget]
+     HRESULT __stdcall ExcludeApis (
+       [out retval] BSTR ExcludeApis[]*
+     );
+     [id(1610809356), propput]
+     HRESULT __stdcall ExcludeApis (
+       [in] BSTR argNo1[]
+     );
+   };
+   [
+     uuid(03837524-098B-11D8-9414-505054503030),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDataCollectorSetCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *retVal
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT Index,
+       [out retval] dispinterface IDataCollectorSet **set
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **retVal
+     );
+     [id(1610743811)]
+     HRESULT __stdcall Add (
+       dispinterface IDataCollectorSet *set
+     );
+     HRESULT __stdcall Remove (
+       VARIANT set
+     );
+     HRESULT __stdcall Clear (void);
+     HRESULT __stdcall AddRange (
+       dispinterface IDataCollectorSetCollection *sets
+     );
+     HRESULT __stdcall GetDataCollectorSets (
+       [in] BSTR Server,
+       [in] BSTR filter
+     );
+   };
+
+};
+
diff --git a/mingw-w64-headers/include/powrprof.h b/mingw-w64-headers/include/powrprof.h
index 60b1154..e1c4c2f 100644
--- a/mingw-w64-headers/include/powrprof.h
+++ b/mingw-w64-headers/include/powrprof.h
@@ -115,6 +115,407 @@
   BOOLEAN WINAPI ReadProcessorPwrScheme(UINT,PMACHINE_PROCESSOR_POWER_POLICY);
   BOOLEAN WINAPI WriteProcessorPwrScheme(UINT,PMACHINE_PROCESSOR_POWER_POLICY);
   BOOLEAN WINAPI ValidatePowerPolicies(PGLOBAL_POWER_POLICY,PPOWER_POLICY);
+
+#if (_WIN32_WINNT >= 0x0600)
+#define DEVICEPOWER_HARDWAREID 0x80000000
+#define DEVICEPOWER_FILTER_DEVICES_PRESENT 0x20000000
+#define DEVICEPOWER_AND_OPERATION 0x40000000
+#define DEVICEPOWER_FILTER_WAKEENABLED 0x08000000
+#define DEVICEPOWER_FILTER_ON_NAME 0x02000000
+
+#define PDCAP_D0_SUPPORTED 0x00000001
+#define PDCAP_D1_SUPPORTED 0x00000002
+#define PDCAP_D2_SUPPORTED 0x00000004
+#define PDCAP_D3_SUPPORTED 0x00000008
+#define PDCAP_S0_SUPPORTED 0x00010000
+#define PDCAP_S1_SUPPORTED 0x00020000
+#define PDCAP_S2_SUPPORTED 0x00040000
+#define PDCAP_S3_SUPPORTED 0x00080000
+#define PDCAP_S4_SUPPORTED 0x01000000
+#define PDCAP_S5_SUPPORTED 0x02000000
+#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
+#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
+#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
+#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
+#define PDCAP_WAKE_FROM_S0_SUPPORTED 0x00100000
+#define PDCAP_WAKE_FROM_S1_SUPPORTED 0x00200000
+#define PDCAP_WAKE_FROM_S2_SUPPORTED 0x00400000
+#define PDCAP_WAKE_FROM_S3_SUPPORTED 0x00800000
+#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
+
+#define DEVICEPOWER_SET_WAKEENABLED 0x00000001
+#define DEVICEPOWER_CLEAR_WAKEENABLED 0x00000002
+
+typedef enum _POWER_DATA_ACCESSOR {
+  ACCESS_AC_POWER_SETTING_INDEX   = 0,   // 0x0
+  ACCESS_DC_POWER_SETTING_INDEX   = 1,   // 0x1
+  ACCESS_SCHEME                   = 16,  // 0x10
+  ACCESS_SUBGROUP                 = 17,  // 0x11
+  ACCESS_INDIVIDUAL_SETTING       = 18,  // 0x12
+  ACCESS_ACTIVE_SCHEME            = 19,  // 0x13
+  ACCESS_CREATE_SCHEME            = 20   // 0x14
+} POWER_DATA_ACCESSOR, *PPOWER_DATA_ACCESSOR;
+
+BOOLEAN WINAPI DevicePowerClose(void);
+BOOLEAN WINAPI DevicePowerEnumDevices(
+  ULONG QueryIndex,
+  ULONG QueryInterpretationFlags,
+  ULONG QueryFlags,
+  PBYTE pReturnBuffer,
+  PULONG pBufferSize
+);
+
+BOOLEAN WINAPI DevicePowerOpen(
+  ULONG Flags
+);
+
+DWORD WINAPI DevicePowerSetDeviceState(
+  LPCWSTR DeviceDescription,
+  ULONG SetFlags,
+  PCVOID SetData
+);
+
+DWORD WINAPI PowerCanRestoreIndividualDefaultPowerScheme(
+  const GUID *SchemeGuid
+);
+
+DWORD WINAPI PowerCreatePossibleSetting(
+  HKEY RootSystemPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG PossibleSettingIndex
+);
+
+DWORD WINAPI PowerCreateSetting(
+  HKEY RootSystemPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid
+);
+
+DWORD WINAPI PowerDeleteScheme(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid
+);
+
+POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void);
+
+DWORD WINAPI PowerDuplicateScheme(
+  HKEY RootPowerKey,
+  const GUID *SourceSchemeGuid,
+  GUID **DestinationSchemeGuid
+);
+
+DWORD WINAPI PowerEnumerate(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  POWER_DATA_ACCESSOR AccessFlags,
+  ULONG Index,
+  UCHAR *Buffer,
+  DWORD *BufferSize
+);
+
+DWORD WINAPI PowerGetActiveScheme(
+  HKEY UserRootPowerKey,
+  GUID **ActivePolicyGuid
+);
+
+DWORD WINAPI PowerImportPowerScheme(
+  HKEY RootPowerKey,
+  LPCWSTR ImportFileNamePath,
+  GUID **DestinationSchemeGuid
+);
+
+DWORD WINAPI PowerReadACDefaultIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemePersonalityGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD AcDefaultIndex
+);
+
+DWORD WINAPI PowerReadACValue(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PULONG Type,
+  LPBYTE Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadACValueIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD AcValueIndex
+);
+
+DWORD WINAPI PowerReadDCDefaultIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemePersonalityGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD DcDefaultIndex
+);
+
+DWORD WINAPI PowerReadDCValue(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PULONG Type,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadDCValueIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD DcValueIndex
+);
+
+DWORD WINAPI PowerReadDescription(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadFriendlyName(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadIconResourceSpecifier(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadPossibleDescription(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG PossibleSettingIndex,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadPossibleFriendlyName(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG PossibleSettingIndex,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadPossibleValue(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  PULONG Type,
+  ULONG PossibleSettingIndex,
+  PUCHAR Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerReadSettingAttributes(
+  const GUID *SubGroupGuid,
+  const GUID *PowerSettingGuid
+);
+
+DWORD WINAPI PowerReadValueIncrement(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD ValueIncrement
+);
+
+DWORD WINAPI PowerReadValueMax(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD ValueMaximum
+);
+
+DWORD WINAPI PowerReadValueMin(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  LPDWORD ValueMinimum
+);
+
+DWORD WINAPI PowerReadValueUnitsSpecifier(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  UCHAR *Buffer,
+  LPDWORD BufferSize
+);
+
+DWORD WINAPI PowerRemovePowerSetting(
+  const GUID *PowerSettingSubKeyGuid,
+  const GUID *PowerSettingGuid
+);
+
+DWORD WINAPI PowerReplaceDefaultPowerSchemes(void);
+
+DWORD WINAPI PowerRestoreDefaultPowerSchemes(void);
+
+DWORD WINAPI PowerRestoreIndividualDefaultPowerScheme(
+  const GUID *SchemeGuid
+);
+
+DWORD WINAPI PowerSetActiveScheme(
+  HKEY UserRootPowerKey,
+  const GUID *SchemeGuid
+);
+
+DWORD WINAPI PowerSettingAccessCheck(
+  POWER_DATA_ACCESSOR AccessFlags,
+  const GUID *PowerGuid
+);
+
+DWORD WINAPI PowerWriteACDefaultIndex(
+  HKEY RootSystemPowerKey,
+  const GUID *SchemePersonalityGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD DefaultAcIndex
+);
+
+DWORD WINAPI PowerWriteACValueIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD AcValueIndex
+);
+
+DWORD WINAPI PowerWriteDCDefaultIndex(
+  HKEY RootSystemPowerKey,
+  const GUID *SchemePersonalityGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD DefaultDcIndex
+);
+
+DWORD WINAPI PowerWriteDCValueIndex(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD DcValueIndex
+);
+
+DWORD WINAPI PowerWriteDescription(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+DWORD WINAPI PowerWriteFriendlyName(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+DWORD WINAPI PowerWriteIconResourceSpecifier(
+  HKEY RootPowerKey,
+  const GUID *SchemeGuid,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+DWORD WINAPI PowerWritePossibleDescription(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG PossibleSettingIndex,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+DWORD WINAPI PowerWritePossibleFriendlyName(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG PossibleSettingIndex,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+DWORD WINAPI PowerWritePossibleValue(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  ULONG Type,
+  ULONG PossibleSettingIndex,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+#define POWER_ATTRIBUTE_HIDE 1
+
+DWORD WINAPI PowerWriteSettingAttributes(
+  const GUID *SubGroupGuid,
+  const GUID *PowerSettingGuid,
+  DWORD Attributes
+);
+
+DWORD WINAPI PowerWriteValueIncrement(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD ValueIncrement
+);
+
+DWORD WINAPI PowerWriteValueMax(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD ValueMaximum
+);
+
+DWORD WINAPI PowerWriteValueMin(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  DWORD ValueMinimum
+);
+
+DWORD WINAPI PowerWriteValueUnitsSpecifier(
+  HKEY RootPowerKey,
+  const GUID *SubGroupOfPowerSettingsGuid,
+  const GUID *PowerSettingGuid,
+  UCHAR *Buffer,
+  DWORD BufferSize
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifndef NT_SUCCESS
 #define NTSTATUS LONG
 #define _OVERRIDE_NTSTATUS_
diff --git a/mingw-w64-headers/include/prnasnot.h b/mingw-w64-headers/include/prnasnot.h
new file mode 100644
index 0000000..4f895fb
--- /dev/null
+++ b/mingw-w64-headers/include/prnasnot.h
@@ -0,0 +1,78 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_PRNASNOT
+#define _INC_PRNASNOT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagPrintAsyncNotifyConversationStyle {
+  kBiDirectional,
+  kUniDirectional 
+} PrintAsyncNotifyConversationStyle;
+
+typedef enum tagPrintAsyncNotifyError {
+  CHANNEL_CLOSED_BY_SERVER                  = 0x01,
+  CHANNEL_CLOSED_BY_ANOTHER_LISTENER        = 0x02,
+  CHANNEL_CLOSED_BY_SAME_LISTENER           = 0x03,
+  CHANNEL_RELEASED_BY_LISTENER              = 0x04,
+  UNIRECTIONAL_NOTIFICATION_LOST            = 0x05,
+  ASYNC_NOTIFICATION_FAILURE                = 0x06,
+  NO_LISTENERS                              = 0x07,
+  CHANNEL_ALREADY_CLOSED                    = 0x08,
+  CHANNEL_ALREADY_OPENED                    = 0x09,
+  CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION   = 0x0a,
+  CHANNEL_NOT_OPENED                        = 0x0b,
+  ASYNC_CALL_ALREADY_PARKED                 = 0x0c,
+  NOT_REGISTERED                            = 0x0d,
+  ALREADY_UNREGISTERED                      = 0x0e,
+  ALREADY_REGISTERED                        = 0x0f,
+  CHANNEL_ACQUIRED                          = 0x10,
+  ASYNC_CALL_IN_PROGRESS                    = 0x11,
+  MAX_NOTIFICATION_SIZE_EXCEEDED            = 0x12,
+  INTERNAL_NOTIFICATION_QUEUE_IS_FULL       = 0x13,
+  INVALID_NOTIFICATION_TYPE                 = 0x14,
+  MAX_REGISTRATION_COUNT_EXCEEDED           = 0x15,
+  MAX_CHANNEL_COUNT_EXCEEDED                = 0x16,
+  LOCAL_ONLY_REGISTRATION                   = 0x17,
+  REMOTE_ONLY_REGISTRATION                  = 0x18 
+} PrintAsyncNotifyError;
+
+typedef enum tagPrintAsyncNotifyUserFilter {
+  kPerUser,
+  kAllUsers 
+} PrintAsyncNotifyUserFilter;
+
+HRESULT CreatePrintAsyncNotifyChannel(
+  LPCWSTR pName,
+  PrintAsyncNotificationType *pSchema,
+  PrintAsyncNotifyUserFilter filter,
+  PrintAsyncNotifyConversationStyle directionality,
+  IPrintAsyncNotifyCallback *pCallback,
+  IPrintAsyncNotifyChannel **ppChannel
+);
+
+HRESULT RegisterForPrintAsyncNotifications(
+  LPCWSTR pName,
+  PrintAsyncNotificationType *pSchema,
+  PrintAsyncNotifyUserFilter filter,
+  PrintAsyncNotifyConversationStyle directionality,
+  IPrintAsyncNotifyCallback *pCallback,
+  HANDLE *pRegistrationHandler
+);
+
+HRESULT UnRegisterForPrintAsyncNotifications(
+  HANDLE hRegistrationHandler
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_PRNASNOT*/
diff --git a/mingw-w64-headers/include/propsys.h b/mingw-w64-headers/include/propsys.h
new file mode 100644
index 0000000..ff1ca98
--- /dev/null
+++ b/mingw-w64-headers/include/propsys.h
@@ -0,0 +1,72 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_PROPSYS
+#define _INC_PROPSYS
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct PROPERTYKEY *REFPROPERTYKEY;
+
+#undef  INTERFACE
+#define INTERFACE IPropertyStore
+DECLARE_INTERFACE_(IPropertyStore,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IPropertyStore methods */
+    STDMETHOD_(HRESULT,Commit)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetAt)(THIS_ DWORD iProp,PROPERTYKEY *pkey) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ DWORD *cProps) PURE;
+    STDMETHOD_(HRESULT,GetValue)(THIS_ REFPROPERTYKEY key,PROPVARIANT *pv) PURE;
+    STDMETHOD_(HRESULT,SetValue)(THIS_ REFPROPERTYKEY key,REFPROPVARIANT propvar) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IPropertyStore_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertyStore_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IPropertyStore_Release(This) (This)->pVtbl->Release(This)
+#define IPropertyStore_Commit() (This)->lpVtbl->Commit(This)
+#define IPropertyStore_GetAt(This,iProp,pkey) (This)->lpVtbl->GetAt(This,iProp,pkey)
+#define IPropertyStore_GetCount(This,cProps) (This)->lpVtbl->GetCount(This,cProps)
+#define IPropertyStore_GetValue(This,key,pv) (This)->lpVtbl->GetValue(This,key,pv)
+#define IPropertyStore_SetValue(This,key,propvar) (This)->lpVtbl->SetValue(This,key,propvar)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE INamedPropertyStore
+DECLARE_INTERFACE_(INamedPropertyStore,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* INamedPropertyStore methods */
+    STDMETHOD_(HRESULT,GetNameAt)(THIS_ DWORD iProp,BSTR *pbstrName) PURE;
+    STDMETHOD_(HRESULT,GetNameCount)(THIS_ DWORD *pdwCount) PURE;
+    STDMETHOD_(HRESULT,GetNamedValue)(THIS_ LPCWSTR pszName,PROPVARIANT *pv) PURE;
+    STDMETHOD_(HRESULT,SetNamedValue)(THIS_ LPCWSTR pszName,const PROPVARIANT *pv) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define INamedPropertyStore_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define INamedPropertyStore_AddRef(This) (This)->pVtbl->AddRef(This)
+#define INamedPropertyStore_Release(This) (This)->pVtbl->Release(This)
+#define INamedPropertyStore_GetNameAt(This,iProp,pbstrName) (This)->lpVtbl->GetNameAt(This,iProp,pbstrName)
+#define INamedPropertyStore_GetNameCount(This,pdwCount) (This)->lpVtbl->GetNameCount(This,pdwCount)
+#define INamedPropertyStore_GetNamedValue(This,pszName,pv) (This)->lpVtbl->GetNamedValue(This,pszName,pv)
+#define INamedPropertyStore_SetNamedValue(This,pszName,pv) (This)->lpVtbl->SetNamedValue(This,pszName,pv)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_PROPSYS*/
diff --git a/mingw-w64-headers/include/psapi.h b/mingw-w64-headers/include/psapi.h
index 4329b12..e16534c 100644
--- a/mingw-w64-headers/include/psapi.h
+++ b/mingw-w64-headers/include/psapi.h
@@ -119,6 +119,47 @@
   WINBOOL WINAPI EnumPageFilesA (PENUM_PAGE_FILE_CALLBACKA pCallBackRoutine,LPVOID pContext);
   DWORD WINAPI GetProcessImageFileNameA(HANDLE hProcess,LPSTR lpImageFileName,DWORD nSize);
   DWORD WINAPI GetProcessImageFileNameW(HANDLE hProcess,LPWSTR lpImageFileName,DWORD nSize);
+  
+typedef struct _PSAPI_WS_WATCH_INFORMATION_EX {
+  PSAPI_WS_WATCH_INFORMATION BasicInfo;
+  ULONG_PTR                  FaultingThreadId;
+  ULONG_PTR                  Flags;
+} PSAPI_WS_WATCH_INFORMATION_EX, *PPSAPI_WS_WATCH_INFORMATION_EX;
+
+WINBOOL WINAPI GetWsChangesEx(
+  HANDLE hProcess,
+  PPSAPI_WS_WATCH_INFORMATION_EX lpWatchInfoEx,
+  DWORD cb
+);
+
+WINBOOL WINAPI EnumProcessModulesEx(
+  HANDLE hProcess,
+  HMODULE *lphModule,
+  DWORD cb,
+  LPDWORD lpcbNeeded,
+  DWORD dwFilterFlag
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef union _PSAPI_WORKING_SET_EX_BLOCK {
+  ULONG_PTR Flags;
+  __MINGW_EXTENSION struct {
+    ULONG_PTR Valid  :1;
+    ULONG_PTR ShareCount  :3;
+    ULONG_PTR Win32Protection  :11;
+    ULONG_PTR Shared  :1;
+    ULONG_PTR Node  :6;
+    ULONG_PTR Locked  :1;
+    ULONG_PTR LargePage  :1;
+  } DUMMYSTRUCTNAME;
+} PSAPI_WORKING_SET_EX_BLOCK, *PPSAPI_WORKING_SET_EX_BLOCK;
+
+typedef struct _PSAPI_WORKING_SET_EX_INFORMATION {
+  PVOID                      VirtualAddress;
+  PSAPI_WORKING_SET_EX_BLOCK VirtualAttributes;
+} PSAPI_WORKING_SET_EX_INFORMATION, *PPSAPI_WORKING_SET_EX_INFORMATION;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/qos2.h b/mingw-w64-headers/include/qos2.h
new file mode 100644
index 0000000..2ca6c6c
--- /dev/null
+++ b/mingw-w64-headers/include/qos2.h
@@ -0,0 +1,169 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_QOS2
+#define _INC_QOS2
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _QOS_SHAPING {
+  QOSShapeOnly                  = 0,
+  QOSShapeAndMark               = 1,
+  QOSUseNonConformantMarkings   = 2 
+} QOS_SHAPING, *PQOS_SHAPING;
+
+typedef enum _QOS_FLOWRATE_REASON {
+  QOSFlowRateNotApplicable           = 0,
+  QOSFlowRateContentChange           = 1,
+  QOSFlowRateCongestion              = 2,
+  QOSFlowRateHigherContentEncoding   = 3,
+  QOSFlowRateUserCaused              = 4 
+} QOS_FLOWRATE_REASON, PQOS_FLOWRATE_REASON;
+
+typedef enum _QOS_NOTIFY_FLOW {
+  QOSNotifyCongested     = 0,
+  QOSNotifyUncongested   = 1,
+  QOSNotifyAvailable     = 2 
+} QOS_NOTIFY_FLOW, *PQOS_NOTIFY_FLOW;
+
+typedef enum _QOS_QUERY_FLOW {
+  QOSQueryFlowFundamentals   = 0,
+  QOSQueryPacketPriority     = 1,
+  QOSQueryOutgoingRate       = 2 
+} QOS_QUERY_FLOW;
+
+typedef enum _QOS_SET_FLOW {
+  QOSSetTrafficType         = 0,
+  QOSSetOutgoingRate        = 1,
+  QOSSetOutgoingDSCPValue   = 2 
+} QOS_SET_FLOW, *PQOS_SET_FLOW;
+
+typedef enum _QOS_TRAFFIC_TYPE {
+  QOSTrafficTypeBestEffort,
+  QOSTrafficTypeBackground,
+  QOSTrafficTypeExcellentEffort,
+  QOSTrafficTypeAudioVideo,
+  QOSTrafficTypeVoice,
+  QOSTrafficTypeControl 
+} QOS_TRAFFIC_TYPE, *PQOS_TRAFFIC_TYPE;
+
+typedef struct _QOS_FLOW_FUNDAMENTALS {
+  BOOL   BottleneckBandwidthSet;
+  UINT64 BottleneckBandwidth;
+  BOOL   AvailableBandwidthSet;
+  UINT64 AvailableBandwidth;
+  BOOL   RTTSet;
+  UINT32 RTT;
+} QOS_FLOW_FUNDAMENTALS, *PQOS_FLOW_FUNDAMENTALS;
+
+typedef struct _QOS_FLOWRATE_OUTGOING {
+  UINT64              Bandwidth;
+  QOS_SHAPING         ShapingBehavior;
+  QOS_FLOWRATE_REASON Reason;
+} QOS_FLOWRATE_OUTGOING, *PQOS_FLOWRATE_OUTGOING;
+
+typedef struct _QOS_PACKET_PRIORITY {
+  ULONG ConformantDSCPValue;
+  ULONG NonConformantDSCPValue;
+  ULONG ConformantL2Value;
+  ULONG NonConformantL2Value;
+} QOS_PACKET_PRIORITY, *PQOS_PACKET_PRIORITY;
+
+typedef struct _QOS_VERSION {
+  USHORT MajorVersion;
+  USHORT MinorVersion;
+} QOS_VERSION, *PQOS_VERSION;
+
+WINBOOL WINAPI QOSAddSocketToFlow(
+  HANDLE QOSHandle,
+  SOCKET Socket,
+  PSOCKADDR DestAddr,
+  QOS_TRAFFIC_TYPE TrafficType,
+  DWORD Flags,
+  PQOS_FLOWID FlowId
+);
+
+WINBOOL WINAPI QOSCancel(
+  HANDLE QOSHandle,
+  LPOVERLAPPED Overlapped
+);
+
+WINBOOL WINAPI QOSCloseHandle(
+  HANDLE QOSHandle
+);
+
+WINBOOL WINAPI QOSCreateHandle(
+  PQOS_VERSION Version,
+  PHANDLE QOSHandle
+);
+
+WINBOOL WINAPI QOSEnumerateFlows(
+  HANDLE QOSHandle,
+  PULONG Size,
+  PVOID Buffer
+);
+
+WINBOOL WINAPI QOSNotifyFlow(
+  HANDLE QOSHandle,
+  QOS_FLOWID FlowId,
+  QOS_NOTIFY_FLOW Operation,
+  PULONG Size,
+  PVOID Buffer,
+  DWORD Flags,
+  LPOVERLAPPED Overlapped
+);
+
+WINBOOL WINAPI QOSQueryFlow(
+  HANDLE QOSHandle,
+  QOS_FLOWID FlowId,
+  QOS_QUERY_FLOW Operation,
+  PULONG Size,
+  PVOID Buffer,
+  DWORD Flags,
+  LPOVERLAPPED Overlapped
+);
+
+WINBOOL WINAPI QOSRemoveSocketFromFlow(
+  HANDLE QOSHandle,
+  SOCKET Socket,
+  QOS_FLOWID FlowId,
+  DWORD Flags
+);
+
+#define QOSSetTrafficType 0
+#define QOSSetOutgoingRate 1
+#define QOSSetOutgoingDSCPValue 2
+
+typedef UINT32 QOS_FLOWID;
+
+WINBOOL WINAPI QOSSetFlow(
+  HANDLE QOSHandle,
+  QOS_FLOWID FlowId,
+  QOS_SET_FLOW Operation,
+  ULONG Size,
+  PVOID Buffer,
+  DWORD Flags,
+  LPOVERLAPPED Overlapped
+);
+
+WINBOOL WINAPI QOSStartTrackingClient(
+  HANDLE QOSHandle,
+  PSOCKADDR DestAddr,
+  DWORD Flags
+);
+
+WINBOOL WINAPI QOSStopTrackingClient(
+  HANDLE QOSHandle,
+  PSOCKADDR DestAddr,
+  DWORD Flags
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_QOS2*/
diff --git a/mingw-w64-headers/include/ras.h b/mingw-w64-headers/include/ras.h
index b012e23..c53f8b5 100644
--- a/mingw-w64-headers/include/ras.h
+++ b/mingw-w64-headers/include/ras.h
@@ -12,6 +12,10 @@
 extern "C" {
 #endif
 
+typedef struct in_addr RASIPV4ADDR;
+typedef struct in6_addr RASIPV6ADDR;
+
+
 #ifndef UNLEN
 #include <lmcons.h>
 #endif
@@ -973,6 +977,57 @@
 #define RasFreeEapUserIdentity __MINGW_NAME_AW(RasFreeEapUserIdentity)
 #define RasDeleteSubEntry __MINGW_NAME_AW(RasDeleteSubEntry)
 
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct _tagRasNapState {
+  DWORD          dwSize;
+  DWORD          dwFlags;
+  IsolationState isolationState;
+  ProbationTime  probationTime;
+} RASNAPSTATE, *LPRASNAPSTATE;
+
+typedef struct _RASPPPIPV6 {
+  DWORD dwSize;
+  DWORD dwError;
+  BYTE  bLocalInterfaceIdentifier[8];
+  BYTE  bPeerInterfaceIdentifier[8];
+  BYTE  bLocalCompressionProtocol[2];
+  BYTE  bPeerCompressionProtocol[2];
+} RASPPPIPV6, *LPRASPPPIPV6;
+
+DWORD rasgetnapstatus(
+  HRASCONN hRasConn,
+  LPRASNAPSTATE pNapState
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef enum  {
+  RASAPIVERSION_500   = 1,
+  RASAPIVERSION_501   = 2,
+  RASAPIVERSION_600   = 3,
+  RASAPIVERSION_601   = 4 
+} RASAPIVERSION;
+
+typedef struct _RASTUNNELENDPOINT {
+  DWORD dwType;
+  __MINGW_EXTENSION union {
+    RASIPV4ADDR ipv4;
+    RASIPV6ADDR ipv6;
+  } DUMMYUNIONNAME;
+} RASTUNNELENDPOINT, *PRASTUNNELENDPOINT;
+
+typedef struct _RASUPDATECONN {
+  RASAPIVERSION     version;
+  DWORD             dwSize;
+  DWORD             dwFlags;
+  DWORD             dwIfIndex;
+  RASTUNNELENDPOINT  localEndPoint;
+  RASTUNNELENDPOINT  remoteEndPoint;
+} RASUPDATECONN, *LPRASUPDATECONN;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/rdpencomapi.h b/mingw-w64-headers/include/rdpencomapi.h
new file mode 100644
index 0000000..c8491c9
--- /dev/null
+++ b/mingw-w64-headers/include/rdpencomapi.h
@@ -0,0 +1,164 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_RDPENCOMAPI
+#define _INC_RDPENCOMAPI
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _ATTENDEE_DISCONNECT_REASON {
+  ATTENDEE_DISCONNECT_REASON_MIN   = 0,
+  ATTENDEE_DISCONNECT_REASON_APP   = 0,
+  ATTENDEE_DISCONNECT_REASON_ERR   = 1,
+  ATTENDEE_DISCONNECT_REASON_CLI   = 2,
+  ATTENDEE_DISCONNECT_REASON_MAX   = 2
+} ATTENDEE_DISCONNECT_REASON;
+
+typedef enum _CHANNEL_ACCESS_ENUM {
+  CHANNEL_ACCESS_ENUM_NONE          = 0,
+  CHANNEL_ACCESS_ENUM_SENDRECEIVE   = 1
+} CHANNEL_ACCESS_ENUM;
+
+typedef enum _CHANNEL_FLAGS {
+  CHANNEL_FLAGS_LEGACY         = 0x01,
+  CHANNEL_FLAGS_UNCOMPRESSED   = 0x02
+} CHANNEL_FLAGS;
+
+typedef enum _CHANNEL_PRIORITY {
+  CHANNEL_PRIORITY_LO    = 0,
+  CHANNEL_PRIORITY_MED   = 1,
+  CHANNEL_PRIORITY_HI    = 2
+} CHANNEL_PRIORITY;
+
+typedef enum _CTRL_LEVEL {
+  CTRL_LEVEL_MIN           = 0,
+  CTRL_LEVEL_INVALID       = 0,
+  CTRL_LEVEL_NONE          = 1,
+  CTRL_LEVEL_VIEW          = 2,
+  CTRL_LEVEL_INTERACTIVE   = 3,
+  CTRL_LEVEL_MAX           = 3
+} CTRL_LEVEL;
+
+typedef enum _RDPENCOMAPI_ATTENDEE_FLAGS {
+  ATTENDEE_FLAGS_LOCAL   = 1
+} RDPENCOMAPI_ATTENDEE_FLAGS;
+
+typedef enum _RDPENCOMAPI_CONSTANTS {
+  CONST_MAX_CHANNEL_MESSAGE_SIZE          = 1024,
+  CONST_MAX_CHANNEL_NAME_LEN              = 8,
+  CONST_MAX_LEGACY_CHANNEL_MESSAGE_SIZE   = 409600,
+  CONST_ATTENDEE_ID_EVERYONE              = -1,
+  CONST_ATTENDEE_ID_HOST                  = 0,
+  CONST_CONN_INTERVAL                     = 50
+} RDPENCOMAPI_CONSTANTS;
+
+typedef enum _RDPSRAPI_APP_FLAGS {
+  APP_FLAG_PRIVILEGED   = 1
+} RDPSRAPI_APP_FLAGS;
+
+typedef enum _RDPSRAPI_WND_FLAGS {
+  WND_FLAG_PRIVILEGED   = 1
+} RDPSRAPI_WND_FLAGS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef  INTERFACE
+#define INTERFACE IRDPSRAPITcpConnectionInfo
+DECLARE_INTERFACE_(IRDPSRAPITcpConnectionInfo,IDispatch)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDispatch methods */
+    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ unsigned int FAR*  pctinfo) PURE;
+    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ unsigned int  iTInfo,LCID  lcid,ITypeInfo FAR* FAR*  ppTInfo) PURE;
+    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID  riid,OLECHAR FAR* FAR*  rgszNames,unsigned int  cNames,LCID   lcid,DISPID FAR*  rgDispId) PURE;
+    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID  dispIdMember,REFIID  riid,LCID  lcid,WORD  wFlags,DISPPARAMS FAR*  pDispParams,VARIANT FAR*  pVarResult,EXCEPINFO FAR*  pExcepInfo,unsigned int FAR*  puArgErr) PURE;
+
+    /* IRDPSRAPITcpConnectionInfo methods */
+    STDMETHOD_(HRESULT,get_Protocol)(THIS_ long *plProtocol) PURE;
+    STDMETHOD_(HRESULT,get_LocalPort)(THIS_ long *plPort) PURE;
+    STDMETHOD_(HRESULT,get_LocalIP)(THIS_ BSTR *pbstrLocalIP) PURE;
+    STDMETHOD_(HRESULT,get_PeerPort)(THIS_ long *plPort) PURE;
+    STDMETHOD_(HRESULT,get_PeerIP)(THIS_ BSTR *pbstrIP) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IRDPSRAPITcpConnectionInfo_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IRDPSRAPITcpConnectionInfo_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IRDPSRAPITcpConnectionInfo_Release(This) (This)->pVtbl->Release(This)
+#define IRDPSRAPITcpConnectionInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IRDPSRAPITcpConnectionInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IRDPSRAPITcpConnectionInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IRDPSRAPITcpConnectionInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IRDPSRAPITcpConnectionInfo_get_Protocol(This,plProtocol) (This)->lpVtbl->get_Protocol(This,plProtocol)
+#define IRDPSRAPITcpConnectionInfo_get_LocalPort(This,plPort) (This)->lpVtbl->get_LocalPort(This,plPort)
+#define IRDPSRAPITcpConnectionInfo_get_LocalIP(This,pbstrLocalIP) (This)->lpVtbl->get_LocalIP(This,pbstrLocalIP)
+#define IRDPSRAPITcpConnectionInfo_get_PeerPort(This,plPort) (This)->lpVtbl->get_PeerPort(This,plPort)
+#define IRDPSRAPITcpConnectionInfo_get_PeerIP(This,pbstrIP) (This)->lpVtbl->get_PeerIP(This,pbstrIP)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IRDPSRAPIAttendee
+DECLARE_INTERFACE_(IRDPSRAPIAttendee,IDispatch)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDispatch methods */
+    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ unsigned int FAR*  pctinfo) PURE;
+    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ unsigned int  iTInfo,LCID  lcid,ITypeInfo FAR* FAR*  ppTInfo) PURE;
+    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID  riid,OLECHAR FAR* FAR*  rgszNames,unsigned int  cNames,LCID   lcid,DISPID FAR*  rgDispId) PURE;
+    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID  dispIdMember,REFIID  riid,LCID  lcid,WORD  wFlags,DISPPARAMS FAR*  pDispParams,VARIANT FAR*  pVarResult,EXCEPINFO FAR*  pExcepInfo,unsigned int FAR*  puArgErr) PURE;
+
+    /* IRDPSRAPIAttendee methods */
+    STDMETHOD_(HRESULT,get_Id)(THIS_ long *pId) PURE;
+    STDMETHOD_(HRESULT,get_RemoteName)(THIS_ BSTR *pVal) PURE;
+    STDMETHOD_(HRESULT,get_ControlLevel)(THIS_ CTRL_LEVEL *pVal) PURE;
+    STDMETHOD_(HRESULT,put_ControlLevel)(THIS_ CTRL_LEVEL pNewVal) PURE;
+    STDMETHOD_(HRESULT,get_Invitation)(THIS_ IRDPSRAPIInvitation **ppVal) PURE;
+    STDMETHOD_(HRESULT,TerminateConnection)(THIS) PURE;
+    STDMETHOD_(HRESULT,get_Flags)(THIS_ long *plFlags) PURE;
+    STDMETHOD_(HRESULT,get_ConnectivityInfo)(THIS_ IUnknown **ppVal) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IRDPSRAPIAttendee_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IRDPSRAPIAttendee_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IRDPSRAPIAttendee_Release(This) (This)->pVtbl->Release(This)
+#define IRDPSRAPIAttendee_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IRDPSRAPIAttendee_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IRDPSRAPIAttendee_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IRDPSRAPIAttendee_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IRDPSRAPIAttendee_get_Id(This,pId) (This)->lpVtbl->get_Id(This,pId)
+#define IRDPSRAPIAttendee_get_RemoteName(This,pVal) (This)->lpVtbl->get_RemoteName(This,pVal)
+#define IRDPSRAPIAttendee_get_ControlLevel(This,pVal) (This)->lpVtbl->get_ControlLevel(This,pVal)
+#define IRDPSRAPIAttendee_put_ControlLevel(This,pNewVal) (This)->lpVtbl->put_ControlLevel(This,pNewVal)
+#define IRDPSRAPIAttendee_get_Invitation(This,ppVal) (This)->lpVtbl->get_Invitation(This,ppVal)
+#define IRDPSRAPIAttendee_TerminateConnection() (This)->lpVtbl->TerminateConnection(This)
+#define IRDPSRAPIAttendee_get_Flags(This,plFlags) (This)->lpVtbl->get_Flags(This,plFlags)
+#define IRDPSRAPIAttendee_get_ConnectivityInfo(This,ppVal) (This)->lpVtbl->get_ConnectivityInfo(This,ppVal)
+#endif /*COBJMACROS*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_RDPENCOMAPI */
+
diff --git a/mingw-w64-headers/include/resapi.h b/mingw-w64-headers/include/resapi.h
index 0dfa052..6c45b77 100644
--- a/mingw-w64-headers/include/resapi.h
+++ b/mingw-w64-headers/include/resapi.h
@@ -237,6 +237,120 @@
   DWORD WINAPI ResUtilGetCoreClusterResources(HCLUSTER hCluster,HRESOURCE *phClusterNameResource,HRESOURCE *phClusterIPAddressResource,HRESOURCE *phClusterQuorumResource);
   DWORD WINAPI ResUtilGetResourceName(HRESOURCE hResource,PWSTR pszResourceName,DWORD *pcchResourceNameInOut);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _CLUSTER_ROLE {
+  ClusterRoleDHCP                          = 0,
+  ClusterRoleDTC                           = 1,
+  ClusterRoleFileServer                    = 2,
+  ClusterRoleGenericApplication            = 3,
+  ClusterRoleGenericScript                 = 4,
+  ClusterRoleGenericService                = 5,
+  ClusterRoleISCSINameServer               = 6,
+  ClusterRoleMSMQ                          = 7,
+  ClusterRoleNFS                           = 8,
+  ClusterRolePrintServer                   = 9,
+  ClusterRoleStandAloneNamespaceServer     = 10,
+  ClusterRoleVolumeShadowCopyServiceTask   = 11,
+  ClusterRoleWINS                          = 12 
+} CLUSTER_ROLE;
+
+typedef enum _CLUSTER_ROLE_STATE {
+  ClusterRoleUnknown       = -1,
+  ClusterRoleClustered     = 0,
+  ClusterRoleUnclustered   = 1 
+} CLUSTER_ROLE_STATE;
+
+typedef enum RESOURCE_MONITOR_STATE {
+  RmonInitializing,
+  RmonIdle,
+  RmonStartingResource,
+  RmonInitializingResource,
+  RmonOnlineResource,
+  RmonOfflineResource,
+  RmonShutdownResource,
+  RmonDeletingResource,
+  RmonIsAlivePoll,
+  RmonLooksAlivePoll,
+  RmonArbitrateResource,
+  RmonReleaseResource,
+  RmonResourceControl,
+  RmonResourceTypeControl,
+  RmonTerminateResource,
+  RmonDeadlocked 
+} RESOURCE_MONITOR_STATE;
+
+typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK)( 
+  HRESOURCE hSelf,
+  HRESOURCE hResource,
+  PVOID pParameter
+);
+
+typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK_EX)( 
+  HCLUSTER hCluster,
+  HRESOURCE hSelf,
+  HRESOURCE hResource,
+  PVOID pParameter
+);
+
+typedef struct RESUTIL_FILETIME_DATA {
+  FILETIME Default;
+  FILETIME Minimum;
+  FILETIME Maximum;
+} RESUTIL_FILETIME_DATA, *PRESUTIL_FILETIME_DATA;
+
+DWORD ResUtilFindFileTimeProperty(
+  const PVOID pPropertyList,
+  DWORD cbPropertyListSize,
+  LPCWSTR pszPropertyName,
+  LPFILETIME pftPropertyValue
+);
+
+CLUSTER_ROLE_STATE WINAPI ResUtilGetClusterRoleState(
+  HCLUSTER hCluster,
+  CLUSTER_ROLE eClusterRole
+);
+
+DWORD WINAPI ResUtilGetFileTimeProperty(
+  LPFILETIME pftOutValue,
+  const PCLUSPROP_FILETIME pValueStruct,
+  FILETIME ftOldValue,
+  FILETIME ftMinimum,
+  FILETIME ftMaximum,
+  LPBYTE *ppPropertyList,
+  LPDWORD pcbPropertyListSize
+);
+
+DWORD WINAPI ResUtilGetLongProperty(
+  LPLONG plOutValue,
+  const PCLUSPROP_LONG pValueStruct,
+  LONG lOldValue,
+  LONG lMinimum,
+  LONG lMaximum,
+  LPBYTE *ppPropertyList,
+  LPDWORD pcbPropertyListSize
+);
+
+DWORD WINAPI ResUtilGetQwordValue(
+  HKEY hkeyClusterKey,
+  LPCWSTR pszValueName,
+  PULONGLONG pqwOutValue,
+  ULONGLONG qwDefaultValue
+);
+
+DWORD WINAPI ResUtilSetQwordValue(
+  HKEY hkeyClusterKey,
+  LPCWSTR pszValueName,
+  ULONGLONG qwNewValue,
+  PULONGLONG pqwOutValue
+);
+
+typedef DWORD (WINAPI *PWORKER_START_ROUTINE)( 
+  PCLUS_WORKER pWorker,
+  LPVOID lpThreadParameter
+);
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/restartmanager.h b/mingw-w64-headers/include/restartmanager.h
new file mode 100644
index 0000000..67be89c
--- /dev/null
+++ b/mingw-w64-headers/include/restartmanager.h
@@ -0,0 +1,173 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_RESTARTMANAGER
+#define _INC_RESTARTMANAGER
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _RM_APP_STATUS {
+  RmStatusUnknown          = 0x0,
+  RmStatusRunning          = 0x1,
+  RmStatusStopped          = 0x2,
+  RmStatusStoppedOther     = 0x4,
+  RmStatusRestarted        = 0x8,
+  RmStatusErrorOnStop      = 0x10,
+  RmStatusErrorOnRestart   = 0x20,
+  RmStatusShutdownMasked   = 0x40,
+  RmStatusRestartMasked    = 0x80
+} RM_APP_STATUS;
+
+typedef enum _RM_APP_TYPE {
+  RmUnknownApp    = 0,
+  RmMainWindow    = 1,
+  RmOtherWindow   = 2,
+  RmService       = 3,
+  RmExplorer      = 4,
+  RmConsole       = 5,
+  RmCritical      = 1000
+} RM_APP_TYPE;
+
+typedef enum _RM_FILTER_ACTION {
+  RmInvalidFilterAction   = 0,
+  RmNoRestart             = 1,
+  RmNoShutdown            = 2
+} RM_FILTER_ACTION;
+
+typedef enum _RM_FILTER_TRIGGER {
+  RmFilterTriggerInvalid   = 0,
+  RmFilterTriggerFile      = 1,
+  RmFilterTriggerProcess   = 2,
+  RmFilterTriggerService   = 3
+} RM_FILTER_TRIGGER;
+
+typedef enum _RM_REBOOT_REASON {
+  RmRebootReasonNone               = 0x0,
+  RmRebootReasonPermissionDenied   = 0x1,
+  RmRebootReasonSessionMismatch    = 0x2,
+  RmRebootReasonCriticalProcess    = 0x4,
+  RmRebootReasonCriticalService    = 0x8,
+  RmRebootReasonDetectedSelf       = 0x10
+} RM_REBOOT_REASON;
+
+typedef enum _RM_SHUTDOWN_TYPE {
+  RmForceShutdown            = 0x1,
+  RmShutdownOnlyRegistered   = 0x10
+} RM_SHUTDOWN_TYPE;
+
+typedef struct _RM_UNIQUE_PROCESS {
+  DWORD    dwProcessId;
+  FILETIME ProcessStartTime;
+} RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
+
+typedef struct _RM_FILTER_INFO {
+  RM_FILTER_ACTION  FilterAction;
+  RM_FILTER_TRIGGER FilterTrigger;
+  DWORD             cbNextOffset;
+  LPWSTR            strFilename;
+  RM_UNIQUE_PROCESS Process;
+  LPWSTR            strServiceShortName;
+} RM_FILTER_INFO, *PRM_FILTER_INFO;
+
+typedef struct _RM_PROCESS_INFO {
+  RM_UNIQUE_PROCESS Process;
+  WCHAR             strAppName[CCH_RM_MAX_APP_NAME+1];
+  WCHAR             strServiceShortName[CCH_RM_MAX_SVC_NAME+1];
+  RM_APP_TYPE       ApplicationType;
+  ULONG             AppStatus;
+  DWORD             TSSessionId;
+  WINBOOL           bRestartable;
+} RM_PROCESS_INFO;
+
+typedef void ( *RM_WRITE_STATUS_CALLBACK )(
+  UINT nPercentComplete
+);
+
+DWORD WINAPI RmAddFilter(
+  DWORD dwSessionHandle,
+  LPCWSTR strFilename,
+  RM_UNIQUE_PROCESS *Application,
+  LPCWSTR strShortServiceName,
+  RM_FILTER_ACTION ActionType
+);
+
+DWORD WINAPI RmCancelCurrentTask(
+  DWORD dwSessionHandle
+);
+
+DWORD WINAPI RmEndSession(
+  DWORD dwSessionHandle
+);
+
+DWORD WINAPI RmGetFilterList(
+  DWORD dwSessionHandle,
+  PBYTE pbFilterBuf,
+  DWORD cbFilterBuf,
+  LPDWORD cbFilterBufNeeded
+);
+
+DWORD WINAPI RmGetList(
+  DWORD dwSessionHandle,
+  UINT *pnProcInfoNeeded,
+  UINT *pnProcInfo,
+  RM_PROCESS_INFO rgAffectedApps[ ],
+  LPDWORD lpdwRebootReasons
+);
+
+DWORD WINAPI RmJoinSession(
+  DWORD *pSessionHandle,
+  const WCHAR strSessionKey[ ]
+);
+
+DWORD WINAPI RmRegisterResources(
+  DWORD dwSessionHandle,
+  UINT nFiles,
+  LPCWSTR rgsFilenames[ ],
+  UINT nApplications,
+  RM_UNIQUE_PROCESS rgApplications[ ],
+  UINT nServices,
+  LPCWSTR rgsServiceNames[ ]
+);
+
+DWORD WINAPI RmRemoveFilter(
+  DWORD dwSessionHandle,
+  LPCWSTR strFilename,
+  RM_UNIQUE_PROCESS *Application,
+  LPCWSTR strShortServiceName
+);
+
+DWORD WINAPI RmRestart(
+  DWORD dwSessionHandle,
+  DWORD dwRestartFlags,
+  RM_WRITE_STATUS_CALLBACK fnStatus
+);
+
+#define RmForceShutdown 0x1
+#define RmShutdownOnlyRegistered 0x10
+
+DWORD WINAPI RmShutdown(
+  DWORD dwSessionHandle,
+  ULONG lActionFlags,
+  RM_WRITE_STATUS_CALLBACK fnStatus
+);
+
+DWORD WINAPI RmStartSession(
+  DWORD *pSessionHandle,
+  DWORD dwSessionFlags,
+  WCHAR strSessionKey[]
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
+#endif /*_INC_RESTARTMANAGER*/
+
diff --git a/mingw-w64-headers/include/rpcasync.h b/mingw-w64-headers/include/rpcasync.h
index 6f7b3cf..3aa968e 100644
--- a/mingw-w64-headers/include/rpcasync.h
+++ b/mingw-w64-headers/include/rpcasync.h
@@ -182,6 +182,147 @@
   RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE pAsync,unsigned long ExceptionCode);
   int RPC_ENTRY I_RpcExceptionFilter(unsigned long ExceptionCode);
 
+typedef union _RPC_ASYNC_NOTIFICATION_INFO {
+  __MINGW_EXTENSION struct {
+    PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+    HANDLE                      hThread;
+  } APC;
+  __MINGW_EXTENSION struct {
+    HANDLE       hIOPort;
+    DWORD        dwNumberOfBytesTransferred;
+    DWORD_PTR    dwCompletionKey;
+    LPOVERLAPPED lpOverlapped;
+  } IOC;
+  __MINGW_EXTENSION struct {
+    HWND hWnd;
+    UINT Msg;
+  } HWND;
+  HANDLE                      hEvent;
+  PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+} RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
+
+RPC_STATUS RPC_ENTRY RpcBindingBind(
+  PRPC_ASYNC_STATE pAsync,
+  RPC_BINDING_HANDLE Binding,
+  RPC_IF_HANDLE IfSpec
+);
+
+RPC_STATUS RPC_ENTRY RpcBindingUnbind(
+  RPC_BINDING_HANDLE Binding
+);
+
+typedef enum _RpcCallType {
+  rctInvalid,
+  rctNormal,
+  rctTraining,
+  rctGuaranteed 
+} RpcCallType;
+
+typedef enum _RpcLocalAddressFormat {
+  rlafInvalid,
+  rlafIPv4,
+  rlafIPv6 
+} RpcLocalAddressFormat;
+
+typedef enum _RPC_NOTIFICATIONS {
+  RpcNotificationCallNone           = 0,
+  RpcNotificationClientDisconnect   = 1,
+  RpcNotificationCallCancel         = 2 
+} RPC_NOTIFICATIONS;
+
+typedef enum _RpcCallClientLocality {
+  rcclInvalid,
+  rcclLocal,
+  rcclRemote,
+  rcclClientUnknownLocality 
+} RpcCallClientLocality;
+
+RPC_STATUS RPC_ENTRY RpcServerSubscribeForNotification(
+  RPC_BINDING_HANDLE Binding,
+  DWORD Notification,
+  RPC_NOTIFICATION_TYPES NotificationType,
+  RPC_ASYNC_NOTIFICATION_INFO *NotificationInfo
+);
+
+RPC_STATUS RPC_ENTRY RpcServerUnsubscribeForNotification(
+  RPC_BINDING_HANDLE Binding,
+  RPC_NOTIFICATIONS Notification,
+  unsigned long *NotificationsQueued
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_A {
+  unsigned int          Version;
+  void                  *Buffer;
+  unsigned long         BufferSize;
+  RpcLocalAddressFormat AddressFormat;
+} RPC_CALL_LOCAL_ADDRESS_V1_A, RPC_CALL_LOCAL_ADDRESS_A;
+
+typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_W {
+  unsigned int          Version;
+  void                  *Buffer;
+  unsigned long         BufferSize;
+  RpcLocalAddressFormat AddressFormat;
+} RPC_CALL_LOCAL_ADDRESS_V1_W, RPC_CALL_LOCAL_ADDRESS_W;
+
+#define RPC_CALL_LOCAL_ADDRESS_V1 __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_V1_)
+#define RPC_CALL_LOCAL_ADDRESS __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_)
+
+typedef struct tagRPC_CALL_ATTRIBUTES_V2A {
+  unsigned int           Version;
+  unsigned long          Flags;
+  unsigned long          ServerPrincipalNameBufferLength;
+  unsigned short         *ServerPrincipalName;
+  unsigned long          ClientPrincipalNameBufferLength;
+  unsigned short         *ClientPrincipalName;
+  unsigned long          AuthenticationLevel;
+  unsigned long          AuthenticationService;
+  WINBOOL                NullSession;
+  WINBOOL                KernelMode;
+  unsigned long          ProtocolSequence;
+  RpcCallClientLocality  IsClientLocal;
+  HANDLE                 ClientPID;
+  unsigned long          CallStatus;
+  RpcCallType            CallType;
+  RPC_CALL_LOCAL_ADDRESS_A *CallLocalAddress;
+  unsigned short         OpNum;
+  UUID                   InterfaceUuid;
+} RPC_CALL_ATTRIBUTES_V2_A, RPC_CALL_ATTRIBUTES_A;
+
+typedef struct tagRPC_CALL_ATTRIBUTES_V2W {
+  unsigned int           Version;
+  unsigned long          Flags;
+  unsigned long          ServerPrincipalNameBufferLength;
+  unsigned short         *ServerPrincipalName;
+  unsigned long          ClientPrincipalNameBufferLength;
+  unsigned short         *ClientPrincipalName;
+  unsigned long          AuthenticationLevel;
+  unsigned long          AuthenticationService;
+  WINBOOL                NullSession;
+  WINBOOL                KernelMode;
+  unsigned long          ProtocolSequence;
+  RpcCallClientLocality  IsClientLocal;
+  HANDLE                 ClientPID;
+  unsigned long          CallStatus;
+  RpcCallType            CallType;
+  RPC_CALL_LOCAL_ADDRESS_W *CallLocalAddress;
+  unsigned short         OpNum;
+  UUID                   InterfaceUuid;
+} RPC_CALL_ATTRIBUTES_V2_W, RPC_CALL_ATTRIBUTES_W;
+
+#define RPC_CALL_ATTRIBUTES_V2 __MINGW_NAME_AW(RPC_CALL_ATTRIBUTES_V2_)
+
+RPC_STATUS RPC_ENTRY RpcDiagnoseError(
+  RPC_BINDING_HANDLE BindingHandle,
+  RPC_IF_HANDLE IfSpec,
+  RPC_STATUS RpcStatus,
+  RPC_ERROR_ENUM_HANDLE *EnumHandle,
+  ULONG Options,
+  HWND ParentWindow
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/rpcdce.h b/mingw-w64-headers/include/rpcdce.h
index debc3c5..5e498a5 100644
--- a/mingw-w64-headers/include/rpcdce.h
+++ b/mingw-w64-headers/include/rpcdce.h
@@ -565,6 +565,61 @@
 #define RPC_IF_ALLOW_LOCAL_ONLY 0x0020
 #define RPC_IF_SEC_NO_CACHE 0x0040
 
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct _RPC_BINDING_HANDLE_OPTIONS_V1 {
+  unsigned long Version;
+  unsigned long Flags;
+  unsigned long ComTimeout;
+  unsigned long CallTimeout;
+} RPC_BINDING_HANDLE_OPTIONS_V1, RPC_BINDING_HANDLE_OPTIONS;
+
+typedef struct {
+  unsigned long           Version;
+  unsigned short          *ServerPrincName;
+  unsigned long           AuthnLevel;
+  unsigned long           AuthnSvc;
+  SEC_WINNT_AUTH_IDENTITY *AuthIdentity;
+  RPC_SECURITY_QOS        *SecurityQos;
+} RPC_BINDING_HANDLE_SECURITY_V1, RPC_BINDING_HANDLE_SECURITY;
+
+typedef struct _RPC_BINDING_HANDLE_TEMPLATE {
+  unsigned long  Version;
+  unsigned long  Flags;
+  unsigned long  ProtocolSequence;
+  unsigned short *NetworkAddress;
+  unsigned short *StringEndpoint;
+  __MINGW_EXTENSION union {
+    unsigned short *Reserved;
+  } u1;
+  UUID           ObjectUuid;
+} RPC_BINDING_HANDLE_TEMPLATE_V1, RPC_BINDING_HANDLE_TEMPLATE;
+
+#define RPC_CALL_STATUS_IN_PROGRESS 0x01
+#define RPC_CALL_STATUS_CANCELLED 0x02
+#define RPC_CALL_STATUS_DISCONNECTED 0x03
+
+RPC_STATUS RPC_ENTRY RpcBindingCreateA(
+  RPC_BINDING_HANDLE_TEMPLATE *Template,
+  RPC_BINDING_HANDLE_SECURITY *Security,
+  RPC_BINDING_HANDLE_OPTIONS *Options,
+  RPC_BINDING_HANDLE *Binding
+);
+
+RPC_STATUS RPC_ENTRY RpcBindingCreateW(
+  RPC_BINDING_HANDLE_TEMPLATE *Template,
+  RPC_BINDING_HANDLE_SECURITY *Security,
+  RPC_BINDING_HANDLE_OPTIONS *Options,
+  RPC_BINDING_HANDLE *Binding
+);
+#define RpcBindingCreate __MINGW_NAME_AW(RpcBindingCreate)
+
+RPC_STATUS RpcServerInqBindingHandle(
+    RPC_BINDING_HANDLE *Binding
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #include <rpcdcep.h>
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/scarderr.h b/mingw-w64-headers/include/scarderr.h
index 96c0227..7c799c7 100644
--- a/mingw-w64-headers/include/scarderr.h
+++ b/mingw-w64-headers/include/scarderr.h
@@ -74,4 +74,8 @@
 #define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006EL)
 #define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006FL)
 
+#define SCARD_W_CACHE_ITEM_NOT_FOUND ((DWORD)0x80100070L)
+#define SCARD_W_CACHE_ITEM_STALE ((DWORD)0x80100071L)
+
 #endif
+
diff --git a/mingw-w64-headers/include/schannel.h b/mingw-w64-headers/include/schannel.h
index 905cc30..3e2ee33 100644
--- a/mingw-w64-headers/include/schannel.h
+++ b/mingw-w64-headers/include/schannel.h
@@ -361,4 +361,10 @@
 typedef WINBOOL (WINAPI *SSL_CRACK_CERTIFICATE_FN)(PUCHAR pbCertificate,DWORD cbCertificate,WINBOOL VerifySignature,PX509Certificate *ppCertificate);
 typedef VOID (WINAPI *SSL_FREE_CERTIFICATE_FN)(PX509Certificate pCertificate);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _SecPkgContext_EapPrfInfo {
+  DWORD dwVersion;
+  DWORD cbPrfData;
+} SecPkgContext_EapPrfInfo, *PSecPkgContext_EapPrfInfo;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
 #endif
diff --git a/mingw-w64-headers/include/sdohlp.idl b/mingw-w64-headers/include/sdohlp.idl
new file mode 100644
index 0000000..de8fd2e
--- /dev/null
+++ b/mingw-w64-headers/include/sdohlp.idl
@@ -0,0 +1,1126 @@
+/* Automated generated idl file <sdohlplib>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Interface forward declarations.  */
+interface IIASItemInternal;
+
+/* Union record forward declarations.  */
+dispinterface IIASItem;
+dispinterface ISdo;
+dispinterface IIASEnum;
+dispinterface IIASCollection;
+dispinterface ISdoCollection;
+dispinterface IIASItemsCollection;
+dispinterface IIASAttributesCollection;
+dispinterface IIASConditionsCollection;
+dispinterface IIASAccounting;
+dispinterface IIASFileAccounting;
+dispinterface IIASSQLAccounting;
+dispinterface IIASService;
+dispinterface IIASClient;
+dispinterface IIASRemoteServer;
+dispinterface IIASRemediationServer;
+dispinterface IIASPolicy;
+dispinterface IIASServerGroup;
+dispinterface IIASSHVTemplate;
+dispinterface IIASSDOHelper;
+dispinterface ISdoDictionaryOld;
+dispinterface ISdoServiceControl;
+
+/* Union record forward declarations.  */
+coclass IASSDOHelper;
+
+/* Enumeration declarations.  */
+enum _ATTRIBUTEID
+{
+  ATTRIBUTE_UNDEFINED = (int) 201326592,
+  ATTRIBUTE_MIN_VALUE = (int) 201326593,
+  RADIUS_ATTRIBUTE_USER_NAME = (int) 201326593,
+  RADIUS_ATTRIBUTE_USER_PASSWORD = (int) 201326594,
+  RADIUS_ATTRIBUTE_CHAP_PASSWORD = (int) 201326595,
+  RADIUS_ATTRIBUTE_NAS_IP_ADDRESS = (int) 201326596,
+  RADIUS_ATTRIBUTE_NAS_PORT = (int) 201326597,
+  RADIUS_ATTRIBUTE_SERVICE_TYPE = (int) 201326598,
+  RADIUS_ATTRIBUTE_FRAMED_PROTOCOL = (int) 201326599,
+  RADIUS_ATTRIBUTE_FRAMED_IP_ADDRESS = (int) 201326600,
+  RADIUS_ATTRIBUTE_FRAMED_IP_NETMASK = (int) 201326601,
+  RADIUS_ATTRIBUTE_FRAMED_ROUTING = (int) 201326602,
+  RADIUS_ATTRIBUTE_FILTER_ID = (int) 201326603,
+  RADIUS_ATTRIBUTE_FRAMED_MTU = (int) 201326604,
+  RADIUS_ATTRIBUTE_FRAMED_COMPRESSION = (int) 201326605,
+  RADIUS_ATTRIBUTE_LOGIN_IP_HOST = (int) 201326606,
+  RADIUS_ATTRIBUTE_LOGIN_SERVICE = (int) 201326607,
+  RADIUS_ATTRIBUTE_LOGIN_TCP_PORT = (int) 201326608,
+  RADIUS_ATTRIBUTE_UNASSIGNED1 = (int) 201326609,
+  RADIUS_ATTRIBUTE_REPLY_MESSAGE = (int) 201326610,
+  RADIUS_ATTRIBUTE_CALLBACK_NUMBER = (int) 201326611,
+  RADIUS_ATTRIBUTE_CALLBACK_ID = (int) 201326612,
+  RADIUS_ATTRIBUTE_UNASSIGNED2 = (int) 201326613,
+  RADIUS_ATTRIBUTE_FRAMED_ROUTE = (int) 201326614,
+  RADIUS_ATTRIBUTE_FRAMED_IPX_NETWORK = (int) 201326615,
+  RADIUS_ATTRIBUTE_STATE = (int) 201326616,
+  RADIUS_ATTRIBUTE_CLASS = (int) 201326617,
+  RADIUS_ATTRIBUTE_VENDOR_SPECIFIC = (int) 201326618,
+  RADIUS_ATTRIBUTE_SESSION_TIMEOUT = (int) 201326619,
+  RADIUS_ATTRIBUTE_IDLE_TIMEOUT = (int) 201326620,
+  RADIUS_ATTRIBUTE_TERMINATION_ACTION = (int) 201326621,
+  RADIUS_ATTRIBUTE_CALLED_STATION_ID = (int) 201326622,
+  RADIUS_ATTRIBUTE_CALLING_STATION_ID = (int) 201326623,
+  RADIUS_ATTRIBUTE_NAS_IDENTIFIER = (int) 201326624,
+  RADIUS_ATTRIBUTE_PROXY_STATE = (int) 201326625,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_SERVICE = (int) 201326626,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_NODE = (int) 201326627,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_GROUP = (int) 201326628,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_LINK = (int) 201326629,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_NET = (int) 201326630,
+  RADIUS_ATTRIBUTE_FRAMED_APPLETALK_ZONE = (int) 201326631,
+  RADIUS_ATTRIBUTE_ACCT_STATUS_TYPE = (int) 201326632,
+  RADIUS_ATTRIBUTE_ACCT_DELAY_TIME = (int) 201326633,
+  RADIUS_ATTRIBUTE_ACCT_INPUT_OCTETS = (int) 201326634,
+  RADIUS_ATTRIBUTE_ACCT_OUTPUT_OCTETS = (int) 201326635,
+  RADIUS_ATTRIBUTE_ACCT_SESSION_ID = (int) 201326636,
+  RADIUS_ATTRIBUTE_ACCT_AUTHENTIC = (int) 201326637,
+  RADIUS_ATTRIBUTE_ACCT_SESSION_TIME = (int) 201326638,
+  RADIUS_ATTRIBUTE_ACCT_INPUT_PACKETS = (int) 201326639,
+  RADIUS_ATTRIBUTE_ACCT_OUTPUT_PACKETS = (int) 201326640,
+  RADIUS_ATTRIBUTE_ACCT_TERMINATE_CAUSE = (int) 201326641,
+  RADIUS_ATTRIBUTE_ACCT_MULTI_SSN_ID = (int) 201326642,
+  RADIUS_ATTRIBUTE_ACCT_LINK_COUNT = (int) 201326643,
+  RADIUS_ATTRIBUTE_CHAP_CHALLENGE = (int) 201326652,
+  RADIUS_ATTRIBUTE_NAS_PORT_TYPE = (int) 201326653,
+  RADIUS_ATTRIBUTE_PORT_LIMIT = (int) 201326654,
+  RADIUS_ATTRIBUTE_LOGIN_LAT_PORT = (int) 201326655,
+  RADIUS_ATTRIBUTE_TUNNEL_TYPE = (int) 201326656,
+  RADIUS_ATTRIBUTE_TUNNEL_MEDIUM_TYPE = (int) 201326657,
+  RADIUS_ATTRIBUTE_TUNNEL_CLIENT_ENDPT = (int) 201326658,
+  RADIUS_ATTRIBUTE_TUNNEL_SERVER_ENDPT = (int) 201326659,
+  RADIUS_ATTRIBUTE_ACCT_TUNNEL_CONN = (int) 201326660,
+  RADIUS_ATTRIBUTE_TUNNEL_PASSWORD = (int) 201326661,
+  RADIUS_ATTRIBUTE_ARAP_PASSWORD = (int) 201326662,
+  RADIUS_ATTRIBUTE_ARAP_FEATURES = (int) 201326663,
+  RADIUS_ATTRIBUTE_ARAP_ZONE_ACCESS = (int) 201326664,
+  RADIUS_ATTRIBUTE_ARAP_SECURITY = (int) 201326665,
+  RADIUS_ATTRIBUTE_ARAP_SECURITY_DATA = (int) 201326666,
+  RADIUS_ATTRIBUTE_PASSWORD_RETRY = (int) 201326667,
+  RADIUS_ATTRIBUTE_PROMPT = (int) 201326668,
+  RADIUS_ATTRIBUTE_CONNECT_INFO = (int) 201326669,
+  RADIUS_ATTRIBUTE_CONFIGURATION_TOKEN = (int) 201326670,
+  RADIUS_ATTRIBUTE_EAP_MESSAGE = (int) 201326671,
+  RADIUS_ATTRIBUTE_SIGNATURE = (int) 201326672,
+  RADIUS_ATTRIBUTE_TUNNEL_PVT_GROUP_ID = (int) 201326673,
+  RADIUS_ATTRIBUTE_TUNNEL_ASSIGNMENT_ID = (int) 201326674,
+  RADIUS_ATTRIBUTE_TUNNEL_PREFERENCE = (int) 201326675,
+  RADIUS_ATTRIBUTE_ARAP_CHALLENGE_RESPONSE = (int) 201326676,
+  RADIUS_ATTRIBUTE_ACCT_INTERIM_INTERVAL = (int) 201326677,
+  RADIUS_ATTRIBUTE_NAS_IPv6_ADDRESS = (int) 201326687,
+  RADIUS_ATTRIBUTE_FRAMED_INTERFACE_ID = (int) 201326688,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_PREFIX = (int) 201326689,
+  RADIUS_ATTRIBUTE_LOGIN_IPv6_HOST = (int) 201326690,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_ROUTE = (int) 201326691,
+  RADIUS_ATTRIBUTE_FRAMED_IPv6_POOL = (int) 201326692,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IP_ADDRESS = (int) 201330688,
+  IAS_ATTRIBUTE_SAVED_RADIUS_CALLBACK_NUMBER = (int) 201330689,
+  IAS_ATTRIBUTE_NP_CALLING_STATION_ID = (int) 201330690,
+  IAS_ATTRIBUTE_SAVED_NP_CALLING_STATION_ID = (int) 201330691,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_ROUTE = (int) 201330692,
+  IAS_ATTRIBUTE_IGNORE_USER_DIALIN_PROPERTIES = (int) 201330693,
+  IAS_ATTRIBUTE_NP_TIME_OF_DAY = (int) 201330694,
+  IAS_ATTRIBUTE_NP_CALLED_STATION_ID = (int) 201330695,
+  IAS_ATTRIBUTE_NP_ALLOWED_PORT_TYPES = (int) 201330696,
+  IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE = (int) 201330697,
+  IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE = (int) 201330698,
+  IAS_ATTRIBUTE_SHARED_SECRET = (int) 201330699,
+  IAS_ATTRIBUTE_CLIENT_IP_ADDRESS = (int) 201330700,
+  IAS_ATTRIBUTE_CLIENT_PACKET_HEADER = (int) 201330701,
+  IAS_ATTRIBUTE_TOKEN_GROUPS = (int) 201330702,
+  IAS_ATTRIBUTE_ALLOW_DIALIN = (int) 201330703,
+  IAS_ATTRIBUTE_REQUEST_ID = (int) 201330704,
+  IAS_ATTRIBUTE_MANIPULATION_TARGET = (int) 201330705,
+  IAS_ATTRIBUTE_MANIPULATION_RULE = (int) 201330706,
+  IAS_ATTRIBUTE_ORIGINAL_USER_NAME = (int) 201330707,
+  IAS_ATTRIBUTE_CLIENT_VENDOR_TYPE = (int) 201330708,
+  IAS_ATTRIBUTE_CLIENT_UDP_PORT = (int) 201330709,
+  MS_ATTRIBUTE_CHAP_CHALLENGE = (int) 201330710,
+  MS_ATTRIBUTE_CHAP_RESPONSE = (int) 201330711,
+  MS_ATTRIBUTE_CHAP_DOMAIN = (int) 201330712,
+  MS_ATTRIBUTE_CHAP_ERROR = (int) 201330713,
+  MS_ATTRIBUTE_CHAP_CPW1 = (int) 201330714,
+  MS_ATTRIBUTE_CHAP_CPW2 = (int) 201330715,
+  MS_ATTRIBUTE_CHAP_LM_ENC_PW = (int) 201330716,
+  MS_ATTRIBUTE_CHAP_NT_ENC_PW = (int) 201330717,
+  MS_ATTRIBUTE_CHAP_MPPE_KEYS = (int) 201330718,
+  IAS_ATTRIBUTE_AUTHENTICATION_TYPE = (int) 201330719,
+  IAS_ATTRIBUTE_CLIENT_NAME = (int) 201330720,
+  IAS_ATTRIBUTE_NT4_ACCOUNT_NAME = (int) 201330721,
+  IAS_ATTRIBUTE_FULLY_QUALIFIED_USER_NAME = (int) 201330722,
+  IAS_ATTRIBUTE_NTGROUPS = (int) 201330723,
+  IAS_ATTRIBUTE_EAP_FRIENDLY_NAME = (int) 201330724,
+  IAS_ATTRIBUTE_AUTH_PROVIDER_TYPE = (int) 201330725,
+  MS_ATTRIBUTE_ACCT_AUTH_TYPE = (int) 201330726,
+  MS_ATTRIBUTE_ACCT_EAP_TYPE = (int) 201330727,
+  IAS_ATTRIBUTE_PACKET_TYPE = (int) 201330728,
+  IAS_ATTRIBUTE_AUTH_PROVIDER_NAME = (int) 201330729,
+  IAS_ATTRIBUTE_ACCT_PROVIDER_TYPE = (int) 201330730,
+  IAS_ATTRIBUTE_ACCT_PROVIDER_NAME = (int) 201330731,
+  MS_ATTRIBUTE_MPPE_SEND_KEY = (int) 201330732,
+  MS_ATTRIBUTE_MPPE_RECV_KEY = (int) 201330733,
+  IAS_ATTRIBUTE_REASON_CODE = (int) 201330734,
+  MS_ATTRIBUTE_FILTER = (int) 201330735,
+  MS_ATTRIBUTE_CHAP2_RESPONSE = (int) 201330736,
+  MS_ATTRIBUTE_CHAP2_SUCCESS = (int) 201330737,
+  MS_ATTRIBUTE_CHAP2_CPW = (int) 201330738,
+  MS_ATTRIBUTE_RAS_VENDOR = (int) 201330739,
+  MS_ATTRIBUTE_RAS_VERSION = (int) 201330740,
+  IAS_ATTRIBUTE_NP_NAME = (int) 201330741,
+  MS_ATTRIBUTE_PRIMARY_DNS_SERVER = (int) 201330742,
+  MS_ATTRIBUTE_SECONDARY_DNS_SERVER = (int) 201330743,
+  MS_ATTRIBUTE_PRIMARY_NBNS_SERVER = (int) 201330744,
+  MS_ATTRIBUTE_SECONDARY_NBNS_SERVER = (int) 201330745,
+  IAS_ATTRIBUTE_PROXY_POLICY_NAME = (int) 201330746,
+  IAS_ATTRIBUTE_PROVIDER_TYPE = (int) 201330747,
+  IAS_ATTRIBUTE_PROVIDER_NAME = (int) 201330748,
+  IAS_ATTRIBUTE_REMOTE_SERVER_ADDRESS = (int) 201330749,
+  IAS_ATTRIBUTE_GENERATE_CLASS_ATTRIBUTE = (int) 201330750,
+  MS_ATTRIBUTE_RAS_CLIENT_NAME = (int) 201330751,
+  MS_ATTRIBUTE_RAS_CLIENT_VERSION = (int) 201330752,
+  IAS_ATTRIBUTE_ALLOWED_CERTIFICATE_EKU = (int) 201330753,
+  IAS_ATTRIBUTE_EXTENSION_STATE = (int) 201330754,
+  IAS_ATTRIBUTE_GENERATE_SESSION_TIMEOUT = (int) 201330755,
+  MS_ATTRIBUTE_SESSION_TIMEOUT = (int) 201330756,
+  MS_ATTRIBUTE_QUARANTINE_IPFILTER = (int) 201330757,
+  MS_ATTRIBUTE_QUARANTINE_SESSION_TIMEOUT = (int) 201330758,
+  MS_ATTRIBUTE_USER_SECURITY_IDENTITY = (int) 201330759,
+  IAS_ATTRIBUTE_REMOTE_RADIUS_TO_WINDOWS_USER_MAPPING = (int) 201330760,
+  IAS_ATTRIBUTE_PASSPORT_USER_MAPPING_UPN_SUFFIX = (int) 201330761,
+  IAS_ATTRIBUTE_TUNNEL_TAG = (int) 201330762,
+  IAS_ATTRIBUTE_NP_PEAPUPFRONT_ENABLED = (int) 201330763,
+  IAS_ATTRIBUTE_CERTIFICATE_EKU = (int) 201334689,
+  IAS_ATTRIBUTE_EAP_CONFIG = (int) 201334690,
+  MS_ATTRIBUTE_PEAP_EMBEDDED_EAP_TYPEID = (int) 201334691,
+  MS_ATTRIBUTE_PEAP_FAST_ROAMED_SESSION = (int) 201334692,
+  IAS_ATTRIBUTE_EAP_TYPEID = (int) 201334693,
+  MS_ATTRIBUTE_EAP_TLV = (int) 201334694,
+  IAS_ATTRIBUTE_REJECT_REASON_CODE = (int) 201334695,
+  IAS_ATTRIBUTE_PROXY_EAP_CONFIG = (int) 201334696,
+  IAS_ATTRIBUTE_EAP_SESSION = (int) 201334697,
+  IAS_ATTRIBUTE_IS_REPLAY = (int) 201334698,
+  IAS_ATTRIBUTE_CLEAR_TEXT_PASSWORD = (int) 201334699,
+  MS_ATTRIBUTE_IDENTITY_TYPE = (int) 201334700,
+  MS_ATTRIBUTE_SERVICE_CLASS = (int) 201334701,
+  MS_ATTRIBUTE_QUARANTINE_USER_CLASS = (int) 201334702,
+  MS_ATTRIBUTE_QUARANTINE_STATE = (int) 201334703,
+  IAS_ATTRIBUTE_OVERRIDE_RAP_AUTH = (int) 201334704,
+  IAS_ATTRIBUTE_PEAP_CHANNEL_UP = (int) 201334705,
+  IAS_ATTRIBUTE_NAME_MAPPED = (int) 201334706,
+  IAS_ATTRIBUTE_POLICY_ENFORCED = (int) 201334707,
+  IAS_ATTRIBUTE_MACHINE_NTGROUPS = (int) 201334708,
+  IAS_ATTRIBUTE_USER_NTGROUPS = (int) 201334709,
+  IAS_ATTRIBUTE_MACHINE_TOKEN_GROUPS = (int) 201334710,
+  IAS_ATTRIBUTE_USER_TOKEN_GROUPS = (int) 201334711,
+  MS_ATTRIBUTE_QUARANTINE_GRACE_TIME = (int) 201334712,
+  IAS_ATTRIBUTE_QUARANTINE_URL = (int) 201334713,
+  IAS_ATTRIBUTE_QUARANTINE_FIXUP_SERVERS = (int) 201334714,
+  MS_ATTRIBUTE_NOT_QUARANTINE_CAPABLE = (int) 201334715,
+  IAS_ATTRIBUTE_QUARANTINE_SYSTEM_HEALTH_RESULT = (int) 201334716,
+  IAS_ATTRIBUTE_QUARANTINE_SYSTEM_HEALTH_VALIDATORS = (int) 201334717,
+  IAS_ATTRIBUTE_MACHINE_NAME = (int) 201334718,
+  IAS_ATTRIBUTE_NT4_MACHINE_NAME = (int) 201334719,
+  IAS_ATTRIBUTE_QUARANTINE_SESSION_HANDLE = (int) 201334720,
+  IAS_ATTRIBUTE_FULLY_QUALIFIED_MACHINE_NAME = (int) 201334721,
+  IAS_ATTRIBUTE_QUARANTINE_FIXUP_SERVERS_CONFIGURATION = (int) 201334722,
+  IAS_ATTRIBUTE_CLIENT_QUARANTINE_COMPATIBLE = (int) 201334723,
+  MS_ATTRIBUTE_NETWORK_ACCESS_SERVER_TYPE = (int) 201334724,
+  IAS_ATTRIBUTE_QUARANTINE_SESSION_ID = (int) 201334725,
+  MS_ATTRIBUTE_AFW_QUARANTINE_ZONE = (int) 201334726,
+  MS_ATTRIBUTE_AFW_PROTECTION_LEVEL = (int) 201334727,
+  IAS_ATTRIBUTE_QUARANTINE_UPDATE_NON_COMPLIANT = (int) 201334728,
+  IAS_ATTRIBUTE_REQUEST_START_TIME = (int) 201334729,
+  MS_ATTRIBUTE_MACHINE_NAME = (int) 201334730,
+  IAS_ATTRIBUTE_CLIENT_IPv6_ADDRESS = (int) 201334731,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_INTERFACE_ID = (int) 201334732,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IPv6_PREFIX = (int) 201334733,
+  IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IPv6_ROUTE = (int) 201334734,
+  MS_ATTRIBUTE_QUARANTINE_GRACE_TIME_CONFIGURATION = (int) 201334735,
+  MS_ATTRIBUTE_IPv6_FILTER = (int) 201334736,
+  MS_ATTRIBUTE_IPV4_REMEDIATION_SERVERS = (int) 201334737,
+  MS_ATTRIBUTE_IPV6_REMEDIATION_SERVERS = (int) 201334738,
+  IAS_ATTRIBUTE_PROXY_RETRY_COUNT = (int) 201334739,
+  IAS_ATTRIBUTE_MACHINE_INVENTORY = (int) 201334740,
+  IAS_ATTRIBUTE_ABSOLUTE_TIME = (int) 201334741,
+  MS_ATTRIBUTE_QUARANTINE_SOH = (int) 201334742,
+  IAS_ATTRIBUTE_EAP_TYPES_CONFIGURED_IN_PROXYPOLICY = (int) 201334743,
+  MS_ATTRIBUTE_HCAP_LOCATION_GROUP_NAME = (int) 201334744,
+  MS_ATTRIBUTE_EXTENDED_QUARANTINE_STATE = (int) 201334745,
+  IAS_ATTRIBUTE_SOH_CARRIER_EAPTLV = (int) 201334746,
+  MS_ATTRIBUTE_HCAP_USER_GROUPS = (int) 201334747,
+  IAS_ATTRIBUTE_SAVED_MACHINE_HEALTHCHECK_ONLY = (int) 201334748,
+  IAS_ATTRIBUTE_POLICY_EVALUATED_SHV = (int) 201334749,
+  MS_ATTRIBUTE_RAS_CORRELATION_ID = (int) 201334750,
+  MS_ATTRIBUTE_HCAP_USER_NAME = (int) 201334751,
+  IAS_ATTRIBUTE_NT4_HCAP_ACCOUNT_NAME = (int) 201334752,
+  IAS_ATTRIBUTE_USER_TOKEN_SID = (int) 201334753,
+  IAS_ATTRIBUTE_MACHINE_TOKEN_SID = (int) 201334754,
+  IAS_ATTRIBUTE_MACHINE_VALIDATED = (int) 201334755,
+  MS_ATTRIBUTE_USER_IPv4_ADDRESS = (int) 201334756,
+  MS_ATTRIBUTE_USER_IPv6_ADDRESS = (int) 201334757,
+  MS_ATTRIBUTE_TSG_DEVICE_REDIRECTION = (int) 201334758,
+  IAS_ATTRIBUTE_ACCEPT_REASON_CODE = (int) 201334759,
+  RAS_ATTRIBUTE_ENCRYPTION_TYPE = (int) -90,
+  RAS_ATTRIBUTE_ENCRYPTION_POLICY = (int) -89,
+  RAS_ATTRIBUTE_BAP_REQUIRED = (int) -88,
+  RAS_ATTRIBUTE_BAP_LINE_DOWN_TIME = (int) -87,
+  RAS_ATTRIBUTE_BAP_LINE_DOWN_LIMIT = (int) -86
+};
+enum _IASOSTYPE
+{
+  SYSTEM_TYPE_NT4_WORKSTATION = (int) 201326592,
+  SYSTEM_TYPE_NT5_WORKSTATION = (int) 201326593,
+  SYSTEM_TYPE_NT6_WORKSTATION = (int) 201326594,
+  SYSTEM_TYPE_NT4_SERVER = (int) 201326595,
+  SYSTEM_TYPE_NT5_SERVER = (int) 201326596,
+  SYSTEM_TYPE_NT6_SERVER = (int) 201326597
+};
+enum _ATTRIBUTERESTRICTIONS
+{
+  MULTIVALUED = (int) 201326593,
+  ALLOWEDINPROFILE = (int) 201326594,
+  ALLOWEDINCONDITION = (int) 201326596,
+  ALLOWEDINPROXYPROFILE = (int) 201326600,
+  ALLOWEDINPROXYCONDITION = (int) 201326608,
+  ALLOWEDINVPNDIALUP = (int) 201326624,
+  ALLOWEDIN8021X = (int) 201326656
+};
+enum _AUTHENTICATION_TYPE
+{
+  IAS_AUTH_INVALID = (int) 201326592,
+  IAS_AUTH_PAP = (int) 201326593,
+  IAS_AUTH_MD5CHAP = (int) 201326594,
+  IAS_AUTH_MSCHAP = (int) 201326595,
+  IAS_AUTH_MSCHAP2 = (int) 201326596,
+  IAS_AUTH_EAP = (int) 201326597,
+  IAS_AUTH_ARAP = (int) 201326598,
+  IAS_AUTH_NONE = (int) 201326599,
+  IAS_AUTH_CUSTOM = (int) 201326600,
+  IAS_AUTH_MSCHAP_CPW = (int) 201326601,
+  IAS_AUTH_MSCHAP2_CPW = (int) 201326602,
+  IAS_AUTH_PEAP = (int) 201326603
+};
+
+/* Type definitions.  */
+typedef enum _ATTRIBUTEID ATTRIBUTEID;
+typedef enum _IASOSTYPE IASOSTYPE;
+typedef enum _ATTRIBUTERESTRICTIONS ATTRIBUTERESTRICTIONS;
+typedef enum _AUTHENTICATION_TYPE AUTHENTICATION_TYPE;
+
+[
+  uuid(E9970F91-B6AA-11D9-B032-000D56C25C27),
+  version(1.0),
+  helpstring("IAS SDO Helper 1.0 Type Library")
+]
+library sdohlplib
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(E9970FA4-B6AA-11D9-B032-000D56C25C27),
+     cancreate
+   ]
+   coclass IASSDOHelper
+   {
+     dispinterface IIASSDOHelper;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(E9970F92-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASItem : IDispatch
+   {
+     [id(1610743808)]
+     HRESULT __stdcall GetProperty (
+       [in] UINT Id,
+       [out retval] VARIANT *pvarValue
+     );
+     HRESULT __stdcall PutProperty (
+       [in] UINT Id,
+       [in] VARIANT varValue
+     );
+     HRESULT __stdcall Apply (void);
+     HRESULT __stdcall Restore (void);
+     [propget]
+     HRESULT __stdcall SdoObject (
+       [out retval] dispinterface ISdo **ppSdo
+     );
+     [propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pbstrId
+     );
+     [id(1610743813), propput]
+     HRESULT __stdcall Name (
+       [in] BSTR argNo1
+     );
+     [id(1610743815), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *pbstrDesc
+     );
+     [id(1610743815), propput]
+     HRESULT __stdcall Description (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(56BC53DE-96DB-11D1-BF3F-000000000000),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdo : IDispatch
+   {
+     [id(1), hidden]
+     HRESULT __stdcall GetPropertyInfo (
+       [in] long Id,
+       [out retval] IUnknown **ppPropertyInfo
+     );
+     HRESULT __stdcall GetProperty (
+       [in] long Id,
+       [out retval] VARIANT *pValue
+     );
+     HRESULT __stdcall PutProperty (
+       [in] long Id,
+       [in] VARIANT *pValue
+     );
+     HRESULT __stdcall ResetProperty (
+       [in] long Id
+     );
+     HRESULT __stdcall Apply (void);
+     HRESULT __stdcall Restore (void);
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnumVARIANT
+     );
+   };
+   [
+     uuid(E9970F94-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASEnum : IDispatch
+   {
+     [id(1610743808)]
+     HRESULT __stdcall ResetEnumerator (void);
+     HRESULT __stdcall GetNextItem (
+       [out retval] dispinterface IIASItem **ppItem
+     );
+   };
+   [
+     uuid(E9970F95-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASCollection : IDispatch
+   {
+     [id(1610743808)]
+     HRESULT __stdcall RemoveItem (
+       [in] dispinterface IIASItem *pItem
+     );
+     HRESULT __stdcall Clear (void);
+     [propget]
+     HRESULT __stdcall SdoCollectionObject (
+       [out retval] dispinterface ISdoCollection **ppSdoCollection
+     );
+     [propget]
+     HRESULT __stdcall Enumerator (
+       [out retval] dispinterface IIASEnum **ppEnum
+     );
+     [propget]
+     HRESULT __stdcall Count (
+       [out retval] UINT *pdwCount
+     );
+   };
+   [
+     uuid(56BC53E2-96DB-11D1-BF3F-000000000000),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     HRESULT __stdcall Add (
+       [in] BSTR bstrName,
+       [in out] IDispatch **ppItem
+     );
+     HRESULT __stdcall Remove (
+       [in] IDispatch * pItem
+     );
+     HRESULT __stdcall RemoveAll (void);
+     HRESULT __stdcall Reload (void);
+     HRESULT __stdcall IsNameUnique (
+       [in] BSTR bstrName,
+       [out retval] WINBOOL *pBool
+     );
+     [id(0)]
+     HRESULT __stdcall Item (
+       [in] VARIANT *Name,
+       [out retval] IDispatch **pItem
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnumVARIANT
+     );
+   };
+   [
+     uuid(E9970F96-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASItemsCollection : IIASCollection
+   {
+     [id(1610809344)]
+     HRESULT __stdcall Add (
+       [in] BSTR bstrName,
+       [out] dispinterface IIASItem **ppItem
+     );
+     HRESULT __stdcall GetItem (
+       [in] BSTR bstrId,
+       [out retval] dispinterface IIASItem **ppItem
+     );
+     HRESULT __stdcall Remove (
+       [in] BSTR bstrId
+     );
+   };
+   [
+     uuid(E9970F97-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASAttributesCollection : IIASCollection
+   {
+     [id(1610809344)]
+     HRESULT __stdcall Add (
+       [in] ATTRIBUTEID Id,
+       [in] VARIANT value,
+       [out] dispinterface IIASItem **ppItem
+     );
+     HRESULT __stdcall GetAttributeValue (
+       [in] dispinterface IIASItem *pItem,
+       [out] ATTRIBUTEID *pId,
+       [out retval] VARIANT *pValue
+     );
+   };
+   [
+     uuid(E9970F98-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASConditionsCollection : IIASCollection
+   {
+     [id(1610809344)]
+     HRESULT __stdcall Add (
+       [in] ATTRIBUTEID Id,
+       [in] BSTR bstrCondition,
+       [out] dispinterface IIASItem **ppItem
+     );
+     HRESULT __stdcall GetConditionText (
+       [in] dispinterface IIASItem *pItem,
+       [out] ATTRIBUTEID *pId,
+       [out retval] BSTR *pbstrCondition
+     );
+     HRESULT __stdcall PutConditionText (
+       [in] dispinterface IIASItem *pItem,
+       [in] ATTRIBUTEID Id,
+       [in] BSTR bstrCondition
+     );
+   };
+   [
+     uuid(E9970F9D-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASAccounting : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall LogAcctPkts (
+       [out retval] long *pbLogAcctPkts
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall LogAcctPkts (
+       [in] long argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall LogAuthPkts (
+       [out retval] long *pbLogAuthPkts
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall LogAuthPkts (
+       [in] long argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall LogInterimPkts (
+       [out retval] long *pbLogInterimPkts
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall LogInterimPkts (
+       [in] long argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall LogAuthInterimPkts (
+       [out retval] long *pbLogAuthInterimPkts
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall LogAuthInterimPkts (
+       [in] long argNo1
+     );
+   };
+   [
+     uuid(E9970F9E-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASFileAccounting : IIASAccounting
+   {
+     [id(1610874880), propget]
+     HRESULT __stdcall NewLogFrequency (
+       [out retval] UINT *pNewLogFrequency
+     );
+     [id(1610874880), propput]
+     HRESULT __stdcall NewLogFrequency (
+       [in] UINT argNo1
+     );
+     [id(1610874882), propget]
+     HRESULT __stdcall NewLogSize (
+       [out retval] UINT *pNewLogSize
+     );
+     [id(1610874882), propput]
+     HRESULT __stdcall NewLogSize (
+       [in] UINT argNo1
+     );
+     [id(1610874884), propget]
+     HRESULT __stdcall LogFileDirectory (
+       [out retval] BSTR *pbstrLogFileDirectory
+     );
+     [id(1610874884), propput]
+     HRESULT __stdcall LogFileDirectory (
+       [in] BSTR argNo1
+     );
+     [id(1610874886), propget]
+     HRESULT __stdcall LogFormat (
+       [out retval] UINT *pLogFormat
+     );
+     [id(1610874886), propput]
+     HRESULT __stdcall LogFormat (
+       [in] UINT argNo1
+     );
+     [id(1610874888), propget]
+     HRESULT __stdcall DeleteIfFull (
+       [out retval] long *pbDeleteIfFull
+     );
+     [id(1610874888), propput]
+     HRESULT __stdcall DeleteIfFull (
+       [in] long argNo1
+     );
+   };
+   [
+     uuid(E9970F9F-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASSQLAccounting : IIASAccounting
+   {
+     [id(1610874880), propget]
+     HRESULT __stdcall SQLMaxSessions (
+       [out retval] UINT *pSQLMaxSessions
+     );
+     [id(1610874880), propput]
+     HRESULT __stdcall SQLMaxSessions (
+       [in] UINT argNo1
+     );
+   };
+   [
+     uuid(E9970F99-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASService : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall AuthPorts (
+       [out retval] BSTR *pbstrPorts
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall AuthPorts (
+       [in] BSTR argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall AcctPorts (
+       [out retval] BSTR *pbstrPorts
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall AcctPorts (
+       [in] BSTR argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall LogSuccessfulRequests (
+       [out retval] long *pbLog
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall LogSuccessfulRequests (
+       [in] long argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall LogRejectedRequests (
+       [out retval] long *pbLog
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall LogRejectedRequests (
+       [in] long argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall FileAccountingLogs (
+       [out retval] dispinterface IIASFileAccounting **ppFileLogs
+     );
+     [propget]
+     HRESULT __stdcall SQLAccountingLogs (
+       [out retval] dispinterface IIASSQLAccounting **ppSQLLogs
+     );
+     [propget]
+     HRESULT __stdcall Clients (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall RemoteServers (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall RAPolicies (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall CRPolicies (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall SHVTemplates (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall RemediationServers (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall ClientVendorCollection (
+       [out retval] dispinterface IIASItemsCollection **ppVendorColl
+     );
+   };
+   [
+     uuid(E9970F9A-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASClient : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall RequireSignature (
+       [out retval] long *pbRequireSignature
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall RequireSignature (
+       [in] long argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall SharedSecret (
+       [out retval] BSTR *pbstrSharedSecret
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall SharedSecret (
+       [in] BSTR argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall Vendor (
+       [out retval] BSTR *pbstrVendor
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall Vendor (
+       [in] BSTR argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall Address (
+       [out retval] BSTR *pbstrAddress
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall Address (
+       [in] BSTR argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall QuarCompatible (
+       [out retval] long *pbQuarCompatible
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall QuarCompatible (
+       [in] long argNo1
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall Enabled (
+       [out retval] long *pbEnabled
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall Enabled (
+       [in] long argNo1
+     );
+   };
+   [
+     uuid(E9970F9B-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASRemoteServer : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall AuthPort (
+       [out retval] UINT *pAuthPort
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall AuthPort (
+       [in] UINT argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall AcctPort (
+       [out retval] UINT *pAcctPort
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall AcctPort (
+       [in] UINT argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall AuthSecret (
+       [out retval] BSTR *pbstrSecret
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall AuthSecret (
+       [in] BSTR argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall AcctSecret (
+       [out retval] BSTR *pbstrSecret
+     );
+     [id(1610809350), propput]
+     HRESULT __stdcall AcctSecret (
+       [in] BSTR argNo1
+     );
+     [id(1610809352), propget]
+     HRESULT __stdcall Address (
+       [out retval] BSTR *pbstrAddress
+     );
+     [id(1610809352), propput]
+     HRESULT __stdcall Address (
+       [in] BSTR argNo1
+     );
+     [id(1610809354), propget]
+     HRESULT __stdcall ForwardAccounting (
+       [out retval] long *pbForward
+     );
+     [id(1610809354), propput]
+     HRESULT __stdcall ForwardAccounting (
+       [in] long argNo1
+     );
+     [id(1610809356), propget]
+     HRESULT __stdcall Priority (
+       [out retval] UINT *pPriority
+     );
+     [id(1610809356), propput]
+     HRESULT __stdcall Priority (
+       [in] UINT argNo1
+     );
+     [id(1610809358), propget]
+     HRESULT __stdcall Weight (
+       [out retval] UINT *pWeight
+     );
+     [id(1610809358), propput]
+     HRESULT __stdcall Weight (
+       [in] UINT argNo1
+     );
+     [id(1610809360), propget]
+     HRESULT __stdcall Timeout (
+       [out retval] UINT *pTimeout
+     );
+     [id(1610809360), propput]
+     HRESULT __stdcall Timeout (
+       [in] UINT argNo1
+     );
+     [id(1610809362), propget]
+     HRESULT __stdcall MaxLostPkts (
+       [out retval] UINT *pMaxLostPkts
+     );
+     [id(1610809362), propput]
+     HRESULT __stdcall MaxLostPkts (
+       [in] UINT argNo1
+     );
+     [id(1610809364), propget]
+     HRESULT __stdcall BlackoutInterval (
+       [out retval] UINT *pBlackoutIntervalpriority
+     );
+     [id(1610809364), propput]
+     HRESULT __stdcall BlackoutInterval (
+       [in] UINT argNo1
+     );
+     [id(1610809366), propget]
+     HRESULT __stdcall SendSignature (
+       [out retval] long *pbSendSignature
+     );
+     [id(1610809366), propput]
+     HRESULT __stdcall SendSignature (
+       [in] long argNo1
+     );
+   };
+   [
+     uuid(E9970F9C-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASRemediationServer : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall Address (
+       [out retval] BSTR *pbstrAddress
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall Address (
+       [in] BSTR argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall FriendlyName (
+       [out retval] BSTR *pbstrFriendlyName
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall FriendlyName (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(E9970FA0-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASPolicy : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall Sequence (
+       [out retval] UINT *pSequence
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall Sequence (
+       [in] UINT argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall Enabled (
+       [out retval] long *pbEnabled
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall Enabled (
+       [in] long argNo1
+     );
+     [id(1610809348), propget]
+     HRESULT __stdcall SourceTag (
+       [out retval] UINT *pdwSourceTag
+     );
+     [id(1610809348), propput]
+     HRESULT __stdcall SourceTag (
+       [in] UINT argNo1
+     );
+     [id(1610809350), propget]
+     HRESULT __stdcall ConditionsCollection (
+       [out retval] dispinterface IIASConditionsCollection **ppColl
+     );
+     [propget]
+     HRESULT __stdcall ProfileAttributesCollection (
+       [out retval] dispinterface IIASAttributesCollection **ppColl
+     );
+   };
+   [
+     uuid(E9970FA1-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASServerGroup : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall ServerCollection (
+       [out retval] dispinterface IIASItemsCollection **ppColl
+     );
+   };
+   [
+     uuid(E9970FA2-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASSHVTemplate : IIASItem
+   {
+     [id(1610809344), propget]
+     HRESULT __stdcall SHVCombinationType (
+       [out retval] UINT *pCombinationType
+     );
+     [id(1610809344), propput]
+     HRESULT __stdcall SHVCombinationType (
+       [in] UINT argNo1
+     );
+     [id(1610809346), propget]
+     HRESULT __stdcall SHVList (
+       [out retval] VARIANT *pvSHVList
+     );
+     [id(1610809346), propput]
+     HRESULT __stdcall SHVList (
+       [in] VARIANT argNo1
+     );
+   };
+   [
+     uuid(E9970FA3-B6AA-11D9-B032-000D56C25C27),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIASSDOHelper : IDispatch
+   {
+     [id(1610743808)]
+     HRESULT __stdcall Initialize (
+       [in] UINT accessMode,
+       [in] BSTR bstrSourceName,
+       [out retval] dispinterface IIASService **ppIASService
+     );
+     HRESULT __stdcall GetOSType (
+       [out retval] IASOSTYPE *eOSType
+     );
+     HRESULT __stdcall GetStandardRADIUSAttributesInfo (
+       [in] ATTRIBUTERESTRICTIONS restrictions,
+       [out] UINT *pNumAttribs,
+       [out] VARIANT *pvIds,
+       [out] VARIANT *pvTypes,
+       [out] VARIANT *pvNames,
+       [out] VARIANT *pvDescriptions
+     );
+     HRESULT __stdcall GetVendorSpecificAttributesInfo (
+       [in] ATTRIBUTERESTRICTIONS restrictions,
+       [out] UINT *pNumAttribs,
+       [out] VARIANT *pvIds,
+       [out] VARIANT *pvTypes,
+       [out] VARIANT *pvNames,
+       [out] VARIANT *pvVendorIds,
+       [out] VARIANT *pvDescriptions
+     );
+     HRESULT __stdcall GetProfileSpecificAttributesInfo (
+       [in] ATTRIBUTERESTRICTIONS restrictions,
+       [out] UINT *pNumAttribs,
+       [out] VARIANT *pvIds,
+       [out] VARIANT *pvTypes,
+       [out] VARIANT *pvNames,
+       [out] VARIANT *pvDescriptions
+     );
+     HRESULT __stdcall GetAttributeValueEnumerations (
+       [in] ATTRIBUTEID Id,
+       [out] VARIANT *pEnumNames,
+       [out] VARIANT *pEnumValues,
+       [out] VARIANT *pEnumFilters
+     );
+     HRESULT __stdcall ImportConfiguration (
+       [in] BSTR target,
+       [in] BSTR sourceFilePath,
+       [in] long bIgnoreRegImportFailure
+     );
+     HRESULT __stdcall ExportConfiguration (
+       [in] BSTR source,
+       [in] BSTR targetFilePath
+     );
+     [propget]
+     HRESULT __stdcall Dictionary (
+       [out retval] dispinterface ISdoDictionaryOld **ppDict
+     );
+     [propget]
+     HRESULT __stdcall SDOServiceControl (
+       [out retval] dispinterface ISdoServiceControl **ppService
+     );
+   };
+   [
+     uuid(D432E5F4-53D8-11D2-9A3A-00C04FB998AC),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoDictionaryOld : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall EnumAttributes (
+       [in out] VARIANT *Id,
+       [out retval] VARIANT *pValues
+     );
+     [hidden]
+     HRESULT __stdcall GetAttributeInfo (
+       [in] ATTRIBUTEID Id,
+       [in] VARIANT *pInfoIDs,
+       [out retval] VARIANT *pInfoValues
+     );
+     HRESULT __stdcall EnumAttributeValues (
+       [in] ATTRIBUTEID Id,
+       [out] VARIANT *pValueIds,
+       [out retval] VARIANT *pValuesDesc
+     );
+     HRESULT __stdcall CreateAttribute (
+       [in] ATTRIBUTEID Id,
+       [out retval] IDispatch **ppAttributeObject
+     );
+     HRESULT __stdcall GetAttributeID (
+       [in] BSTR bstrAttributeName,
+       [out retval] ATTRIBUTEID *pId
+     );
+   };
+   [
+     uuid(479F6E74-49A2-11D2-8ECA-00C04FC2F519),
+     dual,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISdoServiceControl : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall StartService (void);
+     HRESULT __stdcall StopService (void);
+     HRESULT __stdcall GetServiceStatus (
+       [out retval] long *status
+     );
+     HRESULT __stdcall ResetService (void);
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(E9970F93-B6AA-11D9-B032-000D56C25C27),
+  oleautomation
+]
+interface IIASItemInternal : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall InternalRemove (void);
+};
+
diff --git a/mingw-w64-headers/include/sdoias.h b/mingw-w64-headers/include/sdoias.h
index 661f44a..7fab774 100644
--- a/mingw-w64-headers/include/sdoias.h
+++ b/mingw-w64-headers/include/sdoias.h
@@ -691,6 +691,48 @@
 #endif
 #endif
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _IDENTITY_TYPE {
+  IAS_IDENTITY_NO_DEFAULT   = 1 
+} IDENTITY_TYPE;
+
+typedef enum _ATTRIBUTE_FILTER {
+  ATTRIBUTE_FILTER_NONE,
+  ATTRIBUTE_FILTER_VPN_DIALUP,
+  ATTRIBUTE_FILTER_IEEE_802_1x 
+} ATTRIBUTEFILTER;
+
+typedef enum REMEDIATIONSERVERGROUPPROPERTIES {
+  PROPERTY_REMEDIATIONSERVERGROUP_SERVERS_COLLECTION   = PROPERTY_SDO_START 
+} REMEDIATIONSERVERGROUPPROPERTIES;
+
+typedef enum _REMEDIATIONSERVERPROPERTIES {
+  PROPERTY_REMEDIATIONSERVER_ADDRESS         = PROPERTY_SDO_START,
+  PROPERTY_REMEDIATIONSERVER_FRIENDLY_NAME 
+} REMEDIATIONSERVERPROPERTIES;
+
+typedef enum _REMEDIATIONSERVERPROPERTIES {
+  PROPERTY_REMEDIATIONSERVERS_SERVERGROUPS   = PROPERTY_COMPONENT_START 
+} REMEDIATIONSERVERPROPERTIES;
+
+typedef enum _SHV_COMBINATION_TYPE {
+  SHV_COMBINATION_TYPE_ALL_PASS                   = 0,
+  SHV_COMBINATION_TYPE_ALL_FAIL,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_PASS,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_FAIL,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_INFECTED,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_TRANSITIONAL,
+  SHV_COMBINATION_TYPE_ONE_OR_MORE_UNKNOWN,
+  SHV_COMBINATION_TYPE_MAX 
+} SHV_COMBINATION_TYPE;
+
+typedef enum _SHVTEMPLATEPROPERTIES {
+  PROPERTY_SHV_COMBINATION_TYPE   = PROPERTY_SDO_START,
+  PROPERTY_SHV_LIST 
+} SHVTEMPLATEPROPERTIES;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/sfc.h b/mingw-w64-headers/include/sfc.h
index 9fcc629..477e87b 100644
--- a/mingw-w64-headers/include/sfc.h
+++ b/mingw-w64-headers/include/sfc.h
@@ -35,6 +35,14 @@
   WINBOOL WINAPI SfcIsFileProtected(HANDLE RpcHandle,LPCWSTR ProtFileName);
   WINBOOL WINAPI SfpVerifyFile(LPCSTR pszFileName,LPSTR pszError,DWORD dwErrSize);
 
+#if (_WIN32_WINNT >= 0x0600)
+WINBOOL WINAPI SfcIsKeyProtected(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  REGSAM samDesired
+);
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/slerror.h b/mingw-w64-headers/include/slerror.h
new file mode 100644
index 0000000..54607ba
--- /dev/null
+++ b/mingw-w64-headers/include/slerror.h
@@ -0,0 +1,18 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_SLERROR
+#define _INC_SLERROR
+#if (_WIN32_WINNT >= 0x0600)
+
+#define SL_E_LICENSE_FILE_NOT_INSTALLED 0xC004F011
+#define SL_E_RIGHT_NOT_GRANTED 0xC004F013
+#define SL_E_NOT_SUPPORTED 0xC004F016
+#define SL_E_DATATYPE_MISMATCHED 0xC004F01E
+#define SL_E_LUA_ACCESSDENIED 0xC004F025
+#define SL_E_DEPENDENT_PROPERTY_NOT_SET 0xC004F066
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_SLERROR*/
diff --git a/mingw-w64-headers/include/slpublic.h b/mingw-w64-headers/include/slpublic.h
new file mode 100644
index 0000000..d0c50ef
--- /dev/null
+++ b/mingw-w64-headers/include/slpublic.h
@@ -0,0 +1,113 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_SLPUBLIC
+#define _INC_SLPUBLIC
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPVOID SLID;
+
+typedef enum _SL_GENUINE_STATE {
+  SL_GEN_STATE_IS_GENUINE        = 0,
+  SL_GEN_STATE_INVALID_LICENSE   = 1,
+  SL_GEN_STATE_TAMPERED          = 2,
+  SL_GEN_STATE_LAST              = 3 
+} SL_GENUINE_STATE;
+
+typedef enum _tagSLDATATYPE {
+  SL_DATA_NONE       = REG_NONE,
+  SL_DATA_SZ         = REG_SZ,
+  SL_DATA_DWORD      = REG_DWORD,
+  SL_DATA_BINARY     = REG_BINARY,
+  SL_DATA_MULTI_SZ   = REG_MULTI_SZ,
+  SL_DATA_SUM        = 100 
+} SLDATATYPE;
+
+typedef struct _tagSL_NONGENUINE_UI_OPTIONS {
+  DWORD      cbSize;
+  const SLID *pComponentId;
+  HRESULT    hResultUI;
+} SL_NONGENUINE_UI_OPTIONS;
+
+HRESULT WINAPI SLAcquireGenuineTicket(
+  void **ppTicketBlob,
+  UINT *pcbTicketBlob,
+  PCWSTR pwszTemplateId,
+  PCWSTR pwszServerUrl,
+  PCWSTR pwszClientToken 
+);
+
+HRESULT WINAPI SLGetGenuineInformation(
+  const SLID *pAppId,
+  PCWSTR pwszValueName,
+  SLDATATYPE *peDataType,
+  UINT *pcbValue,
+  BYTE **ppbValue
+);
+
+HRESULT WINAPI SLGetInstalledSAMLicenseApplications(
+  UINT *pnReturnedAppIds,
+  SLID **ppReturnedAppIds
+);
+
+HRESULT WINAPI SLGetSAMLicense(
+  const SLID *pApplicationId,
+  UINT *pcbXmlLicenseData,
+  PBYTE *ppbXmlLicenseData
+);
+
+HRESULT WINAPI SLGetWindowsInformation(
+  PCWSTR pwszValueName,
+  SLDATATYPE *peDataType,
+  UINT *pcbValue,
+  PBYTE *ppbValue
+);
+
+HRESULT WINAPI SLGetWindowsInformationDWORD(
+  PCWSTR pwszValueName,
+  DWORD *pdwValue
+);
+
+HRESULT WINAPI SLInstallSAMLicense(
+  const SLID *pApplicationId,
+  UINT cbXmlLicenseData,
+  const BYTE *pbXmlLicenseData
+);
+
+HRESULT WINAPI SLIsGenuineLocal(
+  const SLID *pAppId,
+  SL_GENUINE_STATE *pGenuineState,
+  SL_NONGENUINE_UI_OPTIONS *pUIOptions
+);
+
+HRESULT WINAPI SLSetGenuineInformation(
+  const SLID *pAppId,
+  PCWSTR pwszValueName,
+  SLDATATYPE eDataType,
+  UINT cbValue,
+  const BYTE *pbValue
+);
+
+HRESULT WINAPI SLUninstallSAMLicense(
+  const SLID *pApplicationId
+);
+
+#if (_WIN32_WINNT >= 0x0601)
+HRESULT WINAPI SLIsGenuineLocalEx(
+  const SLID *pAppId,
+  const SLID pSkuId,
+  SL_GENUINE_STATE *pGenuineState
+);
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_SLPUBLIC*/
diff --git a/mingw-w64-headers/include/sspi.h b/mingw-w64-headers/include/sspi.h
index 676077d..027ac52 100644
--- a/mingw-w64-headers/include/sspi.h
+++ b/mingw-w64-headers/include/sspi.h
@@ -1009,14 +1009,6 @@
 #define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4
 #define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8
 
-  typedef struct _SECURITY_PACKAGE_OPTIONS {
-    unsigned long Size;
-    unsigned long Type;
-    unsigned long Flags;
-    unsigned long SignatureSize;
-    void *Signature;
-  } SECURITY_PACKAGE_OPTIONS,*PSECURITY_PACKAGE_OPTIONS;
-
 #define SECPKG_OPTIONS_TYPE_UNKNOWN 0
 #define SECPKG_OPTIONS_TYPE_LSA 1
 #define SECPKG_OPTIONS_TYPE_SSPI 2
@@ -1026,11 +1018,44 @@
 #define AddSecurityPackage __MINGW_NAME_AW(AddSecurityPackage)
 #define DeleteSecurityPackage __MINGW_NAME_AW(DeleteSecurityPackage)
 
-  SECURITY_STATUS WINAPI AddSecurityPackageA(SEC_CHAR *pszPackageName,SECURITY_PACKAGE_OPTIONS *Options);
-  SECURITY_STATUS WINAPI AddSecurityPackageW(SEC_WCHAR *pszPackageName,SECURITY_PACKAGE_OPTIONS *Options);
   SECURITY_STATUS WINAPI DeleteSecurityPackageA(SEC_CHAR *pszPackageName);
   SECURITY_STATUS WINAPI DeleteSecurityPackageW(SEC_WCHAR *pszPackageName);
 
+#if (_WIN32_WINNT >= 0x0600)
+  SECURITY_STATUS WINAPI ChangeAccountPassword(
+    SEC_WCHAR *pszPackageName,
+    SEC_WCHAR *pszDomainName,
+    SEC_WCHAR *pszAccountName,
+    SEC_WCHAR *pszOldPassword,
+    SEC_WCHAR *pszNewPassword,
+    BOOLEAN bImpersonating,
+    unsigned long dwReserved,
+    PSecBufferDesc pOutput
+  );
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#if (_WIN32_WINNT >= 0x0601)
+
+typedef struct _SECURITY_PACKAGE_OPTIONS {
+  unsigned long Size;
+  unsigned long Type;
+  unsigned long Flags;
+  unsigned long SignatureSize;
+  void *Signature;
+} SECURITY_PACKAGE_OPTIONS,*PSECURITY_PACKAGE_OPTIONS;
+
+SECURITY_STATUS WINAPI AddSecurityPackageA(
+  LPSTR pszPackageName,
+  PSECURITY_PACKAGE_OPTIONS pOptions
+);
+
+SECURITY_STATUS WINAPI AddSecurityPackageW(
+  LPWSTR pszPackageName,
+  PSECURITY_PACKAGE_OPTIONS pOptions
+);
+
+#define AddSecurityPackage __MINGW_NAME_AW(AddSecurityPackage)
+#endif /*(_WIN32_WINNT >= 0x0601)*/
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/stdole2.idl b/mingw-w64-headers/include/stdole2.idl
new file mode 100644
index 0000000..6b1d5bb
--- /dev/null
+++ b/mingw-w64-headers/include/stdole2.idl
@@ -0,0 +1,554 @@
+/* Automated generated idl file <stdole>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Interface forward declarations.  */
+interface IUnknown;
+interface IDispatch;
+interface IEnumVARIANT;
+interface IFont;
+interface IPicture;
+
+/* Structure forward declarations.  */
+struct GUID;
+struct DISPPARAMS;
+struct EXCEPINFO;
+
+/* Union record forward declarations.  */
+dispinterface Font;
+dispinterface Picture;
+dispinterface FontEvents;
+
+/* Union record forward declarations.  */
+coclass StdFont;
+coclass StdPicture;
+
+/* Enumeration declarations.  */
+[
+  uuid(6650430A-BE0F-101A-8BBB-00AA00300CAB)
+]
+enum OLE_TRISTATE
+{
+  Unchecked = (int) 201326592,
+  Checked = (int) 201326593,
+  Gray = (int) 201326594
+};
+[
+  uuid(E6C8FA08-BD9F-11D0-985E-00C04FC29993)
+]
+enum LoadPictureConstants
+{
+  Default = (int) 201326592,
+  Monochrome = (int) 201326593,
+  VgaColor = (int) 201326594,
+  Color = (int) 201326596
+};
+
+/* Structure/union declarations.  */
+[
+  hidden
+]
+struct GUID
+{
+  UINT Data1;
+  USHORT Data2;
+  USHORT Data3;
+  UCHAR Data4[8];
+};
+[
+  restricted
+]
+struct DISPPARAMS
+{
+  VARIANT *rgvarg;
+  long *rgdispidNamedArgs;
+  unsigned int cArgs;
+  unsigned int cNamedArgs;
+};
+[
+  restricted
+]
+struct EXCEPINFO
+{
+  USHORT wCode;
+  USHORT wReserved;
+  BSTR bstrSource;
+  BSTR bstrDescription;
+  BSTR bstrHelpFile;
+  UINT dwHelpContext;
+  void *pvReserved;
+  void *pfnDeferredFillIn;
+  SCODE scode;
+};
+
+/* Type definitions.  */
+[
+  uuid(66504301-BE0F-101A-8BBB-00AA00300CAB)
+]
+typedef UINT OLE_COLOR;
+[
+  uuid(66504302-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_XPOS_PIXELS;
+[
+  uuid(66504303-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_YPOS_PIXELS;
+[
+  uuid(66504304-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_XSIZE_PIXELS;
+[
+  uuid(66504305-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_YSIZE_PIXELS;
+[
+  uuid(66504306-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_XPOS_HIMETRIC;
+[
+  uuid(66504307-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_YPOS_HIMETRIC;
+[
+  uuid(66504308-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_XSIZE_HIMETRIC;
+[
+  uuid(66504309-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef long OLE_YSIZE_HIMETRIC;
+[
+  uuid(BF030640-9069-101B-AE2D-08002B2EC713),
+  hidden
+]
+typedef float OLE_XPOS_CONTAINER;
+[
+  uuid(BF030641-9069-101B-AE2D-08002B2EC713),
+  hidden
+]
+typedef float OLE_YPOS_CONTAINER;
+[
+  uuid(BF030642-9069-101B-AE2D-08002B2EC713),
+  hidden
+]
+typedef float OLE_XSIZE_CONTAINER;
+[
+  uuid(BF030643-9069-101B-AE2D-08002B2EC713),
+  hidden
+]
+typedef float OLE_YSIZE_CONTAINER;
+[
+  uuid(66504313-BE0F-101A-8BBB-00AA00300CAB)
+]
+typedef int OLE_HANDLE;
+[
+  uuid(6650430B-BE0F-101A-8BBB-00AA00300CAB)
+]
+typedef WINBOOL OLE_OPTEXCLUSIVE;
+[
+  uuid(BF030644-9069-101B-AE2D-08002B2EC713)
+]
+typedef WINBOOL OLE_CANCELBOOL;
+[
+  uuid(BF030645-9069-101B-AE2D-08002B2EC713),
+  hidden
+]
+typedef WINBOOL OLE_ENABLEDEFAULTBOOL;
+[
+  uuid(6650430D-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef BSTR FONTNAME;
+[
+  uuid(6650430E-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef CY FONTSIZE;
+[
+  uuid(6650430F-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef WINBOOL FONTBOLD;
+[
+  uuid(66504310-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef WINBOOL FONTITALIC;
+[
+  uuid(66504311-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef WINBOOL FONTUNDERSCORE;
+[
+  uuid(66504312-BE0F-101A-8BBB-00AA00300CAB),
+  hidden
+]
+typedef WINBOOL FONTSTRIKETHROUGH;
+typedef dispinterface Font IFontDisp;
+typedef dispinterface Picture IPictureDisp;
+typedef dispinterface FontEvents IFontEventsDisp;
+
+[
+  uuid(00020430-0000-0000-C000-000000000046),
+  version(2.0),
+  helpstring("OLE Automation")
+]
+library stdole
+{
+   /* CoClass declarations.  */
+   [
+     uuid(0BE35203-8F91-11CE-9DE3-00AA004BB851),
+     cancreate
+   ]
+   coclass StdFont
+   {
+     dispinterface Font;
+     dispinterface FontEvents;
+     interface IFont;
+   };
+   [
+     uuid(0BE35204-8F91-11CE-9DE3-00AA004BB851),
+     cancreate
+   ]
+   coclass StdPicture
+   {
+     dispinterface Picture;
+     interface IPicture;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(BEF6E003-A874-101A-8BBA-00AA00300CAB),
+     dispatchable
+   ]
+   dispinterface Font
+   {
+     [id(0)]
+     BSTR Name;
+     [id(2)]
+     CY Size;
+     WINBOOL Bold;
+     WINBOOL Italic;
+     WINBOOL Underline;
+     WINBOOL Strikethrough;
+     short Weight;
+     short Charset;
+   };
+   [
+     uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB),
+     dispatchable
+   ]
+   dispinterface Picture
+   {
+     [id(6)]
+     void __stdcall Render (
+       int hdc,
+       long x,
+       long y,
+       long cx,
+       long cy,
+       OLE_XPOS_HIMETRIC xSrc,
+       OLE_YPOS_HIMETRIC ySrc,
+       OLE_XSIZE_HIMETRIC cxSrc,
+       OLE_YSIZE_HIMETRIC cySrc,
+       void *prcWBounds
+     );
+     [id(0), readonly]
+     OLE_HANDLE Handle;
+     [id(2)]
+     OLE_HANDLE hPal;
+     [readonly]
+     short Type;
+     [readonly]
+     OLE_XSIZE_HIMETRIC Width;
+     [readonly]
+     OLE_YSIZE_HIMETRIC Height;
+   };
+   [
+     uuid(4EF6100A-AF88-11D0-9846-00C04FC29993),
+     helpstring("Event interface for the Font object"),
+     hidden,
+     dispatchable
+   ]
+   dispinterface FontEvents
+   {
+     [id(9)]
+     void __stdcall FontChanged (
+       [in] BSTR PropertyName
+     );
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(00000000-0000-0000-C000-000000000046),
+  hidden
+]
+interface IUnknown
+{
+  [id(1610612736), restricted]
+  HRESULT __stdcall QueryInterface (
+    [in] struct GUID *riid,
+    [out] void *ppvObj
+  );
+  [restricted]
+  UINT __stdcall AddRef (void);
+  [restricted]
+  UINT __stdcall Release (void);
+};
+[
+  uuid(00020400-0000-0000-C000-000000000046),
+  restricted
+]
+interface IDispatch : IUnknown
+{
+  [id(1610678272), restricted]
+  HRESULT __stdcall GetTypeInfoCount (
+    [out] unsigned int *pctinfo
+  );
+  [restricted]
+  HRESULT __stdcall GetTypeInfo (
+    [in] unsigned int itinfo,
+    [in] UINT lcid,
+    [out] void *pptinfo
+  );
+  [restricted]
+  HRESULT __stdcall GetIDsOfNames (
+    [in] struct GUID *riid,
+    [in] CHAR *rgszNames,
+    [in] unsigned int cNames,
+    [in] UINT lcid,
+    [out] long *rgdispid
+  );
+  [restricted]
+  HRESULT __stdcall Invoke (
+    [in] long dispidMember,
+    [in] struct GUID *riid,
+    [in] UINT lcid,
+    [in] USHORT wFlags,
+    [in] struct DISPPARAMS *pdispparams,
+    [out] VARIANT *pvarResult,
+    [out] struct EXCEPINFO *pexcepinfo,
+    [out] unsigned int *puArgErr
+  );
+};
+[
+  uuid(00020404-0000-0000-C000-000000000046),
+  hidden
+]
+interface IEnumVARIANT : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall Next (
+    [in] UINT celt,
+    [in] VARIANT *rgvar,
+    [out] UINT *pceltFetched
+  );
+  HRESULT __stdcall Skip (
+    [in] UINT celt
+  );
+  HRESULT __stdcall Reset (void);
+  HRESULT __stdcall Clone (
+    [out] interface IEnumVARIANT **ppenum
+  );
+};
+[
+  uuid(BEF6E002-A874-101A-8BBA-00AA00300CAB),
+  helpstring("Font Object"),
+  hidden
+]
+interface IFont : IUnknown
+{
+  [id(1610678272), propget]
+  HRESULT __stdcall Name (
+    [out retval] BSTR *pname
+  );
+  [id(1610678272), propput]
+  HRESULT __stdcall Name (
+    [in] BSTR argNo1
+  );
+  [id(1610678274), propget]
+  HRESULT __stdcall Size (
+    [out retval] CY *psize
+  );
+  [id(1610678274), propput]
+  HRESULT __stdcall Size (
+    [in] CY argNo1
+  );
+  [id(1610678276), propget]
+  HRESULT __stdcall Bold (
+    [out retval] WINBOOL *pbold
+  );
+  [id(1610678276), propput]
+  HRESULT __stdcall Bold (
+    [in] WINBOOL argNo1
+  );
+  [id(1610678278), propget]
+  HRESULT __stdcall Italic (
+    [out retval] WINBOOL *pitalic
+  );
+  [id(1610678278), propput]
+  HRESULT __stdcall Italic (
+    [in] WINBOOL argNo1
+  );
+  [id(1610678280), propget]
+  HRESULT __stdcall Underline (
+    [out retval] WINBOOL *punderline
+  );
+  [id(1610678280), propput]
+  HRESULT __stdcall Underline (
+    [in] WINBOOL argNo1
+  );
+  [id(1610678282), propget]
+  HRESULT __stdcall Strikethrough (
+    [out retval] WINBOOL *pstrikethrough
+  );
+  [id(1610678282), propput]
+  HRESULT __stdcall Strikethrough (
+    [in] WINBOOL argNo1
+  );
+  [id(1610678284), propget]
+  HRESULT __stdcall Weight (
+    [out retval] short *pweight
+  );
+  [id(1610678284), propput]
+  HRESULT __stdcall Weight (
+    [in] short argNo1
+  );
+  [id(1610678286), propget]
+  HRESULT __stdcall Charset (
+    [out retval] short *pcharset
+  );
+  [id(1610678286), propput]
+  HRESULT __stdcall Charset (
+    [in] short argNo1
+  );
+  [id(1610678288), propget]
+  HRESULT __stdcall hFont (
+    [out retval] OLE_HANDLE *phfont
+  );
+  HRESULT __stdcall Clone (
+    [out] interface IFont **ppfont
+  );
+  HRESULT __stdcall IsEqual (
+    [in] interface IFont *pfontOther
+  );
+  HRESULT __stdcall SetRatio (
+    [in] long cyLogical,
+    [in] long cyHimetric
+  );
+  HRESULT __stdcall AddRefHfont (
+    [in] OLE_HANDLE hFont
+  );
+  HRESULT __stdcall ReleaseHfont (
+    [in] OLE_HANDLE hFont
+  );
+};
+[
+  uuid(7BF80980-BF32-101A-8BBB-00AA00300CAB),
+  helpstring("Picture Object"),
+  hidden
+]
+interface IPicture : IUnknown
+{
+  [id(1610678272), propget]
+  HRESULT __stdcall Handle (
+    [out retval] OLE_HANDLE *phandle
+  );
+  [propget]
+  HRESULT __stdcall hPal (
+    [out retval] OLE_HANDLE *phpal
+  );
+  [propget]
+  HRESULT __stdcall Type (
+    [out retval] short *ptype
+  );
+  [propget]
+  HRESULT __stdcall Width (
+    [out retval] OLE_XSIZE_HIMETRIC *pwidth
+  );
+  [propget]
+  HRESULT __stdcall Height (
+    [out retval] OLE_YSIZE_HIMETRIC *pheight
+  );
+  HRESULT __stdcall Render (
+    [in] int hdc,
+    [in] long x,
+    [in] long y,
+    [in] long cx,
+    [in] long cy,
+    [in] OLE_XPOS_HIMETRIC xSrc,
+    [in] OLE_YPOS_HIMETRIC ySrc,
+    [in] OLE_XSIZE_HIMETRIC cxSrc,
+    [in] OLE_YSIZE_HIMETRIC cySrc,
+    [in] void *prcWBounds
+  );
+  [id(1610678273), propput]
+  HRESULT __stdcall hPal (
+    [in] OLE_HANDLE argNo1
+  );
+  [id(1610678279), propget]
+  HRESULT __stdcall CurDC (
+    [out retval] int *phdcOut
+  );
+  HRESULT __stdcall SelectPicture (
+    [in] int hdcIn,
+    [out] int *phdcOut,
+    [out] OLE_HANDLE *phbmpOut
+  );
+  [propget]
+  HRESULT __stdcall KeepOriginalFormat (
+    [out retval] WINBOOL *pfkeep
+  );
+  [id(1610678281), propput]
+  HRESULT __stdcall KeepOriginalFormat (
+    [in] WINBOOL argNo1
+  );
+  [id(1610678283)]
+  HRESULT __stdcall PictureChanged (void);
+  HRESULT __stdcall SaveAsFile (
+    [in] void *pstm,
+    [in] WINBOOL fSaveMemCopy,
+    [out] long *pcbSize
+  );
+  [propget]
+  HRESULT __stdcall Attributes (
+    [out retval] long *pdwAttr
+  );
+  HRESULT __stdcall SetHdc (
+    [in] OLE_HANDLE hdc
+  );
+};
+
+/* Module declarations.  */
+[
+  uuid(91209AC0-60F6-11CF-9C5D-00AA00C1489E),
+  helpstring("Functions for Standard OLE Objects"),
+  dllname("oleaut32.dll")
+]
+module StdFunctions
+{
+  [id(1610612736)]
+  static HRESULT __stdcall LoadPicture (
+    [in opt] VARIANT filename,
+    [in opt] int widthDesired = (int) 201326592,
+    [in opt] int heightDesired = (int) 201326592,
+    [in opt] enum LoadPictureConstants flags = (int) 201326592,
+    [out retval] IPictureDisp **retval
+  );
+  static HRESULT __stdcall SavePicture (
+    [in] IPictureDisp *Picture,
+    [in] BSTR filename
+  );
+};
+
diff --git a/mingw-w64-headers/include/tabflicks.h b/mingw-w64-headers/include/tabflicks.h
new file mode 100644
index 0000000..3e11c3e
--- /dev/null
+++ b/mingw-w64-headers/include/tabflicks.h
@@ -0,0 +1,73 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TABFLICKS
+#define _INC_TABFLICKS
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum FLICKACTION_COMMANDCODE {
+  FLICKACTION_COMMANDCODE_NULL          = 0,
+  FLICKACTION_COMMANDCODE_SCROLL        = 1,
+  FLICKACTION_COMMANDCODE_APPCOMMAND    = 2,
+  FLICKACTION_COMMANDCODE_CUSTOMKEY     = 3,
+  FLICKACTION_COMMANDCODE_KEYMODIFIER   = 4 
+} FLICKACTION_COMMANDCODE;
+
+typedef enum FLICKDIRECTION {
+  FLICKDIRECTION_RIGHT       = 0,
+  FLICKDIRECTION_UPRIGHT     = 1,
+  FLICKDIRECTION_UP          = 2,
+  FLICKDIRECTION_UPLEFT      = 3,
+  FLICKDIRECTION_LEFT        = 4,
+  FLICKDIRECTION_DOWN        = 6,
+  FLICKDIRECTION_DOWNRIGHT   = 7,
+  FLICKDIRECTION_INVALID     = 8 
+} FLICKDIRECTION;
+
+typedef enum FLICKMODE {
+  FLICKMODE_OFF   = 0,
+  FLICKMODE_ON    = 1 
+} FLICKMODE;
+
+typedef enum KEYMODIFIER {
+  KEYMODIFIER_CONTROL   = 1,
+  KEYMODIFIER_MENU      = 2,
+  KEYMODIFIER_SHIFT     = 4,
+  KEYMODIFIER_WIN       = 8,
+  KEYMODIFIER_ALTGR     = 16,
+  KEYMODIFIER_EXT       = 32 
+} KEYMODIFIER;
+
+typedef enum SCROLLDIRECTION {
+  SCROLLDIRECTION_UP     = 0,
+  SCROLLDIRECTION_DOWN   = 1 
+} SCROLLDIRECTION;
+
+typedef struct FLICK_DATA {
+  FLICKACTION_COMMANDCODE iFlickActionCommandCode  :5;
+  FLICKDIRECTION          iFlickDirection  :3;
+  WINBOOL                 fControlModifier  :1;
+  WINBOOL                 fMenuModifier  :1;
+  WINBOOL                 fAltGRModifier  :1;
+  WINBOOL                 fWinModifier  :1;
+  WINBOOL                 fShiftModifier  :1;
+  INT                     iReserved  :2;
+  WINBOOL                 fOnInkingSurface  :1;
+  INT                     iActionArgument  :16;
+} FLICK_DATA;
+
+typedef struct FLICK_POINT {
+  INT x  :16;
+  INT y  :16;
+} FLICK_POINT;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif _INC_TABFLICKS
diff --git a/mingw-w64-headers/include/taskschd.h b/mingw-w64-headers/include/taskschd.h
new file mode 100644
index 0000000..22cecd1
--- /dev/null
+++ b/mingw-w64-headers/include/taskschd.h
@@ -0,0 +1,98 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TASKSCHD
+#define _INC_TASKSCHD
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _TASK_COMPATIBILITY {
+  TASK_COMPATIBILITY_AT   = 0,
+  TASK_COMPATIBILITY_V1   = 1,
+  TASK_COMPATIBILITY_V2   = 2 
+} TASK_COMPATIBILITY;
+
+typedef enum _TASK_CREATION {
+  TASK_VALIDATE_ONLY                  = 0x1,
+  TASK_CREATE                         = 0x2,
+  TASK_UPDATE                         = 0x4,
+  TASK_CREATE_OR_UPDATE               = 0x6,
+  TASK_DISABLE                        = 0x8,
+  TASK_DONT_ADD_PRINCIPAL_ACE         = 0x10,
+  TASK_IGNORE_REGISTRATION_TRIGGERS   = 0x20 
+} TASK_CREATION;
+
+typedef enum _TASK_ENUM_HIDDEN {
+  TASK_ENUM_HIDDEN   = 0x1 
+} TASK_ENUM_FLAGS;
+
+typedef enum _TASK_INSTANCES_POLICY {
+  TASK_INSTANCES_PARALLEL        = 0,
+  TASK_INSTANCES_QUEUE           = 1,
+  TASK_INSTANCES_IGNORE_NEW      = 2,
+  TASK_INSTANCES_STOP_EXISTING   = 3 
+} TASK_INSTANCES_POLICY;
+
+typedef enum _TASK_LOGON_TYPE {
+  TASK_LOGON_NONE                            = 0,
+  TASK_LOGON_PASSWORD                        = 1,
+  TASK_LOGON_S4U                             = 2,
+  TASK_LOGON_INTERACTIVE_TOKEN               = 3,
+  TASK_LOGON_GROUP                           = 4,
+  TASK_LOGON_SERVICE_ACCOUNT                 = 5,
+  TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD   = 6 
+} TASK_LOGON_TYPE;
+
+typedef enum _TASK_RUN_FLAGS {
+  TASK_RUN_NO_FLAGS              = 0x0,
+  TASK_RUN_AS_SELF               = 0x1,
+  TASK_RUN_IGNORE_CONSTRAINTS    = 0x2,
+  TASK_RUN_USE_SESSION_ID        = 0x4,
+  TASK_RUN_USER_SID              = 0x8 
+} TASK_RUN_FLAGS;
+
+typedef enum _TASK_RUNLEVEL_TYPE {
+  TASK_RUNLEVEL_LUA       = 0,
+  TASK_RUNLEVEL_HIGHEST   = 1 
+} TASK_RUNLEVEL_TYPE;
+
+typedef enum _TASK_SESSION_STATE_CHANGE_TYPE {
+  TASK_CONSOLE_CONNECT      = 1,
+  TASK_CONSOLE_DISCONNECT   = 2,
+  TASK_REMOTE_CONNECT       = 3,
+  TASK_REMOTE_DISCONNECT    = 4,
+  TASK_SESSION_LOCK         = 7,
+  TASK_SESSION_UNLOCK       = 8 
+} TASK_SESSION_STATE_CHANGE_TYPE;
+
+typedef enum _TASK_STATE {
+  TASK_STATE_UNKNOWN    = 0,
+  TASK_STATE_DISABLED   = 1,
+  TASK_STATE_QUEUED     = 2,
+  TASK_STATE_READY      = 3,
+  TASK_STATE_RUNNING    = 4 
+} TASK_STATE;
+
+typedef enum _TASK_TRIGGER_TYPE2 {
+  TASK_TRIGGER_EVENT                  = 0,
+  TASK_TRIGGER_TIME                   = 1,
+  TASK_TRIGGER_DAILY                  = 2,
+  TASK_TRIGGER_WEEKLY                 = 3,
+  TASK_TRIGGER_MONTHLY                = 4,
+  TASK_TRIGGER_MONTHLYDOW             = 5,
+  TASK_TRIGGER_IDLE                   = 6,
+  TASK_TRIGGER_REGISTRATION           = 7,
+  TASK_TRIGGER_BOOT                   = 8,
+  TASK_TRIGGER_LOGON                  = 9,
+  TASK_TRIGGER_SESSION_STATE_CHANGE   = 11 
+} TASK_TRIGGER_TYPE2;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_TASKSCHD*/
diff --git a/mingw-w64-headers/include/taskschd.idl b/mingw-w64-headers/include/taskschd.idl
new file mode 100644
index 0000000..b7da5b2
--- /dev/null
+++ b/mingw-w64-headers/include/taskschd.idl
@@ -0,0 +1,1787 @@
+/* Automated generated idl file <taskscheduler>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Interface forward declarations.  */
+interface ITaskHandler;
+interface ITaskHandlerStatus;
+interface ITaskVariables;
+
+/* Structure forward declarations.  */
+struct _SYSTEMTIME;
+
+/* Union record forward declarations.  */
+dispinterface ITaskFolderCollection;
+dispinterface ITaskFolder;
+dispinterface IRegisteredTask;
+dispinterface IRunningTask;
+dispinterface IRunningTaskCollection;
+dispinterface ITaskDefinition;
+dispinterface IRegistrationInfo;
+dispinterface ITriggerCollection;
+dispinterface ITrigger;
+dispinterface IRepetitionPattern;
+dispinterface ITaskSettings;
+dispinterface IIdleSettings;
+dispinterface INetworkSettings;
+dispinterface IPrincipal;
+dispinterface IActionCollection;
+dispinterface IAction;
+dispinterface IRegisteredTaskCollection;
+dispinterface ITaskService;
+dispinterface ITaskNamedValuePair;
+dispinterface ITaskNamedValueCollection;
+dispinterface IIdleTrigger;
+dispinterface ILogonTrigger;
+dispinterface ISessionStateChangeTrigger;
+dispinterface IEventTrigger;
+dispinterface ITimeTrigger;
+dispinterface IDailyTrigger;
+dispinterface IWeeklyTrigger;
+dispinterface IMonthlyTrigger;
+dispinterface IMonthlyDOWTrigger;
+dispinterface IBootTrigger;
+dispinterface IRegistrationTrigger;
+dispinterface IExecAction;
+dispinterface IShowMessageAction;
+dispinterface IComHandlerAction;
+dispinterface IEmailAction;
+
+/* Union record forward declarations.  */
+coclass TaskScheduler;
+coclass TaskHandlerPS;
+coclass TaskHandlerStatusPS;
+
+/* Enumeration declarations.  */
+enum _TASK_STATE
+{
+  TASK_STATE_UNKNOWN = (int) 201326592,
+  TASK_STATE_DISABLED = (int) 201326593,
+  TASK_STATE_QUEUED = (int) 201326594,
+  TASK_STATE_READY = (int) 201326595,
+  TASK_STATE_RUNNING = (int) 201326596
+};
+enum _TASK_TRIGGER_TYPE2
+{
+  TASK_TRIGGER_EVENT = (int) 201326592,
+  TASK_TRIGGER_TIME = (int) 201326593,
+  TASK_TRIGGER_DAILY = (int) 201326594,
+  TASK_TRIGGER_WEEKLY = (int) 201326595,
+  TASK_TRIGGER_MONTHLY = (int) 201326596,
+  TASK_TRIGGER_MONTHLYDOW = (int) 201326597,
+  TASK_TRIGGER_IDLE = (int) 201326598,
+  TASK_TRIGGER_REGISTRATION = (int) 201326599,
+  TASK_TRIGGER_BOOT = (int) 201326600,
+  TASK_TRIGGER_LOGON = (int) 201326601,
+  TASK_TRIGGER_SESSION_STATE_CHANGE = (int) 201326603
+};
+enum _TASK_INSTANCES_POLICY
+{
+  TASK_INSTANCES_PARALLEL = (int) 201326592,
+  TASK_INSTANCES_QUEUE = (int) 201326593,
+  TASK_INSTANCES_IGNORE_NEW = (int) 201326594,
+  TASK_INSTANCES_STOP_EXISTING = (int) 201326595
+};
+enum _TASK_COMPATIBILITY
+{
+  TASK_COMPATIBILITY_AT = (int) 201326592,
+  TASK_COMPATIBILITY_V1 = (int) 201326593,
+  TASK_COMPATIBILITY_V2 = (int) 201326594
+};
+enum _TASK_LOGON_TYPE
+{
+  TASK_LOGON_NONE = (int) 201326592,
+  TASK_LOGON_PASSWORD = (int) 201326593,
+  TASK_LOGON_S4U = (int) 201326594,
+  TASK_LOGON_INTERACTIVE_TOKEN = (int) 201326595,
+  TASK_LOGON_GROUP = (int) 201326596,
+  TASK_LOGON_SERVICE_ACCOUNT = (int) 201326597,
+  TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD = (int) 201326598
+};
+enum _TASK_RUNLEVEL
+{
+  TASK_RUNLEVEL_LUA = (int) 201326592,
+  TASK_RUNLEVEL_HIGHEST = (int) 201326593
+};
+enum _TASK_ACTION_TYPE
+{
+  TASK_ACTION_EXEC = (int) 201326592,
+  TASK_ACTION_COM_HANDLER = (int) 201326597,
+  TASK_ACTION_SEND_EMAIL = (int) 201326598,
+  TASK_ACTION_SHOW_MESSAGE = (int) 201326599
+};
+enum _TASK_SESSION_STATE_CHANGE_TYPE
+{
+  TASK_CONSOLE_CONNECT = (int) 201326593,
+  TASK_CONSOLE_DISCONNECT = (int) 201326594,
+  TASK_REMOTE_CONNECT = (int) 201326595,
+  TASK_REMOTE_DISCONNECT = (int) 201326596,
+  TASK_SESSION_LOCK = (int) 201326599,
+  TASK_SESSION_UNLOCK = (int) 201326600
+};
+enum _TASK_RUN_FLAGS
+{
+  TASK_RUN_NO_FLAGS = (int) 201326592,
+  TASK_RUN_AS_SELF = (int) 201326593,
+  TASK_RUN_IGNORE_CONSTRAINTS = (int) 201326594,
+  TASK_RUN_USE_SESSION_ID = (int) 201326596,
+  TASK_RUN_USER_SID = (int) 201326600
+};
+enum _TASK_ENUM_FLAGS
+{
+  TASK_ENUM_HIDDEN = (int) 201326593
+};
+enum _TASK_CREATION
+{
+  TASK_VALIDATE_ONLY = (int) 201326593,
+  TASK_CREATE = (int) 201326594,
+  TASK_UPDATE = (int) 201326596,
+  TASK_CREATE_OR_UPDATE = (int) 201326598,
+  TASK_DISABLE = (int) 201326600,
+  TASK_DONT_ADD_PRINCIPAL_ACE = (int) 201326608,
+  TASK_IGNORE_REGISTRATION_TRIGGERS = (int) 201326624
+};
+
+/* Structure/union declarations.  */
+struct _SYSTEMTIME
+{
+  USHORT wYear;
+  USHORT wMonth;
+  USHORT wDayOfWeek;
+  USHORT wDay;
+  USHORT wHour;
+  USHORT wMinute;
+  USHORT wSecond;
+  USHORT wMilliseconds;
+};
+
+[
+  uuid(E34CB9F1-C7F7-424C-BE29-027DCC09363A),
+  version(1.0)
+]
+library taskscheduler
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(0F87369F-A4E5-4CFC-BD3E-73E6154572DD),
+     cancreate
+   ]
+   coclass TaskScheduler
+   {
+     dispinterface ITaskService;
+   };
+   [
+     uuid(F2A69DB7-DA2C-4352-9066-86FEE6DACAC9),
+     cancreate
+   ]
+   coclass TaskHandlerPS
+   {
+     interface ITaskHandler;
+   };
+   [
+     uuid(9F15266D-D7BA-48F0-93C1-E6895F6FE5AC),
+     cancreate
+   ]
+   coclass TaskHandlerStatusPS
+   {
+     interface ITaskHandlerStatus;
+     interface ITaskVariables;
+   };
+
+   /* Dispatch interface declarations.  */
+   [
+     uuid(79184A66-8664-423F-97F1-637356A5D812),
+     helpstring("Container for ITaskFolders"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskFolderCollection : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT index,
+       [out retval] dispinterface ITaskFolder **ppFolder
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+   };
+   [
+     uuid(8CFAC062-A080-4C15-9A88-AA7C2AF80DFC),
+     helpstring("Container (directory) for tasks"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskFolder : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pName
+     );
+     [id(0), propget]
+     HRESULT __stdcall Path (
+       [out retval] BSTR *pPath
+     );
+     [id(3)]
+     HRESULT __stdcall GetFolder (
+       BSTR Path,
+       [out retval] dispinterface ITaskFolder **ppFolder
+     );
+     HRESULT __stdcall GetFolders (
+       long flags,
+       [out retval] dispinterface ITaskFolderCollection **ppFolders
+     );
+     HRESULT __stdcall CreateFolder (
+       [in] BSTR subFolderName,
+       [in opt] VARIANT sddl,
+       [out retval] dispinterface ITaskFolder **ppFolder
+     );
+     HRESULT __stdcall DeleteFolder (
+       BSTR subFolderName,
+       [in] long flags
+     );
+     HRESULT __stdcall GetTask (
+       BSTR Path,
+       [out retval] dispinterface IRegisteredTask **ppTask
+     );
+     HRESULT __stdcall GetTasks (
+       long flags,
+       [out retval] dispinterface IRegisteredTaskCollection **ppTasks
+     );
+     HRESULT __stdcall DeleteTask (
+       [in] BSTR Name,
+       [in] long flags
+     );
+     HRESULT __stdcall RegisterTask (
+       [in] BSTR Path,
+       [in] BSTR XmlText,
+       [in] long flags,
+       [in] VARIANT UserId,
+       [in] VARIANT password,
+       [in] enum _TASK_LOGON_TYPE LogonType,
+       [in opt] VARIANT sddl,
+       [out retval] dispinterface IRegisteredTask **ppTask
+     );
+     HRESULT __stdcall RegisterTaskDefinition (
+       [in] BSTR Path,
+       [in] dispinterface ITaskDefinition *pDefinition,
+       [in] long flags,
+       [in] VARIANT UserId,
+       [in] VARIANT password,
+       [in] enum _TASK_LOGON_TYPE LogonType,
+       [in opt] VARIANT sddl,
+       [out retval] dispinterface IRegisteredTask **ppTask
+     );
+     HRESULT __stdcall GetSecurityDescriptor (
+       long securityInformation,
+       [out retval] BSTR *pSddl
+     );
+     HRESULT __stdcall SetSecurityDescriptor (
+       [in] BSTR sddl,
+       [in] long flags
+     );
+   };
+   [
+     uuid(9C86F320-DEE3-4DD1-B972-A303F26B061E),
+     helpstring("A task that has been given to the Task Scheduler service"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRegisteredTask : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pName
+     );
+     [id(0), propget]
+     HRESULT __stdcall Path (
+       [out retval] BSTR *pPath
+     );
+     [id(2), propget]
+     HRESULT __stdcall State (
+       [out retval] enum _TASK_STATE *pState
+     );
+     [propget]
+     HRESULT __stdcall Enabled (
+       [out retval] WINBOOL *pEnabled
+     );
+     [id(3), propput]
+     HRESULT __stdcall Enabled (
+       WINBOOL argNo1
+     );
+     [id(5)]
+     HRESULT __stdcall Run (
+       [in] VARIANT params,
+       [out retval] dispinterface IRunningTask **ppRunningTask
+     );
+     HRESULT __stdcall RunEx (
+       [in] VARIANT params,
+       [in] long flags,
+       [in] long sessionID,
+       [in] BSTR user,
+       [out retval] dispinterface IRunningTask **ppRunningTask
+     );
+     HRESULT __stdcall GetInstances (
+       long flags,
+       [out retval] dispinterface IRunningTaskCollection **ppRunningTasks
+     );
+     [propget]
+     HRESULT __stdcall LastRunTime (
+       [out retval] DATE *pLastRunTime
+     );
+     [propget]
+     HRESULT __stdcall LastTaskResult (
+       [out retval] long *pLastTaskResult
+     );
+     [id(11), propget]
+     HRESULT __stdcall NumberOfMissedRuns (
+       [out retval] long *pNumberOfMissedRuns
+     );
+     [propget]
+     HRESULT __stdcall NextRunTime (
+       [out retval] DATE *pNextRunTime
+     );
+     [propget]
+     HRESULT __stdcall Definition (
+       [out retval] dispinterface ITaskDefinition **ppDefinition
+     );
+     [propget]
+     HRESULT __stdcall Xml (
+       [out retval] BSTR *pXml
+     );
+     HRESULT __stdcall GetSecurityDescriptor (
+       long securityInformation,
+       [out retval] BSTR *pSddl
+     );
+     HRESULT __stdcall SetSecurityDescriptor (
+       [in] BSTR sddl,
+       [in] long flags
+     );
+     HRESULT __stdcall Stop (
+       long flags
+     );
+     [id(1610743825), restricted, hidden]
+     HRESULT __stdcall GetRunTimes (
+       [in] struct _SYSTEMTIME *pstStart,
+       [in] struct _SYSTEMTIME *pstEnd,
+       [in out] UINT *pCount,
+       [out] struct _SYSTEMTIME **pRunTimes
+     );
+   };
+   [
+     uuid(653758FB-7B9A-4F1E-A471-BEEB8E9B834E),
+     helpstring("A Task that is currently executing"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRunningTask : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pName
+     );
+     [id(0), propget]
+     HRESULT __stdcall InstanceGuid (
+       [out retval] BSTR *pGuid
+     );
+     [id(2), propget]
+     HRESULT __stdcall Path (
+       [out retval] BSTR *pPath
+     );
+     [propget]
+     HRESULT __stdcall State (
+       [out retval] enum _TASK_STATE *pState
+     );
+     [propget]
+     HRESULT __stdcall CurrentAction (
+       [out retval] BSTR *pName
+     );
+     HRESULT __stdcall Stop (void);
+     HRESULT __stdcall Refresh (void);
+     [propget]
+     HRESULT __stdcall EnginePID (
+       [out retval] UINT *pPID
+     );
+   };
+   [
+     uuid(6A67614B-6828-4FEC-AA54-6D52E8F1F2DB),
+     helpstring("Group of tasks which are currently executing"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRunningTaskCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT index,
+       [out retval] dispinterface IRunningTask **ppRunningTask
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+   };
+   [
+     uuid(F5BC8FC5-536D-4F77-B852-FBC1356FDEB6),
+     helpstring("Describe task to be run by the Task Scheduler service"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskDefinition : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall RegistrationInfo (
+       [out retval] dispinterface IRegistrationInfo **ppRegistrationInfo
+     );
+     [id(1), propput]
+     HRESULT __stdcall RegistrationInfo (
+       [in] dispinterface IRegistrationInfo *argNo1
+     );
+     [propget]
+     HRESULT __stdcall Triggers (
+       [out retval] dispinterface ITriggerCollection **ppTriggers
+     );
+     [id(2), propput]
+     HRESULT __stdcall Triggers (
+       [in] dispinterface ITriggerCollection *argNo1
+     );
+     [id(7), propget]
+     HRESULT __stdcall Settings (
+       [out retval] dispinterface ITaskSettings **ppSettings
+     );
+     [id(7), propput]
+     HRESULT __stdcall Settings (
+       [in] dispinterface ITaskSettings *argNo1
+     );
+     [id(11), propget]
+     HRESULT __stdcall Data (
+       [out retval] BSTR *pData
+     );
+     [id(11), propput]
+     HRESULT __stdcall Data (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Principal (
+       [out retval] dispinterface IPrincipal **ppPrincipal
+     );
+     [id(12), propput]
+     HRESULT __stdcall Principal (
+       [in] dispinterface IPrincipal *argNo1
+     );
+     [propget]
+     HRESULT __stdcall Actions (
+       [out retval] dispinterface IActionCollection **ppActions
+     );
+     [id(13), propput]
+     HRESULT __stdcall Actions (
+       [in] dispinterface IActionCollection *argNo1
+     );
+     [propget]
+     HRESULT __stdcall XmlText (
+       [out retval] BSTR *pXml
+     );
+     [id(14), propput]
+     HRESULT __stdcall XmlText (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(416D8B73-CB41-4EA1-805C-9BE9A5AC4A74),
+     helpstring("Information about the task"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRegistrationInfo : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Description (
+       [out retval] BSTR *pDescription
+     );
+     [id(1), propput]
+     HRESULT __stdcall Description (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Author (
+       [out retval] BSTR *pAuthor
+     );
+     [id(2), propput]
+     HRESULT __stdcall Author (
+       [in] BSTR argNo1
+     );
+     [id(4), propget]
+     HRESULT __stdcall Version (
+       [out retval] BSTR *pVersion
+     );
+     [id(4), propput]
+     HRESULT __stdcall Version (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Date (
+       [out retval] BSTR *pDate
+     );
+     [id(5), propput]
+     HRESULT __stdcall Date (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Documentation (
+       [out retval] BSTR *pDocumentation
+     );
+     [id(6), propput]
+     HRESULT __stdcall Documentation (
+       [in] BSTR argNo1
+     );
+     [id(9), propget]
+     HRESULT __stdcall XmlText (
+       [out retval] BSTR *pText
+     );
+     [id(9), propput]
+     HRESULT __stdcall XmlText (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall URI (
+       [out retval] BSTR *pUri
+     );
+     [id(10), propput]
+     HRESULT __stdcall URI (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall SecurityDescriptor (
+       [out retval] VARIANT *pSddl
+     );
+     [id(11), propput]
+     HRESULT __stdcall SecurityDescriptor (
+       [in] VARIANT argNo1
+     );
+     [propget]
+     HRESULT __stdcall Source (
+       [out retval] BSTR *pSource
+     );
+     [id(12), propput]
+     HRESULT __stdcall Source (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(85DF5081-1B24-4F32-878A-D9D14DF4CB77),
+     helpstring("Container for ITriggers"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITriggerCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long index,
+       [out retval] dispinterface ITrigger **ppTrigger
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+     [id(2)]
+     HRESULT __stdcall Create (
+       [in] enum _TASK_TRIGGER_TYPE2 Type,
+       [out retval] dispinterface ITrigger **ppTrigger
+     );
+     [id(4)]
+     HRESULT __stdcall Remove (
+       [in] VARIANT index
+     );
+     HRESULT __stdcall Clear (void);
+   };
+   [
+     uuid(09941815-EA89-4B5B-89E0-2A773801FAC3),
+     helpstring("Specify when the task is started"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITrigger : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Type (
+       [out retval] enum _TASK_TRIGGER_TYPE2 *pType
+     );
+     [propget]
+     HRESULT __stdcall Id (
+       [out retval] BSTR *pId
+     );
+     [id(2), propput]
+     HRESULT __stdcall Id (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Repetition (
+       [out retval] dispinterface IRepetitionPattern **ppRepeat
+     );
+     [id(3), propput]
+     HRESULT __stdcall Repetition (
+       [in] dispinterface IRepetitionPattern *argNo1
+     );
+     [propget]
+     HRESULT __stdcall ExecutionTimeLimit (
+       [out retval] BSTR *pTimeLimit
+     );
+     [id(4), propput]
+     HRESULT __stdcall ExecutionTimeLimit (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall StartBoundary (
+       [out retval] BSTR *pStart
+     );
+     [id(5), propput]
+     HRESULT __stdcall StartBoundary (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall EndBoundary (
+       [out retval] BSTR *pEnd
+     );
+     [id(6), propput]
+     HRESULT __stdcall EndBoundary (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Enabled (
+       [out retval] WINBOOL *pEnabled
+     );
+     [id(7), propput]
+     HRESULT __stdcall Enabled (
+       [in] WINBOOL argNo1
+     );
+   };
+   [
+     uuid(7FB9ACF1-26BE-400E-85B5-294B9C75DFD6),
+     helpstring("Specify how often a task is to repeat"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRepetitionPattern : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Interval (
+       [out retval] BSTR *pInterval
+     );
+     [id(1), propput]
+     HRESULT __stdcall Interval (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Duration (
+       [out retval] BSTR *pDuration
+     );
+     [id(2), propput]
+     HRESULT __stdcall Duration (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall StopAtDurationEnd (
+       [out retval] WINBOOL *pStop
+     );
+     [id(3), propput]
+     HRESULT __stdcall StopAtDurationEnd (
+       [in] WINBOOL argNo1
+     );
+   };
+   [
+     uuid(8FD4711D-2D02-4C8C-87E3-EFF699DE127E),
+     helpstring("Control execution of the task"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskSettings : IDispatch
+   {
+     [id(3), propget]
+     HRESULT __stdcall AllowDemandStart (
+       [out retval] WINBOOL *pAllowDemandStart
+     );
+     [id(3), propput]
+     HRESULT __stdcall AllowDemandStart (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall RestartInterval (
+       [out retval] BSTR *pRestartInterval
+     );
+     [id(4), propput]
+     HRESULT __stdcall RestartInterval (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall RestartCount (
+       [out retval] int *pRestartCount
+     );
+     [id(5), propput]
+     HRESULT __stdcall RestartCount (
+       [in] int argNo1
+     );
+     [propget]
+     HRESULT __stdcall MultipleInstances (
+       [out retval] enum _TASK_INSTANCES_POLICY *pPolicy
+     );
+     [id(6), propput]
+     HRESULT __stdcall MultipleInstances (
+       [in] enum _TASK_INSTANCES_POLICY argNo1
+     );
+     [propget]
+     HRESULT __stdcall StopIfGoingOnBatteries (
+       [out retval] WINBOOL *pStopIfOnBatteries
+     );
+     [id(7), propput]
+     HRESULT __stdcall StopIfGoingOnBatteries (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall DisallowStartIfOnBatteries (
+       [out retval] WINBOOL *pDisallowStart
+     );
+     [id(8), propput]
+     HRESULT __stdcall DisallowStartIfOnBatteries (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall AllowHardTerminate (
+       [out retval] WINBOOL *pAllowHardTerminate
+     );
+     [id(9), propput]
+     HRESULT __stdcall AllowHardTerminate (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall StartWhenAvailable (
+       [out retval] WINBOOL *pStartWhenAvailable
+     );
+     [id(10), propput]
+     HRESULT __stdcall StartWhenAvailable (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall XmlText (
+       [out retval] BSTR *pText
+     );
+     [id(11), propput]
+     HRESULT __stdcall XmlText (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall RunOnlyIfNetworkAvailable (
+       [out retval] WINBOOL *pRunOnlyIfNetworkAvailable
+     );
+     [id(12), propput]
+     HRESULT __stdcall RunOnlyIfNetworkAvailable (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall ExecutionTimeLimit (
+       [out retval] BSTR *pExecutionTimeLimit
+     );
+     [id(13), propput]
+     HRESULT __stdcall ExecutionTimeLimit (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Enabled (
+       [out retval] WINBOOL *pEnabled
+     );
+     [id(14), propput]
+     HRESULT __stdcall Enabled (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall DeleteExpiredTaskAfter (
+       [out retval] BSTR *pExpirationDelay
+     );
+     [id(15), propput]
+     HRESULT __stdcall DeleteExpiredTaskAfter (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Priority (
+       [out retval] int *pPriority
+     );
+     [id(16), propput]
+     HRESULT __stdcall Priority (
+       [in] int argNo1
+     );
+     [propget]
+     HRESULT __stdcall Compatibility (
+       [out retval] enum _TASK_COMPATIBILITY *pCompatLevel
+     );
+     [id(17), propput]
+     HRESULT __stdcall Compatibility (
+       [in] enum _TASK_COMPATIBILITY argNo1
+     );
+     [propget]
+     HRESULT __stdcall Hidden (
+       [out retval] WINBOOL *pHidden
+     );
+     [id(18), propput]
+     HRESULT __stdcall Hidden (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall IdleSettings (
+       [out retval] dispinterface IIdleSettings **ppIdleSettings
+     );
+     [id(19), propput]
+     HRESULT __stdcall IdleSettings (
+       [in] dispinterface IIdleSettings *argNo1
+     );
+     [propget]
+     HRESULT __stdcall RunOnlyIfIdle (
+       [out retval] WINBOOL *pRunOnlyIfIdle
+     );
+     [id(20), propput]
+     HRESULT __stdcall RunOnlyIfIdle (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall WakeToRun (
+       [out retval] WINBOOL *pWake
+     );
+     [id(21), propput]
+     HRESULT __stdcall WakeToRun (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall NetworkSettings (
+       [out retval] dispinterface INetworkSettings **ppNetworkSettings
+     );
+     [id(22), propput]
+     HRESULT __stdcall NetworkSettings (
+       [in] dispinterface INetworkSettings *argNo1
+     );
+   };
+   [
+     uuid(84594461-0053-4342-A8FD-088FABF11F32),
+     helpstring("Parameters which specify idle state required for task to run"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIdleSettings : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall IdleDuration (
+       [out retval] BSTR *pDelay
+     );
+     [id(1), propput]
+     HRESULT __stdcall IdleDuration (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall WaitTimeout (
+       [out retval] BSTR *pTimeout
+     );
+     [id(2), propput]
+     HRESULT __stdcall WaitTimeout (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall StopOnIdleEnd (
+       [out retval] WINBOOL *pStop
+     );
+     [id(3), propput]
+     HRESULT __stdcall StopOnIdleEnd (
+       [in] WINBOOL argNo1
+     );
+     [propget]
+     HRESULT __stdcall RestartOnIdle (
+       [out retval] WINBOOL *pRestart
+     );
+     [id(4), propput]
+     HRESULT __stdcall RestartOnIdle (
+       [in] WINBOOL argNo1
+     );
+   };
+   [
+     uuid(9F7DEA84-C30B-4245-80B6-00E9F646F1B4),
+     helpstring("Specify network settings required to run task"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface INetworkSettings : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pName
+     );
+     [id(1), propput]
+     HRESULT __stdcall Name (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Id (
+       [out retval] BSTR *pId
+     );
+     [id(2), propput]
+     HRESULT __stdcall Id (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(D98D51E5-C9B4-496A-A9C1-18980261CF0F),
+     helpstring("User associated with task"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IPrincipal : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Id (
+       [out retval] BSTR *pId
+     );
+     [id(1), propput]
+     HRESULT __stdcall Id (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall DisplayName (
+       [out retval] BSTR *pName
+     );
+     [id(2), propput]
+     HRESULT __stdcall DisplayName (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall UserId (
+       [out retval] BSTR *pUser
+     );
+     [id(3), propput]
+     HRESULT __stdcall UserId (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall LogonType (
+       [out retval] enum _TASK_LOGON_TYPE *pLogon
+     );
+     [id(4), propput]
+     HRESULT __stdcall LogonType (
+       [in] enum _TASK_LOGON_TYPE argNo1
+     );
+     [propget]
+     HRESULT __stdcall GroupId (
+       [out retval] BSTR *pGroup
+     );
+     [id(5), propput]
+     HRESULT __stdcall GroupId (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall RunLevel (
+       [out retval] enum _TASK_RUNLEVEL *pRunLevel
+     );
+     [id(6), propput]
+     HRESULT __stdcall RunLevel (
+       [in] enum _TASK_RUNLEVEL argNo1
+     );
+   };
+   [
+     uuid(02820E19-7B98-4ED2-B2E8-FDCCCEFF619B),
+     helpstring("Container for IActions"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IActionCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long index,
+       [out retval] dispinterface IAction **ppAction
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+     [id(2), propget]
+     HRESULT __stdcall XmlText (
+       [out retval] BSTR *pText
+     );
+     [id(2), propput]
+     HRESULT __stdcall XmlText (
+       [in] BSTR argNo1
+     );
+     HRESULT __stdcall Create (
+       [in] enum _TASK_ACTION_TYPE Type,
+       [out retval] dispinterface IAction **ppAction
+     );
+     HRESULT __stdcall Remove (
+       [in] VARIANT index
+     );
+     HRESULT __stdcall Clear (void);
+     [propget]
+     HRESULT __stdcall Context (
+       [out retval] BSTR *pContext
+     );
+     [id(6), propput]
+     HRESULT __stdcall Context (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(BAE54997-48B1-4CBE-9965-D6BE263EBEA4),
+     helpstring("A single operation to be performed"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IAction : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Id (
+       [out retval] BSTR *pId
+     );
+     [id(1), propput]
+     HRESULT __stdcall Id (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Type (
+       [out retval] enum _TASK_ACTION_TYPE *pType
+     );
+   };
+   [
+     uuid(86627EB4-42A7-41E4-A4D9-AC33A72F2D52),
+     helpstring("Group of IRegisteredTasks"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRegisteredTaskCollection : IDispatch
+   {
+     [id(1610743808), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] VARIANT index,
+       [out retval] dispinterface IRegisteredTask **ppRegisteredTask
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+   };
+   [
+     uuid(2FABA4C7-4DA9-4013-9697-20CC3FD40F85),
+     helpstring("Communicate with the Task Scheduler service"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskService : IDispatch
+   {
+     [id(1)]
+     HRESULT __stdcall GetFolder (
+       [in] BSTR Path,
+       [out retval] dispinterface ITaskFolder **ppFolder
+     );
+     HRESULT __stdcall GetRunningTasks (
+       long flags,
+       [out retval] dispinterface IRunningTaskCollection **ppRunningTasks
+     );
+     HRESULT __stdcall NewTask (
+       [in] UINT flags,
+       [out retval] dispinterface ITaskDefinition **ppDefinition
+     );
+     HRESULT __stdcall Connect (
+       [in opt] VARIANT serverName,
+       [in opt] VARIANT user,
+       [in opt] VARIANT domain,
+       [in opt] VARIANT password
+     );
+     [propget]
+     HRESULT __stdcall Connected (
+       [out retval] WINBOOL *pConnected
+     );
+     [id(0), propget]
+     HRESULT __stdcall TargetServer (
+       [out retval] BSTR *pServer
+     );
+     [id(6), propget]
+     HRESULT __stdcall ConnectedUser (
+       [out retval] BSTR *pUser
+     );
+     [propget]
+     HRESULT __stdcall ConnectedDomain (
+       [out retval] BSTR *pDomain
+     );
+     [propget]
+     HRESULT __stdcall HighestVersion (
+       [out retval] UINT *pVersion
+     );
+   };
+   [
+     uuid(39038068-2B46-4AFD-8662-7BB6F868D221),
+     helpstring("Container for named strings"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskNamedValuePair : IDispatch
+   {
+     [id(0), propget]
+     HRESULT __stdcall Name (
+       [out retval] BSTR *pName
+     );
+     [id(0), propput]
+     HRESULT __stdcall Name (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Value (
+       [out retval] BSTR *pValue
+     );
+     [id(1), propput]
+     HRESULT __stdcall Value (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(B4EF826B-63C3-46E4-A504-EF69E4F7EA4D),
+     helpstring("Group of ITaskNamedValuePairs"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITaskNamedValueCollection : IDispatch
+   {
+     [id(1), propget]
+     HRESULT __stdcall Count (
+       [out retval] long *pCount
+     );
+     [id(0), propget]
+     HRESULT __stdcall Item (
+       [in] long index,
+       [out retval] dispinterface ITaskNamedValuePair **ppPair
+     );
+     [id(-4), propget]
+     HRESULT __stdcall _NewEnum (
+       [out retval] IUnknown **ppEnum
+     );
+     [id(2)]
+     HRESULT __stdcall Create (
+       [in] BSTR Name,
+       [in] BSTR Value,
+       [out retval] dispinterface ITaskNamedValuePair **ppPair
+     );
+     [id(4)]
+     HRESULT __stdcall Remove (
+       [in] long index
+     );
+     HRESULT __stdcall Clear (void);
+   };
+   [
+     uuid(D537D2B0-9FB3-4D34-9739-1FF5CE7B1EF3),
+     helpstring("Run task when machine becomes idle"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IIdleTrigger : ITrigger
+   {
+   };
+   [
+     uuid(72DADE38-FAE4-4B3E-BAF4-5D009AF02B1C),
+     helpstring("Run task when user logs on"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ILogonTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall Delay (
+       [out retval] BSTR *pDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall Delay (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall UserId (
+       [out retval] BSTR *pUser
+     );
+     [id(21), propput]
+     HRESULT __stdcall UserId (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(754DA71B-4385-4475-9DD9-598294FA3641),
+     helpstring("Run task when login session state changes"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ISessionStateChangeTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall Delay (
+       [out retval] BSTR *pDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall Delay (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall UserId (
+       [out retval] BSTR *pUser
+     );
+     [id(21), propput]
+     HRESULT __stdcall UserId (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall StateChange (
+       [out retval] enum _TASK_SESSION_STATE_CHANGE_TYPE *pType
+     );
+     [id(22), propput]
+     HRESULT __stdcall StateChange (
+       [in] enum _TASK_SESSION_STATE_CHANGE_TYPE argNo1
+     );
+   };
+   [
+     uuid(D45B0167-9653-4EEF-B94F-0732CA7AF251),
+     helpstring("Start task in response to an event log event"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IEventTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall Subscription (
+       [out retval] BSTR *pQuery
+     );
+     [id(20), propput]
+     HRESULT __stdcall Subscription (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Delay (
+       [out retval] BSTR *pDelay
+     );
+     [id(21), propput]
+     HRESULT __stdcall Delay (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall ValueQueries (
+       [out retval] dispinterface ITaskNamedValueCollection **ppNamedXPaths
+     );
+     [id(22), propput]
+     HRESULT __stdcall ValueQueries (
+       [in] dispinterface ITaskNamedValueCollection *argNo1
+     );
+   };
+   [
+     uuid(B45747E0-EBA7-4276-9F29-85C5BB300006),
+     helpstring("Start task at a specific time"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface ITimeTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall RandomDelay (
+       [out retval] BSTR *pRandomDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall RandomDelay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(126C5CD8-B288-41D5-8DBF-E491446ADC5C),
+     helpstring("Run task every day, or every N days"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IDailyTrigger : ITrigger
+   {
+     [id(25), propget]
+     HRESULT __stdcall DaysInterval (
+       [out retval] short *pDays
+     );
+     [id(25), propput]
+     HRESULT __stdcall DaysInterval (
+       [in] short argNo1
+     );
+     [id(20), propget]
+     HRESULT __stdcall RandomDelay (
+       [out retval] BSTR *pRandomDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall RandomDelay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(5038FC98-82FF-436D-8728-A512A57C9DC1),
+     helpstring("Run task every week, or every N weeks"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IWeeklyTrigger : ITrigger
+   {
+     [id(25), propget]
+     HRESULT __stdcall DaysOfWeek (
+       [out retval] short *pDays
+     );
+     [id(25), propput]
+     HRESULT __stdcall DaysOfWeek (
+       [in] short argNo1
+     );
+     [propget]
+     HRESULT __stdcall WeeksInterval (
+       [out retval] short *pWeeks
+     );
+     [id(26), propput]
+     HRESULT __stdcall WeeksInterval (
+       [in] short argNo1
+     );
+     [id(20), propget]
+     HRESULT __stdcall RandomDelay (
+       [out retval] BSTR *pRandomDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall RandomDelay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(97C45EF1-6B02-4A1A-9C0E-1EBFBA1500AC),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IMonthlyTrigger : ITrigger
+   {
+     [id(25), propget]
+     HRESULT __stdcall DaysOfMonth (
+       [out retval] long *pDays
+     );
+     [id(25), propput]
+     HRESULT __stdcall DaysOfMonth (
+       [in] long argNo1
+     );
+     [propget]
+     HRESULT __stdcall MonthsOfYear (
+       [out retval] short *pMonths
+     );
+     [id(26), propput]
+     HRESULT __stdcall MonthsOfYear (
+       [in] short argNo1
+     );
+     [propget]
+     HRESULT __stdcall RunOnLastDayOfMonth (
+       [out retval] WINBOOL *pLastDay
+     );
+     [id(27), propput]
+     HRESULT __stdcall RunOnLastDayOfMonth (
+       [in] WINBOOL argNo1
+     );
+     [id(20), propget]
+     HRESULT __stdcall RandomDelay (
+       [out retval] BSTR *pRandomDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall RandomDelay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(77D025A3-90FA-43AA-B52E-CDA5499B946A),
+     helpstring("Run task on specific day of week, e.g. 'Second Tuesday in March'"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IMonthlyDOWTrigger : ITrigger
+   {
+     [id(25), propget]
+     HRESULT __stdcall DaysOfWeek (
+       [out retval] short *pDays
+     );
+     [id(25), propput]
+     HRESULT __stdcall DaysOfWeek (
+       [in] short argNo1
+     );
+     [propget]
+     HRESULT __stdcall WeeksOfMonth (
+       [out retval] short *pWeeks
+     );
+     [id(26), propput]
+     HRESULT __stdcall WeeksOfMonth (
+       [in] short argNo1
+     );
+     [propget]
+     HRESULT __stdcall MonthsOfYear (
+       [out retval] short *pMonths
+     );
+     [id(27), propput]
+     HRESULT __stdcall MonthsOfYear (
+       [in] short argNo1
+     );
+     [propget]
+     HRESULT __stdcall RunOnLastWeekOfMonth (
+       [out retval] WINBOOL *pLastWeek
+     );
+     [id(28), propput]
+     HRESULT __stdcall RunOnLastWeekOfMonth (
+       [in] WINBOOL argNo1
+     );
+     [id(20), propget]
+     HRESULT __stdcall RandomDelay (
+       [out retval] BSTR *pRandomDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall RandomDelay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(2A9C35DA-D357-41F4-BBC1-207AC1B1F3CB),
+     helpstring("Run task when machine starts up"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IBootTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall Delay (
+       [out retval] BSTR *pDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall Delay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(4C8FEC3A-C218-4E0C-B23D-629024DB91A2),
+     helpstring("Run task as soon as it is registered"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IRegistrationTrigger : ITrigger
+   {
+     [id(20), propget]
+     HRESULT __stdcall Delay (
+       [out retval] BSTR *pDelay
+     );
+     [id(20), propput]
+     HRESULT __stdcall Delay (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(4C3D624D-FD6B-49A3-B9B7-09CB3CD3F047),
+     helpstring("Run a program"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IExecAction : IAction
+   {
+     [id(10), propget]
+     HRESULT __stdcall Path (
+       [out retval] BSTR *pPath
+     );
+     [id(10), propput]
+     HRESULT __stdcall Path (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Arguments (
+       [out retval] BSTR *pArgument
+     );
+     [id(11), propput]
+     HRESULT __stdcall Arguments (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall WorkingDirectory (
+       [out retval] BSTR *pWorkingDirectory
+     );
+     [id(12), propput]
+     HRESULT __stdcall WorkingDirectory (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(505E9E68-AF89-46B8-A30F-56162A83D537),
+     helpstring("Show a message to the user"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IShowMessageAction : IAction
+   {
+     [id(10), propget]
+     HRESULT __stdcall Title (
+       [out retval] BSTR *pTitle
+     );
+     [id(10), propput]
+     HRESULT __stdcall Title (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall MessageBody (
+       [out retval] BSTR *pMessageBody
+     );
+     [id(11), propput]
+     HRESULT __stdcall MessageBody (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(6D2FD252-75C5-4F66-90BA-2A7D8CC3039F),
+     helpstring("Execute a Task Handler"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IComHandlerAction : IAction
+   {
+     [id(10), propget]
+     HRESULT __stdcall ClassId (
+       [out retval] BSTR *pClsid
+     );
+     [id(10), propput]
+     HRESULT __stdcall ClassId (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Data (
+       [out retval] BSTR *pData
+     );
+     [id(11), propput]
+     HRESULT __stdcall Data (
+       [in] BSTR argNo1
+     );
+   };
+   [
+     uuid(10F62C64-7E16-4314-A0C2-0C3683F99D40),
+     helpstring("Send an email"),
+     dual,
+     nonextensible,
+     oleautomation,
+     dispatchable
+   ]
+   dispinterface IEmailAction : IAction
+   {
+     [id(10), propget]
+     HRESULT __stdcall Server (
+       [out retval] BSTR *pServer
+     );
+     [id(10), propput]
+     HRESULT __stdcall Server (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Subject (
+       [out retval] BSTR *pSubject
+     );
+     [id(11), propput]
+     HRESULT __stdcall Subject (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall To (
+       [out retval] BSTR *pTo
+     );
+     [id(12), propput]
+     HRESULT __stdcall To (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Cc (
+       [out retval] BSTR *pCc
+     );
+     [id(13), propput]
+     HRESULT __stdcall Cc (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Bcc (
+       [out retval] BSTR *pBcc
+     );
+     [id(14), propput]
+     HRESULT __stdcall Bcc (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall ReplyTo (
+       [out retval] BSTR *pReplyTo
+     );
+     [id(15), propput]
+     HRESULT __stdcall ReplyTo (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall From (
+       [out retval] BSTR *pFrom
+     );
+     [id(16), propput]
+     HRESULT __stdcall From (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall HeaderFields (
+       [out retval] dispinterface ITaskNamedValueCollection **ppHeaderFields
+     );
+     [id(17), propput]
+     HRESULT __stdcall HeaderFields (
+       [in] dispinterface ITaskNamedValueCollection *argNo1
+     );
+     [propget]
+     HRESULT __stdcall Body (
+       [out retval] BSTR *pBody
+     );
+     [id(18), propput]
+     HRESULT __stdcall Body (
+       [in] BSTR argNo1
+     );
+     [propget]
+     HRESULT __stdcall Attachments (
+       [out retval] VARIANT pAttachements[]*
+     );
+     [id(19), propput]
+     HRESULT __stdcall Attachments (
+       [in] VARIANT argNo1[]
+     );
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(839D7762-5121-4009-9234-4F0D19394F04),
+  helpstring("an extension to the actions that a task can execute")
+]
+interface ITaskHandler : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall Start (
+    [in] IUnknown * pHandlerServices,
+    [in] BSTR Data
+  );
+  HRESULT __stdcall Stop (
+    [out] HRESULT *pRetCode
+  );
+  HRESULT __stdcall Pause (void);
+  HRESULT __stdcall Resume (void);
+};
+[
+  uuid(EAEC7A8F-27A0-4DDC-8675-14726A01A38A),
+  helpstring("Allow handler to send status information to task engine")
+]
+interface ITaskHandlerStatus : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall UpdateStatus (
+    [in] short percentComplete,
+    [in] BSTR statusMessage
+  );
+  HRESULT __stdcall TaskCompleted (
+    [in] HRESULT taskErrCode
+  );
+};
+[
+  uuid(3E4C9351-D966-4B8B-BB87-CEBA68BB0107),
+  helpstring("Allows task handler to share information with task")
+]
+interface ITaskVariables : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetInput (
+    [out retval] BSTR *pInput
+  );
+  HRESULT __stdcall SetOutput (
+    [in] BSTR input
+  );
+  HRESULT __stdcall GetContext (
+    [out retval] BSTR *pContext
+  );
+};
+
diff --git a/mingw-w64-headers/include/tbs.h b/mingw-w64-headers/include/tbs.h
new file mode 100644
index 0000000..4808c93
--- /dev/null
+++ b/mingw-w64-headers/include/tbs.h
@@ -0,0 +1,93 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TBS
+#define _INC_TBS
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef UINT32 TBS_RESULT; /* Assumed */
+
+typedef enum _TBS_COMMAND_LOCALITY {
+  TBS_COMMAND_LOCALITY_ZERO = 0,
+  TBS_COMMAND_LOCALITY_ONE,
+  TBS_COMMAND_LOCALITY_TWO,
+  TBS_COMMAND_LOCALITY_THREE,
+  TBS_COMMAND_LOCALITY_FOUR
+} TBS_COMMAND_LOCALITY;
+
+typedef enum _TBS_COMMAND_PRIORITY {
+  TBS_COMMAND_PRIORITY_LOW = 100,
+  TBS_COMMAND_PRIORITY_NORMAL = 200,
+  TBS_COMMAND_PRIORITY_HIGH = 300,
+  TBS_COMMAND_PRIORITY_SYSTEM = 400,
+  TBS_COMMAND_PRIORITY_MAX = 0x80000000
+} TBS_COMMAND_PRIORITY;
+
+typedef struct _TBS_CONTEXT_PARAMS {
+  UINT32 version;
+} TBS_CONTEXT_PARAMS;
+
+typedef LPVOID TBS_HCONTEXT;
+
+#define TBS_SUCCESS 0
+#define TBS_E_BAD_PARAMETER 0x80284002
+#define TBS_E_INTERNAL_ERROR 0x80284007
+#define TBS_E_INVALID_OUTPUT_POINTER 0x80284003
+#define TBS_E_SERVICE_DISABLED 0x80284010
+#define TBS_E_SERVICE_NOT_RUNNING 0x80284008
+#define TBS_E_SERVICE_START_PENDING 0x8028400B
+#define TBS_E_TOO_MANY_TBS_CONTEXTS 0x80284009
+#define TBS_E_TPM_NOT_FOUND 0x8028400F
+#define TBS_E_DEACTIVATED 0x80284016
+#define TBS_E_INVALID_CONTEXT_PARAM 0x80284007
+#define TBS_E_IOERROR 0x80284006
+#define TBS_E_INSUFFICIENT_BUFFER 0x80284005
+#define TBS_E_BUFFER_TOO_LARGE 0x8028400E
+
+TBS_RESULT WINAPI Tbsi_Context_Create(
+  const TBS_CONTEXT_PARAMS *pContextParams,
+  TBS_HCONTEXT *phContext
+);
+
+TBS_RESULT WINAPI Tbsi_Get_TCG_Log(
+  TBS_HCONTEXT hContext,
+  BYTE *pOutputBuf,
+  UINT32 *pOutputBufLen
+);
+
+TBS_RESULT WINAPI Tbsi_Physical_Presence_Command(
+  TBS_HCONTEXT hContext,
+  const BYTE *pInputBuf,
+  UINT32 InputBufLen,
+  BYTE *pOutputBuf,
+  UINT32 *pOutputBufLen
+);
+
+TBS_RESULT WINAPI Tbsip_Cancel_Commands(
+  TBS_HCONTEXT hContext
+);
+
+TBS_RESULT WINAPI Tbsip_Context_Close(
+  TBS_HCONTEXT hContext
+);
+
+TBS_RESULT WINAPI Tbsip_Submit_Command(
+  TBS_HCONTEXT hContext,
+  TBS_COMMAND_LOCALITY locality,
+  TBS_COMMAND_PRIORITY priority,
+  const BYTE *pCommandBuf,
+  UINT32 commandBufLen,
+  BYTE *pResultBuf,
+  UINT32 *pResultBufLen
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_TBH*/
diff --git a/mingw-w64-headers/include/tcpestats.h b/mingw-w64-headers/include/tcpestats.h
new file mode 100644
index 0000000..1f33f25
--- /dev/null
+++ b/mingw-w64-headers/include/tcpestats.h
@@ -0,0 +1,217 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TCPESTATS
+#define _INC_TCPESTATS
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _TCP_ESTATS_BANDWIDTH_ROD_v0 {
+  ULONG64 OutboundBandwidth;
+  ULONG64 InboundBandwidth;
+  ULONG64 OutboundInstability;
+  ULONG64 InboundInstability;
+  BOOLEAN OutboundBandwidthPeaked;
+  BOOLEAN InboundBandwidthPeaked;
+} TCP_ESTATS_BANDWIDTH_ROD_v0, *PTCP_ESTATS_BANDWIDTH_ROD_v0;
+
+typedef struct _TCP_ESTATS_BANDWIDTH_RW_v0 {
+  TCP_BOOLEAN_OPTIONAL EnableCollectionOutbound;
+  TCP_BOOLEAN_OPTIONAL EnableCollectionInbound;
+} TCP_ESTATS_BANDWIDTH_RW_v0, *PTCP_ESTATS_BANDWIDTH_RW_v0;
+
+typedef struct _TCP_ESTATS_DATA_ROD_v0 {
+  ULONG64 DataBytesOut;
+  ULONG64 DataSegsOut;
+  ULONG64 DataBytesIn;
+  ULONG64 DataSegsIn;
+  ULONG64 SegsOut;
+          SegsIn;
+  ULONG   SoftErrors;
+  ULONG   SoftErrorReason;
+  ULONG   SndUna;
+  ULONG   SndNxt;
+  ULONG   SndMax;
+  ULONG64 ThruBytesAcked;
+  ULONG   RcvNxt;
+  ULONG64 ThruBytesReceived;
+} TCP_ESTATS_DATA_ROD_v0, *PTCP_ESTATS_DATA_ROD_v0;
+
+typedef struct _TCP_ESTATS_DATA_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_DATA_RW_v0, *PTCP_ESTATS_DATA_RW_v0;
+
+typedef struct _TCP_ESTATS_FINE_RTT_ROD_v0 {
+  ULONG RttVar;
+  ULONG MaxRtt;
+  ULONG MinRtt;
+  ULONG SumRtt;
+} TCP_ESTATS_FINE_RTT_ROD_v0, *PTCP_ESTATS_FINE_RTT_ROD_v0;
+
+typedef struct _TCP_ESTATS_FINE_RTT_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_FINE_RTT_RW_v0, *PTCP_ESTATS_FINE_RTT_RW_v0;
+
+typedef struct _TCP_ESTATS_OBS_REC_ROD_v0 {
+  ULONG CurRwinRcvd;
+  ULONG MaxRwinRcvd;
+  ULONG MinRwinRcvd;
+  ULONG WinScaleRcvd;
+} TCP_ESTATS_OBS_REC_ROD_v0, *PTCP_ESTATS_OBS_REC_ROD_v0;
+
+typedef struct _TCP_ESTATS_OBS_REC_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_OBS_REC_RW_v0, *PTCP_ESTATS_OBS_REC_RW_v0;
+
+typedef struct _TCP_ESTATS_PATH_ROD_v0 {
+  ULONG FastRetran;
+  ULONG Timeouts;
+  ULONG SubsequentTimeouts;
+  ULONG CurTimeoutCount;
+  ULONG AbruptTimeouts;
+  ULONG PktsRetrans;
+  ULONG BytesRetrans;
+  ULONG DupAcksIn;
+  ULONG SacksRcvd;
+  ULONG SackBlocksRcvd;
+  ULONG CongSignals;
+  ULONG PreCongSumCwnd;
+  ULONG PreCongSumRtt;
+  ULONG PostCongSumRtt;
+  ULONG PostCongCountRtt;
+  ULONG EcnSignals;
+  ULONG EceRcvd;
+  ULONG SendStall;
+  ULONG QuenchRcvd;
+  ULONG RetranThresh;
+  ULONG SndDupAckEpisodes;
+  ULONG SumBytesReordered;
+  ULONG NonRecovDa;
+  ULONG NonRecovDaEpisodes;
+  ULONG AckAfterFr;
+  ULONG DsackDups;
+  ULONG SampleRtt;
+  ULONG SmoothedRtt;
+  ULONG RttVar;
+  ULONG MaxRtt;
+  ULONG MinRtt;
+  ULONG SumRtt;
+  ULONG CountRtt;
+  ULONG CurRto;
+  ULONG MaxRto;
+  ULONG MinRto;
+  ULONG CurMss;
+  ULONG MaxMss;
+  ULONG MinMss;
+  ULONG SpuriousRtoDetections;
+} TCP_ESTATS_PATH_ROD_v0, *PTCP_ESTATS_PATH_ROD_v0;
+
+typedef struct _TCP_ESTATS_PATH_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_PATH_RW_v0, *PTCP_ESTATS_PATH_RW_v0;
+
+typedef struct _TCP_ESTATS_REC_ROD_v0 {
+  ULONG  CurRwinSent;
+  ULONG  MaxRwinSent;
+  ULONG  MinRwinSent;
+  ULONG  LimRwin;
+  ULONG  DupAckEpisodes;
+  ULONG  DupAcksOut;
+  ULONG  CeRcvd;
+  ULONG  EcnSent;
+  ULONG  EcnNoncesRcvd;
+  ULONG  CurReasmQueue;
+  ULONG  MaxReasmQueue;
+  SIZE_T CurAppRQueue;
+  SIZE_T MaxAppRQueue;
+  UCHAR  WinScaleSent;
+} TCP_ESTATS_REC_ROD_v0, *PTCP_ESTATS_REC_ROD_v0;
+
+typedef struct _TCP_ESTATS_REC_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_REC_RW_v0, *PTCP_ESTATS_REC_RW_v0;
+
+typedef struct _TCP_ESTATS_SEND_BUFF_ROD_v0 {
+  SIZE_T CurRetxQueue;
+  SIZE_T MaxRetxQueue;
+  SIZE_T CurAppWQueue;
+  SIZE_T MaxAppWQueue;
+} TCP_ESTATS_SEND_BUFF_ROD_v0, *PTCP_ESTATS_SEND_BUFF_ROD_v0;
+
+typedef struct _TCP_ESTATS_SEND_BUFF_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_SEND_BUFF_RW_v0, *PTCP_ESTATS_SEND_BUFF_RW_v0;
+
+typedef struct _TCP_ESTATS_SND_CONG_ROD_v0 {
+  ULONG  SndLimTransRwin;
+  ULONG  SndLimTimeRwin;
+  SIZE_T SndLimBytesRwin;
+  ULONG  SndLimTransCwnd;
+  ULONG  SndLimTimeCwnd;
+  SIZE_T SndLimBytesCwnd;
+  ULONG  SndLimTransSnd;
+  ULONG  SndLimTimeSnd;
+  SIZE_T SndLimBytesSnd;
+  ULONG  SlowStart;
+  ULONG  CongAvoid;
+  ULONG  OtherReductions;
+  ULONG  CurCwnd;
+  ULONG  MaxSsCwnd;
+  ULONG  MaxCaCwnd;
+  ULONG  CurSsthresh;
+  ULONG  MaxSsthresh;
+  ULONG  MinSsthresh;
+} TCP_ESTATS_SND_CONG_ROD_v0, *PTCP_ESTATS_SND_CONG_ROD_v0;
+
+typedef struct _TCP_ESTATS_SND_CONG_ROS_v0 {
+  ULONG LimCwnd;
+} TCP_ESTATS_SND_CONG_ROS_v0, *PTCP_ESTATS_SND_CONG_ROS_v0;
+
+typedef struct _TCP_ESTATS_SND_CONG_RW_v0 {
+  BOOLEAN EnableCollection;
+} TCP_ESTATS_SND_CONG_RW_v0, *PTCP_ESTATS_SND_CONG_RW_v0;
+
+typedef struct _TCP_ESTATS_SYN_OPTS_ROS_v0 {
+  BOOLEAN ActiveOpen;
+  ULONG   MssRcvd;
+  ULONG   MssSent;
+} TCP_ESTATS_SYN_OPTS_ROS_v0, *PTCP_ESTATS_SYN_OPTS_ROS_v0;
+
+typedef struct _TCPIP_OWNER_MODULE_BASIC_INFO {
+  PWCHAR pModuleName;
+  PWCHAR pModulePath;
+} TCPIP_OWNER_MODULE_BASIC_INFO, *PTCPIP_OWNER_MODULE_BASIC_INFO;
+
+typedef enum _TCP_ESTATS_TYPE {
+  TcpConnectionEstatsSynOpts,
+  TcpConnectionEstatsData,
+  TcpConnectionEstatsSndCong,
+  TcpConnectionEstatsPath,
+  TcpConnectionEstatsSendBuff,
+  TcpConnectionEstatsRec,
+  TcpConnectionEstatsObsRec,
+  TcpConnectionEstatsBandwidth,
+  TcpConnectionEstatsFineRtt,
+  TcpConnectionEstatsMaximum 
+} TCP_ESTATS_TYPE;
+
+typedef enum _TCP_BOOLEAN_OPTIONAL {
+  TcpBoolOptDisabled    = 0,
+  TcpBoolOptEnabled     = 1,
+  TcpBoolOptUnchanged   = -1 
+} TCP_BOOLEAN_OPTIONAL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_TCPESTATS*/
+
diff --git a/mingw-w64-headers/include/tcpmib.h b/mingw-w64-headers/include/tcpmib.h
new file mode 100644
index 0000000..9754649
--- /dev/null
+++ b/mingw-w64-headers/include/tcpmib.h
@@ -0,0 +1,71 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TCPMIB
+#define _INC_TCPMIB
+#if (_WIN32_WINNT >= 0x0600)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _TCP_CONNECTION_OFFLOAD_STATE {
+  TcpConnectionOffloadStateInHost       = 0,
+  TcpConnectionOffloadStateOffloading   = 1,
+  TcpConnectionOffloadStateOffloaded    = 2,
+  TcpConnectionOffloadStateUploading    = 3,
+  TcpConnectionOffloadStateMax          = 4 
+} TCP_CONNECTION_OFFLOAD_STATE;
+
+typedef struct _MIB_TCP6ROW {
+  MIB_TCP_STATE State;
+  IN6_ADDR      LocalAddr;
+  DWORD         dwLocalScopeId;
+  DWORD         dwLocalPort;
+  IN6_ADDR      RemoteAddr;
+  DWORD         dwRemoteScopeId;
+  DWORD         dwRemotePort;
+} MIB_TCP6ROW, *PMIB_TCP6ROW;
+
+typedef struct _MIB_TCP6TABLE {
+  DWORD       dwNumEntries;
+  MIB_TCP6ROW table[ANY_SIZE];
+} MIB_TCP6TABLE, *PMIB_TCP6TABLE;
+
+typedef struct _MIB_TCP6ROW2 {
+  IN6_ADDR                     LocalAddr;
+  DWORD                        dwLocalScopeId;
+  DWORD                        dwLocalPort;
+  IN6_ADDR                     RemoteAddr;
+  DWORD                        dwRemoteScopeId;
+  DWORD                        dwRemotePort;
+  MIB_TCP_STATE                State;
+  DWORD                        dwOwningPid;
+  TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCP6ROW2, *PMIB_TCP6ROW2;
+
+typedef struct _MIB_TCP6TABLE2 {
+  DWORD        dwNumEntries;
+  MIB_TCP6ROW2 table[ANY_SIZE];
+} MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;
+
+typedef struct _MIB_TCPROW2 {
+  DWORD                        dwState;
+  DWORD                        dwLocalAddr;
+  DWORD                        dwLocalPort;
+  DWORD                        dwRemoteAddr;
+  DWORD                        dwRemotePort;
+  TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCPROW2, *PMIB_TCPROW2;
+
+typedef struct _MIB_TCPTABLE2 {
+  DWORD       dwNumEntries;
+  MIB_TCPROW2 table[ANY_SIZE];
+} MIB_TCPTABLE2, *PMIB_TCPTABLE2;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_TCPMIB*/
diff --git a/mingw-w64-headers/include/tdh.h b/mingw-w64-headers/include/tdh.h
new file mode 100644
index 0000000..39c202c
--- /dev/null
+++ b/mingw-w64-headers/include/tdh.h
@@ -0,0 +1,242 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TDH
+#define _INC_TDH
+#include <evntprov.h>
+#include <evntcons.h>
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _EVENT_FIELD_TYPE {
+  EventKeywordInformation   = 0,
+  EventLevelInformation     = 1,
+  EventChannelInformation   = 2,
+  EventTaskInformation      = 3,
+  EventOpcodeInformation    = 4,
+  EventInformationMax       = 5 
+} EVENT_FIELD_TYPE;
+
+typedef struct _EVENT_MAP_ENTRY {
+  ULONG OutputOffset;
+  __MINGW_EXTENSION union {
+    ULONG Value;
+    ULONG InputOffset;
+  };
+} EVENT_MAP_ENTRY, *PEVENT_MAP_ENTRY;
+
+typedef enum _MAP_VALUETYPE
+{
+  EVENTMAP_ENTRY_VALUETYPE_ULONG  = 0,
+  EVENTMAP_ENTRY_VALUETYPE_STRING = 1 
+} MAP_VALUETYPE;
+
+typedef enum _MAP_FLAGS {
+  EVENTMAP_INFO_FLAG_MANIFEST_VALUEMAP     = 1,
+  EVENTMAP_INFO_FLAG_MANIFEST_BITMAP       = 2,
+  EVENTMAP_INFO_FLAG_MANIFEST_PATTERNMAP   = 4,
+  EVENTMAP_INFO_FLAG_WBEM_VALUEMAP         = 8,
+  EVENTMAP_INFO_FLAG_WBEM_BITMAP           = 16,
+  EVENTMAP_INFO_FLAG_WBEM_FLAG             = 32,
+  EVENTMAP_INFO_FLAG_WBEM_NO_MAP           = 64 
+} MAP_FLAGS;
+
+typedef struct _EVENT_MAP_INFO {
+  ULONG NameOffset;
+  MAP_FLAGS Flag;
+  ULONG EntryCount;
+  __MINGW_EXTENSION union {
+    MAP_VALUETYPE MapEntryValueType;
+    ULONG FormatStringOffset;
+  };
+  EVENT_MAP_ENTRY MapEntryArray[ANYSIZE_ARRAY];
+} EVENT_MAP_INFO, *PEVENT_MAP_INFO;
+
+typedef enum _PROPERTY_FLAGS {
+  PropertyStruct             = 0x1,
+  PropertyParamLength        = 0x2,
+  PropertyParamCount         = 0x4,
+  PropertyWBEMXmlFragment    = 0x8,
+  PropertyParamFixedLength   = 0x10 
+} PROPERTY_FLAGS;
+
+typedef struct _EVENT_PROPERTY_INFO {
+  PROPERTY_FLAGS Flags;
+  ULONG          NameOffset;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      USHORT InType;
+      USHORT OutType;
+      ULONG  MapNameOffset;
+    } nonStructType;
+    __MINGW_EXTENSION struct {
+      USHORT StructStartIndex;
+      USHORT NumOfStructMembers;
+      ULONG  padding;
+    } structType;
+  };
+  __MINGW_EXTENSION union {
+    USHORT count;
+    USHORT countPropertyIndex;
+  };
+  __MINGW_EXTENSION union {
+    USHORT length;
+    USHORT lengthPropertyIndex;
+  };
+  ULONG          Reserved;
+} EVENT_PROPERTY_INFO;
+
+typedef enum _DECODING_SOURCE {
+  DecodingSourceXMLFile   = 0,
+  DecodingSourceWbem      = 1,
+  DecodingSourceWPP       = 2 
+} DECODING_SOURCE;
+
+typedef enum _TDH_CONTEXT_TYPE {
+  TDH_CONTEXT_WPP_TMFFILE         = 0,
+  TDH_CONTEXT_WPP_TMFSEARCHPATH   = 1,
+  TDH_CONTEXT_WPP_GMT             = 2,
+  TDH_CONTEXT_POINTERSIZE         = 3,
+  TDH_CONTEXT_MAXIMUM             = 4 
+} TDH_CONTEXT_TYPE;
+
+typedef enum _TEMPLATE_FLAGS {
+  TEMPLATE_EVENT_DATA   = 1,
+  TEMPLATE_USER_DATA    = 2 
+} TEMPLATE_FLAGS;
+
+typedef struct _TRACE_EVENT_INFO {
+  GUID                ProviderGuid;
+  GUID                EventGuid;
+  EVENT_DESCRIPTOR    EventDescriptor;
+  DECODING_SOURCE     DecodingSource;
+  ULONG               ProviderNameOffset;
+  ULONG               LevelNameOffset;
+  ULONG               ChannelNameOffset;
+  ULONG               KeywordsNameOffset;
+  ULONG               TaskNameOffset;
+  ULONG               OpcodeNameOffset;
+  ULONG               EventMessageOffset;
+  ULONG               ProviderMessageOffset;
+  ULONG               BinaryXMLOffset;
+  ULONG               BinaryXMLSize;
+  ULONG               ActivityIDNameOffset;
+  ULONG               RelatedActivityIDNameOffset;
+  ULONG               PropertyCount;
+  ULONG               TopLevelPropertyCount;
+  TEMPLATE_FLAGS      Flags;
+  EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY];
+} TRACE_EVENT_INFO, *PTRACE_EVENT_INFO;
+
+typedef struct _PROPERTY_DATA_DESCRIPTOR {
+  ULONGLONG PropertyName;
+  ULONG     ArrayIndex;
+  ULONG     Reserved;
+} PROPERTY_DATA_DESCRIPTOR, *PPROPERTY_DATA_DESCRIPTOR;
+
+typedef struct _TRACE_PROVIDER_INFO {
+  GUID  ProviderGuid;
+  ULONG SchemaSource;
+  ULONG ProviderNameOffset;
+} TRACE_PROVIDER_INFO;
+
+typedef struct _PROVIDER_ENUMERATION_INFO {
+  ULONG               NumberOfProviders;
+  ULONG               Padding;
+  TRACE_PROVIDER_INFO TraceProviderInfoArray[ANYSIZE_ARRAY];
+} PROVIDER_ENUMERATION_INFO, *PPROVIDER_ENUMERATION_INFO;
+
+typedef struct _PROVIDER_FIELD_INFO {
+  ULONG     NameOffset;
+  ULONG     DescriptionOffset;
+  ULONGLONG Value;
+} PROVIDER_FIELD_INFO;
+
+typedef struct _PROVIDER_FIELD_INFOARRAY {
+  ULONG               NumberOfElements;
+  EVENT_FIELD_TYPE    FieldType;
+  PROVIDER_FIELD_INFO FieldInfoArray[ANYSIZE_ARRAY];
+} PROVIDER_FIELD_INFOARRAY, *PPROVIDER_FIELD_INFOARRAY;
+
+typedef struct _TDH_CONTEXT {
+  ULONGLONG        ParameterValue;
+  TDH_CONTEXT_TYPE ParameterType;
+  ULONG            ParameterSize;
+} TDH_CONTEXT, *PTDH_CONTEXT;
+
+ULONG __stdcall TdhEnumerateProviderFieldInformation(
+  LPGUID pGuid,
+  EVENT_FIELD_TYPE EventFieldType,
+  PPROVIDER_FIELD_INFOARRAY pBuffer,
+  ULONG *pBufferSize
+);
+
+ULONG __stdcall TdhEnumerateProviders(
+  PPROVIDER_ENUMERATION_INFO pBuffer,
+  ULONG *pBufferSize
+);
+
+ULONG __stdcall TdhGetEventInformation(
+  PEVENT_RECORD pEvent,
+  ULONG TdhContextCount,
+  PTDH_CONTEXT pTdhContext,
+  PTRACE_EVENT_INFO pBuffer,
+  ULONG *pBufferSize
+);
+
+ULONG __stdcall TdhGetEventMapInformation(
+  PEVENT_RECORD pEvent,
+  LPWSTR pMapName,
+  PEVENT_MAP_INFO pBuffer,
+  ULONG *pBufferSize
+);
+
+ULONG __stdcall TdhGetProperty(
+  PEVENT_RECORD pEvent,
+  ULONG TdhContextCount,
+  PTDH_CONTEXT pTdhContext,
+  ULONG PropertyDataCount,
+  PPROPERTY_DATA_DESCRIPTOR pPropertyData,
+  ULONG BufferSize,
+  PBYTE pBuffer
+);
+
+ULONG __stdcall TdhGetPropertySize(
+  PEVENT_RECORD pEvent,
+  ULONG TdhContextCount,
+  PTDH_CONTEXT pTdhContext,
+  ULONG PropertyDataCount,
+  PPROPERTY_DATA_DESCRIPTOR pPropertyData,
+  ULONG *pPropertySize
+);
+
+ULONG __stdcall TdhQueryProviderFieldInformation(
+  LPGUID pGuid,
+  ULONGLONG EventFieldValue,
+  EVENT_FIELD_TYPE EventFieldType,
+  PPROVIDER_FIELD_INFOARRAY pBuffer,
+  ULONG *pBufferSize
+);
+
+#if (_WIN32_WINNT >= 0x0601)
+typedef struct _PROVIDER_FILTER_INFO {
+  UCHAR               Id;
+  UCHAR               Version;
+  ULONG               MessageOffset;
+  ULONG               Reserved;
+  ULONG               PropertyCount;
+  EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY];
+} PROVIDER_FILTER_INFO, *PPROVIDER_FILTER_INFO;
+#endif /*(_WIN32_WINNT >= 0x0601)*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_TDH*/
diff --git a/mingw-w64-headers/include/tpcshrd.h b/mingw-w64-headers/include/tpcshrd.h
new file mode 100644
index 0000000..2429f15
--- /dev/null
+++ b/mingw-w64-headers/include/tpcshrd.h
@@ -0,0 +1,18 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#define TABLET_DISABLE_PRESSANDHOLD        0x00000001
+#define TABLET_DISABLE_PENTAPFEEDBACK      0x00000008
+#define TABLET_DISABLE_PENBARRELFEEDBACK   0x00000010
+#define TABLET_DISABLE_TOUCHUIFORCEON      0x00000100
+#define TABLET_DISABLE_TOUCHUIFORCEOFF     0x00000200
+#define TABLET_DISABLE_TOUCHSWITCH         0x00008000
+#define TABLET_DISABLE_FLICKS              0x00010000
+#define TABLET_ENABLE_FLICKSONCONTEXT      0x00020000
+#define TABLET_ENABLE_FLICKLEARNINGMODE    0x00040000
+#define TABLET_DISABLE_SMOOTHSCROLLING     0x00080000
+#define TABLET_DISABLE_FLICKFALLBACKKEYS   0x00100000
+#define TABLET_ENABLE_MULTITOUCHDATA       0x01000000
diff --git a/mingw-w64-headers/include/tssbx.h b/mingw-w64-headers/include/tssbx.h
new file mode 100644
index 0000000..dad5817
--- /dev/null
+++ b/mingw-w64-headers/include/tssbx.h
@@ -0,0 +1,106 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TSSBX
+#define _INC_TSSBX
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _WTSSBX_ADDRESS_FAMILY {
+  WTSSBX_ADDRESS_FAMILY_AF_UNSPEC    = 0,
+  WTSSBX_ADDRESS_FAMILY_AF_INET      = 1,
+  WTSSBX_ADDRESS_FAMILY_AF_INET6     = 2,
+  WTSSBX_ADDRESS_FAMILY_AF_IPX       = 3,
+  WTSSBX_ADDRESS_FAMILY_AF_NETBIOS   = 4
+} WTSSBX_ADDRESS_FAMILY;
+
+typedef enum _WTSSBX_MACHINE_DRAIN {
+  WTSSBX_MACHINE_DRAIN_UNSPEC   = 0,
+  WTSSBX_MACHINE_DRAIN_OFF      = 1,
+  WTSSBX_MACHINE_DRAIN_ON       = 2
+} WTSSBX_MACHINE_DRAIN;
+
+typedef enum _WTSSBX_NOTIFICATION_TYPE {
+  WTSSBX_MACHINE_SESSION_MODE_UNSPEC     = 0,
+  WTSSBX_MACHINE_SESSION_MODE_SINGLE     = 1,
+  WTSSBX_MACHINE_SESSION_MODE_MULTIPLE   = 2
+} WTSSBX_NOTIFICATION_TYPE;
+
+typedef enum _WTSSBX_MACHINE_STATE {
+  WTSSBX_MACHINE_STATE_UNSPEC          = 0,
+  WTSSBX_MACHINE_STATE_READY           = 1,
+  WTSSBX_MACHINE_STATE_SYNCHRONIZING   = 2
+} WTSSBX_MACHINE_STATE;
+
+typedef enum _WTSSBX_NOTIFICATION_TYPE {
+  WTSSBX_NOTIFICATION_REMOVED   = 1,
+  WTSSBX_NOTIFICATION_CHANGED   = 2,
+  WTSSBX_NOTIFICATION_ADDED     = 4,
+  WTSSBX_NOTIFICATION_RESYNC    = 8
+} WTSSBX_NOTIFICATION_TYPE;
+
+typedef enum _WTSSBX_SESSION_STATE {
+  WTSSBX_SESSION_STATE_UNSPEC         = 0,
+  WTSSBX_SESSION_STATE_ACTIVE         = 1,
+  WTSSBX_SESSION_STATE_DISCONNECTED   = 2
+} WTSSBX_SESSION_STATE;
+
+typedef struct _WTSSBX_IP_ADDRESS {
+  WTSSBX_ADDRESS_FAMILY  AddressFamily;
+  BYTE                   Address[16];
+  unsigned short         PortNumber;
+  DWORD                  dwScope;
+} WTSSBX_IP_ADDRESS;
+
+#define MaxFQDN_Len 256
+#define MaxNetBiosName_Len 16
+
+typedef struct _WTSSBX_MACHINE_CONNECT_INFO {
+  WCHAR              wczMachineFQDN[MaxFQDN_Len + 1];
+  WCHAR              wczMachineNetBiosName[MaxNetBiosName_Len + 1];
+  DWORD              dwNumOfIPAddr;
+  WTSSBX_IP_ADDRESS  IPaddr[MaxNumOfExposed_IPs];
+} WTSSBX_MACHINE_CONNECT_INFO;
+
+#define MaxFarm_Len 256
+
+typedef struct _WTSSBX_MACHINE_INFO {
+  WTSSBX_MACHINE_CONNECT_INFO  ClientConnectInfo;
+  WCHAR                        wczFarmName[MaxFarm_Len + 1];
+  WTSSBX_IP_ADDRESS            InternalIPAddress;
+  DWORD                        dwMaxSessionsLimit;
+  DWORD                        ServerWeight;
+  WTSSBX_MACHINE_SESSION_MODE  SingleSessionMode;
+  WTSSBX_MACHINE_DRAIN         InDrain;
+  WTSSBX_MACHINE_STATE         MachineState;
+} WTSSBX_MACHINE_INFO;
+
+#define MaxUserName_Len 104
+#define MaxDomainName_Len 256
+#define MaxAppName_Len 256
+
+typedef struct _WTSSBX_SESSION_INFO {
+  WCHAR                 wszUserName[MaxUserName_Len + 1];
+  WCHAR                 wszDomainName[MaxDomainName_Len + 1];
+  WCHAR                 ApplicationType[MaxAppName_Len + 1];
+  DWORD                 dwSessionId;
+  FILETIME              CreateTime;
+  FILETIME              DisconnectTime;
+  WTSSBX_SESSION_STATE  SessionState;
+} WTSSBX_SESSION_INFO;
+
+/*IID_IWTSSBPlugin is defined as DC44BE78-B18D-4399-B210-641BF67A002C*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_TSSBX*/
diff --git a/mingw-w64-headers/include/txfw32.h b/mingw-w64-headers/include/txfw32.h
new file mode 100644
index 0000000..3d06673
--- /dev/null
+++ b/mingw-w64-headers/include/txfw32.h
@@ -0,0 +1,92 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_TXFW32
+#define _INC_TXFW32
+#include <clfs.h>
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _TXF_ID {
+  __MINGW_EXTENSION struct {
+    LONGLONG LowPart;
+    LONGLONG HighPart;
+  } DUMMYSTRUCTNAME;
+} TXF_ID, *PTXF_ID;
+
+typedef struct _TXF_LOG_RECORD_AFFECTED_FILE {
+  USHORT Version;
+  ULONG  RecordLength;
+  ULONG  Flags;
+  TXF_ID TxfFileId;
+  UUID   KtmGuid;
+  ULONG  FileNameLength;
+  ULONG  FileNameByteOffsetInStructure;
+} TXF_LOG_RECORD_AFFECTED_FILE, *PTXF_LOG_RECORD_AFFECTED_FILE;
+
+typedef struct _TXF_LOG_RECORD_TRUNCATE {
+  USHORT   Version;
+  USHORT   RecordType;
+  ULONG    RecordLength;
+  ULONG    Flags;
+  TXF_ID   TxfFileId;
+  UUID     KtmGuid;
+  LONGLONG NewFileSize;
+  ULONG    FileNameLength;
+  ULONG    FileNameByteOffsetInStructure;
+} TXF_LOG_RECORD_TRUNCATE, *PTXF_LOG_RECORD_TRUNCATE;
+
+typedef struct _TXF_LOG_RECORD_WRITE {
+  USHORT   Version;
+  USHORT   RecordType;
+  ULONG    RecordLength;
+  ULONG    Flags;
+  TXF_ID   TxfFileId;
+  UUID     KtmGuid;
+  LONGLONG ByteOffsetInFile;
+  ULONG    NumBytesWritten;
+  ULONG    ByteOffsetInStructure;
+  ULONG    FileNameLength;
+  ULONG    FileNameByteOffsetInStructure;
+} TXF_LOG_RECORD_WRITE, *PTXF_LOG_RECORD_WRITE;
+
+#define TXF_LOG_RECORD_TYPE_WRITE 1
+#define TXF_LOG_RECORD_TYPE_TRUNCATE 2
+#define TXF_LOG_RECORD_TYPE_AFFECTED_FILE 4
+
+typedef struct _TXF_LOG_RECORD_BASE {
+  USHORT Version;
+  USHORT RecordType;
+  ULONG  RecordLength;
+} TXF_LOG_RECORD_BASE, *PTXF_LOG_RECORD_BASE;
+
+WINBOOL WINAPI TxfLogCreateFileReadContext(
+  LPCWSTR LogPath,
+  CLFS_LSN BeginningLsn,
+  CLFS_LSN EndingLSN,
+  PTXF_ID TxfFileId,
+  PVOID *TxfLogContext
+);
+
+WINBOOL WINAPI TxfLogDestroyReadContext(
+  PVOID TxfLogContext
+);
+
+WINBOOL WINAPI TxfLogReadRecords(
+  PVOID TxfLogContext,
+  ULONG BufferLength,
+  PVOID Buffer,
+  PULONG BytesUsed,
+  PULONG RecordCount
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_TXFW32*/
diff --git a/mingw-w64-headers/include/udpmib.h b/mingw-w64-headers/include/udpmib.h
new file mode 100644
index 0000000..de8d2d5
--- /dev/null
+++ b/mingw-w64-headers/include/udpmib.h
@@ -0,0 +1,29 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_UDPMIB
+#define _INC_UDPMIB
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _MIB_UDP6ROW {
+  IN6_ADDR dwLocalAddr;
+  DWORD    dwLocalScopeId;
+  DWORD    dwLocalPort;
+} MIB_UDP6ROW, *PMIB_UDP6ROW;
+
+typedef struct _MIB_UDP6TABLE {
+  DWORD       dwNumEntries;
+  MIB_UDP6ROW table[ANY_SIZE];
+} MIB_UDP6TABLE, *PMIB_UDP6TABLE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_UDPMIB*/
diff --git a/mingw-w64-headers/include/usp10.h b/mingw-w64-headers/include/usp10.h
index f7dd52a..9fc1837 100644
--- a/mingw-w64-headers/include/usp10.h
+++ b/mingw-w64-headers/include/usp10.h
@@ -18,6 +18,8 @@
 
   typedef void *SCRIPT_CACHE;
 
+  typedef ULONG OPENTYPE_TAG;
+
   HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc);
 
   typedef struct tag_SCRIPT_CONTROL {
@@ -214,6 +216,150 @@
 
   HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE *psds,SCRIPT_CONTROL *psc,SCRIPT_STATE *pss);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct opentype_feature_record {
+  OPENTYPE_TAG tagFeature;
+  LONG         lParameter;
+} OPENTYPE_FEATURE_RECORD;
+
+typedef struct script_charprop {
+  WORD fCanGlyphAlone  :1;
+  WORD reserved  :15;
+} SCRIPT_CHARPROP;
+
+typedef struct textrange_properties {
+  OPENTYPE_FEATURE_RECORD *potfRecords;
+  int                     cotfRecords;
+} TEXTRANGE_PROPERTIES;
+
+typedef struct script_glyphprop {
+  SCRIPT_VISATTR sva;
+  WORD           reserved;
+} SCRIPT_GLYPHPROP;
+
+HRESULT WINAPI ScriptGetFontAlternateGlyphs(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  OPENTYPE_TAG tagFeature,
+  WORD wGlyphId,
+  int cMaxAlternates,
+  WORD *pAlternateGlyphs,
+  int *pcAlternates
+);
+
+HRESULT WINAPI ScriptGetFontFeatureTags(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int cMaxTags,
+  OPENTYPE_TAG *pFeatureTags,
+  int *pcTags
+);
+
+HRESULT WINAPI ScriptGetFontLanguageTags(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  int cMaxTags,
+  OPENTYPE_TAG *pLangSysTags,
+  int *pcTags
+);
+
+HRESULT WINAPI ScriptGetFontScriptTags(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  int cMaxTags,
+  OPENTYPE_TAG *pScriptTags,
+  int *pcTags
+);
+
+HRESULT WINAPI ScriptItemizeOpenType(
+  const WCHAR *pwcInChars,
+  int cInChars,
+  int cMaxItems,
+  const SCRIPT_CONTROL *psControl,
+  const SCRIPT_STATE *psState,
+  SCRIPT_ITEM *pItems,
+  OPENTYPE_TAG *pScriptTags,
+  int *pcItems
+);
+
+HRESULT WINAPI ScriptPlaceOpenType(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  int cChars,
+  const WORD *pwGlyphs,
+  const SCRIPT_GLYPHPROP *pGlyphProps,
+  int cGlyphs,
+  int *piAdvance,
+  GOFFSET *pGoffset,
+  ABC *pABC
+);
+
+HRESULT WINAPI ScriptPositionSingleGlyph(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  OPENTYPE_TAG tagFeature,
+  LONG lParameter,
+  WORD wGlyphId,
+  int iAdvance,
+  GOFFSET Goffset,
+  int *piOutAdvance,
+  GOFFSET *pOutGoffset
+);
+
+HRESULT WINAPI ScriptShapeOpenType(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  int cChars,
+  int cMaxGlyphs,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  WORD *pwOutGlyphs,
+  SCRIPT_GLYPHPROP *pOutGlyphProps,
+  int *pcGlyphs
+);
+
+HRESULT ScriptSubstituteSingleGlyph(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  OPENTYPE_TAG tagFeature,
+  LONG lParameter,
+  WORD wGlyphId,
+  WORD *pwOutGlyphId
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/vds.h b/mingw-w64-headers/include/vds.h
new file mode 100644
index 0000000..8a9dba4
--- /dev/null
+++ b/mingw-w64-headers/include/vds.h
@@ -0,0 +1,1262 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_VDS
+#define _INC_VDS
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GPT_PARTITION_NAME_LENGTH 36
+
+typedef GUID VDS_OBJECT_ID;
+typedef UINT64 VDS_PATH_ID;
+
+typedef enum _VDS_PARTITION_STYLE {
+  VDS_PST_UNKNOWN   = 0,
+  VDS_PST_MBR       = 1,
+  VDS_PST_GPT       = 2 
+} VDS_PARTITION_STYLE;
+
+typedef enum tag_VDS_PARTITION_STYLE {
+  VDS_PARTITION_STYLE_MBR,
+  VDS_PARTITION_STYLE_GPT,
+  VDS_PARTITION_STYLE_RAW 
+} __VDS_PARTITION_STYLE;
+
+typedef enum _VDS_ASYNC_OUTPUT_TYPE {
+  VDS_ASYNCOUT_UNKNOWN             = 0,
+  VDS_ASYNCOUT_CREATEVOLUME        = 1,
+  VDS_ASYNCOUT_EXTENDVOLUME        = 2,
+  VDS_ASYNCOUT_SHRINKVOLUME        = 3,
+  VDS_ASYNCOUT_ADDVOLUMEPLEX       = 4,
+  VDS_ASYNCOUT_BREAKVOLUMEPLEX     = 5,
+  VDS_ASYNCOUT_REMOVEVOLUMEPLEX    = 6,
+  VDS_ASYNCOUT_REPAIRVOLUMEPLEX    = 7,
+  VDS_ASYNCOUT_RECOVERPACK         = 8,
+  VDS_ASYNCOUT_REPLACEDISK         = 9,
+  VDS_ASYNCOUT_CREATEPARTITION     = 10,
+  VDS_ASYNCOUT_CLEAN               = 11,
+  VDS_ASYNCOUT_CREATELUN           = 50,
+  VDS_ASYNCOUT_ADDLUNPLEX          = 52,
+  VDS_ASYNCOUT_REMOVELUNPLEX       = 53,
+  VDS_ASYNCOUT_EXTENDLUN           = 54,
+  VDS_ASYNCOUT_SHRINKLUN           = 55,
+  VDS_ASYNCOUT_RECOVERLUN          = 56,
+  VDS_ASYNCOUT_LOGINTOTARGET       = 60,
+  VDS_ASYNCOUT_LOGOUTFROMTARGET    = 61,
+  VDS_ASYNCOUT_CREATETARGET        = 62,
+  VDS_ASYNCOUT_CREATEPORTALGROUP   = 63,
+  VDS_ASYNCOUT_DELETETARGET        = 64,
+  VDS_ASYNCOUT_ADDPORTAL           = 65,
+  VDS_ASYNCOUT_REMOVEPORTAL        = 66,
+  VDS_ASYNCOUT_DELETEPORTALGROUP   = 67,
+  VDS_ASYNCOUT_FORMAT              = 101,
+  VDS_ASYNCOUT_CREATE_VDISK        = 200,
+  VDS_ASYNCOUT_ATTACH_VDISK        = 201,
+  VDS_ASYNCOUT_COMPACT_VDISK       = 202,
+  VDS_ASYNCOUT_MERGE_VDISK         = 203,
+  VDS_ASYNCOUT_EXPAND_VDISK        = 204 
+} VDS_ASYNC_OUTPUT_TYPE;
+
+typedef enum _VDS_HEALTH {
+  VDS_H_UNKNOWN                     = 0,
+  VDS_H_HEALTHY                     = 1,
+  VDS_H_REBUILDING                  = 2,
+  VDS_H_STALE                       = 3,
+  VDS_H_FAILING                     = 4,
+  VDS_H_FAILING_REDUNDANCY          = 5,
+  VDS_H_FAILED_REDUNDANCY           = 6,
+  VDS_H_FAILED_REDUNDANCY_FAILING   = 7,
+  VDS_H_FAILED                      = 8,
+  VDS_H_REPLACED                    = 9,
+  VDS_H_PENDING_FAILURE             = 10,
+  VDS_H_DEGRADED                    = 11 
+} VDS_HEALTH;
+
+typedef enum _VDS_CONTROLLER_STATUS {
+  VDS_CS_UNKNOWN     = 0,
+  VDS_CS_ONLINE      = 1,
+  VDS_CS_NOT_READY   = 2,
+  VDS_CS_OFFLINE     = 4,
+  VDS_CS_FAILED      = 5,
+  VDS_CS_REMOVED     = 8 
+} VDS_CONTROLLER_STATUS;
+
+typedef enum _VDS_DISK_EXTENT_TYPE {
+  VDS_DET_UNKNOWN    = 0,
+  VDS_DET_FREE       = 1,
+  VDS_DET_DATA       = 2,
+  VDS_DET_OEM        = 3,
+  VDS_DET_ESP        = 4,
+  VDS_DET_MSR        = 5,
+  VDS_DET_LDM        = 6,
+  VDS_DET_CLUSTER    = 7,
+  VDS_DET_UNUSABLE   = 0x7FFF 
+} VDS_DISK_EXTENT_TYPE;
+
+typedef enum _VDS_DISK_FLAG {
+  VDS_DF_AUDIO_CD               = 0x1,
+  VDS_DF_HOTSPARE               = 0x2,
+  VDS_DF_RESERVE_CAPABLE        = 0x4,
+  VDS_DF_MASKED                 = 0x8,
+  VDS_DF_STYLE_CONVERTIBLE      = 0x10,
+  VDS_DF_CLUSTERED              = 0x20,
+  VDS_DF_READ_ONLY              = 0x40,
+  VDS_DF_SYSTEM_DISK            = 0x80,
+  VDS_DF_BOOT_DISK              = 0x100,
+  VDS_DF_PAGEFILE_DISK          = 0x200,
+  VDS_DF_HIBERNATIONFILE_DISK   = 0x400,
+  VDS_DF_CRASHDUMP_DISK         = 0x800,
+  VDS_DF_HAS_ARC_PATH           = 0x1000,
+  VDS_DF_DYNAMIC                = 0x2000,
+  VDS_DF_BOOT_FROM_DISK         = 0x4000,
+  VDS_DF_CURRENT_READ_ONLY      = 0x8000 
+} VDS_DISK_FLAG;
+
+typedef enum _VDS_NOTIFICATION_TARGET_TYPE {
+  VDS_NTT_UNKNOWN        = 0,
+  VDS_NTT_PACK           = 10,
+  VDS_NTT_VOLUME         = 11,
+  VDS_NTT_DISK           = 13,
+  VDS_NTT_PARTITION      = 60,
+  VDS_NTT_DRIVE_LETTER   = 61,
+  VDS_NTT_FILE_SYSTEM    = 62,
+  VDS_NTT_MOUNT_POINT    = 63,
+  VDS_NTT_SUB_SYSTEM     = 30,
+  VDS_NTT_CONTROLLER     = 31,
+  VDS_NTT_DRIVE          = 32,
+  VDS_NTT_LUN            = 33,
+  VDS_NTT_PORT           = 35,
+  VDS_NTT_PORTAL         = 36,
+  VDS_NTT_TARGET         = 37,
+  VDS_NTT_PORTAL_GROUP   = 38,
+  VDS_NTT_SERVICE        = 200 
+} VDS_NOTIFICATION_TARGET_TYPE;
+
+typedef enum _VDS_OBJECT_TYPE {
+  VDS_OT_UNKNOWN        = 0,
+  VDS_OT_PROVIDER       = 1,
+  VDS_OT_PACK           = 10,
+  VDS_OT_VOLUME         = 11,
+  VDS_OT_VOLUME_PLEX    = 12,
+  VDS_OT_DISK           = 13,
+  VDS_OT_SUB_SYSTEM     = 30,
+  VDS_OT_CONTROLLER     = 31,
+  VDS_OT_DRIVE          = 32,
+  VDS_OT_LUN            = 33,
+  VDS_OT_LUN_PLEX       = 34,
+  VDS_OT_PORT           = 35,
+  VDS_OT_PORTAL         = 36,
+  VDS_OT_TARGET         = 37,
+  VDS_OT_PORTAL_GROUP   = 38,
+  VDS_OT_STORAGE_POOL   = 39,
+  VDS_OT_HBAPORT        = 90,
+  VDS_OT_INIT_ADAPTER   = 91,
+  VDS_OT_INIT_PORTAL    = 92,
+  VDS_OT_ASYNC          = 100,
+  VDS_OT_ENUM           = 101,
+  VDS_OT_VDISK          = 200,
+  VDS_OT_OPEN_VDISK     = 201 
+} VDS_OBJECT_TYPE;
+
+typedef enum _VDS_STORAGE_BUS_TYPE {
+  VDSBusTypeUnknown = 0x00,
+  VDSBusTypeScsi = 0x01,
+  VDSBusTypeAtapi = 0x02,
+  VDSBusTypeAta = 0x03,
+  VDSBusType1394 = 0x04,
+  VDSBusTypeSsa = 0x05,
+  VDSBusTypeFibre = 0x06,
+  VDSBusTypeUsb = 0x07,
+  VDSBusTypeRAID = 0x08,
+  VDSBusTypeiScsi = 0x09,
+  VDSBusTypeMaxReserved = 0x7F
+}VDS_STORAGE_BUS_TYPE;
+
+typedef enum _VDS_DISK_STATUS {
+  VDS_DS_UNKNOWN     = 0,
+  VDS_DS_ONLINE      = 1,
+  VDS_DS_NOT_READY   = 2,
+  VDS_DS_NO_MEDIA    = 3,
+  VDS_DS_OFFLINE     = 4,
+  VDS_DS_FAILED      = 5,
+  VDS_DS_MISSING     = 6 
+} VDS_DISK_STATUS;
+
+typedef enum _VDS_DRIVE_FLAG {
+  VDS_DRF_HOTSPARE           = 0x1,
+  VDS_DRF_ASSIGNED           = 0x2,
+  VDS_DRF_UNASSIGNED         = 0x4,
+  VDS_DRF_HOTSPARE_IN_USE    = 0x8,
+  VDS_DRF_HOTSPARE_STANDBY   = 0x10 
+} VDS_DRIVE_FLAG;
+
+typedef enum _VDS_DRIVE_LETTER_FLAG {
+  VDS_DLF_NON_PERSISTENT   = 0x1 
+} VDS_DRIVE_LETTER_FLAG;
+
+typedef enum _VDS_DRIVE_STATUS {
+  VDS_DRS_UNKNOWN     = 0,
+  VDS_DRS_ONLINE      = 1,
+  VDS_DRS_NOT_READY   = 2,
+  VDS_DRS_OFFLINE     = 4,
+  VDS_DRS_FAILED      = 5,
+  VDS_DRS_REMOVED     = 8 
+} VDS_DRIVE_STATUS;
+
+typedef enum _VDS_FILE_SYSTEM_FLAG {
+  VDS_FSF_SUPPORT_FORMAT            = 0x1,
+  VDS_FSF_SUPPORT_QUICK_FORMAT      = 0x2,
+  VDS_FSF_SUPPORT_COMPRESS          = 0x4,
+  VDS_FSF_SUPPORT_SPECIFY_LABEL     = 0x8,
+  VDS_FSF_SUPPORT_MOUNT_POINT       = 0x10,
+  VDS_FSF_SUPPORT_REMOVABLE_MEDIA   = 0x20,
+  VDS_FSF_SUPPORT_EXTEND            = 0x40,
+  VDS_FSF_ALLOCATION_UNIT_512       = 0x10000,
+  VDS_FSF_ALLOCATION_UNIT_1K        = 0x20000,
+  VDS_FSF_ALLOCATION_UNIT_2K        = 0x40000,
+  VDS_FSF_ALLOCATION_UNIT_4K        = 0x80000,
+  VDS_FSF_ALLOCATION_UNIT_8K        = 0x100000,
+  VDS_FSF_ALLOCATION_UNIT_16K       = 0x200000,
+  VDS_FSF_ALLOCATION_UNIT_32K       = 0x400000,
+  VDS_FSF_ALLOCATION_UNIT_64K       = 0x800000,
+  VDS_FSF_ALLOCATION_UNIT_128K      = 0x1000000,
+  VDS_FSF_ALLOCATION_UNIT_256K      = 0x2000000 
+} VDS_FILE_SYSTEM_FLAG;
+
+typedef enum _VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG {
+  VDS_FSS_DEFAULT             = 0x00000001,
+  VDS_FSS_PREVIOUS_REVISION   = 0x00000002,
+  VDS_FSS_RECOMMENDED         = 0x00000004 
+} VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG;
+
+typedef enum _VDS_FILE_SYSTEM_PROP_FLAG {
+  VDS_FPF_COMPRESSED   = 0x1 
+} VDS_FILE_SYSTEM_PROP_FLAG;
+
+typedef enum _VDS_FILE_SYSTEM_TYPE {
+  VDS_FST_UNKNOWN   = 0,
+  VDS_FST_RAW       = 1,
+  VDS_FST_FAT       = 2,
+  VDS_FST_FAT32     = 3,
+  VDS_FST_NTFS      = 4,
+  VDS_FST_CDFS      = 5,
+  VDS_FST_UDF       = 6,
+  VDS_FST_EXFAT     = 7 
+} VDS_FILE_SYSTEM_TYPE;
+
+typedef enum _VDS_HBAPORT_SPEED_FLAG {
+  VDS_HSF_UNKNOWN          = 0,
+  VDS_HSF_1GBIT            = 0x1,
+  VDS_HSF_2GBIT            = 0x2,
+  VDS_HSF_10GBIT           = 0x4,
+  VDS_HSF_4GBIT            = 0x8,
+  VDS_HSF_NOT_NEGOTIATED   = 0x8000 
+} VDS_HBAPORT_SPEED_FLAG;
+
+typedef enum _VDS_HBAPORT_STATUS {
+  VDS_HPS_UNKNOWN       = 1,
+  VDS_HPS_ONLINE        = 2,
+  VDS_HPS_OFFLINE       = 3,
+  VDS_HPS_BYPASSED      = 4,
+  VDS_HPS_DIAGNOSTICS   = 5,
+  VDS_HPS_LINKDOWN      = 6,
+  VDS_HPS_ERROR         = 7,
+  VDS_HPS_LOOPBACK      = 8 
+} VDS_HBAPORT_STATUS;
+
+typedef enum _VDS_HBAPORT_TYPE {
+  VDS_HPT_UNKNOWN      = 1,
+  VDS_HPT_OTHER        = 2,
+  VDS_HPT_NOTPRESENT   = 3,
+  VDS_HPT_NPORT        = 5,
+  VDS_HPT_NLPORT       = 6,
+  VDS_HPT_FLPORT       = 7,
+  VDS_HPT_FPORT        = 8,
+  VDS_HPT_EPORT        = 9,
+  VDS_HPT_GPORT        = 10,
+  VDS_HPT_LPORT        = 20,
+  VDS_HPT_PTP          = 21 
+} VDS_HBAPORT_TYPE;
+
+typedef enum _VDS_HWPROVIDER_TYPE {
+  VDS_HWT_UNKNOWN         = 0,
+  VDS_HWT_PCI_RAID        = 1,
+  VDS_HWT_FIBRE_CHANNEL   = 2,
+  VDS_HWT_ISCSI           = 3,
+  VDS_HWT_SAS             = 4,
+  VDS_HWT_HYBRID          = 5 
+} VDS_HWPROVIDER_TYPE;
+
+typedef enum _VDS_INTERCONNECT_ADDRESS_TYPE {
+  VDS_IA_UNKNOWN = 0,
+  VDS_IA_FCFS = 1,
+  VDS_IA_FCPH = 2,
+  VDS_IA_FCPH3 = 3,
+  VDS_IA_MAC = 4,
+  VDS_IA_SCSI = 5
+}VDS_INTERCONNECT_ADDRESS_TYPE;
+
+typedef enum VDS_IPADDRESS_TYPE {
+  VDS_IPT_TEXT    = 0,
+  VDS_IPT_IPV4    = 1,
+  VDS_IPT_IPV6    = 2,
+  VDS_IPT_EMPTY   = 3 
+} VDS_IPADDRESS_TYPE;
+
+typedef enum _VDS_ISCSI_AUTH_TYPE {
+  VDS_IAT_NONE          = 0,
+  VDS_IAT_CHAP          = 1,
+  VDS_IAT_MUTUAL_CHAP   = 2 
+} VDS_ISCSI_AUTH_TYPE;
+
+typedef enum _VDS_ISCSI_LOGIN_FLAG {
+  VDS_ILF_REQUIRE_IPSEC       = 0x1,
+  VDS_ILF_MULTIPATH_ENABLED   = 0x2 
+} VDS_ISCSI_LOGIN_FLAG;
+
+typedef enum _VDS_ISCSI_LOGIN_TYPE {
+  VDS_ILT_MANUAL       = 0,
+  VDS_ILT_PERSISTENT   = 1,
+  VDS_ILT_BOOT         = 2 
+} VDS_ISCSI_LOGIN_TYPE;
+
+typedef enum _VDS_ISCSI_PORTAL_STATUS {
+  VDS_IPS_UNKNOWN     = 0,
+  VDS_IPS_ONLINE      = 1,
+  VDS_IPS_NOT_READY   = 2,
+  VDS_IPS_OFFLINE     = 4,
+  VDS_IPS_FAILED      = 5 
+} VDS_ISCSI_PORTAL_STATUS;
+
+typedef enum _VDS_LOADBALANCE_POLICY_ENUM {
+  VDS_LBP_UNKNOWN                   = 0,
+  VDS_LBP_FAILOVER                  = 1,
+  VDS_LBP_ROUND_ROBIN               = 2,
+  VDS_LBP_ROUND_ROBIN_WITH_SUBSET   = 3,
+  VDS_LBP_DYN_LEAST_QUEUE_DEPTH     = 4,
+  VDS_LBP_WEIGHTED_PATHS            = 5,
+  VDS_LBP_LEAST_BLOCKS              = 6,
+  VDS_LBP_VENDOR_SPECIFIC           = 7 
+} VDS_LOADBALANCE_POLICY_ENUM;
+
+typedef enum _VDS_LUN_FLAG {
+  VDS_LF_LBN_REMAP_ENABLED               = 0x01,
+  VDS_LF_READ_BACK_VERIFY_ENABLED        = 0x02,
+  VDS_LF_WRITE_THROUGH_CACHING_ENABLED   = 0x04,
+  VDS_LF_HARDWARE_CHECKSUM_ENABLED       = 0x08,
+  VDS_LF_READ_CACHE_ENABLED              = 0x10,
+  VDS_LF_WRITE_CACHE_ENABLED             = 0x20,
+  VDS_LF_MEDIA_SCAN_ENABLED              = 0x40,
+  VDS_LF_CONSISTENCY_CHECK_ENABLED       = 0x80,
+  VDS_LF_SNAPSHOT                        = 0x100 
+} VDS_LUN_FLAG;
+
+typedef enum _VDS_LUN_PLEX_FLAG  {
+  VDS_LPF_LBN_REMAP_ENABLED   = 0x1 
+} VDS_LUN_PLEX_FLAG;
+
+typedef enum _VDS_TRANSITION_STATE {
+  VDS_TS_UNKNOWN       = 0,
+  VDS_TS_STABLE        = 1,
+  VDS_TS_EXTENDING     = 2,
+  VDS_TS_SHRINKING     = 3,
+  VDS_TS_RECONFIGING   = 4,
+  VDS_TS_RESTRIPING    = 8 
+} VDS_TRANSITION_STATE;
+
+typedef enum _VDS_LUN_PLEX_STATUS {
+  VDS_LPS_UNKNOWN     = 0,
+  VDS_LPS_ONLINE      = 1,
+  VDS_LPS_NOT_READY   = 2,
+  VDS_LPS_OFFLINE     = 4,
+  VDS_LPS_FAILED      = 5 
+} VDS_LUN_PLEX_STATUS;
+
+typedef enum _VDS_LUN_PLEX_TYPE {
+  VDS_LPT_UNKNOWN   = 0,
+  VDS_LPT_SIMPLE    = 10,
+  VDS_LPT_SPAN      = 11,
+  VDS_LPT_STRIPE    = 12,
+  VDS_LPT_PARITY    = 14,
+  VDS_LPT_RAID2     = 15,
+  VDS_LPT_RAID3     = 16,
+  VDS_LPT_RAID4     = 17,
+  VDS_LPT_RAID5     = 18,
+  VDS_LPT_RAID6     = 19,
+  VDS_LPT_RAID03    = 21,
+  VDS_LPT_RAID05    = 22,
+  VDS_LPT_RAID10    = 23,
+  VDS_LPT_RAID15    = 24,
+  VDS_LPT_RAID30    = 25,
+  VDS_LPT_RAID50    = 26,
+  VDS_LPT_RAID53    = 28,
+  VDS_LPT_RAID60    = 29 
+} VDS_LUN_PLEX_TYPE;
+
+typedef enum _VDS_LUN_STATUS {
+  VDS_LS_UNKNOWN     = 0,
+  VDS_LS_ONLINE      = 1,
+  VDS_LS_NOT_READY   = 2,
+  VDS_LS_OFFLINE     = 4,
+  VDS_LS_FAILED      = 5 
+} VDS_LUN_STATUS;
+
+typedef enum _VDS_LUN_TYPE {
+  VDS_LT_UNKNOWN              = 0,
+  VDS_LT_DEFAULT              = 1,
+  VDS_LT_FAULT_TOLERANT       = 2,
+  VDS_LT_NON_FAULT_TOLERANT   = 3,
+  VDS_LT_SIMPLE               = 10,
+  VDS_LT_SPAN                 = 11,
+  VDS_LT_STRIPE               = 12,
+  VDS_LT_MIRROR               = 13,
+  VDS_LT_PARITY               = 14,
+  VDS_LT_RAID2                = 15,
+  VDS_LT_RAID3                = 16,
+  VDS_LT_RAID4                = 17,
+  VDS_LT_RAID5                = 18,
+  VDS_LT_RAID6                = 19,
+  VDS_LT_RAID01               = 20,
+  VDS_LT_RAID03               = 21,
+  VDS_LT_RAID05               = 22,
+  VDS_LT_RAID10               = 23,
+  VDS_LT_RAID15               = 24,
+  VDS_LT_RAID30               = 25,
+  VDS_LT_RAID50               = 26,
+  VDS_LT_RAID51               = 27,
+  VDS_LT_RAID53               = 28,
+  VDS_LT_RAID60               = 29,
+  VDS_LT_RAID61               = 30 
+} VDS_LUN_TYPE;
+
+typedef enum _VDS_MAINTENANCE_OPERATION {
+  BlinkLight   = 1,
+  BeepAlarm    = 2,
+  SpinDown     = 3,
+  SpinUp       = 4,
+  Ping         = 5 
+} VDS_MAINTENANCE_OPERATION;
+
+typedef enum _VDS_PACK_FLAG {
+  VDS_PKF_FOREIGN        = 0x1,
+  VDS_PKF_NOQUORUM       = 0x2,
+  VDS_PKF_POLICY         = 0x4,
+  VDS_PKF_CORRUPTED      = 0x8,
+  VDS_PKF_ONLINE_ERROR   = 0x10 
+} VDS_PACK_FLAG;
+
+typedef enum _VDS_PACK_STATUS {
+  VDS_PS_UNKNOWN   = 0,
+  VDS_PS_ONLINE    = 1,
+  VDS_PS_OFFLINE   = 4 
+} VDS_PACK_STATUS;
+
+typedef enum _VDS_PARTITION_FLAG {
+  VDS_PTF_SYSTEM   = 0x1 
+} VDS_PARTITION_FLAG;
+
+typedef enum _VDS_PATH_STATUS {
+  VDS_MPS_UNKNOWN   = 0,
+  VDS_MPS_ONLINE    = 1,
+  VDS_MPS_FAILED    = 5,
+  VDS_MPS_STANDBY   = 7 
+} VDS_PATH_STATUS;
+
+typedef enum _VDS_PORT_STATUS {
+  VDS_PRS_UNKNOWN     = 0,
+  VDS_PRS_ONLINE      = 1,
+  VDS_PRS_NOT_READY   = 2,
+  VDS_PRS_OFFLINE     = 4,
+  VDS_PRS_FAILED      = 5,
+  VDS_PRS_REMOVED     = 8 
+} VDS_PORT_STATUS;
+
+typedef enum _VDS_PROVIDER_FLAG {
+  VDS_PF_DYNAMIC                           = 0x00000001,
+  VDS_PF_INTERNAL_HARDWARE_PROVIDER        = 0x00000002,
+  VDS_PF_ONE_DISK_ONLY_PER_PACK            = 0x00000004,
+  VDS_PF_ONE_PACK_ONLINE_ONLY              = 0x00000008,
+  VDS_PF_VOLUME_SPACE_MUST_BE_CONTIGUOUS   = 0x00000010,
+  VDS_PF_SUPPORT_DYNAMIC                   = 0x80000000,
+  VDS_PF_SUPPORT_FAULT_TOLERANT            = 0x40000000,
+  VDS_PF_SUPPORT_DYNAMIC_1394              = 0x20000000,
+  VDS_PF_SUPPORT_MIRROR                    = 0x00000020,
+  VDS_PF_SUPPORT_RAID5                     = 0x00000040 
+} VDS_PROVIDER_FLAG;
+
+typedef enum _VDS_PROVIDER_LBSUPPORT_FLAG {
+  VDS_LBF_FAILOVER                  = 0x1,
+  VDS_LBF_ROUND_ROBIN               = 0x2,
+  VDS_LBF_ROUND_ROBIN_WITH_SUBSET   = 0x4,
+  VDS_LBF_DYN_LEAST_QUEUE_DEPTH     = 0x8,
+  VDS_LBF_WEIGHTED_PATHS            = 0x10,
+  VDS_LBF_LEAST_BLOCKS              = 0x20,
+  VDS_LBF_VENDOR_SPECIFIC           = 0x40 
+} VDS_PROVIDER_LBSUPPORT_FLAG;
+
+typedef enum _VDS_PROVIDER_TYPE {
+  VDS_PT_UNKNOWN       = 0,
+  VDS_PT_SOFTWARE      = 1,
+  VDS_PT_HARDWARE      = 2,
+  VDS_PT_VIRTUALDISK   = 3,
+  VDS_PT_MAX           = 4 
+} VDS_PROVIDER_TYPE;
+
+typedef enum _VDS_QUERY_PROVIDER_FLAG {
+  VDS_QUERY_SOFTWARE_PROVIDERS   = 0x1,
+  VDS_QUERY_HARDWARE_PROVIDERS   = 0x2 
+} VDS_QUERY_PROVIDER_FLAG;
+
+typedef enum _VDS_SAN_POLICY {
+  VDS_SP_UNKNOWN          = 0x0,
+  VDS_SP_ONLINE           = 0x1,
+  VDS_SP_OFFLINE_SHARED   = 0x2,
+  VDS_SP_OFFLINE          = 0x3 
+} VDS_SAN_POLICY;
+
+typedef enum _VDS_SERVICE_FLAG {
+  VDS_SVF_SUPPORT_DYNAMIC              = 0x1,
+  VDS_SVF_SUPPORT_FAULT_TOLERANT       = 0x2,
+  VDS_SVF_SUPPORT_GPT                  = 0x4,
+  VDS_SVF_SUPPORT_DYNAMIC_1394         = 0x8,
+  VDS_SVF_CLUSTER_SERVICE_CONFIGURED   = 0x10,
+  VDS_SVF_AUTO_MOUNT_OFF               = 0x20,
+  VDS_SVF_OS_UNINSTALL_VALID           = 0x40,
+  VDS_SVF_EFI                          = 0x80,
+  VDS_SVF_SUPPORT_MIRROR               = 0x100L,
+  VDS_SVF_SUPPORT_RAID5                = 0x200L 
+} VDS_SERVICE_FLAG;
+
+typedef enum _VDS_STORAGE_IDENTIFIER_CODE_SET {
+  VDSStorageIdCodeSetReserved = 0,
+  VDSStorageIdCodeSetBinary = 1,
+  VDSStorageIdCodeSetAscii = 2
+}VDS_STORAGE_IDENTIFIER_CODE_SET;
+
+typedef enum VDS_STORAGE_IDENTIFIER_TYPE {
+  VDSStorageIdTypeVendorSpecific = 0,
+  VDSStorageIdTypeVendorId = 1,
+  VDSStorageIdTypeEUI64 = 2,
+  VDSStorageIdTypeFCPHName = 3,
+  VDSStorageIdTypeSCSINameString = 8
+}VDS_STORAGE_IDENTIFIER_TYPE;
+
+typedef enum _VDS_SUB_SYSTEM_FLAG {
+  VDS_SF_LUN_MASKING_CAPABLE                = 0x1,
+  VDS_SF_LUN_PLEXING_CAPABLE                = 0x2,
+  VDS_SF_LUN_REMAPPING_CAPABLE              = 0x4,
+  VDS_SF_DRIVE_EXTENT_CAPABLE               = 0x8,
+  VDS_SF_HARDWARE_CHECKSUM_CAPABLE          = 0x10,
+  VDS_SF_RADIUS_CAPABLE                     = 0x20,
+  VDS_SF_READ_BACK_VERIFY_CAPABLE           = 0x40,
+  VDS_SF_WRITE_THROUGH_CACHING_CAPABLE      = 0x80,
+  VDS_SF_SUPPORTS_FAULT_TOLERANT_LUNS       = 0x200,
+  VDS_SF_SUPPORTS_NON_FAULT_TOLERANT_LUNS   = 0x400,
+  VDS_SF_SUPPORTS_SIMPLE_LUNS               = 0x800,
+  VDS_SF_SUPPORTS_SPAN_LUNS                 = 0x1000,
+  VDS_SF_SUPPORTS_STRIPE_LUNS               = 0x2000,
+  VDS_SF_SUPPORTS_MIRROR_LUNS               = 0x4000,
+  VDS_SF_SUPPORTS_PARITY_LUNS               = 0x8000,
+  VDS_SF_SUPPORTS_AUTH_CHAP                 = 0x10000,
+  VDS_SF_SUPPORTS_AUTH_MUTUAL_CHAP          = 0x20000,
+  VDS_SF_SUPPORTS_SIMPLE_TARGET_CONFIG      = 0x40000,
+  VDS_SF_SUPPORTS_LUN_NUMBER                = 0x80000,
+  VDS_SF_SUPPORTS_MIRRORED_CACHE            = 0x100000,
+  VDS_SF_READ_CACHING_CAPABLE               = 0x200000,
+  VDS_SF_WRITE_CACHING_CAPABLE              = 0x400000,
+  VDS_SF_MEDIA_SCAN_CAPABLE                 = 0x800000,
+  VDS_SF_CONSISTENCY_CHECK_CAPABLE          = 0x1000000 
+} VDS_SUB_SYSTEM_FLAG;
+
+typedef enum _VDS_SUB_SYSTEM_STATUS {
+  VDS_SSS_UNKNOWN             = 0,
+  VDS_SSS_ONLINE              = 1,
+  VDS_SSS_NOT_READY           = 2,
+  VDS_SSS_OFFLINE             = 4,
+  VDS_SSS_FAILED              = 5,
+  VDS_SSS_PARTIALLY_MANAGED   = 9 
+} VDS_SUB_SYSTEM_STATUS;
+
+typedef enum _VDS_VERSION_SUPPORT_FLAG {
+  VDS_VSF_1_0   = 0x1,
+  VDS_VSF_1_1   = 0x2,
+  VDS_VSF_2_0   = 0x4,
+  VDS_VSF_2_1   = 0x8,
+  VDS_VSF_3_0   = 0x10 
+} VDS_VERSION_SUPPORT_FLAG;
+
+typedef enum _VDS_VOLUME_FLAG {
+  VDS_VF_SYSTEM_VOLUME                  = 0x1,
+  VDS_VF_BOOT_VOLUME                    = 0x2,
+  VDS_VF_ACTIVE                         = 0x4,
+  VDS_VF_READONLY                       = 0x8,
+  VDS_VF_HIDDEN                         = 0x10,
+  VDS_VF_CAN_EXTEND                     = 0x20,
+  VDS_VF_CAN_SHRINK                     = 0x40,
+  VDS_VF_PAGEFILE                       = 0x80,
+  VDS_VF_HIBERNATION                    = 0x100,
+  VDS_VF_CRASHDUMP                      = 0x200,
+  VDS_VF_INSTALLABLE                    = 0x400,
+  VDS_VF_LBN_REMAP_ENABLED              = 0x800,
+  VDS_VF_FORMATTING                     = 0x1000,
+  VDS_VF_NOT_FORMATTABLE                = 0x2000,
+  VDS_VF_NTFS_NOT_SUPPORTED             = 0x4000,
+  VDS_VF_FAT32_NOT_SUPPORTED            = 0x8000,
+  VDS_VF_FAT_NOT_SUPPORTED              = 0x10000,
+  VDS_VF_NO_DEFAULT_DRIVE_LETTER        = 0x20000,
+  VDS_VF_PERMANENTLY_DISMOUNTED         = 0x40000,
+  VDS_VF_PERMANENT_DISMOUNT_SUPPORTED   = 0x80000,
+  VDS_VF_SHADOW_COPY                    = 0x100000,
+  VDS_VF_FVE_ENABLED                    = 0x200000,
+  VDS_VF_DIRTY                          = 0x400000 
+} VDS_VOLUME_FLAG;
+
+typedef enum _VDS_VOLUME_PLEX_STATUS {
+  VDS_VPS_UNKNOWN    = 0,
+  VDS_VPS_ONLINE     = 1,
+  VDS_VPS_NO_MEDIA   = 3,
+  VDS_VPS_FAILED     = 5 
+} VDS_VOLUME_PLEX_STATUS;
+
+typedef enum _VDS_VOLUME_PLEX_TYPE {
+  VDS_VPT_UNKNOWN   = 0,
+  VDS_VPT_SIMPLE    = 10,
+  VDS_VPT_SPAN      = 11,
+  VDS_VPT_STRIPE    = 12,
+  VDS_VPT_PARITY    = 14 
+} VDS_VOLUME_PLEX_TYPE;
+
+typedef enum _VDS_VOLUME_STATUS {
+  VDS_VS_UNKNOWN    = 0,
+  VDS_VS_ONLINE     = 1,
+  VDS_VS_NO_MEDIA   = 3,
+  VDS_VS_FAILED     = 5,
+  VDS_VS_OFFLINE    = 4 
+} VDS_VOLUME_STATUS;
+
+typedef enum _VDS_VOLUME_TYPE {
+  VDS_VT_UNKNOWN   = 0,
+  VDS_VT_SIMPLE    = 10,
+  VDS_VT_SPAN      = 11,
+  VDS_VT_STRIPE    = 12,
+  VDS_VT_MIRROR    = 13,
+  VDS_VT_PARITY    = 14 
+} VDS_VOLUME_TYPE;
+
+typedef struct _VDS_PARTITION_INFO_GPT {
+  GUID      partitionType;
+  GUID      partitionId;
+  ULONGLONG attributes;
+  WCHAR     name[GPT_PARTITION_NAME_LENGTH];
+} VDS_PARTITION_INFO_GPT;
+
+typedef struct _CHANGE_ATTRIBUTES_PARAMETERS {
+  VDS_PARTITION_STYLE style;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      BOOLEAN bootIndicator;
+    } MbrPartInfo;
+    __MINGW_EXTENSION struct {
+      ULONGLONG attributes;
+    } GptPartInfo;
+  };
+} CHANGE_ATTRIBUTES_PARAMETERS;
+
+typedef struct _CREATE_PARTITION_PARAMETERS {
+  VDS_PARTITION_STYLE style;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      BYTE    partitionType;
+      BOOLEAN bootIndicator;
+    } MbrPartInfo;
+    __MINGW_EXTENSION struct {
+      GUID      partitionType;
+      GUID      partitionId;
+      ULONGLONG attributes;
+      WCHAR     name[GPT_PARTITION_NAME_LENGTH];
+    } GptPartInfo;
+  };
+} CREATE_PARTITION_PARAMETERS;
+
+typedef struct _VDS_ASYNC_OUTPUT {
+  VDS_ASYNC_OUTPUT_TYPE type;
+  /*[switch(type)] */__MINGW_EXTENSION union {
+    /*[case(VDS_ASYNCOUT_CREATEPARTITION)]*/
+    __MINGW_EXTENSION struct {
+      ULONGLONG     ullOffset;
+      VDS_OBJECT_ID volumeId;
+    } cp;
+    /*[case(VDS_ASYNCOUT_CREATEVOLUME)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pVolumeUnk;
+    } cv;
+    /*[case(VDS_ASYNCOUT_BREAKVOLUMEPLEX)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pVolumeUnk;
+    } bvp;
+    /*[case(VDS_ASYNCOUT_CREATELUN)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pLunUnk;
+    } cl;
+    /*[case(VDS_ASYNCOUT_CREATETARGET)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pTargetUnk;
+    } ct;
+    /*[case(VDS_ASYNCOUT_CREATEPORTALGROUP)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pPortalGroupUnk;
+    } cpg;
+    /*[case(VDS_ASYNCOUT_CREATE_VDISK)]*/
+    __MINGW_EXTENSION struct {
+      IUnknown *pVDiskUnk;
+    } cvd;
+  } DUMMYUNIONNAME;
+}  VDS_ASYNC_OUTPUT;
+
+#define VDS_NF_CONTROLLER_ARRIVE 103
+#define VDS_NF_CONTROLLER_DEPART 104
+#define VDS_NF_CONTROLLER_MODIFY 350
+#define VDS_NF_CONTROLLER_REMOVED 351
+
+typedef struct _VDS_CONTROLLER_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID controllerId;
+} VDS_CONTROLLER_NOTIFICATION;
+
+typedef struct _VDS_CONTROLLER_PROP {
+  VDS_OBJECT_ID         id;
+  LPWSTR                pwszFriendlyName;
+  LPWSTR                pwszIdentification;
+  VDS_CONTROLLER_STATUS status;
+  VDS_HEALTH            health;
+  SHORT                 sNumberOfPorts;
+} VDS_CONTROLLER_PROP;
+
+typedef struct _VDS_DISK_EXTENT {
+  VDS_OBJECT_ID        diskId;
+  VDS_DISK_EXTENT_TYPE type;
+  ULONGLONG            ullOffset;
+  ULONGLONG            ullSize;
+  VDS_OBJECT_ID        volumeId;
+  VDS_OBJECT_ID        plexId;
+  ULONG                memberIdx;
+} VDS_DISK_EXTENT, *PVDS_DISK_EXTENT;
+
+typedef struct _VDS_DISK_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID diskId;
+} VDS_DISK_NOTIFICATION;
+
+typedef struct _VDS_PACK_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID packId;
+} VDS_PACK_NOTIFICATION;
+
+typedef struct _VDS_VOLUME_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID volumeId;
+  VDS_OBJECT_ID plexId;
+  ULONG         ulPercentCompleted;
+} VDS_VOLUME_NOTIFICATION;
+
+typedef struct _VDS_PARTITION_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID diskId;
+  ULONGLONG     ullOffset;
+} VDS_PARTITION_NOTIFICATION;
+
+typedef struct _VDS_DRIVE_LETTER_NOTIFICATION {
+  ULONG         ulEvent;
+  WCHAR         wcLetter;
+  VDS_OBJECT_ID volumeId;
+} VDS_DRIVE_LETTER_NOTIFICATION;
+
+typedef struct _VDS_FILE_SYSTEM_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID volumeId;
+  DWORD         dwPercentCompleted;
+} VDS_FILE_SYSTEM_NOTIFICATION;
+
+typedef struct _VDS_MOUNT_POINT_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID volumeId;
+} VDS_MOUNT_POINT_NOTIFICATION;
+
+typedef struct _VDS_SUB_SYSTEM_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID subSystemId;
+} VDS_SUB_SYSTEM_NOTIFICATION;
+
+typedef struct _VDS_DRIVE_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID driveId;
+} VDS_DRIVE_NOTIFICATION;
+
+typedef struct _VDS_LUN_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID LunId;
+} VDS_LUN_NOTIFICATION;
+
+typedef struct _VDS_PORT_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID portId;
+} VDS_PORT_NOTIFICATION;
+
+typedef struct _VDS_PORTAL_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID portalId;
+} VDS_PORTAL_NOTIFICATION;
+
+typedef struct _VDS_TARGET_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID targetId;
+} VDS_TARGET_NOTIFICATION;
+
+typedef struct _VDS_PORTAL_GROUP_NOTIFICATION {
+  ULONG         ulEvent;
+  VDS_OBJECT_ID portalGroupId;
+} VDS_PORTAL_GROUP_NOTIFICATION;
+
+typedef struct _VDS_NOTIFICATION {
+  VDS_NOTIFICATION_TARGET_TYPE objectType;
+  __MINGW_EXTENSION union {
+    VDS_PACK_NOTIFICATION         Pack;
+    VDS_DISK_NOTIFICATION         Disk;
+    VDS_VOLUME_NOTIFICATION       Volume;
+    VDS_PARTITION_NOTIFICATION    Partition;
+    VDS_DRIVE_LETTER_NOTIFICATION Letter;
+    VDS_FILE_SYSTEM_NOTIFICATION  FileSystem;
+    VDS_MOUNT_POINT_NOTIFICATION  MountPoint;
+    VDS_SUB_SYSTEM_NOTIFICATION   SubSystem;
+    VDS_CONTROLLER_NOTIFICATION   Controller;
+    VDS_DRIVE_NOTIFICATION        Drive;
+    VDS_LUN_NOTIFICATION          Lun;
+    VDS_PORT_NOTIFICATION         Port;
+    VDS_PORTAL_NOTIFICATION       Portal;
+    VDS_TARGET_NOTIFICATION       Target;
+    VDS_PORTAL_GROUP_NOTIFICATION PortalGroup;
+  } DUMMYUNIONNAME;
+} VDS_NOTIFICATION;
+
+typedef LPVOID VDS_LUN_RESERVE_MODE; /* Unsupported enum */
+
+typedef struct _VDS_DISK_PROP {
+  VDS_OBJECT_ID        id;
+  VDS_DISK_STATUS      status;
+  VDS_LUN_RESERVE_MODE ReserveMode;
+  VDS_HEALTH           health;
+  DWORD                dwDeviceType;
+  DWORD                dwMediaType;
+  ULONGLONG            ullSize;
+  ULONG                ulBytesPerSector;
+  ULONG                ulSectorsPerTrack;
+  ULONG                ulTracksPerCylinder;
+  ULONG                ulFlags;
+  VDS_STORAGE_BUS_TYPE BusType;
+  VDS_PARTITION_STYLE  PartitionStyle;
+  __MINGW_EXTENSION union {
+    DWORD dwSignature;
+    GUID  DiskGuid;
+  } DUMMYUNIONNAME;
+  LPWSTR               pwszDiskAddress;
+  LPWSTR               pwszName;
+  LPWSTR               pwszFriendlyName;
+  LPWSTR               pwszAdaptorName;
+  LPWSTR               pwszDevicePath;
+} VDS_DISK_PROP, *PVDS_DISK_PROP;
+
+typedef struct _VDS_DRIVE_EXTENT {
+  VDS_OBJECT_ID id;
+  VDS_OBJECT_ID LunId;
+  ULONGLONG     ullSize;
+  WINBOOL       bUsed;
+} VDS_DRIVE_EXTENT;
+
+#define VDS_NF_DRIVE_LETTER_FREE 201
+#define VDS_NF_DRIVE_LETTER_ASSIGN 202
+
+typedef struct _VDS_DRIVE_LETTER_PROP {
+  WCHAR         wcLetter;
+  VDS_OBJECT_ID volumeId;
+  ULONG         ulFlags;
+  WINBOOL       bUsed;
+} VDS_DRIVE_LETTER_PROP, *PVDS_DRIVE_LETTER_PROP;
+
+#define VDS_NF_DRIVE_ARRIVE 105
+#define VDS_NF_DRIVE_DEPART 106
+#define VDS_NF_DRIVE_MODIFY 107
+#define VDS_NF_DRIVE_REMOVED 354
+
+typedef struct _VDS_DRIVE_PROP {
+  VDS_OBJECT_ID    id;
+  ULONGLONG        ullSize;
+  LPWSTR           pwszFriendlyName;
+  LPWSTR           pwszIdentification;
+  ULONG            ulFlags;
+  VDS_DRIVE_STATUS status;
+  VDS_HEALTH       health;
+  SHORT            sInternalBusNumber;
+  SHORT            sSlotNumber;
+} VDS_DRIVE_PROP;
+
+typedef struct _VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP {
+  ULONG  ulFlags;
+  USHORT usRevision;
+  ULONG  ulDefaultUnitAllocationSize;
+  ULONG  rgulAllowedUnitAllocationSizes;
+  WCHAR  wszName;
+} VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP, *PVDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP;
+
+#define VDS_NF_FILE_SYSTEM_MODIFY 203
+#define VDS_NF_FILE_SYSTEM_FORMAT_PROGRESS 204
+
+typedef struct _VDS_FILE_SYSTEM_PROP {
+  VDS_FILE_SYSTEM_TYPE type;
+  VDS_OBJECT_ID        volumeId;
+  ULONG                ulFlags;
+  ULONGLONG            ullTotalAllocationUnits;
+  ULONGLONG            ullAvailableAllocationUnits;
+  ULONG                ulAllocationUnitSize;
+  LPWSTR               pwszLabel;
+} VDS_FILE_SYSTEM_PROP, *PVDS_FILE_SYSTEM_PROP;
+
+#define MAX_FS_NAME_SIZE 8
+
+typedef struct _VDS_FILE_SYSTEM_TYPE_PROP {
+  VDS_FILE_SYSTEM_TYPE type;
+  WCHAR                wszName[MAX_FS_NAME_SIZE];
+  ULONG                ulFlags;
+  ULONG                ulCompressionFlags;
+  ULONG                ulMaxLableLength;
+  LPWSTR               pwszIllegalLabelCharSet;
+} VDS_FILE_SYSTEM_TYPE_PROP, *PVDS_FILE_SYSTEM_TYPE_PROP;
+
+typedef struct _VDS_WWN {
+  UCHAR rguchWwn[8];
+} VDS_WWN;
+
+typedef struct _VDS_HBAPORT_PROP {
+  VDS_OBJECT_ID      id;
+  VDS_WWN            wwnNode;
+  VDS_WWN            wwnPort;
+  VDS_HBAPORT_TYPE   type;
+  VDS_HBAPORT_STATUS status;
+  ULONG              ulPortSpeed;
+  ULONG              ulSupportedPortSpeed;
+} VDS_HBAPORT_PROP;
+
+#define VDS_HINT_FASTCRASHRECOVERYREQUIRED	0x0000000000000001ULL
+#define VDS_HINT_MOSTLYREADS			0x0000000000000002ULL
+#define VDS_HINT_OPTIMIZEFORSEQUENTIALREADS	0x0000000000000004ULL
+#define VDS_HINT_OPTIMIZEFORSEQUENTIALWRITES	0x0000000000000008ULL
+#define VDS_HINT_READBACKVERIFYENABLED		0x0000000000000010ULL
+#define VDS_HINT_REMAPENABLED			0x0000000000000020ULL
+#define VDS_HINT_WRITETHROUGHCACHINGENABLED	0x0000000000000040ULL
+#define VDS_HINT_HARDWARECHECKSUMENABLED	0x0000000000000080ULL
+#define VDS_HINT_ISYANKABLE			0x0000000000000100ULL
+
+typedef struct _VDS_HINTS {
+  ULONGLONG ullHintMask;
+  ULONGLONG ullExpectedMaximumSize;
+  ULONG     ulOptimalReadSize;
+  ULONG     ulOptimalReadAlignment;
+  ULONG     ulOptimalWriteSize;
+  ULONG     ulOptimalWriteAlignment;
+  ULONG     ulMaximumDriveCount;
+  ULONG     ulStripeSize;
+  WINBOOL   bFastCrashRecoveryRequired;
+  WINBOOL   bMostlyReads;
+  WINBOOL   bOptimizeForSequentialReads;
+  WINBOOL   bOptimizeForSequentialWrites;
+  WINBOOL   bRemapEnabled;
+  WINBOOL   bReadBackVerifyEnabled;
+  WINBOOL   bWriteThroughCachingEnabled;
+  WINBOOL   bHardwareChecksumEnabled;
+  WINBOOL   bIsYankable;
+  SHORT     sRebuildPriority;
+} VDS_HINTS, *PVDS_HINTS;
+
+typedef struct _VDS_INPUT_DISK {
+  VDS_OBJECT_ID diskId;
+  ULONGLONG     ullSize;
+  VDS_OBJECT_ID plexId;
+  ULONG         memberIdx;
+} VDS_INPUT_DISK;
+
+typedef struct _VDS_INTERCONNECT {
+  VDS_INTERCONNECT_ADDRESS_TYPE m_addressType;
+  ULONG m_cbPort;  BYTE* m_pbPort;
+  ULONG m_cbAddress;
+  BYTE* m_pbAddress;
+} VDS_INTERCONNECT;
+
+typedef struct _VDS_IPADDRESS {
+  VDS_IPADDRESS_TYPE type;
+  ULONG              ipv4Address;
+  UCHAR              ipv6Address[16];
+  ULONG              ulIpv6FlowInfo;
+  ULONG              ulIpv6ScopeId;
+  WCHAR              wszTextAddress[256 + 1];
+  ULONG              ulPort;
+} VDS_IPADDRESS;
+
+typedef struct _VDS_ISCSI_INITIATOR_ADAPTER_PROP {
+  VDS_OBJECT_ID id;
+  LPWSTR        pwszName;
+} VDS_ISCSI_INITIATOR_ADAPTER_PROP;
+
+typedef struct _VDS_ISCSI_INITIATOR_PORTAL_PROP {
+  VDS_OBJECT_ID id;
+  VDS_IPADDRESS address;
+  ULONG         ulPortIndex;
+} VDS_ISCSI_INITIATOR_PORTAL_PROP;
+
+typedef struct _VDS_ISCSI_PORTAL_PROP {
+  VDS_OBJECT_ID           id;
+  VDS_IPADDRESS           address;
+  VDS_ISCSI_PORTAL_STATUS status;
+} VDS_ISCSI_PORTAL_PROP;
+
+typedef LPVOID VDS_ISCSI_PORTALGROUP_TAG;
+/*http://msdn.microsoft.com/en-us/library/aa383380%28VS.85%29.aspx
+says to see http://www.ietf.org/rfc/rfc3720.txt*/
+
+typedef struct _VDS_ISCSI_PORTALGROUP_PROP {
+  VDS_OBJECT_ID             id;
+  VDS_ISCSI_PORTALGROUP_TAG tag;
+} VDS_ISCSI_PORTALGROUP_PROP;
+
+typedef struct _VDS_ISCSI_SHARED_SECRET {
+  UCHAR *pSharedSecret;
+  ULONG ulSharedSecretSize;
+} VDS_ISCSI_SHARED_SECRET;
+
+typedef struct _VDS_ISCSI_TARGET_PROP {
+  VDS_OBJECT_ID id;
+  LPWSTR        pwszIscsiName;
+  LPWSTR        pwszFriendlyName;
+  WINBOOL       bChapEnabled;
+} VDS_ISCSI_TARGET_PROP;
+
+typedef struct _VDS_STORAGE_IDENTIFIER {
+  VDS_STORAGE_IDENTIFIER_CODE_SET m_CodeSet;
+  VDS_STORAGE_IDENTIFIER_TYPE m_Type;
+  ULONG m_cbIdentifier;
+  BYTE* m_rgbIdentifier;
+} VDS_STORAGE_IDENTIFIER;
+
+typedef struct _VDS_STORAGE_DEVICE_ID_DESCRIPTOR {
+  ULONG m_version;
+  ULONG m_cIdentifiers;
+  VDS_STORAGE_IDENTIFIER* m_rgIdentifiers;
+} VDS_STORAGE_DEVICE_ID_DESCRIPTOR;
+
+typedef struct _VDS_LUN_INFORMATION {
+  ULONG m_version;
+  BYTE m_DeviceType;
+  BYTE m_DeviceTypeModifier;
+  WINBOOL m_bCommandQueueing;
+  VDS_STORAGE_BUS_TYPE m_BusType;
+  char* m_szVendorId;
+  char* m_szProductId;
+  char* m_szProductRevision;
+  char* m_szSerialNumber;
+  GUID m_diskSignature;
+  VDS_STORAGE_DEVICE_ID_DESCRIPTOR m_deviceIdDescriptor;
+  ULONG m_cInterconnects;
+  VDS_INTERCONNECT* m_rgInterconnects;
+} VDS_LUN_INFORMATION;
+
+#define VDS_NF_LUN_ARRIVE 108
+#define VDS_NF_LUN_DEPART 109
+#define VDS_NF_LUN_MODIFY 110
+
+typedef struct _VDS_LUN_PLEX_PROP {
+  VDS_OBJECT_ID        id;
+  ULONGLONG            ullSize;
+  VDS_LUN_PLEX_TYPE    type;
+  VDS_LUN_PLEX_STATUS  status;
+  VDS_HEALTH           health;
+  VDS_TRANSITION_STATE TransitionState;
+  ULONG                ulFlags;
+  ULONG                ulStripeSize;
+  SHORT                sRebuildPriority;
+} VDS_LUN_PLEX_PROP;
+
+typedef struct _VDS_LUN_PROP {
+  VDS_OBJECT_ID        id;
+  ULONGLONG            ullSize;
+  LPWSTR               pwszFriendlyName;
+  LPWSTR               pwszIdentification;
+  LPWSTR               pwszUnmaskingList;
+  ULONG                ulFlags;
+  VDS_LUN_TYPE         type;
+  VDS_LUN_STATUS       status;
+  VDS_HEALTH           health;
+  VDS_TRANSITION_STATE TransitionState;
+  SHORT                sRebuildPriority;
+} VDS_LUN_PROP, *PVDS_LUN_PROP;
+
+#define VDS_NF_MOUNT_POINTS_CHANGE 205
+
+#define VDS_NF_PACK_ARRIVE 1
+#define VDS_NF_PACK_DEPART 2
+#define VDS_NF_PACK_MODIFY 3
+
+typedef struct _VDS_PACK_PROP {
+  VDS_OBJECT_ID   id;
+  LPWSTR          pwszName;
+  VDS_PACK_STATUS status;
+  ULONG           ulFlags;
+} VDS_PACK_PROP, *PVDS_PACK_PROP;
+
+typedef struct _VDS_PARTITION_INFO_MBR {
+  BYTE    partitionType;
+  BOOLEAN bootIndicator;
+  BOOLEAN recognizedPartition;
+  DWORD   hiddenSectors;
+} VDS_PARTITION_INFO_MBR;
+
+#define VDS_NF_PARTITION_ARRIVE 11
+#define VDS_NF_PARTITION_DEPART 12
+#define VDS_NF_PARTITION_MODIFY 13
+
+typedef struct _VDS_PARTITION_PROP {
+  VDS_PARTITION_STYLE PartitionStyle;
+  ULONG               ulFlags;
+  ULONG               ulPartitionNumber;
+  ULONGLONG           ullOffset;
+  ULONGLONG           ullSize;
+  __MINGW_EXTENSION union {
+    VDS_PARTITION_INFO_MBR Mbr;
+    VDS_PARTITION_INFO_GPT Gpt;
+  } DUMMYUNIONNAME;
+} VDS_PARTITION_PROP;
+
+typedef struct _VDS_PATH_INFO {
+  VDS_PATH_ID         pathId;
+  VDS_HWPROVIDER_TYPE type;
+  VDS_PATH_STATUS     status;
+  __MINGW_EXTENSION union {
+    VDS_OBJECT_ID controllerPortId;
+    VDS_OBJECT_ID targetPortalId;
+  };
+  __MINGW_EXTENSION union {
+    VDS_OBJECT_ID hbaPortId;
+    VDS_OBJECT_ID initiatorAdapterId;
+  };
+  __MINGW_EXTENSION union {
+    VDS_HBAPORT_PROP *pHbaPortProp;
+    VDS_IPADDRESS    *pInitiatorPortalIpAddr;
+  };
+} VDS_PATH_INFO;
+
+typedef struct _VDS_PATH_POLICY {
+  VDS_PATH_ID pathId;
+  BOOL        bPrimaryPath;
+  ULONG       ulWeight;
+} VDS_PATH_POLICY;
+
+#define VDS_NF_PORT_ARRIVE 121
+#define VDS_NF_PORT_DEPART 122
+#define VDS_NF_PORT_MODIFY 352
+#define VDS_NF_PORT_REMOVED 353
+
+typedef struct _VDS_PORT_PROP {
+  VDS_OBJECT_ID   id;
+  LPWSTR          pwszFriendlyName;
+  LPWSTR          pwszIdentification;
+  VDS_PORT_STATUS status;
+} VDS_PORT_PROP;
+
+#define VDS_NF_PORTAL_GROUP_ARRIVE 129
+#define VDS_NF_PORTAL_GROUP_DEPART 130
+#define VDS_NF_PORTAL_GROUP_MODIFY 131
+#define VDS_NF_PORTAL_ARRIVE 123
+#define VDS_NF_PORTAL_DEPART 124
+#define VDS_NF_PORTAL_MODIFY 125
+
+typedef struct _VDS_PROVIDER_PROP {
+  VDS_OBJECT_ID     id;
+  LPWSTR            pwszName;
+  GUID              guidVersionId;
+  LPWSTR            pwszVersion;
+  VDS_PROVIDER_TYPE type;
+  ULONG             ulFlags;
+  ULONG             ulStripeSizeFlags;
+  SHORT             sRebuildPriority;
+} VDS_PROVIDER_PROP;
+
+typedef struct VDS_REPARSE_POINT_PROP {
+  VDS_OBJECT_ID SourceVolumeId;
+  LPWSTR        pwszPath;
+} VDS_REPARSE_POINT_PROP, *PVDS_REPARSE_POINT_PROP;
+
+typedef struct _VDS_SERVICE_PROP {
+  LPWSTR pwszVersion;
+  ULONG  ulFlags;
+} VDS_SERVICE_PROP;
+
+#define VDS_NF_SUB_SYSTEM_ARRIVE 101
+#define VDS_NF_SUB_SYSTEM_DEPART 102
+#define VDS_NF_SUB_SYSTEM_MODIFY 151
+
+typedef struct _VDS_SUB_SYSTEM_PROP {
+  VDS_OBJECT_ID         id;
+  LPWSTR                pwszFriendlyName;
+  LPWSTR                pwszIdentification;
+  ULONG                 ulFlags;
+  ULONG                 ulStripeSizeFlags;
+  VDS_SUB_SYSTEM_STATUS status;
+  VDS_HEALTH            health;
+  SHORT                 sNumberOfInternalBuses;
+  SHORT                 sMaxNumberOfSlotsEachBus;
+  SHORT                 sMaxNumberOfControllers;
+  SHORT                 sRebuildPriority;
+} VDS_SUB_SYSTEM_PROP;
+
+#define VDS_NF_TARGET_ARRIVE 126
+#define VDS_NF_TARGET_DEPART 127
+#define VDS_NF_TARGET_MODIFY 128
+#define VDS_NF_VOLUME_ARRIVE 4
+#define VDS_NF_VOLUME_DEPART 5
+#define VDS_NF_VOLUME_MODIFY 6
+#define VDS_NF_VOLUME_REBUILDING 7
+
+typedef struct _VDS_VOLUME_PLEX_PROP {
+  VDS_OBJECT_ID          id;
+  VDS_VOLUME_PLEX_TYPE   type;
+  VDS_VOLUME_PLEX_STATUS status;
+  VDS_HEALTH             health;
+  VDS_TRANSITION_STATE   TransitionState;
+  ULONGLONG              ullSize;
+  ULONG                  ulStripeSize;
+  ULONG                  ulNumberOfMembers;
+} VDS_VOLUME_PLEX_PROP, *PVDS_VOLUME_PLEX_PROP;
+
+typedef struct _VDS_VOLUME_PROP {
+  VDS_OBJECT_ID        id;
+  VDS_VOLUME_TYPE      type;
+  VDS_VOLUME_STATUS    status;
+  VDS_HEALTH           health;
+  VDS_TRANSITION_STATE TransitionState;
+  ULONGLONG            ullSize;
+  ULONG                ulFlags;
+  VDS_FILE_SYSTEM_TYPE RecommendedFileSystemType;
+  LPWSTR               pwszName;
+} VDS_VOLUME_PROP, *PVDS_VOLUME_PROP;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#endif /*_INC_VDS*/
diff --git a/mingw-w64-headers/include/vsbackup.h b/mingw-w64-headers/include/vsbackup.h
new file mode 100644
index 0000000..0a75641
--- /dev/null
+++ b/mingw-w64-headers/include/vsbackup.h
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_VSBACKUP
+#define _INC_VSBACKUP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT ShouldBlockRevert(
+  LPCWSTR wszVolumeName,
+  WINBOOL *pbBlock
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_VSBACKUP*/
diff --git a/mingw-w64-headers/include/vsmgt.h b/mingw-w64-headers/include/vsmgt.h
new file mode 100644
index 0000000..776cd56
--- /dev/null
+++ b/mingw-w64-headers/include/vsmgt.h
@@ -0,0 +1,89 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_VSMGT
+#define _INC_VSMGT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef PWSTR VSS_PWSZ; /*assumed*/
+
+typedef enum _VSS_PROTECTION_FAULT {
+  VSS_PROTECTION_FAULT_NONE                           = 0,
+  VSS_PROTECTION_FAULT_DIFF_AREA_MISSING              = ( VSS_PROTECTION_FAULT_NONE + 1 ),
+  VSS_PROTECTION_FAULT_IO_FAILURE_DURING_ONLINE       = ( VSS_PROTECTION_FAULT_DIFF_AREA_MISSING + 1 ),
+  VSS_PROTECTION_FAULT_META_DATA_CORRUPTION           = ( VSS_PROTECTION_FAULT_IO_FAILURE_DURING_ONLINE + 1 ),
+  VSS_PROTECTION_FAULT_MEMORY_ALLOCATION_FAILURE      = ( VSS_PROTECTION_FAULT_META_DATA_CORRUPTION + 1 ),
+  VSS_PROTECTION_FAULT_MAPPED_MEMORY_FAILURE          = ( VSS_PROTECTION_FAULT_MEMORY_ALLOCATION_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_COW_READ_FAILURE               = ( VSS_PROTECTION_FAULT_MAPPED_MEMORY_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_COW_WRITE_FAILURE              = ( VSS_PROTECTION_FAULT_COW_READ_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_DIFF_AREA_FULL                 = ( VSS_PROTECTION_FAULT_COW_WRITE_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_GROW_TOO_SLOW                  = ( VSS_PROTECTION_FAULT_DIFF_AREA_FULL + 1 ),
+  VSS_PROTECTION_FAULT_GROW_FAILED                    = ( VSS_PROTECTION_FAULT_GROW_TOO_SLOW + 1 ),
+  VSS_PROTECTION_FAULT_DESTROY_ALL_SNAPSHOTS          = ( VSS_PROTECTION_FAULT_GROW_FAILED + 1 ),
+  VSS_PROTECTION_FAULT_FILE_SYSTEM_FAILURE            = ( VSS_PROTECTION_FAULT_DESTROY_ALL_SNAPSHOTS + 1 ),
+  VSS_PROTECTION_FAULT_IO_FAILURE                     = ( VSS_PROTECTION_FAULT_FILE_SYSTEM_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_DIFF_AREA_REMOVED              = ( VSS_PROTECTION_FAULT_IO_FAILURE + 1 ),
+  VSS_PROTECTION_FAULT_EXTERNAL_WRITER_TO_DIFF_AREA   = ( VSS_PROTECTION_FAULT_DIFF_AREA_REMOVED + 1 ) 
+} VSS_PROTECTION_FAULT;
+
+typedef enum _VSS_PROTECTION_LEVEL {
+  VSS_PROTECTION_LEVEL_ORIGINAL_VOLUME   = 0,
+  VSS_PROTECTION_LEVEL_SNAPSHOT          = ( VSS_PROTECTION_LEVEL_ORIGINAL_VOLUME + 1 ) 
+} VSS_PROTECTION_LEVEL;
+
+typedef struct _VSS_DIFF_AREA_PROP {
+  VSS_PWSZ m_pwszVolumeName;
+  VSS_PWSZ m_pwszDiffAreaVolumeName;
+  LONGLONG m_llMaximumDiffSpace;
+  LONGLONG m_llAllocatedDiffSpace;
+  LONGLONG m_llUsedDiffSpace;
+} VSS_DIFF_AREA_PROP, *PVSS_DIFF_AREA_PROP;
+
+typedef struct _VSS_DIFF_VOLUME_PROP {
+  VSS_PWSZ m_pwszVolumeName;
+  VSS_PWSZ m_pwszVolumeDisplayName;
+  LONGLONG m_llVolumeFreeSpace;
+  LONGLONG m_llVolumeTotalSpace;
+} VSS_DIFF_VOLUME_PROP, *PVSS_DIFF_VOLUME_PROP;
+
+typedef union _VSS_MGMT_OBJECT_UNION {
+  VSS_VOLUME_PROP      Vol;
+  VSS_DIFF_VOLUME_PROP DiffVol;
+  VSS_DIFF_AREA_PROP   DiffArea;
+} VSS_MGMT_OBJECT_UNION, *PVSS_MGMT_OBJECT_UNION;
+
+typedef struct _VSS_MGMT_OBJECT_PROP {
+  VSS_MGMT_OBJECT_TYPE  Type;
+  VSS_MGMT_OBJECT_UNION Obj;
+} VSS_MGMT_OBJECT_PROP, *PVSS_MGMT_OBJECT_PROP;
+
+typedef enum _VSS_MGMT_OBJECT_TYPE {
+  VSS_MGMT_OBJECT_UNKNOWN       = 0,
+  VSS_MGMT_OBJECT_VOLUME        = 1,
+  VSS_MGMT_OBJECT_DIFF_VOLUME   = 2,
+  VSS_MGMT_OBJECT_DIFF_AREA     = 3 
+} VSS_MGMT_OBJECT_TYPE, *PVSS_MGMT_OBJECT_TYPE;
+
+typedef struct _VSS_VOLUME_PROP {
+  VSS_PWSZ m_pwszVolumeName;
+  VSS_PWSZ m_pwszVolumeDisplayName;
+} VSS_VOLUME_PROP, *PVSS_VOLUME_PROP;
+
+typedef struct _VSS_VOLUME_PROTECTION_INFO {
+  VSS_PROTECTION_LEVEL m_protectionLevel;
+  WINBOOL              m_volumeIsOfflineForProtection;
+  VSS_PROTECTION_FAULT m_protectionFault;
+  LONG                 m_failureStatus;
+  WINBOOL              m_volumeHasUnusedDiffArea;
+  DWORD                m_reserved;
+} VSS_VOLUME_PROTECTION_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_VSMGT*/
diff --git a/mingw-w64-headers/include/vss.h b/mingw-w64-headers/include/vss.h
new file mode 100644
index 0000000..8083b1e
--- /dev/null
+++ b/mingw-w64-headers/include/vss.h
@@ -0,0 +1,57 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_VSS
+#define _INC_VSS
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum VSS_BACKUP_SCHEMA {
+  VSS_BS_UNDEFINED                            = 0x00000000,
+  VSS_BS_DIFFERENTIAL                         = 0x00000001,
+  VSS_BS_INCREMENTAL                          = 0x00000002,
+  VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL   = 0x00000004,
+  VSS_BS_LOG                                  = 0x00000008,
+  VSS_BS_COPY                                 = 0x00000010,
+  VSS_BS_TIMESTAMPED                          = 0x00000020,
+  VSS_BS_LAST_MODIFY                          = 0x00000040,
+  VSS_BS_LSN                                  = 0x00000080,
+  VSS_BS_WRITER_SUPPORTS_NEW_TARGET           = 0x00000100,
+  VSS_BS_WRITER_SUPPORTS_RESTORE_WITH_MOVE    = 0x00000200,
+  VSS_BS_INDEPENDENT_SYSTEM_STATE             = 0x00000400,
+  VSS_BS_ROLLFORWARD_RESTORE                  = 0x00001000,
+  VSS_BS_RESTORE_RENAME                       = 0x00002000,
+  VSS_BS_AUTHORITATIVE_RESTORE                = 0x00004000,
+  VSS_BS_WRITER_SUPPORTS_PARALLEL_RESTORES    = 0x00008000 
+} VSS_BACKUP_SCHEMA, *PVSS_BACKUP_SCHEMA;
+
+typedef enum _VSS_FILE_SPEC_BACKUP_TYPE {
+  VSS_FSBT_FULL_BACKUP_REQUIRED             = 0x00000001,
+  VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED     = 0x00000002,
+  VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED      = 0x00000004,
+  VSS_FSBT_LOG_BACKUP_REQUIRED              = 0x00000008,
+  VSS_FSBT_FULL_SNAPSHOT_REQUIRED           = 0x00000100,
+  VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED   = 0x00000200,
+  VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED    = 0x00000400,
+  VSS_FSBT_LOG_SNAPSHOT_REQUIRED            = 0x00000800,
+  VSS_FSBT_ALL_BACKUP_REQUIRED              = 0x0000000F,
+  VSS_FSBT_ALL_SNAPSHOT_REQUIRED            = 0x00000F00 
+} VSS_FILE_SPEC_BACKUP_TYPE, *PVSS_FILE_SPEC_BACKUP_TYPE;
+
+typedef enum _VSS_RESTORE_TYPE {
+  VSS_RTYPE_UNDEFINED   = 0,
+  VSS_RTYPE_BY_COPY     = 1,
+  VSS_RTYPE_IMPORT      = 2,
+  VSS_RTYPE_OTHER       = 3 
+} VSS_RESTORE_TYPE, *PVSS_RESTORE_TYPE;
+
+typedef enum _VSS_ROLLFORWARD_TYPE {
+  VSS_RF_UNDEFINED   = 0,
+  VSS_RF_NONE        = 1,
+  VSS_RF_ALL         = 2,
+  VSS_RF_PARTIAL     = 3 
+} VSS_ROLLFORWARD_TYPE, *PVSS_ROLLFORWARD_TYPE;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_VSS*/
diff --git a/mingw-w64-headers/include/vswriter.h b/mingw-w64-headers/include/vswriter.h
new file mode 100644
index 0000000..5e2730b
--- /dev/null
+++ b/mingw-w64-headers/include/vswriter.h
@@ -0,0 +1,15 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_VSWRITER
+#define _INC_VSWRITER
+
+typedef enum VSS_COMPONENT_FLAGS {
+  VSS_CF_BACKUP_RECOVERY         = 0x00000001,
+  VSS_CF_APP_ROLLBACK_RECOVERY   = 0x00000002,
+  VSS_CF_NOT_SYSTEM_STATE        = 0x00000004 
+} VSS_COMPONENT_FLAGS;
+
+#endif /*_INC_VSWRITER*/
diff --git a/mingw-w64-headers/include/wcmconfig.h b/mingw-w64-headers/include/wcmconfig.h
new file mode 100644
index 0000000..83a462d
--- /dev/null
+++ b/mingw-w64-headers/include/wcmconfig.h
@@ -0,0 +1,62 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WCMCONFIG
+#define _INC_WCMCONFIG
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0013 {
+  dataTypeByte = 1,
+  dataTypeSByte = 2,
+  dataTypeUInt16 = 3,
+  dataTypeInt16 = 4,
+  dataTypeUInt32 = 5,
+  dataTypeInt32 = 6,
+  dataTypeUInt64 = 7,
+  dataTypeInt64 = 8,
+  dataTypeBoolean = 11,
+  dataTypeString = 12,
+  dataTypeFlagArray = 0x8000
+} WcmDataType;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0020 {
+  ReadOnlyAccess = 1,
+  ReadWriteAccess = 2
+} WcmNamespaceAccess;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0003 {
+  SharedEnumeration = 1,
+  UserEnumeration = 2,
+  AllEnumeration = ( SharedEnumeration | UserEnumeration )
+} WcmNamespaceEnumerationFlags;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0016 {
+  restrictionFacetMaxLength = 0x1,
+  restrictionFacetEnumeration = 0x2,
+  restrictionFacetMaxInclusive = 0x4,
+  restrictionFacetMinInclusive = 0x8
+} WcmRestrictionFacets;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0014 {
+  settingTypeScalar = 1,
+  settingTypeComplex = 2,
+  settingTypeList = 3
+} WcmSettingType;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0002 {
+  OfflineMode = 1,
+  OnlineMode = 2
+} WcmTargetMode;
+
+typedef enum __MIDL___MIDL_itf_wcmconfig_0000_0000_0019 {
+  UnknownStatus = 0,
+  UserRegistered = 1,
+  UserUnregistered = 2,
+  UserLoaded = 3,
+  UserUnloaded = 4
+} WcmUserStatus;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WCMCONFIG*/
diff --git a/mingw-w64-headers/include/wcmconfig.idl b/mingw-w64-headers/include/wcmconfig.idl
new file mode 100644
index 0000000..7ad0a2c
--- /dev/null
+++ b/mingw-w64-headers/include/wcmconfig.idl
@@ -0,0 +1,1002 @@
+/* Automated generated idl file <wcmpriv>.
+ * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
+ */
+
+/* Interface forward declarations.  */
+interface ISettingsEnginePriv;
+interface IItemCollectionPriv;
+interface ISettingsItemPriv;
+interface IMetadataItemPriv;
+interface IItemEnumerator;
+interface INamespaceIdentityPriv;
+interface ISettingsNamespacePriv;
+interface ITargetInfoPriv;
+interface IMetadataPriv;
+interface ISettingsResult;
+interface IStream;
+interface ISequentialStream;
+interface ISettingsContext;
+interface ITargetInfo;
+interface ISettingsIdentity;
+
+/* Structure forward declarations.  */
+struct _FILETIME;
+struct _LARGE_INTEGER;
+struct _ULARGE_INTEGER;
+struct tagSTATSTG;
+
+/* Union record forward declarations.  */
+coclass SettingsEnginePriv;
+
+/* Enumeration declarations.  */
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0008
+{
+  UnknownItem = (int) 201326592,
+  SettingsNamespace = (int) 201326593,
+  Metadata = (int) 201327592,
+  ComplexTypes = (int) 201327593,
+  ComplexType = (int) 201327594,
+  Member = (int) 201327595,
+  SimpleTypes = (int) 201327596,
+  SimpleType = (int) 201327597,
+  Restriction = (int) 201327598,
+  RestrictionFacet = (int) 201327599,
+  Elements = (int) 201327600,
+  Element = (int) 201327601,
+  SecurityDefinitions = (int) 201327602,
+  SecurityDefinition = (int) 201327603,
+  Settings = (int) 201328592,
+  ScalarSetting = (int) 201328593,
+  ComplexSetting = (int) 201328594,
+  List = (int) 201328595,
+  Attribute = (int) 201330592,
+  UnknownMetadata = (int) 201335593
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0004
+{
+  UpdateAlways = (int) 201392128,
+  NoExpansion = (int) 201457664,
+  NoDefaultValue = (int) 201588736,
+  NoInheritedValue = (int) 201850880,
+  DefaultValueOnly = (int) 203423744
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0005
+{
+  ValueNotExisting = (int) 201326592,
+  ValueDeleted = (int) 201326593,
+  ValueNull = (int) 201326594,
+  ValueIsValid = (int) 201326595,
+  ValueNotValid = (int) 201326596
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0005
+{
+  restrictionFacetMaxLength = (int) 201326593,
+  restrictionFacetEnumeration = (int) 201326594,
+  restrictionFacetMaxInclusive = (int) 201326596,
+  restrictionFacetMinInclusive = (int) 201326600
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0003
+{
+  dataTypeByte = (int) 201326593,
+  dataTypeSByte = (int) 201326594,
+  dataTypeUInt16 = (int) 201326595,
+  dataTypeInt16 = (int) 201326596,
+  dataTypeUInt32 = (int) 201326597,
+  dataTypeInt32 = (int) 201326598,
+  dataTypeUInt64 = (int) 201326599,
+  dataTypeInt64 = (int) 201326600,
+  dataTypeBoolean = (int) 201326603,
+  dataTypeString = (int) 201326604,
+  dataTypeFlagArray = (int) 201359360
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0006
+{
+  ValidateSelf = (int) 201326592,
+  ValidateAll = (int) 201326593
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0001
+{
+  ValueLocationCurrent = (int) 201326593,
+  ValueLocationDefault = (int) 201326594,
+  ValueLocationPolicy = (int) 201326595
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0002
+{
+  SharedEnumeration = (int) 201326593,
+  UserEnumeration = (int) 201326594,
+  AllEnumeration = (int) 201326595
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0007
+{
+  ReadOnlyAccess = (int) 201326593,
+  ReadWriteAccess = (int) 201326594
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0001
+{
+  OfflineMode = (int) 201326593,
+  OnlineMode = (int) 201326594
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0002
+{
+  SettingChangeMode = (int) 201326593,
+  MetadataChangeMode = (int) 201326594
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0006
+{
+  UnknownStatus = (int) 201326592,
+  UserRegistered = (int) 201326593,
+  UserUnregistered = (int) 201326594,
+  UserLoaded = (int) 201326595,
+  UserUnloaded = (int) 201326596
+};
+enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0003
+{
+  InstallOnly = (int) 201326593,
+  InstallWithUpgrade = (int) 201326594
+};
+
+/* Structure/union declarations.  */
+struct _FILETIME
+{
+  UINT dwLowDateTime;
+  UINT dwHighDateTime;
+};
+struct _LARGE_INTEGER
+{
+  LONGLONG QuadPart;
+};
+struct _ULARGE_INTEGER
+{
+  ULONGLONG QuadPart;
+};
+struct tagSTATSTG
+{
+  LPWSTR pwcsName;
+  UINT Type;
+  struct _ULARGE_INTEGER cbSize;
+  struct _FILETIME mtime;
+  struct _FILETIME ctime;
+  struct _FILETIME atime;
+  UINT grfMode;
+  UINT grfLocksSupported;
+  struct GUID clsid;
+  UINT grfStateBits;
+  UINT reserved;
+};
+
+/* Type definitions.  */
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0008 WcmNodeType;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0004 WcmProcessingOptions;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0005 WcmValueStatus;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0005 WcmRestrictionFacets;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0003 WcmDataType;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0006 WcmValidateOption;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0001 WcmValueLocation;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0002 WcmNamespaceEnumerationFlags;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0007 WcmNamespaceAccess;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0001 WcmTargetMode;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0002 WcmNamespaceMode;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0006 WcmUserStatus;
+typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0003 WcmInstallMode;
+typedef ULONGLONG ULONG_PTR;
+
+[
+  uuid(90A45ABD-2C77-11D9-BDF0-000874CD1BAE),
+  version(1.0),
+  helpstring("Settings Management Infrastructure Library for Private Use"),
+  helpfile("WcmConfig.HLP")
+]
+library wcmpriv
+{
+  importlib("stdole2.tlb");
+
+   /* CoClass declarations.  */
+   [
+     uuid(90A45ABE-2C77-11D9-BDF0-000874CD1BAE),
+     helpstring("SMI engine class for private use"),
+     cancreate
+   ]
+   coclass SettingsEnginePriv
+   {
+     interface ISettingsEnginePriv;
+   };
+
+};
+
+/* Interface declarations.  */
+[
+  uuid(90A45AC0-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("ISettingsEnginePriv Interface"),
+  nonextensible
+]
+interface ISettingsEnginePriv : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetNamespaces (
+    [out retval] interface IItemCollectionPriv **NamespaceCollection
+  );
+  HRESULT __stdcall GetNamespacesByOptions (
+    [in] WcmNamespaceEnumerationFlags Flags,
+    [out retval] interface IItemCollectionPriv **NamespaceCollection
+  );
+  HRESULT __stdcall GetNamespace (
+    [in] interface INamespaceIdentityPriv *NamespaceID,
+    [in] WcmNamespaceAccess Access,
+    [out retval] interface ISettingsNamespacePriv **NamespaceItem
+  );
+  HRESULT __stdcall GetNamespaceByOptions (
+    [in] interface INamespaceIdentityPriv *NamespaceID,
+    [in] WcmNamespaceMode Mode,
+    [in] WcmNamespaceAccess Access,
+    [out retval] interface ISettingsNamespacePriv **NamespaceItem
+  );
+  HRESULT __stdcall GetErrorDescription (
+    [in] long HResult,
+    [out retval] BSTR *Message
+  );
+  HRESULT __stdcall CreateNamespaceIdentity (
+    [out retval] interface INamespaceIdentityPriv **NamespaceID
+  );
+  HRESULT __stdcall GetStoreStatus (
+    [out retval] WcmUserStatus *Status
+  );
+  HRESULT __stdcall SetStoreStatus (
+    [in] UINT Flags,
+    [in] WcmUserStatus Status
+  );
+  HRESULT __stdcall CreateNamespaceByOptions (
+    [in] interface INamespaceIdentityPriv *NamespaceID,
+    [in] long Overwrite,
+    [out retval] interface ISettingsNamespacePriv **NamespaceItem
+  );
+  HRESULT __stdcall RegisterNamespaceFromFile (
+    [in] WcmInstallMode Mode,
+    [in] LPWSTR Manifest,
+    [in] long Overwrite,
+    [out retval] VARIANT *ppResult
+  );
+  HRESULT __stdcall UnregisterNamespace (
+    [in] interface INamespaceIdentityPriv *NamespaceID,
+    [in] long RemoveSettings
+  );
+  HRESULT __stdcall Import (
+    [in] interface ISettingsNamespacePriv *Namespace,
+    [in] UINT Option,
+    [in] interface IStream *Stream,
+    [out retval] VARIANT *Results
+  );
+  HRESULT __stdcall CreateTargetInfo (
+    [out retval] interface ITargetInfoPriv **Target
+  );
+  HRESULT __stdcall GetTargetInfo (
+    [out retval] interface ITargetInfoPriv **Target
+  );
+  HRESULT __stdcall SetTargetInfo (
+    [in] interface ITargetInfoPriv *Target
+  );
+  HRESULT __stdcall CreateSettingsContext (
+    [in] UINT Flags,
+    [in] void *reserved,
+    [out retval] interface ISettingsContext **SettingsContext
+  );
+  HRESULT __stdcall SetSettingsContext (
+    [in] interface ISettingsContext *SettingsContext
+  );
+  HRESULT __stdcall ApplySettingsContext (
+    [in] interface ISettingsContext *SettingsContext,
+    [out] LPWSTR pppwzIdentities,
+    [out retval] ULONG_PTR *pcIdentities
+  );
+  HRESULT __stdcall GetSettingsContext (
+    [out retval] interface ISettingsContext **SettingsContext
+  );
+};
+[
+  uuid(90A45ABF-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("Item dictionary to hold Item items or attributes"),
+  nonextensible
+]
+interface IItemCollectionPriv : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall IsReadOnly (
+    [out retval] long *ReadOnlyItem
+  );
+  HRESULT __stdcall Count (
+    [out retval] long *Count
+  );
+  HRESULT __stdcall GetItem (
+    [in] VARIANT *Key,
+    [out retval] interface ISettingsItemPriv **Item
+  );
+  HRESULT __stdcall Create (
+    [in] VARIANT *Key,
+    [out retval] interface ISettingsItemPriv **Item
+  );
+  HRESULT __stdcall Contains (
+    [in] VARIANT *Key,
+    [out retval] long *ItemExists
+  );
+  HRESULT __stdcall Remove (
+    [in] VARIANT *Key
+  );
+  HRESULT __stdcall GetEnumerator (
+    [out retval] interface IItemEnumerator **Enumerator
+  );
+};
+[
+  uuid(90A45AC1-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("ISettingsItemPriv Interface"),
+  nonextensible
+]
+interface ISettingsItemPriv : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetName (
+    [out retval] BSTR *Name
+  );
+  HRESULT __stdcall SetName (
+    [in] LPWSTR Name
+  );
+  HRESULT __stdcall GetPath (
+    [out retval] BSTR *Path
+  );
+  HRESULT __stdcall GetFullPath (
+    [out retval] BSTR *Path
+  );
+  HRESULT __stdcall GetType (
+    [out retval] long *Type
+  );
+  HRESULT __stdcall IsReadOnly (
+    [out retval] long *ReadOnlyItem
+  );
+  HRESULT __stdcall GetNodeType (
+    [out retval] WcmNodeType *NodeType
+  );
+  HRESULT __stdcall GetDisplayName (
+    [out retval] BSTR *DisplayName
+  );
+  HRESULT __stdcall SetDisplayName (
+    [in] LPWSTR DisplayName
+  );
+  HRESULT __stdcall GetDescription (
+    [out retval] BSTR *Description
+  );
+  HRESULT __stdcall SetDescription (
+    [in] LPWSTR Description
+  );
+  HRESULT __stdcall GetParent (
+    [out retval] interface ISettingsItemPriv **Parent
+  );
+  HRESULT __stdcall HasChild (
+    [out retval] long *ItemHasChild
+  );
+  HRESULT __stdcall GetValue (
+    [out retval] VARIANT *Value
+  );
+  HRESULT __stdcall SetValue (
+    [in] VARIANT *Value
+  );
+  HRESULT __stdcall GetDefaultValue (
+    [out retval] VARIANT *Value
+  );
+  HRESULT __stdcall SetDefaultValue (
+    [in] VARIANT *Value
+  );
+  HRESULT __stdcall GetValueByOptions (
+    [in] WcmProcessingOptions Options,
+    [out] WcmValueStatus *Status,
+    [out] struct _FILETIME *Timestamp,
+    [out retval] VARIANT *Value
+  );
+  HRESULT __stdcall SetValueByOptions (
+    [in] VARIANT *Value,
+    [in] WcmProcessingOptions Options,
+    [in] struct _FILETIME Timestamp
+  );
+  HRESULT __stdcall Children (
+    [out retval] interface IItemCollectionPriv **Children
+  );
+  HRESULT __stdcall AddChild (
+    [in] LPWSTR Name,
+    [out retval] interface ISettingsItemPriv **Child
+  );
+  HRESULT __stdcall GetChild (
+    [in] LPWSTR Name,
+    [out retval] interface ISettingsItemPriv **Child
+  );
+  HRESULT __stdcall RemoveChild (
+    [in] LPWSTR Name
+  );
+  HRESULT __stdcall Attributes (
+    [out retval] interface IItemCollectionPriv **Attributes
+  );
+  HRESULT __stdcall AddAttribute (
+    [in] LPWSTR Name,
+    [in] VARIANT *Value
+  );
+  HRESULT __stdcall GetAttribute (
+    [in] LPWSTR Name,
+    [out retval] VARIANT *Value
+  );
+  HRESULT __stdcall RemoveAttribute (
+    [in] LPWSTR Name
+  );
+  HRESULT __stdcall GetRestrictionFacets (
+    [out retval] WcmRestrictionFacets *RestrictionFacets
+  );
+  HRESULT __stdcall GetRestriction (
+    [in] WcmRestrictionFacets RestrictionFacet,
+    [out retval] VARIANT *FacetData
+  );
+  HRESULT __stdcall GetItemByPath (
+    [in] LPWSTR Path,
+    [out retval] interface ISettingsItemPriv **Item
+  );
+  HRESULT __stdcall CreateItemByPath (
+    [in] LPWSTR Path,
+    [out retval] interface ISettingsItemPriv **Item
+  );
+  HRESULT __stdcall RemoveItemByPath (
+    [in] LPWSTR Path
+  );
+  HRESULT __stdcall GetValueRaw (
+    [out] UCHAR *Data,
+    [out retval] UINT *DataSize
+  );
+  HRESULT __stdcall SetValueRaw (
+    [in] long DataType,
+    [in] UCHAR *Data,
+    [in] UINT DataSize
+  );
+  HRESULT __stdcall GetValueRawByOptions (
+    [in] WcmProcessingOptions Options,
+    [out] WcmValueStatus *Status,
+    [out] UCHAR *Data,
+    [out retval] UINT *DataSize
+  );
+  HRESULT __stdcall SetValueRawByOptions (
+    [in] WcmProcessingOptions Options,
+    [in] long DataType,
+    [in] UCHAR *Data,
+    [in] UINT DataSize
+  );
+  HRESULT __stdcall IsDynamic (
+    [out retval] long *DynamicItem
+  );
+  HRESULT __stdcall ResetToDefault (void);
+  HRESULT __stdcall GetSettingByPath (
+    [in] LPWSTR Path,
+    [out retval] interface ISettingsItemPriv **Setting
+  );
+  HRESULT __stdcall CreateSettingByPath (
+    [in] LPWSTR Path,
+    [out retval] interface ISettingsItemPriv **Setting
+  );
+  HRESULT __stdcall RemoveSettingByPath (
+    [in] LPWSTR Path
+  );
+  HRESULT __stdcall GetListKeyInformation (
+    [out] BSTR *KeyName,
+    [out retval] WcmDataType *DataType
+  );
+  HRESULT __stdcall CreateListElement (
+    [in] VARIANT *KeyData,
+    [out retval] interface ISettingsItemPriv **Child
+  );
+  HRESULT __stdcall RemoveListElement (
+    [in] LPWSTR ElementName
+  );
+  HRESULT __stdcall GetTypeDefinition (
+    [out retval] interface IMetadataItemPriv **Type
+  );
+  HRESULT __stdcall UninstallSetting (void);
+  HRESULT __stdcall DeleteValue (void);
+  HRESULT __stdcall GetValueByLocation (
+    [in] WcmValueLocation Location,
+    [in] WcmProcessingOptions Options,
+    [out] WcmValueStatus *Status,
+    [out] struct _FILETIME *Timestamp,
+    [out] VARIANT *Value
+  );
+  HRESULT __stdcall GetKeyValue (
+    [out retval] VARIANT *Value
+  );
+};
+[
+  uuid(90A45AC2-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("IMetadataItemPriv Interface"),
+  nonextensible
+]
+interface IMetadataItemPriv : ISettingsItemPriv
+{
+  [id(1610743808)]
+  HRESULT __stdcall Validate (
+    [in] WcmValidateOption Option,
+    [out retval] VARIANT *ppResult
+  );
+};
+[
+  uuid(9F7D7BB7-20B3-11DA-81A5-0030F1642E3C),
+  helpstring("IItemEnumerator Interface"),
+  nonextensible
+]
+interface IItemEnumerator : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall Current (
+    [out retval] VARIANT *Item
+  );
+  HRESULT __stdcall MoveNext (
+    [out retval] long *ItemValid
+  );
+  HRESULT __stdcall Reset (void);
+};
+[
+  uuid(90A45ACC-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("INamespaceIdentityPriv Interface"),
+  nonextensible
+]
+interface INamespaceIdentityPriv : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall Initialize (
+    [in] LPWSTR Name,
+    [in] LPWSTR Version,
+    [in] LPWSTR Language,
+    [in] LPWSTR Architecture,
+    [in] LPWSTR Token,
+    [in] LPWSTR VersionScope
+  );
+  HRESULT __stdcall GetUri (
+    [out retval] BSTR *Uri
+  );
+  HRESULT __stdcall SetUri (
+    [in] LPWSTR Uri
+  );
+  HRESULT __stdcall GetName (
+    [out retval] BSTR *Name
+  );
+  HRESULT __stdcall SetName (
+    [in] LPWSTR Name
+  );
+  HRESULT __stdcall GetVersion (
+    [out retval] BSTR *Version
+  );
+  HRESULT __stdcall SetVersion (
+    [in] LPWSTR Version
+  );
+  HRESULT __stdcall GetLanguage (
+    [out retval] BSTR *Language
+  );
+  HRESULT __stdcall SetLanguage (
+    [in] LPWSTR Language
+  );
+  HRESULT __stdcall GetProcessorArchitecture (
+    [out retval] BSTR *Architecture
+  );
+  HRESULT __stdcall SetProcessorArchitecture (
+    [in] LPWSTR Architecture
+  );
+  HRESULT __stdcall GetPublicKeyToken (
+    [out retval] BSTR *Token
+  );
+  HRESULT __stdcall SetPublicKeyToken (
+    [in] LPWSTR Token
+  );
+  HRESULT __stdcall GetVersionScope (
+    [out retval] BSTR *VersionScope
+  );
+  HRESULT __stdcall SetVersionScope (
+    [in] LPWSTR VersionScope
+  );
+};
+[
+  uuid(90A45AC3-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("ISettingsNamespacePriv Interface"),
+  nonextensible
+]
+interface ISettingsNamespacePriv : ISettingsItemPriv
+{
+  [id(1610743808)]
+  HRESULT __stdcall GetIdentity (
+    [out retval] interface INamespaceIdentityPriv **Identity
+  );
+  HRESULT __stdcall SetIdentity (
+    [in] interface INamespaceIdentityPriv *Identity
+  );
+  HRESULT __stdcall GetTargetInfo (
+    [out retval] interface ITargetInfoPriv **Target
+  );
+  HRESULT __stdcall Settings (
+    [out retval] interface IItemCollectionPriv **Settings
+  );
+  HRESULT __stdcall Metadata (
+    [out retval] interface IMetadataPriv **Metadata
+  );
+  HRESULT __stdcall GetNamespaceMode (
+    [out retval] WcmNamespaceMode *Mode
+  );
+  HRESULT __stdcall Save (
+    [in] long fPushSettings,
+    [out retval] interface ISettingsResult **ppResult
+  );
+  HRESULT __stdcall ServiceSyncSetting (
+    [in] USHORT *szSettingPath,
+    [in] long fCreate,
+    [out retval] interface ISettingsResult **ppResult
+  );
+  HRESULT __stdcall GetXmlNamespaceUri (
+    [in] LPWSTR NamespacePrefix,
+    [out retval] BSTR *NamespaceUri
+  );
+  HRESULT __stdcall GetXmlNamespacePrefix (
+    [in] LPWSTR NamespaceUri,
+    [out retval] BSTR *NamespacePrefix
+  );
+  HRESULT __stdcall Validate (
+    [in] WcmValidateOption Option,
+    [out retval] VARIANT *ppResult
+  );
+  HRESULT __stdcall GetSettingValue (
+    [in] LPWSTR Path,
+    [out retval] VARIANT *Value
+  );
+  HRESULT __stdcall SetSettingValue (
+    [in] LPWSTR Path,
+    [in] VARIANT *Value
+  );
+  HRESULT __stdcall SaveWinSxS (
+    long fIsInstall
+  );
+};
+[
+  uuid(90A45ACD-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("ITargetInfoPriv Interface"),
+  nonextensible
+]
+interface ITargetInfoPriv : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetTargetMode (
+    [out retval] WcmTargetMode *TargetMode
+  );
+  HRESULT __stdcall SetTargetMode (
+    [in] WcmTargetMode TargetMode
+  );
+  HRESULT __stdcall GetTemporaryStoreLocation (
+    [out retval] BSTR *TemporaryStoreLocation
+  );
+  HRESULT __stdcall SetTemporaryStoreLocation (
+    [in] LPWSTR TemporaryStoreLocation
+  );
+  HRESULT __stdcall GetTargetID (
+    [out retval] BSTR *TargetID
+  );
+  HRESULT __stdcall SetTargetID (
+    [in] struct GUID TargetID
+  );
+  HRESULT __stdcall GetTargetProcessorArchitecture (
+    [out retval] BSTR *ProcessorArchitecture
+  );
+  HRESULT __stdcall SetTargetProcessorArchitecture (
+    [in] LPWSTR ProcessorArchitecture
+  );
+  HRESULT __stdcall GetProperty (
+    [in] long Offline,
+    [in] LPWSTR Property,
+    [out retval] BSTR *Value
+  );
+  HRESULT __stdcall SetProperty (
+    [in] long Offline,
+    [in] LPWSTR Property,
+    [in] LPWSTR Value
+  );
+  HRESULT __stdcall GetEnumerator (
+    [out retval] interface IItemEnumerator **Enumerator
+  );
+  HRESULT __stdcall ExpandTarget (
+    [in] long Offline,
+    [in] LPWSTR Location,
+    [out retval] BSTR *ExpandedLocation
+  );
+  HRESULT __stdcall ExpandTargetPath (
+    [in] long Offline,
+    [in] LPWSTR Location,
+    [out retval] BSTR *ExpandedLocation
+  );
+  HRESULT __stdcall SetModulePath (
+    [in] LPWSTR Module,
+    [in] LPWSTR Path
+  );
+  HRESULT __stdcall LoadModule (
+    [in] LPWSTR Module,
+    [out retval] void *ModuleHandle
+  );
+  HRESULT __stdcall SetSchemaLocation (
+    [in] LPWSTR SchemaLocation
+  );
+  HRESULT __stdcall GetSchemaLocation (
+    [out retval] BSTR *SchemaLocation
+  );
+  HRESULT __stdcall SetWow64Context (
+    [in] LPWSTR InstallerModule,
+    [in] UCHAR *Wow64Context
+  );
+  HRESULT __stdcall HasWow64Context (
+    [out retval] long *HasContext
+  );
+  HRESULT __stdcall TranslateWow64 (
+    [in] LPWSTR ClientArchitecture,
+    [in] LPWSTR Value,
+    [out retval] BSTR *TranslatedValue
+  );
+  HRESULT __stdcall SetSchemaHiveLocation (
+    [in] LPWSTR pwzHiveDir
+  );
+  HRESULT __stdcall GetSchemaHiveLocation (
+    [out retval] BSTR *pHiveDir
+  );
+  HRESULT __stdcall SetSchemaHiveMountName (
+    [in] LPWSTR pwzMountName
+  );
+  HRESULT __stdcall GetSchemaHiveMountName (
+    [out retval] BSTR *pMountName
+  );
+};
+[
+  uuid(90A45AC4-2C77-11D9-BDF0-000874CD1BAE),
+  helpstring("IMetadataPriv Interface"),
+  nonextensible
+]
+interface IMetadataPriv : ISettingsItemPriv
+{
+  [id(1610743808)]
+  HRESULT __stdcall ComplexTypes (
+    [out retval] interface IItemCollectionPriv **Collection
+  );
+  HRESULT __stdcall SimpleTypes (
+    [out retval] interface IItemCollectionPriv **Collection
+  );
+  HRESULT __stdcall Elements (
+    [out retval] interface IItemCollectionPriv **Collection
+  );
+  HRESULT __stdcall SecurityDefinitions (
+    [out retval] interface IItemCollectionPriv **Collection
+  );
+};
+[
+  uuid(9F7D7BBC-20B3-11DA-81A5-0030F1642E3C),
+  helpstring("ISettingsResult Interface"),
+  nonextensible
+]
+interface ISettingsResult : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetDescription (
+    [out retval] BSTR *Description
+  );
+  HRESULT __stdcall GetErrorCode (
+    [out retval] HRESULT *hrOut
+  );
+  HRESULT __stdcall GetContextDescription (
+    [out retval] BSTR *Description
+  );
+  HRESULT __stdcall GetLine (
+    [out retval] UINT *dwLine
+  );
+  HRESULT __stdcall GetColumn (
+    [out retval] UINT *dwColumn
+  );
+  HRESULT __stdcall GetSource (
+    [out retval] BSTR *file
+  );
+};
+[
+  uuid(0000000C-0000-0000-C000-000000000046)
+]
+interface IStream : ISequentialStream
+{
+  [id(1610743808)]
+  HRESULT __stdcall RemoteSeek (
+    [in] struct _LARGE_INTEGER dlibMove,
+    [in] UINT dwOrigin,
+    [out] struct _ULARGE_INTEGER *plibNewPosition
+  );
+  HRESULT __stdcall SetSize (
+    [in] struct _ULARGE_INTEGER libNewSize
+  );
+  HRESULT __stdcall RemoteCopyTo (
+    [in] interface IStream *pstm,
+    [in] struct _ULARGE_INTEGER cb,
+    [out] struct _ULARGE_INTEGER *pcbRead,
+    [out] struct _ULARGE_INTEGER *pcbWritten
+  );
+  HRESULT __stdcall Commit (
+    [in] UINT grfCommitFlags
+  );
+  HRESULT __stdcall Revert (void);
+  HRESULT __stdcall LockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall UnlockRegion (
+    [in] struct _ULARGE_INTEGER libOffset,
+    [in] struct _ULARGE_INTEGER cb,
+    [in] UINT dwLockType
+  );
+  HRESULT __stdcall Stat (
+    [out] struct tagSTATSTG *pstatstg,
+    [in] UINT grfStatFlag
+  );
+  HRESULT __stdcall Clone (
+    [out] interface IStream **ppstm
+  );
+};
+[
+  uuid(0C733A30-2A1C-11CE-ADE5-00AA0044773D)
+]
+interface ISequentialStream : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall RemoteRead (
+    [out] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbRead
+  );
+  HRESULT __stdcall RemoteWrite (
+    [in] UCHAR *pv,
+    [in] UINT cb,
+    [out] UINT *pcbWritten
+  );
+};
+[
+  uuid(9F7D7BBD-20B3-11DA-81A5-0030F1642E3C),
+  helpstring("ISettingsContext Interface"),
+  nonextensible
+]
+interface ISettingsContext : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall Serialize (
+    [in] interface IStream *pStream,
+    [in] interface ITargetInfo *pTarget
+  );
+  HRESULT __stdcall Deserialize (
+    [in] interface IStream *pStream,
+    [in] interface ITargetInfo *pTarget,
+    [out] interface ISettingsResult ***pppResults,
+    [out retval] ULONG_PTR *pcResultCount
+  );
+  HRESULT __stdcall SetUserData (
+    [in] void *pUserData
+  );
+  HRESULT __stdcall GetUserData (
+    [out retval] void *pUserData
+  );
+  HRESULT __stdcall GetNamespaces (
+    [out retval] interface IItemEnumerator **ppNamespaceIds
+  );
+  HRESULT __stdcall GetStoredSettings (
+    [in] interface ISettingsIdentity *pIdentity,
+    [out] interface IItemEnumerator **ppAddedSettings,
+    [out] interface IItemEnumerator **ppModifiedSettings,
+    [out] interface IItemEnumerator **ppDeletedSettings
+  );
+  HRESULT __stdcall RevertSetting (
+    [in] interface ISettingsIdentity *pIdentity,
+    [in] LPWSTR pwzSetting
+  );
+};
+[
+  uuid(9F7D7BB8-20B3-11DA-81A5-0030F1642E3C),
+  helpstring("ITargetInfo Interface"),
+  nonextensible
+]
+interface ITargetInfo : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetTargetMode (
+    [out retval] WcmTargetMode *TargetMode
+  );
+  HRESULT __stdcall SetTargetMode (
+    [in] WcmTargetMode TargetMode
+  );
+  HRESULT __stdcall GetTemporaryStoreLocation (
+    [out retval] BSTR *TemporaryStoreLocation
+  );
+  HRESULT __stdcall SetTemporaryStoreLocation (
+    [in] LPWSTR TemporaryStoreLocation
+  );
+  HRESULT __stdcall GetTargetID (
+    [out retval] BSTR *TargetID
+  );
+  HRESULT __stdcall SetTargetID (
+    [in] struct GUID TargetID
+  );
+  HRESULT __stdcall GetTargetProcessorArchitecture (
+    [out retval] BSTR *ProcessorArchitecture
+  );
+  HRESULT __stdcall SetTargetProcessorArchitecture (
+    [in] LPWSTR ProcessorArchitecture
+  );
+  HRESULT __stdcall GetProperty (
+    [in] long Offline,
+    [in] LPWSTR Property,
+    [out retval] BSTR *Value
+  );
+  HRESULT __stdcall SetProperty (
+    [in] long Offline,
+    [in] LPWSTR Property,
+    [in] LPWSTR Value
+  );
+  HRESULT __stdcall GetEnumerator (
+    [out retval] interface IItemEnumerator **Enumerator
+  );
+  HRESULT __stdcall ExpandTarget (
+    [in] long Offline,
+    [in] LPWSTR Location,
+    [out retval] BSTR *ExpandedLocation
+  );
+  HRESULT __stdcall ExpandTargetPath (
+    [in] long Offline,
+    [in] LPWSTR Location,
+    [out retval] BSTR *ExpandedLocation
+  );
+  HRESULT __stdcall SetModulePath (
+    [in] LPWSTR Module,
+    [in] LPWSTR Path
+  );
+  HRESULT __stdcall LoadModule (
+    [in] LPWSTR Module,
+    [out retval] void *ModuleHandle
+  );
+  HRESULT __stdcall SetWow64Context (
+    [in] LPWSTR InstallerModule,
+    [in] UCHAR *Wow64Context
+  );
+  HRESULT __stdcall TranslateWow64 (
+    [in] LPWSTR ClientArchitecture,
+    [in] LPWSTR Value,
+    [out retval] BSTR *TranslatedValue
+  );
+  HRESULT __stdcall SetSchemaHiveLocation (
+    [in] LPWSTR pwzHiveDir
+  );
+  HRESULT __stdcall GetSchemaHiveLocation (
+    [out retval] BSTR *pHiveLocation
+  );
+  HRESULT __stdcall SetSchemaHiveMountName (
+    [in] LPWSTR pwzMountName
+  );
+  HRESULT __stdcall GetSchemaHiveMountName (
+    [out retval] BSTR *pMountName
+  );
+};
+[
+  uuid(9F7D7BB6-20B3-11DA-81A5-0030F1642E3C),
+  helpstring("ISettingsIdentity Interface"),
+  nonextensible
+]
+interface ISettingsIdentity : IUnknown
+{
+  [id(1610678272)]
+  HRESULT __stdcall GetAttribute (
+    [in] void *reserved,
+    [in] LPWSTR Name,
+    [out retval] BSTR *Value
+  );
+  HRESULT __stdcall SetAttribute (
+    [in] void *reserved,
+    [in] LPWSTR Name,
+    [in] LPWSTR Value
+  );
+  HRESULT __stdcall GetFlags (
+    [out retval] UINT *Flags
+  );
+  HRESULT __stdcall SetFlags (
+    [in] UINT Flags
+  );
+};
+
diff --git a/mingw-w64-headers/include/wcsplugin.h b/mingw-w64-headers/include/wcsplugin.h
new file mode 100644
index 0000000..a8b0d43
--- /dev/null
+++ b/mingw-w64-headers/include/wcsplugin.h
@@ -0,0 +1,90 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WCSPLUGIN
+#define _INC_WCSPLUGIN
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _BlackInformation {
+  WINBOOL  bBlackOnly;
+  FLOAT blackWeight;
+} BlackInformation;
+
+typedef struct _JabColorF {
+  FLOAT J;
+  FLOAT a;
+  FLOAT b;
+} JabColorF;
+
+typedef struct _PrimaryJabColors {
+  JabColorF red;
+  JabColorF yellow;
+  JabColorF green;
+  JabColorF cyan;
+  JabColorF blue;
+  JabColorF magenta;
+  JabColorF black;
+  JabColorF white;
+} PrimaryJabColors;
+
+typedef struct _GamutShellTriangle {
+  UINT aVertexIndex[3];
+} GamutShellTriangle;
+
+typedef struct _GamutShell {
+  FLOAT                                    JMin;
+  FLOAT                                    JMax;
+  UINT                                     cVertices;
+  UINT                                     cTriangles;
+  JabColorF                                *pVertices;
+  GamutShellTriangle                       *pTriangles;
+} GamutShell;
+
+typedef struct _GamutBoundaryDescription {
+  PrimaryJabColors                      primaries;
+  UINT                                 cNeutralSamples
+  JabColorF                            *pNeutralSamples;
+  GamutShell                           *pReferenceShell;
+  GamutShell                           *pPlausibleShell;
+  GamutShell                           *pPossibleShell;
+} GamutBoundaryDescription;
+
+typedef struct _PrimaryJabColors {
+  JabColorF red;
+  JabColorF yellow;
+  JabColorF green;
+  JabColorF cyan;
+  JabColorF blue;
+  JabColorF magenta;
+  JabColorF black;
+  JabColorF white;
+} PrimaryJabColors;
+
+typedef struct _XYZColorF {
+  FLOAT X;
+  FLOAT Y;
+  FLOAT Z;
+} XYZColorF;
+
+typedef struct _PrimaryXYZColors {
+  XYZColorF red;
+  XYZColorF yellow;
+  XYZColorF green;
+  XYZColorF cyan;
+  XYZColorF blue;
+  XYZColorF magenta;
+  XYZColorF black;
+  XYZColorF white;
+} PrimaryXYZColors;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WCSPLUGIN*/
diff --git a/mingw-w64-headers/include/wct.h b/mingw-w64-headers/include/wct.h
new file mode 100644
index 0000000..7a554c8
--- /dev/null
+++ b/mingw-w64-headers/include/wct.h
@@ -0,0 +1,100 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WCT
+#define _INC_WCT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPVOID HWCT;
+
+typedef enum _WCT_OBJECT_TYPE {
+  WctCriticalSectionType,
+  WctSendMessageType,
+  WctMutexType,
+  WctAlpcType,
+  WctComType,
+  WctThreadWaitType,
+  WctProcessWaitType,
+  WctThreadType,
+  WctComActivationType,
+  WctUnknownType
+} WCT_OBJECT_TYPE;
+
+typedef enum _WCT_OBJECT_STATUS {
+  WctStatusNoAccess,
+  WctStatusRunning,
+  WctStatusBlocked,
+  WctStatusPidOnly,
+  WctStatusPidOnlyRpcss,
+  WctStatusOwned,
+  WctStatusNotOwned,
+  WctStatusAbandoned,
+  WctStatusUnknown,
+  WctStatusError
+} WCT_OBJECT_STATUS;
+
+/* According to http://msdn.microsoft.com/en-us/magazine/cc163395.aspx
+  RealObjectName has 0x8 offset and TimeOutLowPart has 0x108
+  WCT_OBJNAME_LENGTH assumed to be 50
+*/
+#define WCT_OBJNAME_LENGTH 50
+
+typedef struct _WAITCHAIN_NODE_INFO {
+  WCT_OBJECT_TYPE   ObjectType;
+  WCT_OBJECT_STATUS ObjectStatus;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      WCHAR         ObjectName[WCT_OBJNAME_LENGTH];
+      LARGE_INTEGER Timeout;
+      WINBOOL       Alertable;
+    } LockObject;
+    __MINGW_EXTENSION struct {
+      DWORD ProcessId;
+      DWORD ThreadId;
+      DWORD WaitTime;
+      DWORD ContextSwitches;
+    } ThreadObject;
+  };
+} WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO;
+
+typedef VOID (CALLBACK *PWAITCHAINCALLBACK)(
+    HWCT WctHandle,
+    DWORD_PTR Context,
+    DWORD CallbackStatus,
+    LPDWORD NodeCount,
+    PWAITCHAIN_NODE_INFO NodeInfoArray,
+    LPBOOL IsCycle
+);
+
+HWCT WINAPI OpenThreadWaitChainSession(DWORD Flags,PWAITCHAINCALLBACK callback);
+VOID WINAPI CloseThreadWaitChainSession(HWCT WctHandle);
+WINBOOL WINAPI GetThreadWaitChain(
+  HWCT WctHandle,
+  DWORD_PTR Context,
+  DWORD Flags,
+  DWORD ThreadId,
+  LPDWORD NodeCount,
+  PWAITCHAIN_NODE_INFO NodeInfoArray,
+  LPBOOL IsCycle
+);
+
+/* Unknown Callbacks */
+typedef LPVOID (WINAPI *PCOGETCALLSTATE)();
+typedef LPVOID (WINAPI *PCOGETACTIVATIONSTATE)();
+
+VOID WINAPI RegisterWaitChainCOMCallback(
+  PCOGETCALLSTATE CallStateCallback,
+  PCOGETACTIVATIONSTATE ActivationStateCallback
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_WCT*/
diff --git a/mingw-w64-headers/include/wdsbp.h b/mingw-w64-headers/include/wdsbp.h
new file mode 100644
index 0000000..2c86345
--- /dev/null
+++ b/mingw-w64-headers/include/wdsbp.h
@@ -0,0 +1,66 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WDSBP
+#define _INC_WDSBP
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WDSBPAPI
+#define WDSBPAPI WINAPI
+#endif
+
+/* Wdsbp.dll is missing an implib because Vista clients don't have the dll to generate it from */
+
+HRESULT WDSBPAPI WdsBpAddOption(
+  HANDLE hHandle,
+  ULONG uOption,
+  ULONG uValueLen,
+  PVOID pValue
+);
+
+HRESULT WDSBPAPI WdsBpCloseHandle(
+  HANDLE hHandle
+);
+
+HRESULT WDSBPAPI WdsBpGetOptionBuffer(
+  HANDLE hHandle,
+  ULONG uBufferLen,
+  PVOID pBuffer,
+  PULONG puBytes
+);
+
+#define WDSBP_PK_TYPE_DHCP 1
+#define WDSBP_PK_TYPE_WDSNBP 2
+#define WDSBP_PK_TYPE_BCD 4
+
+HRESULT WDSBPAPI WdsBpInitialize(
+  BYTE bPacketType,
+  HANDLE *phHandle
+);
+
+HRESULT WDSBPAPI WdsBpParseInitialize(
+  PVOID pPacket,
+  ULONG uPacketLen,
+  PBYTE pbPacketType,
+  HANDLE *phHandle
+);
+
+HRESULT WDSBPAPI WdsBpQueryOption(
+  HANDLE hHandle,
+  ULONG uOption,
+  ULONG uValueLen,
+  PVOID pValue,
+  PULONG puBytes
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSBP*/
diff --git a/mingw-w64-headers/include/wdsclientapi.h b/mingw-w64-headers/include/wdsclientapi.h
new file mode 100644
index 0000000..73c30ba
--- /dev/null
+++ b/mingw-w64-headers/include/wdsclientapi.h
@@ -0,0 +1,244 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WDSCLIENTAPI
+#define _INC_WDSCLIENTAPI
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WDS_CLI_MSG_START 0
+#define WDS_CLI_MSG_COMPLETE 1
+#define WDS_CLI_MSG_PROGRESS 2
+#define WDS_CLI_MSG_TEXT 3
+
+#ifndef WDSCLIAPI
+#define WDSCLIAPI WINAPI
+#endif
+
+/* WdsClientAPI.dll is missing an implib because Vista clients don't have the dll to generate it from */
+
+typedef VOID (CALLBACK *PFN_WdsCliCallback)(
+  DWORD dwMessageId,
+  WPARAM wParam,
+  LPARAM lParam,
+  PVOID pvUserData
+);
+
+typedef VOID (WDSCLIAPI *PFN_WdsCliTraceFunction)(
+  LPCWSTR pwszFormat,
+  va_list Params
+);
+
+
+typedef enum _WDS_LOG_LEVEL {
+  WDS_LOG_LEVEL_DISABLED   = 0,
+  WDS_LOG_LEVEL_ERROR      = 1,
+  WDS_LOG_LEVEL_WARNING    = 2,
+  WDS_LOG_LEVEL_INFO       = 3 
+} WDS_LOG_LEVEL;
+
+typedef enum _WDS_LOG_TYPE_CLIENT {
+  WDS_LOG_TYPE_CLIENT_ERROR             = 1,
+  WDS_LOG_TYPE_CLIENT_STARTED,
+  WDS_LOG_TYPE_CLIENT_FINISHED,
+  WDS_LOG_TYPE_CLIENT_IMAGE_SELECTED,
+  WDS_LOG_TYPE_CLIENT_APPLY_STARTED,
+  WDS_LOG_TYPE_CLIENT_APPLY_FINISHED,
+  WDS_LOG_TYPE_CLIENT_GENERIC_MESSAGE,
+  WDS_LOG_TYPE_CLIENT_MAX_CODE 
+} WDS_LOG_TYPE_CLIENT;
+
+typedef struct tagWDS_CLI_CRED {
+  PCWSTR  pwszUserName;
+  PCWSTR pwszDomain;
+  PCWSTR pwszPassword;
+} WDS_CLI_CRED, *PWDS_CLI_CRED, *LPWDS_CLI_CRED;
+
+HRESULT WDSCLIAPI WdsCliAuthorizeSession(
+  HANDLE hSession,
+  PWDS_CLI_CRED pCred
+);
+
+HRESULT WDSCLIAPI WdsCliCancelTransfer(
+  HANDLE hTransfer
+);
+
+HRESULT WDSCLIAPI WdsCliClose(
+  HANDLE Handle
+);
+
+HRESULT WDSCLIAPI WdsCliCreateSession(
+  PWSTR pwszServer,
+  PWDS_CLI_CRED pCred,
+  PHANDLE phSession
+);
+
+HRESULT WDSCLIAPI WdsCliFindFirstImage(
+  HANDLE hSession,
+  PHANDLE phFindHandle
+);
+
+HRESULT WDSCLIAPI WdsCliFindNextImage(
+  HANDLE Handle
+);
+
+#define WdsCliFlagEnumFilterVersion 1
+
+HRESULT WDSCLIAPI WdsCliGetEnumerationFlags(
+  HANDLE Handle,
+  PDWORD pdwFlags
+);
+
+#define PROCESSOR_ARCHITECTURE_AMD64 9
+#define PROCESSOR_ARCHITECTURE_IA64 6
+#define PROCESSOR_ARCHITECTURE_INTEL 0
+
+HRESULT WDSCLIAPI WdsCliGetImageArchitecture(
+  HANDLE hIfh,
+  PDWORD pdwValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageDescription(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageGroup(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageHalName(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageHandleFromFindHandle(
+  HANDLE FindHandle,
+  PHANDLE phImageHandle
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageHandleFromTransferHandle(
+  HANDLE hTransfer,
+  PHANDLE phImageHandle
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageIndex(
+  HANDLE hIfh,
+  PDWORD pdwValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageLanguage(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageLanguages(
+  HANDLE hIfh,
+  PTSTR **pppszValues,
+  PDWORD pdwNumValues
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageLastModifiedTime(
+  HANDLE hIfh,
+  PSYSTEMTIME *ppSysTimeValue
+);
+
+HRESULT WINAPI WdsCliGetImageName(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageNamespace(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImagePath(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageSize(
+  HANDLE hIfh,
+  PULONGLONG pullValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetImageVersion(
+  HANDLE hIfh,
+  PWSTR *ppwszValue
+);
+
+HRESULT WDSCLIAPI WdsCliGetTransferSize(
+  HANDLE hIfh,
+  PULONGLONG pullValue
+);
+
+HRESULT WDSCLIAPI WdsCliInitializeLog(
+  HANDLE hSession,
+  ULONG ulClientArchitecture,
+  PWSTR pwszClientId,
+  PWSTR pwszClientAddress
+);
+
+#define WDS_LOG_LEVEL_DISABLED 0
+#define WDS_LOG_LEVEL_ERROR 1
+#define WDS_LOG_LEVEL_WARNING 2
+#define WDS_LOG_LEVEL_INFO 3
+
+#define WDS_LOG_TYPE_CLIENT_ERROR 1
+#define WDS_LOG_TYPE_CLIENT_STARTED 2
+#define WDS_LOG_TYPE_CLIENT_FINISHED 3
+#define WDS_LOG_TYPE_CLIENT_IMAGE_SELECTED 4
+#define WDS_LOG_TYPE_CLIENT_APPLY_STARTED 5
+#define WDS_LOG_TYPE_CLIENT_APPLY_FINISHED 6
+#define WDS_LOG_TYPE_CLIENT_GENERIC_MESSAGE 7
+#define WDS_LOG_TYPE_CLIENT_MAX_CODE 8
+
+HRESULT __cdecl WdsCliLog(
+  HANDLE hSession,
+  ULONG ulLogLevel,
+  ULONG ulMessageCode,
+  ...
+);
+
+HRESULT WDSCLIAPI WdsCliRegisterTrace(
+  PFN_WdsCliTraceFunction pfn
+);
+
+HRESULT WDSCLIAPI WdsCliTransferFile(
+  PCWSTR pwszServer,
+  PCWSTR pwszNamespace,
+  PCWSTR pwszRemoteFilePath,
+  PCWSTR pwszLocalFilePath,
+  DWORD dwFlags,
+  DWORD dwReserved,
+  PFN_WdsCliCallback pfnWdsCliCallback,
+  PVOID pvUserData,
+  PHANDLE phTransfer
+);
+
+HRESULT WDSCLIAPI WdsCliTransferImage(
+  HANDLE hImage,
+  PWSTR pwszLocalPath,
+  DWORD dwFlags,
+  DWORD dwReserved,
+  PFN_WdsCliCallback pfnWdsCliCallback,
+  PVOID pvUserData,
+  PHANDLE phTransfer
+);
+
+HRESULT WDSCLIAPI WdsCliWaitForTransfer(
+  HANDLE hTransfer
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSCLIENTAPI*/
diff --git a/mingw-w64-headers/include/wdspxe.h b/mingw-w64-headers/include/wdspxe.h
new file mode 100644
index 0000000..e764604
--- /dev/null
+++ b/mingw-w64-headers/include/wdspxe.h
@@ -0,0 +1,266 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WDSPXE
+#define _INC_WDSPXE
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PXE_ADDR_BROADCAST 0x0001
+#define PXE_ADDR_USE_PORT 0x0002
+#define PXE_ADDR_USE_ADDR 0x0004
+#define PXE_ADDR_USE_DHCP_RULES 0x0008
+
+#ifndef PXEAPI
+#define PXEAPI WINAPI
+#endif
+
+typedef LPVOID PXE_BOOT_ACTION;
+typedef ULONG PXE_REG_INDEX;
+typedef ULONG PXE_PROVIDER_ATTRIBUTE;
+
+typedef struct tagPXE_ADDRESS {
+  ULONG  uFlags;
+  __MINGW_EXTENSION union {
+    BYTE  bAddress[PXE_MAX_ADDRESS];
+    ULONG uIpAddress;
+  } DUMMYUNIONNAME;
+  ULONG  uAddrLen;
+  USHORT uPort;
+} PXE_ADDRESS, *PPXE_ADDRESS;
+
+typedef struct _PXE_DHCP_MESSAGE {
+  BYTE  Operation;
+  BYTE  HardwareAddressType;
+  BYTE  HardwareAddressLength;
+  BYTE  HopCount;
+  DWORD TransactionID;
+  WORD  SecondsSinceBoot;
+  WORD  Reserved;
+  ULONG ClientIpAddress;
+  ULONG YourIPAddress;
+  ULONG BootstrapServerAddress;
+  ULONG RelayAgentIpAddress;
+  BYTE  HardwareAddress[PXE_DHCP_HWAADR_SIZE];
+  BYTE  HostName[PXE_DHCP_SERVER_SIZE];
+  BYTE  BootFileName;
+  __MINGW_EXTENSION union {
+    BYTE  bMagicCookie[PXE_DHCP_MAGIC_COOKIE_SIZE];
+    ULONG uMagicCookie;
+  } DUMMYUNIONNAME;
+} PXE_DHCP_MESSAGE, *PPXE_DHCP_MESSAGE;
+
+typedef struct _PXE_DHCP_OPTION {
+  BYTE OptionType;
+  BYTE OptionLength;
+  BYTE OptionValue[1];
+} PXE_DHCP_OPTION, *PPXE_DHCP_OPTION;
+
+#define PXE_BA_NBP 1
+#define PXE_BA_CUSTOM 2
+#define PXE_BA_IGNORE 3
+#define PXE_BA_REJECTED 4
+
+typedef struct tagPXE_PROVIDER {
+  ULONG  uSizeOfStruct;
+  LPWSTR pwszName;
+  LPWSTR pwszFilePath;
+  WINBOOL   bIsCritical;
+  ULONG  uIndex;
+} PXE_PROVIDER, *PPXE_PROVIDER;
+
+DWORD PXEAPI PxeDhcpAppendOption(
+  PVOID pReplyPacket,
+  ULONG uMaxReplyPacketLen,
+  PULONG puReplyPacketLen,
+  BYTE bOption,
+  BYTE bOptionLen,
+  PVOID pValue
+);
+
+DWORD PXEAPI PxeDhcpGetOptionValue(
+  PVOID pPacket,
+  ULONG uPacketLen,
+  ULONG uInstance,
+  BYTE bOption,
+  PBYTE pbOptionLen,
+  PVOID *ppOptionValue
+);
+
+DWORD PXEAPI PxeDhcpGetVendorOptionValue(
+  PVOID pPacket,
+  ULONG uPacketLen,
+  BYTE bOption,
+  ULONG uInstance,
+  PBYTE pbOptionLen,
+  PVOID *ppOptionValue
+);
+
+DWORD PXEAPI PxeDhcpInitialize(
+  PVOID pRecvPacket,
+  ULONG uRecvPacketLen,
+  PVOID pReplyPacket,
+  ULONG uMaxReplyPacketLen,
+  PULONG puReplyPacketLen
+);
+
+DWORD PXEAPI PxeDhcpIsValid(
+  PVOID pPacket,
+  ULONG uPacketLen,
+  WINBOOL bRequestPacket,
+  PBOOL pbPxeOptionPresent
+);
+
+typedef enum _PXE_GSI_TYPE {
+  PXE_GSI_TRACE_ENABLED = 1
+} PXE_GSI_TYPE;
+
+DWORD PXEAPI PxeGetServerInfo(
+  PXE_GSI_TYPE uInfoType,
+  PVOID pBuffer,
+  ULONG uBufferLen
+);
+
+PVOID PXEAPI PxePacketAllocate(
+  HANDLE hProvider,
+  HANDLE hClientRequest,
+  ULONG uSize
+);
+
+DWORD PXEAPI PxePacketFree(
+  HANDLE hProvider,
+  HANDLE hClientRequest,
+  PVOID pPacket
+);
+
+DWORD PXEAPI PxeProviderEnumClose(
+  HANDLE hEnum
+);
+
+DWORD PXEAPI PxeProviderEnumFirst(
+  HANDLE *phEnum
+);
+
+DWORD PXEAPI PxeProviderEnumNext(
+  HANDLE hEnum,
+  PPXE_PROVIDER *ppProvider
+);
+
+DWORD PXEAPI PxeProviderFreeInfo(
+  PPXE_PROVIDER pProvider
+);
+
+DWORD PXEAPI PxeProviderInitialize(
+  HANDLE hProvider,
+  HKEY hProviderKey
+); /*CALLBACK*/
+
+DWORD PXEAPI PxeProviderQueryIndex(
+  LPCWSTR pszProviderName,
+  PULONG puIndex
+);
+
+#define PXE_BA_NBP 1
+#define PXE_BA_CUSTOM 2
+#define PXE_BA_IGNORE 3
+#define PXE_BA_REJECTED 4
+
+DWORD PXEAPI PxeProviderRecvRequest(
+  HANDLE hClientRequest,
+  PVOID pPacket,
+  ULONG uPacketLen,
+  PXE_ADDRESS *pLocalAddress,
+  PXE_ADDRESS *pRemoteAddress,
+  PXE_BOOT_ACTION pAction,
+  PVOID pContext
+); /*CALLBACK*/
+
+#define PXE_REG_INDEX_TOP 0
+#define PXE_REG_INDEX_BOTTOM 0xFFFFFFFF
+
+DWORD PXEAPI PxeProviderRegister(
+  LPCWSTR pszProviderName,
+  LPCWSTR pszModulePath,
+  PXE_REG_INDEX Index,
+  WINBOOL bIsCritical,
+  PHKEY phProviderKey
+);
+
+DWORD PXEAPI PxeProviderServiceControl(
+  PVOID pContext,
+  DWORD dwControl
+); /*CALLBACK*/
+
+DWORD PXEAPI PxeProviderSetAttribute(
+  HANDLE hProvider,
+  PXE_PROVIDER_ATTRIBUTE Attribute,
+  PVOID pParameterBuffer,
+  ULONG uParamLen
+);
+
+#define PXE_PROV_ATTR_FILTER 0
+#define PXE_PROV_FILTER_ALL 0x0000
+#define PXE_PROV_FILTER_DHCP_ONLY 0x0001
+#define PXE_PROV_FILTER_PXE_ONLY 0x0002
+
+DWORD PXEAPI PxeProviderSetAttribute(
+  HANDLE hProvider,
+  PXE_PROVIDER_ATTRIBUTE Attribute,
+  PVOID pParameterBuffer,
+  ULONG uParamLen
+); /*CALLBACK*/
+
+DWORD PXEAPI PxeProviderShutdown(
+  PVOID pContext
+); /*CALLBACK*/
+
+DWORD PXEAPI PxeProviderUnRegister(
+  LPCWSTR pszProviderName
+);
+
+typedef enum _PXE_CALLBACK_TYPE {
+  PXE_CALLBACK_RECV_REQUEST = 0,
+  PXE_CALLBACK_SHUTDOWN,
+  PXE_CALLBACK_SERVICE_CONTROL,
+  PXE_CALLBACK_MAX
+} PXE_CALLBACK_TYPE;
+
+DWORD PXEAPI PxeSendReply(
+  HANDLE hClientRequest,
+  PVOID pPacket,
+  ULONG uPacketLen,
+  PXE_ADDRESS *pAddress
+);
+
+DWORD PXEAPI PxeRegisterCallback(
+  HANDLE hProvider,
+  PXE_CALLBACK_TYPE CallbackType,
+  PVOID pCallbackFunction,
+  PVOID pContext
+);
+
+typedef DWORD PXE_SEVERITY;
+#define PXE_TRACE_VERBOSE 0x00010000
+#define PXE_TRACE_INFO 0x00020000
+#define PXE_TRACE_WARNING 0x00040000
+#define PXE_TRACE_ERROR 0x00080000
+#define PXE_TRACE_FATAL 0x00100000
+
+/* Fixme: PXEAPI/WINAPI varargs?? */
+DWORD PXEAPI PxeTrace(
+  HANDLE hProvider,
+  PXE_SEVERITY Severity,
+  LPCWSTR pszFormat,
+  ...
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSPXE*/
diff --git a/mingw-w64-headers/include/wdstci.h b/mingw-w64-headers/include/wdstci.h
new file mode 100644
index 0000000..693fccb
--- /dev/null
+++ b/mingw-w64-headers/include/wdstci.h
@@ -0,0 +1,146 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WDSCLIENTAPI
+#define _INC_WDSCLIENTAPI
+#include <wdstpdi.h>
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WDSTCIAPI
+#define WDSTCIAPI WINAPI
+#endif
+
+/* Wdstptc.dll is missing an implib because Vista clients don't have the dll to generate it from */
+
+typedef VOID (CALLBACK *PFN_WdsTransportClientReceiveContents)(
+  HANDLE hSessionKey,
+  PVOID pCallerData,
+  PVOID pMetadata,
+  ULONG ulSize,
+  PULARGE_INTEGER pContentOffset
+);
+
+typedef VOID (CALLBACK *PFN_WdsTransportClientReceiveMetadata)(
+  HANDLE hSessionKey,
+  PVOID pCallerData,
+  PVOID pMetadata,
+  ULONG ulSize
+);
+
+typedef VOID (CALLBACK *PFN_WdsTransportClientSessionComplete)(
+  HANDLE hSessionKey,
+  PVOID pCallerData,
+  DWORD dwError
+);
+
+typedef VOID (CALLBACK *PFN_WdsTransportClientSessionStart)(
+  HANDLE hSessionKey,
+  PVOID pCallerData,
+  PULARGE_INTEGER FileSize
+);
+
+typedef VOID (CALLBACK *PFN_WdsTransportClientSessionStartEx)(
+  HANDLE hSessionKey,
+  PVOID pCallerData,
+  PTRANSPORTCLIENT_SESSION_INFO Info
+);
+
+typedef enum _TRANSPORTCLIENT_CALLBACK_ID {
+  WDS_TRANSPORTCLIENT_SESSION_START      = 0,
+  WDS_TRANSPORTCLIENT_RECEIVE_CONTENTS   = 1,
+  WDS_TRANSPORTCLIENT_SESSION_COMPLETE   = 2,
+  WDS_TRANSPORTCLIENT_RECEIVE_METADATA   = 3,
+  WDS_TRANSPORTCLIENT_SESSION_STARTEX    = 4,
+  WDS_TRANSPORTCLIENT_MAX_CALLBACKS      = 5 
+} TRANSPORTCLIENT_CALLBACK_ID,*PTRANSPORTCLIENT_CALLBACK_ID;
+
+typedef struct _TRANSPORTCLIENT_SESSION_INFO {
+  ULONG          ulStructureLength;
+  ULARGE_INTEGER ullFileSize;
+  ULONG          ulBlockSize;
+} TRANSPORTCLIENT_SESSION_INFO, *PTRANSPORTCLIENT_SESSION_INFO;
+
+#define WDS_TRANSPORT_CLIENT_CURRENT_API_VERSION 1
+
+#define WDS_TRANSPORTCLIENT_AUTH 1
+#define WDS_TRANSPORTCLIENT_NO_AUTH 2
+
+#define WDS_TRANSPORTCLIENT_PROTOCOL_MULTICAST 1
+
+typedef struct _WDS_TRANSPORTCLIENT_REQUEST {
+   ULONG  ulLength;
+   ULONG  ulApiVersion;
+   ULONG  ulAuthLevel;
+  LPCWSTR pwszServer;
+  LPCWSTR pwszNamespace;
+  LPCWSTR pwszObjectName;
+  ULONG   ulCacheSize;
+  ULONG   ulProtocol;
+  PVOID   pvProtocolData;
+  ULONG   ulProtocolDataLength;
+} WDS_TRANSPORTCLIENT_REQUEST, *PWDS_TRANSPORTCLIENT_REQUEST;
+
+DWORD WDSTCIAPI WdsTransportClientStartSession(
+  HANDLE hSessionKey
+);
+
+DWORD WDSTCIAPI WdsTransportClientAddRefBuffer(
+  PVOID pvBuffer
+);
+
+DWORD WDSTCIAPI WdsTransportClientCancelSession(
+  HANDLE hSessionKey
+);
+
+DWORD WDSTCIAPI WdsTransportClientCloseSession(
+  HANDLE hSessionKey
+);
+
+DWORD WDSTCIAPI WdsTransportClientCompleteReceive(
+  HANDLE hSessionKey,
+  HANDLE ulSize,
+  PULARGE_INTEGER pullOffset
+);
+
+DWORD WDSTCIAPI WdsTransportClientInitialize(void);
+
+DWORD WDSTCIAPI WdsTransportClientInitializeSession(
+  PWDS_TRANSPORTCLIENT_REQUEST pSessionRequest,
+  PVOID pCallerData,
+  PHANDLE hSessionKey
+);
+
+DWORD WDSTCIAPI WdsTransportClientQueryStatus(
+  HANDLE hSessionKey,
+  PULONG puStatus,
+  PULONG puErrorCode
+);
+
+DWORD WDSTCIAPI WdsTransportClientRegisterCallback(
+  HANDLE hSessionKey,
+  TRANSPORTCLIENT_CALLBACK_ID CallbackId,
+  PVOID pfnCallback
+);
+
+DWORD WDSTCIAPI WdsTransportClientReleaseBuffer(
+  PVOID pvBuffer
+);
+
+DWORD WDSTCIAPI WdsTransportClientShutdown(void);
+
+DWORD WDSTCIAPI WdsTransportClientWaitForCompletion(
+  HANDLE hSessionKey,
+  ULONG uTimeout
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSCLIENTAPI*/
diff --git a/mingw-w64-headers/include/wdstpdi.h b/mingw-w64-headers/include/wdstpdi.h
new file mode 100644
index 0000000..6c97d9d
--- /dev/null
+++ b/mingw-w64-headers/include/wdstpdi.h
@@ -0,0 +1,97 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_WDSTPDI
+#define _INC_WDSTPDI
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 	Wdsmc.dll is missing an implib because Vista clients don't have the dll to generate it from */
+
+#ifndef WDSMCSAPI
+#define WDSMCSAPI WINAPI
+#endif
+
+typedef enum _TRANSPORTPROVIDER_CALLBACK_ID {
+  WDS_TRANSPORTPROVIDER_CREATE_INSTANCE         = 0,
+  WDS_TRANSPORTPROVIDER_COMPARE_CONTENT         = 1,
+  WDS_TRANSPORTPROVIDER_OPEN_CONTENT            = 2,
+  WDS_TRANSPORTPROVIDER_USER_ACCESS_CHECK       = 3,
+  WDS_TRANSPORTPROVIDER_GET_CONTENT_SIZE        = 4,
+  WDS_TRANSPORTPROVIDER_READ_CONTENT            = 5,
+  WDS_TRANSPORTPROVIDER_CLOSE_CONTENT           = 6,
+  WDS_TRANSPORTPROVIDER_CLOSE_INSTANCE          = 7,
+  WDS_TRANSPORTPROVIDER_SHUTDOWN                = 8,
+  WDS_TRANSPORTPROVIDER_DUMP_STATE              = 9,
+  WDS_TRANSPORTPROVIDER_REFRESH_SETTINGS        = 10,
+  WDS_TRANSPORTPROVIDER_GET_CONTENT_METADATA    = 11,
+  WDS_TRANSPORTPROVIDER_MAX_CALLBACKS           = 12 
+} TRANSPORTPROVIDER_CALLBACK_ID, *PTRANSPORTPROVIDER_CALLBACK_ID;
+
+typedef enum _WDS_MC_SEVERITY {
+  WDS_MC_TRACE_VERBOSE = 0x00010000,
+  WDS_MC_TRACE_INFO = 0x00020000,
+  WDS_MC_TRACE_WARNING = 0x00040000,
+  WDS_MC_TRACE_ERROR = 0x00080000,
+  WDS_MC_TRACE_FATAL = 0x00010000
+} WDS_MC_SEVERITY;
+
+typedef struct _WDS_TRANSPORTPROVIDER_INIT_PARAMS {
+  ULONG  ulLength;
+  ULONG  ulMcServerVersion;
+  HKEY   hRegistryKey;
+  HANDLE hProvider;
+} WDS_TRANSPORTPROVIDER_INIT_PARAMS, *PWDS_TRANSPORTPROVIDER_INIT_PARAMS;
+
+typedef struct _WDS_TRANSPORTPROVIDER_SETTINGS {
+  ULONG ulLength;
+  ULONG ulLength;
+} WDS_TRANSPORTPROVIDER_SETTINGS, *PWDS_TRANSPORTPROVIDER_SETTINGS;
+
+PVOID WDSMCSAPI WdsTransportServerAllocateBuffer(
+  HANDLE hProvider,
+  ULONG ulBufferSize
+);
+
+HRESULT WDSMCSAPI WdsTransportServerCompleteRead(
+  HANDLE hProvider,
+  ULONG ulBytesRead,
+  PVOID pvUserData,
+  HRESULT hReadResult
+);
+
+HRESULT WDSMCSAPI WdsTransportServerFreeBuffer(
+  HANDLE hProvider,
+  PVOID pvBuffer
+);
+
+HRESULT WDSMCSAPI WdsTransportServerRegisterCallback(
+  HANDLE hProvider,
+  TRANSPORTPROVIDER_CALLBACK_ID CallbackId,
+  PVOID pfnCallback
+);
+
+HRESULT WDSMCSAPI WdsTransportServerTraceV(
+  HANDLE hProvider,
+  WDS_MC_SEVERITY Severity,
+  LPCWSTR pwszFormat,
+  va_list Params
+);
+
+HRESULT WDSMCSAPI WdsTransportServerTrace(
+  HANDLE hProvider,
+  WDS_MC_SEVERITY Severity,
+  LPCWSTR pwszFormat
+);
+
+#ifdef __cplusplus
+}
+#endi
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSTPDI*/
diff --git a/mingw-w64-headers/include/wdstptmgmt.h b/mingw-w64-headers/include/wdstptmgmt.h
new file mode 100644
index 0000000..3e1a803
--- /dev/null
+++ b/mingw-w64-headers/include/wdstptmgmt.h
@@ -0,0 +1,75 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_WDSTPTMGMT
+#define _INC_WDSTPTMGMT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _WDSTRANSPORT_DIAGNOSTICS_COMPONENT_FLAGS {
+  WdsTptDiagnosticsComponentPxe           = 1,
+  WdsTptDiagnosticsComponentTftp          = 2,
+  WdsTptDiagnosticsComponentImageServer   = 4,
+  WdsTptDiagnosticsComponentMulticast     = 8 
+} WDSTRANSPORT_DIAGNOSTICS_COMPONENT_FLAGS;
+
+typedef enum _WDSTRANSPORT_DISCONNECT_TYPE {
+  WdsTptDisconnectUnknown    = 0,
+  WdsTptDisconnectFallback   = 1,
+  WdsTptDisconnectAbort      = 2 
+} WDSTRANSPORT_DISCONNECT_TYPE;
+
+typedef enum _WDSTRANSPORT_FEATURE_FLAGS {
+  WdsTptFeatureAdminPack          = 1,
+  WdsTptFeatureTransportServer    = 2,
+  WdsTptFeatureDeploymentServer   = 4 
+} WDSTRANSPORT_FEATURE_FLAGS;
+
+typedef enum _WDSTRANSPORT_IP_ADDRESS_SOURCE_TYPE {
+  WdsTptIpAddressSourceUnknown   = 0,
+  WdsTptIpAddressSourceDhcp      = 1,
+  WdsTptIpAddressSourceRange     = 2 
+} WDSTRANSPORT_IP_ADDRESS_SOURCE_TYPE;
+
+typedef enum _WDSTRANSPORT_IP_ADDRESS_TYPE {
+  WdsTptIpAddressUnknown   = 0,
+  WdsTptIpAddressIpv4      = 1,
+  WdsTptIpAddressIpv6      = 2 
+} WDSTRANSPORT_IP_ADDRESS_TYPE;
+
+typedef enum _WDSTRANSPORT_NAMESPACE_TYPE {
+  WdsTptNamespaceTypeUnknown                    = 0,
+  WdsTptNamespaceTypeAutoCast                   = 1,
+  WdsTptNamespaceTypeScheduledCastManualStart   = 2,
+  WdsTptNamespaceTypeScheduledCastAutoStart     = 3 
+} WDSTRANSPORT_NAMESPACE_TYPE;
+
+typedef enum _WDSTRANSPORT_NETWORK_PROFILE_TYPE {
+  WdsTptNetworkProfileUnknown   = 0,
+  WdsTptNetworkProfileCustom    = 1,
+  WdsTptNetworkProfile10Mbps    = 2,
+  WdsTptNetworkProfile100Mbps   = 3,
+  WdsTptNetworkProfile1Gbps     = 4 
+} WDSTRANSPORT_NETWORK_PROFILE_TYPE;
+
+typedef enum _WDSTRANSPORT_PROTOCOL_FLAGS {
+  WdsTptProtocolUnicast     = 1,
+  WdsTptProtocolMulticast   = 2 
+} WDSTRANSPORT_PROTOCOL_FLAGS;
+
+typedef enum _WDSTRANSPORT_SERVICE_NOTIFICATION {
+  WdsTptServiceNotifyUnknown        = 0,
+  WdsTptServiceNotifyReadSettings   = 1 
+} WDSTRANSPORT_SERVICE_NOTIFICATION;
+
+#ifdef __cplusplus
+}
+#endi
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WDSTPTMGMT*/
diff --git a/mingw-w64-headers/include/werapi.h b/mingw-w64-headers/include/werapi.h
new file mode 100644
index 0000000..c4805c2
--- /dev/null
+++ b/mingw-w64-headers/include/werapi.h
@@ -0,0 +1,188 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WERAPI
+#define _INC_WERAPI
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Guessed from http://msdn.microsoft.com/en-us/library/bb513623%28v=VS.85%29.aspx */
+typedef enum _WER_REGISTER_FILE_TYPE {
+  WerFileTypeHeapdump,
+  WerFileTypeMicrodump,
+  WerFileTypeMinidump,
+  WerRegFileTypeOther,
+  WerRegFileTypeUserDocument
+} WER_REGISTER_FILE_TYPE;
+
+/* Guessed from http://msdn.microsoft.com/en-us/library/bb513622%28VS.85%29.aspx */
+typedef enum _WER_DUMP_TYPE {
+  WerDumpTypeHeapDump,
+  WerDumpTypeMicroDump,
+  WerDumpTypeMiniDump,
+} WER_DUMP_TYPE;
+
+/* Guessed from http://msdn.microsoft.com/en-us/library/bb513627%28v=VS.85%29.aspx */
+typedef enum _WER_REPORT_UI {
+  WerUIAdditionalDataDlgHeader,
+  WerUICloseDlgBody,
+  WerUICloseDlgButtonText,
+  WerUICloseDlgHeader,
+  WerUICloseText,
+  WerUIConsentDlgBody,
+  WerUIConsentDlgHeader,
+  WerUIIconFilePath,
+  WerUIOfflineSolutionCheckText,
+  WerUIOnlineSolutionCheckText
+} WER_REPORT_UI;
+
+/* Guessed from http://msdn.microsoft.com/en-us/library/bb513628%28v=VS.85%29.aspx */
+typedef enum _WER_CONSENT {
+  WerConsentApproved,
+  WerConsentDenied,
+  WerConsentNotAsked
+} WER_CONSENT;
+
+/* Guessed from http://msdn.microsoft.com/en-us/library/bb513628%28v=VS.85%29.aspx */
+typedef enum _WER_SUBMIT_RESULT {
+  WerDisabled,
+  WerDisabledQueue,
+  WerReportAsync,
+  WerReportCancelled,
+  WerReportDebug,
+  WerReportFailed,
+  WerReportQueued,
+  WerReportUploaded
+} WER_SUBMIT_RESULT;
+
+typedef struct _WER_DUMP_CUSTOM_OPTIONS {
+  DWORD dwSize;
+  DWORD dwMask;
+  DWORD dwDumpFlags;
+  WINBOOL bOnlyThisThread;
+  DWORD dwExceptionThreadFlags;
+  DWORD dwOtherThreadFlags;
+  DWORD dwExceptionThreadExFlags;
+  DWORD dwOtherThreadExFlags;
+  DWORD dwPreferredModuleFlags;
+  DWORD dwOtherModuleFlags;
+  WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER];
+} WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS;
+
+typedef struct _WER_EXCEPTION_INFORMATION {
+  PEXCEPTION_POINTERS pExceptionPointers;
+  WINBOOL             bClientPointers;
+} WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION;
+
+typedef struct _WER_REPORT_INFORMATION {
+  DWORD  dwSize;
+  HANDLE hProcess;
+  WCHAR  wzConsentKey[64];
+  WCHAR  wzFriendlyEventName[128];
+  WCHAR  wzApplicationName[128];
+  WCHAR  wzApplicationPath[MAX_PATH];
+  WCHAR  wzDescription[512];
+  HWND   hwndParent;
+} WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;
+
+HRESULT WINAPI WerAddExcludedApplication(
+  PCWSTR pwzExeName,
+  WINBOOL bAllUsers
+);
+
+HRESULT WINAPI WerGetFlags(
+  HANDLE hProcess,
+  PDWORD pdwFlags
+);
+
+HRESULT WINAPI WerRegisterFile(
+  PCWSTR pwzFile,
+  WER_REGISTER_FILE_TYPE regFileType,
+  DWORD dwFlags
+);
+
+HRESULT WINAPI WerRegisterMemoryBlock(
+  PVOID pvAddress,
+  DWORD dwSize
+);
+
+HRESULT WINAPI WerRemoveExcludedApplication(
+  PCWSTR pwzExeName,
+  WINBOOL bAllUsers
+);
+
+HRESULT WINAPI WerReportAddDump(
+  HREPORT hReportHandle,
+  HANDLE hProcess,
+  HANDLE hThread,
+  WER_DUMP_TYPE dumpType,
+  PWER_EXCEPTION_INFORMATION pExceptionParam,
+  PWER_DUMP_CUSTOM_OPTIONS pDumpCustomOptions,
+  DWORD dwFlags
+);
+
+HRESULT WINAPI WerReportAddFile(
+  HREPORT hReportHandle,
+  PCWSTR pwzPath,
+  WER_FILE_TYPE repFileType,
+  DWORD dwFileFlags
+);
+
+HRESULT WINAPI WerReportCloseHandle(
+  HREPORT hReportHandle
+);
+
+HRESULT WINAPI WerReportCreate(
+  PCWSTR pwzEventType,
+  WER_REPORT_TYPE repType,
+  PWER_REPORT_INFORMATION pReportInformation,
+  HREPORT *phReportHandle
+);
+
+HRESULT WINAPI WerReportHang(
+  HWND hwndHungWindow,
+  PCWSTR wszHungApplicationName
+);
+
+HRESULT WINAPI WerReportSetParameter(
+  HREPORT hReportHandle,
+  DWORD dwparamID,
+  PCWSTR pwzName,
+  PCWSTR pwzValue
+);
+
+HRESULT WINAPI WerReportSetUIOption(
+  HREPORT hReportHandle,
+  WER_REPORT_UI repUITypeID,
+  PCWSTR pwzValue
+);
+
+HRESULT WINAPI WerReportSubmit(
+  HREPORT hReportHandle,
+  WER_CONSENT consent,
+  DWORD dwFlags,
+  PWER_SUBMIT_RESULT pSubmitResult
+);
+
+HRESULT WINAPI WerSetFlags(
+  DWORD dwFlags
+);
+
+HRESULT WINAPI WerUnregisterFile(
+  PCWSTR pwzFilePath
+);
+
+HRESULT WINAPI WerUnregisterMemoryBlock(
+  PVOID pvAddress
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WERAPI*/
diff --git a/mingw-w64-headers/include/winbase.h b/mingw-w64-headers/include/winbase.h
index 2ecf4b6..c98557f 100644
--- a/mingw-w64-headers/include/winbase.h
+++ b/mingw-w64-headers/include/winbase.h
@@ -2732,11 +2732,24 @@
 #if (_WIN32_WINNT >= 0x0600)
 #define SYMBOLIC_LINK_FLAG_FILE		0x0
 #define SYMBOLIC_LINK_FLAG_DIRECTORY	0x1
+#define EXTENDED_STARTUPINFO_PRESENT	0x00080000
 
 #define CreateSymbolicLink __MINGW_NAME_AW(CreateSymbolicLink)
 #define CreateBoundaryDescriptor __MINGW_NAME_AW(CreateBoundaryDescriptor)
 #define OpenPrivateNamespace __MINGW_NAME_AW(OpenPrivateNamespace)
 #define CreatePrivateNamespace __MINGW_NAME_AW(CreatePrivateNamespace)
+#define CopyFileTransacted __MINGW_NAME_AW(CopyFileTransacted)
+#define CreateDirectoryTransacted __MINGW_NAME_AW(CreateDirectoryTransacted)
+#define CreateEventEx __MINGW_NAME_AW(CreateEventEx)
+#define CreateFileMappingNuma __MINGW_NAME_AW(CreateFileMappingNuma)
+#define CreateFileTransacted __MINGW_NAME_AW(CreateFileTransacted)
+#define CreateHardLinkTransacted __MINGW_NAME_AW(CreateHardLinkTransacted)
+#define DeleteFileTransacted __MINGW_NAME_AW(DeleteFileTransacted)
+#define CreateMutexEx __MINGW_NAME_AW(CreateMutexEx)
+#define CreateSemaphoreEx __MINGW_NAME_AW(CreateSemaphoreEx)
+#define CreateSymbolicLinkTransacted __MINGW_NAME_AW(CreateSymbolicLinkTransacted)
+#define CreateWaitableTimerEx __MINGW_NAME_AW(CreateWaitableTimerEx)
+#define FindFirstFileTransacted __MINGW_NAME_AW(FindFirstFileTransacted)
 
 WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkA (LPSTR lpSymLinkFileName, LPSTR lpTargetFileName, DWORD dwFlags);
 WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkW (LPWSTR lpSymLinkFileName, LPWSTR lpTargetFileName, DWORD dwFlags);
@@ -2797,6 +2810,1204 @@
 WINBASEAPI VOID WINAPI ApplicationRecoveryFinished(WINBOOL bSuccess);
 WINBASEAPI HRESULT WINAPI ApplicationRecoveryInProgress(PBOOL pbCanceled);
 
+WINBASEAPI WINBOOL WINAPI QueryIdleProcessorCycleTime(PULONG BufferLength,PULONG64 ProcessorIdleCycleTime);
+WINBASEAPI WINBOOL WINAPI QueryProcessCycleTime(HANDLE ProcessHandle,PULONG64 CycleTime);
+WINBASEAPI WINBOOL WINAPI QueryThreadCycleTime(HANDLE ThreadHandle,PULONG64 CycleTime);
+
+#if (_WIN32_WINNT >= 0x0601)
+WINBASEAPI WINBOOL WINAPI QueryIdleProcessorCycleTimeEx(USHORT Group,PULONG BufferLength,PULONG64 ProcessorIdleCycleTime);
+#endif
+
+typedef struct _TP_IO *PTP_IO;
+typedef struct _TP_CALLBACK_INSTANCE *PTP_CALLBACK_INSTANCE;
+typedef struct _TP_WIN32_IO_CALLBACK *PTP_WIN32_IO_CALLBACK;
+typedef struct _TP_CALLBACK_ENVIRON *PTP_CALLBACK_ENVIRON;
+typedef struct _TP_CLEANUP_GROUP *PTP_CLEANUP_GROUP;
+typedef struct _TP_CLEANUP_GROUP_CANCEL_CALLBACK *PTP_CLEANUP_GROUP_CANCEL_CALLBACK;
+typedef struct _TP_TIMER *PTP_TIMER;
+typedef struct _TP_WAIT *PTP_WAIT;
+typedef struct _TP_WORK *PTP_WORK;
+typedef struct _TP_POOL *PTP_POOL;
+
+typedef DWORD TP_WAIT_RESULT;
+typedef VOID (CALLBACK *PTP_WAIT_CALLBACK)(
+  PTP_CALLBACK_INSTANCE Instance,
+  PVOID Context,
+  PTP_WAIT Wait,
+  TP_WAIT_RESULT WaitResult
+);
+
+typedef VOID (CALLBACK *PTP_WORK_CALLBACK)(
+  PTP_CALLBACK_INSTANCE Instance,
+  PVOID Context,
+  PTP_WORK Work
+);
+
+typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(
+  PTP_CALLBACK_INSTANCE Instance,
+  PVOID Context,
+  PTP_TIMER Timer
+);
+
+#define PRIVATE_NAMESPACE_FLAG_DESTROY 0x00000001
+
+WINBASEAPI WINBOOL WINAPI CallbackMayRunLong(PTP_CALLBACK_INSTANCE pci);
+WINBASEAPI WINBOOL WINAPI CancelIoEx(HANDLE hFile,LPOVERLAPPED lpOverlapped);
+WINBASEAPI WINBOOL WINAPI CancelSynchronousIo(HANDLE hThread);
+WINBASEAPI VOID WINAPI CancelThreadpoolIo(PTP_IO pio);
+WINBASEAPI PTP_IO WINAPI CreateThreadpoolIo(HANDLE fl,PTP_WIN32_IO_CALLBACK pfnio,PVOID pv,PTP_CALLBACK_ENVIRON pcbe);
+WINBASEAPI VOID WINAPI CloseThreadpool(PTP_POOL ptpp);
+WINBASEAPI PTP_POOL WINAPI CreateThreadpool(PVOID reserved);
+WINBASEAPI VOID WINAPI CloseThreadpoolCleanupGroup(PTP_CLEANUP_GROUP ptpcg);
+WINBASEAPI VOID WINAPI CloseThreadpoolCleanupGroupMembers(PTP_CLEANUP_GROUP ptpcg,WINBOOL fCancelPendingCallbacks,PVOID pvCleanupContext);
+WINBASEAPI VOID WINAPI CloseThreadpoolIo(PTP_IO pio);
+WINBASEAPI VOID WINAPI CloseThreadpoolTimer(PTP_TIMER pti);
+WINBASEAPI VOID WINAPI CloseThreadpoolWait(PTP_WAIT pwa);
+WINBASEAPI VOID WINAPI CloseThreadpoolWork(PTP_WORK pwk);
+
+
+WINBASEAPI PTP_CLEANUP_GROUP WINAPI CreateThreadpoolCleanupGroup(void);
+WINBASEAPI PTP_WAIT WINAPI CreateThreadpoolWait(PTP_WAIT_CALLBACK pfnwa,PVOID pv,PTP_CALLBACK_ENVIRON pcbe);
+WINBASEAPI PTP_WORK WINAPI CreateThreadpoolWork(PTP_WORK_CALLBACK pfnwk,PVOID pv,PTP_CALLBACK_ENVIRON pcbe);
+WINBASEAPI PTP_TIMER WINAPI CreateThreadpoolTimer(PTP_TIMER_CALLBACK pfnti,PVOID pv,PTP_CALLBACK_ENVIRON pcbe);
+
+WINBASEAPI LPVOID WINAPI ConvertThreadToFiberEx(
+  LPVOID lpParameter,
+  DWORD dwFlags
+);
+
+WINBASEAPI VOID WINAPI SubmitThreadpoolWork(PTP_WORK pwk);
+
+WINBASEAPI WINBOOL WINAPI CopyFileTransactedA(
+  LPCSTR lpExistingFileName,
+  LPCSTR lpNewFileName,
+  LPPROGRESS_ROUTINE lpProgressRoutine,
+  LPVOID lpData,
+  LPBOOL pbCancel,
+  DWORD dwCopyFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI CopyFileTransactedW(
+  LPCWSTR lpExistingFileName,
+  LPCWSTR lpNewFileName,
+  LPPROGRESS_ROUTINE lpProgressRoutine,
+  LPVOID lpData,
+  LPBOOL pbCancel,
+  DWORD dwCopyFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI CreateDirectoryTransactedA(
+  LPCSTR lpTemplateDirectory,
+  LPCSTR lpNewDirectory,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI CreateDirectoryTransactedW(
+  LPCWSTR lpTemplateDirectory,
+  LPCWSTR lpNewDirectory,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  HANDLE hTransaction
+);
+
+#define CREATE_EVENT_INITIAL_SET 0x00000002
+#define CREATE_EVENT_MANUAL_RESET 0x00000001
+
+WINBASEAPI HANDLE WINAPI CreateEventExA(
+  LPSECURITY_ATTRIBUTES lpEventAttributes,
+  LPCSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateEventExW(
+  LPSECURITY_ATTRIBUTES lpEventAttributes,
+  LPCWSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateFileMappingNumaA(
+  HANDLE hFile,
+  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
+  DWORD flProtect,
+  DWORD dwMaximumSizeHigh,
+  DWORD dwMaximumSizeLow,
+  LPCSTR lpName,
+  DWORD nndPreferred
+);
+
+WINBASEAPI HANDLE WINAPI CreateFileMappingNumaW(
+  HANDLE hFile,
+  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
+  DWORD flProtect,
+  DWORD dwMaximumSizeHigh,
+  DWORD dwMaximumSizeLow,
+  LPCWSTR lpName,
+  DWORD nndPreferred
+);
+
+
+#define TXFS_MINIVERSION_COMMITTED_VIEW 0x0000
+#define TXFS_MINIVERSION_DIRTY_VIEW 0xFFFE
+#define TXFS_MINIVERSION_DEFAULT_VIEW 0xFFFF
+
+WINBASEAPI HANDLE WINAPI CreateFileTransactedA(
+  LPCSTR lpFileName,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  DWORD dwCreationDisposition,
+  DWORD dwFlagsAndAttributes,
+  HANDLE hTemplateFile,
+  HANDLE hTransaction,
+  PUSHORT pusMiniVersion,
+  PVOID pExtendedParameter
+);
+
+WINBASEAPI HANDLE WINAPI CreateFileTransactedW(
+  LPCWSTR lpFileName,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  DWORD dwCreationDisposition,
+  DWORD dwFlagsAndAttributes,
+  HANDLE hTemplateFile,
+  HANDLE hTransaction,
+  PUSHORT pusMiniVersion,
+  PVOID pExtendedParameter
+);
+
+WINBASEAPI WINBOOL WINAPI CreateHardLinkTransactedA(
+  LPCSTR lpFileName,
+  LPCSTR lpExistingFileName,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI CreateHardLinkTransactedW(
+  LPCWSTR lpFileName,
+  LPCWSTR lpExistingFileName,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI CreateTransaction(
+  LPSECURITY_ATTRIBUTES lpTransactionAttributes,
+  LPGUID UOW,
+  DWORD CreateOptions,
+  DWORD IsolationLevel,
+  DWORD IsolationFlags,
+  DWORD Timeout,
+  LPWSTR Description
+);
+
+WINBASEAPI WINBOOL WINAPI DeleteFileTransactedA(
+  LPCSTR lpFileName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI DeleteFileTransactedW(
+  LPCWSTR lpFileName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI CreateMutexExA(
+  LPSECURITY_ATTRIBUTES lpMutexAttributes,
+  LPCTSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateMutexExW(
+  LPSECURITY_ATTRIBUTES lpMutexAttributes,
+  LPCWSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateSemaphoreExA(
+  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
+  LONG lInitialCount,
+  LONG lMaximumCount,
+  LPCSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateSemaphoreExW(
+  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
+  LONG lInitialCount,
+  LONG lMaximumCount,
+  LPCWSTR lpName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkTransactedW(
+  LPWSTR lpSymlinkFileName,
+  LPWSTR lpTargetFileName,
+  DWORD dwFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkTransactedA(
+  LPSTR lpSymlinkFileName,
+  LPSTR lpTargetFileName,
+  DWORD dwFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerExA(
+  LPSECURITY_ATTRIBUTES lpTimerAttributes,
+  LPCSTR lpTimerName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW(
+  LPSECURITY_ATTRIBUTES lpTimerAttributes,
+  LPCWSTR lpTimerName,
+  DWORD dwFlags,
+  DWORD dwDesiredAccess
+);
+
+#define DeleteFileTransacted __MINGW_NAME_AW(DeleteFileTransacted)
+
+WINBASEAPI WINBOOL WINAPI DeleteFileTransactedW(
+  LPCWSTR lpFileName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI DeleteFileTransactedA(
+  LPCSTR lpFileName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI VOID WINAPI DestroyThreadpoolEnvironment(
+  PTP_CALLBACK_ENVIRON pcbe
+);
+
+WINBASEAPI VOID WINAPI DisassociateCurrentThreadFromCallback(
+  PTP_CALLBACK_INSTANCE pci
+);
+
+typedef enum _FILE_ID_TYPE {
+  FileIdType,
+  ObjectIdType,
+  MaximumFileIdType 
+} FILE_ID_TYPE, *PFILE_ID_TYPE;
+
+typedef struct _TIME_DYNAMIC_ZONE_INFORMATION {
+  LONG       Bias;
+  WCHAR      StandardName[32];
+  SYSTEMTIME StandardDate;
+  LONG       StandardBias;
+  WCHAR      DaylightName[32];
+  SYSTEMTIME DaylightDate;
+  LONG       DaylightBias;
+  WCHAR      TimeZoneKeyName[128];
+  BOOLEAN    DynamicDaylightTimeDisabled;
+} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFO {
+  LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFO {
+  DWORD FileAttributes;
+  DWORD ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO;
+
+typedef struct _FILE_BASIC_INFO {
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  DWORD         FileAttributes;
+} FILE_BASIC_INFO, *PFILE_BASIC_INFO;
+
+typedef struct _FILE_COMPRESSION_INFO {
+  LARGE_INTEGER CompressedFileSize;
+  WORD          CompressionFormat;
+  UCHAR         CompressionUnitShift;
+  UCHAR         ChunkShift;
+  UCHAR         ClusterShift;
+  UCHAR         Reserved[3];
+} FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO;
+
+typedef struct _FILE_DISPOSITION_INFO {
+  WINBOOL DeleteFile;
+} FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO;
+
+typedef struct _FILE_END_OF_FILE_INFO {
+  LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO;
+
+typedef struct _FILE_ID_BOTH_DIR_INFO {
+  DWORD         NextEntryOffset;
+  DWORD         FileIndex;
+  LARGE_INTEGER CreationTime;
+  LARGE_INTEGER LastAccessTime;
+  LARGE_INTEGER LastWriteTime;
+  LARGE_INTEGER ChangeTime;
+  LARGE_INTEGER EndOfFile;
+  LARGE_INTEGER AllocationSize;
+  DWORD         FileAttributes;
+  DWORD         FileNameLength;
+  DWORD         EaSize;
+  CCHAR         ShortNameLength;
+  WCHAR         ShortName[12];
+  LARGE_INTEGER FileId;
+  WCHAR         FileName[1];
+} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;
+
+typedef struct _FILE_ID_DESCRIPTOR{
+  DWORD        dwSize;
+  FILE_ID_TYPE Type;
+  __MINGW_EXTENSION union {
+    LARGE_INTEGER FileId;
+    GUID          ObjectId;
+  };
+} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
+
+typedef enum _FILE_INFO_BY_HANDLE_CLASS {
+  FileBasicInfo                    = 0,
+  FileStandardInfo                 = 1,
+  FileNameInfo                     = 2,
+  FileRenameInfo                   = 3,
+  FileDispositionInfo              = 4,
+  FileAllocationInfo               = 5,
+  FileEndOfFileInfo                = 6,
+  FileStreamInfo                   = 7,
+  FileCompressionInfo              = 8,
+  FileAttributeTagInfo             = 9,
+  FileIdBothDirectoryInfo          = 10,  // 0xA
+  FileIdBothDirectoryRestartInfo   = 11,  // 0xB
+  FileIoPriorityHintInfo           = 12,  // 0xC
+  FileRemoteProtocolInfo           = 13,  // 0xD
+  MaximumFileInfoByHandlesClass    = 14   // 0xE
+} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
+
+typedef enum _PRIORITY_HINT {
+  IoPriorityHintVeryLow       = 0,
+  IoPriorityHintLow,
+  IoPriorityHintNormal,
+  MaximumIoPriorityHintType 
+} PRIORITY_HINT;
+
+typedef struct _FILE_IO_PRIORITY_HINT_INFO {
+  PRIORITY_HINT PriorityHint;
+} FILE_IO_PRIORITY_HINT_INFO, *PFILE_IO_PRIORITY_HINT_INFO;
+
+typedef struct _FILE_NAME_INFO {
+  DWORD FileNameLength;
+  WCHAR FileName[1];
+} FILE_NAME_INFO, *PFILE_NAME_INFO;
+
+typedef struct _FILE_RENAME_INFO {
+  BOOL   ReplaceIfExists;
+  HANDLE RootDirectory;
+  DWORD  FileNameLength;
+  WCHAR  FileName[1];
+} FILE_RENAME_INFO, *PFILE_RENAME_INFO;
+
+typedef struct _FILE_STANDARD_INFO {
+  LARGE_INTEGER AllocationSize;
+  LARGE_INTEGER EndOfFile;
+  DWORD          NumberOfLinks;
+  WINBOOL        DeletePending;
+  WINBOOL        Directory;
+} FILE_STANDARD_INFO, *PFILE_STANDARD_INFO;
+
+typedef struct _FILE_STREAM_INFO {
+  DWORD         NextEntryOffset;
+  DWORD         StreamNameLength;
+  LARGE_INTEGER StreamSize;
+  LARGE_INTEGER StreamAllocationSize;
+  WCHAR         StreamName[1];
+} FILE_STREAM_INFO, *PFILE_STREAM_INFO;
+
+typedef struct _OVERLAPPED_ENTRY {
+  ULONG_PTR    lpCompletionKey;
+  LPOVERLAPPED lpOverlapped;
+  ULONG_PTR    Internal;
+  DWORD        dwNumberOfBytesTransferred;
+} OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
+
+WINBASEAPI HANDLE WINAPI FindFirstFileNameTransactedW(
+  LPCWSTR lpFileName,
+  DWORD dwFlags,
+  LPDWORD StringLength,
+  PWCHAR LinkName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI FindFirstFileNameW(
+  LPCWSTR lpFileName,
+  DWORD dwFlags,
+  LPDWORD StringLength,
+  PWCHAR LinkName
+);
+
+WINBASEAPI HANDLE WINAPI FindFirstFileTransactedA(
+  LPCSTR lpFileName,
+  FINDEX_INFO_LEVELS fInfoLevelId,
+  LPVOID lpFindFileData,
+  FINDEX_SEARCH_OPS fSearchOp,
+  LPVOID lpSearchFilter,
+  DWORD dwAdditionalFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI FindFirstFileTransactedW(
+  LPCWSTR lpFileName,
+  FINDEX_INFO_LEVELS fInfoLevelId,
+  LPVOID lpFindFileData,
+  FINDEX_SEARCH_OPS fSearchOp,
+  LPVOID lpSearchFilter,
+  DWORD dwAdditionalFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI FindFirstStreamTransactedW(
+  LPCWSTR lpFileName,
+  STREAM_INFO_LEVELS InfoLevel,
+  LPVOID lpFindStreamData,
+  DWORD dwFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI FindFirstStreamW(
+  LPCWSTR lpFileName,
+  STREAM_INFO_LEVELS InfoLevel,
+  LPVOID lpFindStreamData,
+  DWORD dwFlags
+);
+
+WINBASEAPI WINBOOL WINAPI FindNextFileNameW(
+  HANDLE hFindStream,
+  LPDWORD StringLength,
+  PWCHAR LinkName
+);
+
+WINBASEAPI WINBOOL WINAPI FindNextStreamW(
+  HANDLE hFindStream,
+  LPVOID lpFindStreamData
+);
+
+WINBASEAPI DWORD WINAPI FlsAlloc(
+  PFLS_CALLBACK_FUNCTION lpCallback
+);
+
+WINBASEAPI WINBOOL WINAPI FlsFree(
+  DWORD dwFlsIndex
+);
+
+WINBASEAPI PVOID WINAPI FlsGetValue(
+  DWORD dwFlsIndex
+);
+
+WINBASEAPI WINBOOL WINAPI FlsSetValue(
+  DWORD dwFlsIndex,
+  PVOID lpFlsData
+);
+
+WINBASEAPI VOID WINAPI FlushProcessWriteBuffers(void);
+
+WINBASEAPI VOID WINAPI FreeLibraryWhenCallbackReturns(
+  PTP_CALLBACK_INSTANCE pci,
+  HMODULE mod
+);
+
+WINBASEAPI HRESULT WINAPI GetApplicationRecoveryCallback(
+  HANDLE hProcess,
+  APPLICATION_RECOVERY_CALLBACK *pRecoveryCallback,
+  PVOID *ppvParameter,
+  DWORD dwPingInterval,
+  DWORD dwFlags
+);
+
+WINBASEAPI HRESULT WINAPI GetApplicationRestartSettings(
+  HANDLE hProcess,
+  PWSTR pwzCommandline,
+  PDWORD pcchSize,
+  PDWORD pdwFlags
+);
+
+#define RESTART_NO_CRASH 1
+#define RESTART_NO_HANG 2
+#define RESTART_NO_PATCH 4
+#define RESTART_NO_REBOOT 8
+
+WINBASEAPI HRESULT WINAPI RegisterApplicationRestart(
+  PCWSTR pwzCommandline,
+  DWORD dwFlags
+);
+
+#define GetCompressedFileSizeTransacted __MINGW_NAME_AW(GetCompressedFileSizeTransacted)
+
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeTransactedA(
+  LPCTSTR lpFileName,
+  LPDWORD lpFileSizeHigh,
+  HANDLE hTransaction
+);
+
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeTransactedW(
+  LPCWSTR lpFileName,
+  LPDWORD lpFileSizeHigh,
+  HANDLE hTransaction
+);
+
+WINBASEAPI DWORD WINAPI GetDynamicTimeZoneInformation(
+  PDYNAMIC_TIME_ZONE_INFORMATION pTimeZoneInformation
+);
+
+WINBASEAPI UINT WINAPI GetErrorMode(void);
+
+#define GetFileAttributesTransacted __MINGW_NAME_AW(GetFileAttributesTransacted)
+
+WINBASEAPI WINBOOL WINAPI GetFileAttributesTransactedA(
+  LPCSTR lpFileName,
+  GET_FILEEX_INFO_LEVELS fInfoLevelId,
+  LPVOID lpFileInformation,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI GetFileAttributesTransactedW(
+  LPCWSTR lpFileName,
+  GET_FILEEX_INFO_LEVELS fInfoLevelId,
+  LPVOID lpFileInformation,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI GetFileBandwidthReservation(
+  HANDLE hFile,
+  LPDWORD lpPeriodMilliseconds,
+  LPDWORD lpBytesPerPeriod,
+  LPBOOL pDiscardable,
+  LPDWORD lpTransferSize,
+  LPDWORD lpNumOutstandingRequests
+);
+
+WINBASEAPI WINBOOL WINAPI GetFileInformationByHandleEx(
+  HANDLE hFile,
+  FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
+  LPVOID lpFileInformation,
+  DWORD dwBufferSize
+);
+
+#define GetFinalPathNameByHandle __MINGW_NAME_AW(GetFinalPathNameByHandle)
+#define VOLUME_NAME_DOS 0x0
+#define VOLUME_NAME_GUID 0x1
+#define VOLUME_NAME_NONE 0x2
+#define VOLUME_NAME_NT 0x3
+
+#define FILE_NAME_NORMALIZED 0x0
+#define FILE_NAME_OPENED 0x8
+
+WINBASEAPI DWORD WINAPI GetFinalPathNameByHandleA(
+  HANDLE hFile,
+  LPSTR lpszFilePath,
+  DWORD cchFilePath,
+  DWORD dwFlags
+);
+
+WINBASEAPI DWORD WINAPI GetFinalPathNameByHandleW(
+  HANDLE hFile,
+  LPWSTR lpszFilePath,
+  DWORD cchFilePath,
+  DWORD dwFlags
+);
+
+#define GetFullPathNameTransacted __MINGW_NAME_AW(GetFullPathNameTransacted)
+
+WINBASEAPI DWORD WINAPI GetFullPathNameTransactedA(
+  LPCSTR lpFileName,
+  DWORD nBufferLength,
+  LPSTR lpBuffer,
+  LPSTR *lpFilePart,
+  HANDLE hTransaction
+);
+
+WINBASEAPI DWORD WINAPI GetFullPathNameTransactedW(
+  LPCWSTR lpFileName,
+  DWORD nBufferLength,
+  LPWSTR lpBuffer,
+  LPWSTR *lpFilePart,
+  HANDLE hTransaction
+);
+
+#define GetLongPathNameTransacted __MINGW_NAME_AW(GetLongPathNameTransacted)
+
+WINBASEAPI DWORD WINAPI GetLongPathNameTransactedA(
+  LPCSTR lpszShortPath,
+  LPSTR  lpszLongPath,
+  DWORD  cchBuffer,
+  HANDLE hTransaction
+);
+
+WINBASEAPI DWORD WINAPI GetLongPathNameTransactedW(
+  LPCWSTR lpszShortPath,
+  LPWSTR   lpszLongPath,
+  DWORD    cchBuffer,
+  HANDLE   hTransaction
+);
+
+#define GetNamedPipeClientComputerName __MINGW_NAME_AW(GetNamedPipeClientComputerName)
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeClientComputerNameA(
+  HANDLE Pipe,
+  LPSTR ClientComputerName,
+  ULONG ClientComputerNameLength
+);
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeClientComputerNameW(
+  HANDLE Pipe,
+  LPWSTR ClientComputerName,
+  ULONG ClientComputerNameLength
+);
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeClientProcessId(
+  HANDLE Pipe,
+  PULONG ClientProcessId
+);
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeClientSessionId(
+  HANDLE Pipe,
+  PULONG ClientSessionId
+);
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeServerProcessId(
+  HANDLE Pipe,
+  PULONG ServerProcessId
+);
+
+WINBASEAPI WINBOOL WINAPI GetNamedPipeServerSessionId(
+  HANDLE Pipe,
+  PULONG ServerSessionId
+);
+
+WINBASEAPI WINBOOL WINAPI GetNumaProximityNode(
+  ULONG ProximityId,
+  PUCHAR NodeNumber
+);
+
+WINBOOL WINAPI GetPhysicallyInstalledSystemMemory(
+  PULONGLONG TotalMemoryInKilobytes
+);
+
+typedef LPVOID PPROC_THREAD_ATTRIBUTE_LIST, LPPROC_THREAD_ATTRIBUTE_LIST;
+
+WINBASEAPI WINBOOL WINAPI UpdateProcThreadAttribute(
+  LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
+  DWORD dwFlags,
+  DWORD_PTR Attribute,
+  PVOID lpValue,
+  SIZE_T cbSize,
+  PVOID lpPreviousValue,
+  PSIZE_T lpReturnSize
+);
+
+WINBASEAPI WINBOOL WINAPI GetProductInfo(
+  DWORD dwOSMajorVersion,
+  DWORD dwOSMinorVersion,
+  DWORD dwSpMajorVersion,
+  DWORD dwSpMinorVersion,
+  PDWORD pdwReturnedProductType
+);
+
+WINBASEAPI WINBOOL WINAPI GetQueuedCompletionStatusEx(
+  HANDLE CompletionPort,
+  LPOVERLAPPED_ENTRY lpCompletionPortEntries,
+  ULONG ulCount,
+  PULONG ulNumEntriesRemoved,
+  DWORD dwMilliseconds,
+  WINBOOL fAlertable
+);
+
+WINBASEAPI WINBOOL WINAPI GetSystemRegistryQuota(
+  PDWORD pdwQuotaAllowed,
+  PDWORD pdwQuotaUsed
+);
+
+WINBASEAPI WINBOOL WINAPI GetSystemTimes(
+  LPFILETIME lpIdleTime,
+  LPFILETIME lpKernelTime,
+  LPFILETIME lpUserTime
+);
+
+WINBASEAPI ULONGLONG WINAPI GetTickCount64(void);
+
+WINBASEAPI WINBOOL WINAPI GetTimeZoneInformationForYear(
+  USHORT wYear,
+  PDYNAMIC_TIME_ZONE_INFORMATION pdtzi,
+  LPTIME_ZONE_INFORMATION ptzi
+);
+
+WINBASEAPI WINBOOL WINAPI GetVolumeInformationByHandleW(
+  HANDLE hFile,
+  LPWSTR lpVolumeNameBuffer,
+  DWORD nVolumeNameSize,
+  LPDWORD lpVolumeSerialNumber,
+  LPDWORD lpMaximumComponentLength,
+  LPDWORD lpFileSystemFlags,
+  LPWSTR lpFileSystemNameBuffer,
+  DWORD nFileSystemNameSize
+);
+
+WINBASEAPI VOID WINAPI LeaveCriticalSectionWhenCallbackReturns(
+  PTP_CALLBACK_INSTANCE pci,
+  PCRITICAL_SECTION pcs
+);
+
+WINBASEAPI LPVOID WINAPI MapViewOfFileExNuma(
+  HANDLE hFileMappingObject,
+  DWORD dwDesiredAccess,
+  DWORD dwFileOffsetHigh,
+  DWORD dwFileOffsetLow,
+  SIZE_T dwNumberOfBytesToMap,
+  LPVOID lpBaseAddress,
+  DWORD nndPreferred
+);
+
+#define MoveFileTransacted __MINGW_NAME_AW(MoveFileTransacted)
+
+WINBASEAPI WINBOOL WINAPI MoveFileTransactedA(
+  LPCSTR lpExistingFileName,
+  LPCSTR lpNewFileName,
+  LPPROGRESS_ROUTINE lpProgressRoutine,
+  LPVOID lpData,
+  DWORD dwFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI MoveFileTransactedW(
+  LPCWSTR lpExistingFileName,
+  LPCWSTR lpNewFileName,
+  LPPROGRESS_ROUTINE lpProgressRoutine,
+  LPVOID lpData,
+  DWORD dwFlags,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI OpenFileById(
+  HANDLE hFile,
+  LPFILE_ID_DESCRIPTOR lpFileID,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  DWORD dwFlags
+);
+
+WINBASEAPI WINBOOL WINAPI QueryActCtxSettingsW(
+  DWORD dwFlags,
+  HANDLE hActCtx,
+  PCWSTR settingsNameSpace,
+  PCWSTR settingName,
+  PWSTR pvBuffer,
+  SIZE_T dwBuffer,
+  SIZE_T *pdwWrittenOrRequired
+);
+
+WINBASEAPI WINBOOL WINAPI QueryFullProcessImageNameA(
+  HANDLE hProcess,
+  DWORD dwFlags,
+  LPSTR lpExeName,
+  PDWORD lpdwSize
+);
+
+WINBASEAPI WINBOOL WINAPI QueryFullProcessImageNameW(
+  HANDLE hProcess,
+  DWORD dwFlags,
+  LPWSTR lpExeName,
+  PDWORD lpdwSize
+);
+#define QueryFullProcessImageName __MINGW_NAME_AW(QueryFullProcessImageName)
+
+WINBASEAPI WINBOOL WINAPI QueryProcessAffinityUpdateMode(
+  HANDLE ProcessHandle,
+  DWORD lpdwFlags
+);
+
+WINADVAPI VOID WINAPI QuerySecurityAccessMask(
+  SECURITY_INFORMATION SecurityInformation,
+  LPDWORD DesiredAccess
+);
+
+WINADVAPI VOID WINAPI ReleaseMutexWhenCallbackReturns(
+  PTP_CALLBACK_INSTANCE pci,
+  HANDLE mut
+);
+
+#define RemoveDirectoryTransacted __MINGW_NAME_AW(RemoveDirectoryTransacted)
+
+WINBASEAPI WINBOOL WINAPI RemoveDirectoryTransactedA(
+  LPCSTR lpPathName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI RemoveDirectoryTransactedW(
+  LPCWSTR lpPathName,
+  HANDLE hTransaction
+);
+
+WINBASEAPI HANDLE WINAPI ReOpenFile(
+  HANDLE hOriginalFile,
+  DWORD dwDesiredAccess,
+  DWORD dwShareMode,
+  DWORD dwFlags
+);
+
+WINBASEAPI WINBOOL WINAPI SetDynamicTimeZoneInformation(
+  const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation
+);
+
+WINBASEAPI VOID WINAPI SetEventWhenCallbackReturns(
+  PTP_CALLBACK_INSTANCE pci,
+  HANDLE evt
+);
+
+WINBASEAPI WINBOOL WINAPI SetFileAttributesTransactedA(
+  LPCSTR lpFileName,
+  DWORD dwFileAttributes,
+  HANDLE hTransaction
+);
+
+WINBASEAPI WINBOOL WINAPI SetFileAttributesTransactedW(
+  LPCWSTR lpFileName,
+  DWORD dwFileAttributes,
+  HANDLE hTransaction
+);
+
+#define SetFileAttributesTransacted __MINGW_NAME_AW(SetFileAttributesTransacted)
+
+WINBASEAPI WINBOOL WINAPI SetFileBandwidthReservation(
+  HANDLE hFile,
+  DWORD nPeriodMilliseconds,
+  DWORD nBytesPerPeriod,
+  WINBOOL bDiscardable,
+  LPDWORD lpTransferSize,
+  LPDWORD lpNumOutstandingRequests
+);
+
+WINBASEAPI WINBOOL WINAPI SetFileCompletionNotificationModes(
+  HANDLE FileHandle,
+  UCHAR Flags
+);
+
+WINBASEAPI WINBOOL WINAPI SetFileInformationByHandle(
+  HANDLE hFile,
+  FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
+  LPVOID lpFileInformation,
+  DWORD dwBufferSize
+);
+
+WINBASEAPI WINBOOL WINAPI SetFileIoOverlappedRange(
+  HANDLE FileHandle,
+  PUCHAR OverlappedRangeStart,
+  ULONG Length
+);
+
+#define PROCESS_AFFINITY_ENABLE_AUTO_UPDATE 0x00000001UL
+
+WINBASEAPI WINBOOL WINAPI SetProcessAffinityUpdateMode(
+  HANDLE ProcessHandle,
+  DWORD dwFlags
+);
+
+WINBASEAPI WINBOOL WINAPI SetProcessWorkingSetSizeEx(
+  HANDLE hProcess,
+  SIZE_T dwMinimumWorkingSetSize,
+  SIZE_T dwMaximumWorkingSetSize,
+  DWORD Flags
+);
+
+WINADVAPI VOID WINAPI SetSecurityAccessMask(
+  SECURITY_INFORMATION SecurityInformation,
+  LPDWORD DesiredAccess
+);
+
+/* INLINE - http://msdn.microsoft.com/en-us/library/ms686255%28v=VS.85%29.aspx */
+VOID SetThreadpoolCallbackCleanupGroup(
+  PTP_CALLBACK_ENVIRON pcbe,
+  PTP_CLEANUP_GROUP ptpcg,
+  PTP_CLEANUP_GROUP_CANCEL_CALLBACK pfng
+);
+
+/* INLINE - http://msdn.microsoft.com/en-us/library/ms686258%28v=VS.85%29.aspx */
+VOID SetThreadpoolCallbackLibrary(
+  PTP_CALLBACK_ENVIRON pcbe,
+  PVOID mod
+);
+
+/* INLINE -  http://msdn.microsoft.com/en-us/library/ms686261%28v=VS.85%29.aspx */
+VOID SetThreadpoolCallbackPool(
+  PTP_CALLBACK_ENVIRON pcbe,
+  PTP_POOL ptpp
+);
+
+/* INLINE - http://msdn.microsoft.com/en-us/library/ms686263%28v=VS.85%29.aspx */
+VOID SetThreadpoolCallbackRunsLong(
+  PTP_CALLBACK_ENVIRON pcbe
+);
+
+WINBASEAPI VOID WINAPI SetThreadpoolThreadMaximum(
+  PTP_POOL ptpp,
+  DWORD cthrdMost
+);
+
+WINBASEAPI WINBOOL WINAPI SetThreadpoolThreadMinimum(
+  PTP_POOL ptpp,
+  DWORD cthrdMic
+);
+
+WINBASEAPI VOID WINAPI SetThreadpoolTimer(
+  PTP_TIMER pti,
+  PFILETIME pftDueTime,
+  DWORD msPeriod,
+  DWORD msWindowLength
+);
+
+WINBASEAPI VOID WINAPI SetThreadpoolWait(
+  PTP_WAIT pwa,
+  HANDLE h,
+  PFILETIME pftTimeout
+);
+
+typedef VOID (CALLBACK *PTP_SIMPLE_CALLBACK)(
+  PTP_CALLBACK_INSTANCE Instance,
+  PVOID Context
+);
+
+WINBASEAPI VOID WINAPI StartThreadpoolIo(
+  PTP_IO pio
+);
+
+typedef struct _STARTUPINFOEXA {
+  STARTUPINFOA                 StartupInfo;
+  PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
+} STARTUPINFOEXA, *LPSTARTUPINFOEXA;
+
+typedef struct _STARTUPINFOEXAW {
+  STARTUPINFOW                 StartupInfo;
+  PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
+} STARTUPINFOEXW, *LPSTARTUPINFOEXW;
+
+__MINGW_TYPEDEF_AW(STARTUPINFOEX)
+__MINGW_TYPEDEF_AW(LPSTARTUPINFOEX)
+
+WINBASEAPI WINBOOL WINAPI TrySubmitThreadpoolCallback(
+  PTP_SIMPLE_CALLBACK pfns,
+  PVOID pv,
+  PTP_CALLBACK_ENVIRON pcbe
+);
+
+WINBASEAPI HRESULT WINAPI UnregisterApplicationRestart(void);
+
+WINBASEAPI HRESULT WINAPI UnregisterApplicationRecoveryCallback(void);
+
+WINBASEAPI LPVOID WINAPI VirtualAllocExNuma(
+  HANDLE hProcess,
+  LPVOID lpAddress,
+  SIZE_T dwSize,
+  DWORD flAllocationType,
+  DWORD flProtect,
+  DWORD nndPreferred
+);
+
+WINBASEAPI VOID WINAPI WaitForThreadpoolIoCallbacks(
+  PTP_IO pio,
+  WINBOOL fCancelPendingCallbacks
+);
+
+WINBASEAPI VOID WINAPI WaitForThreadpoolTimerCallbacks(
+  PTP_TIMER pti,
+  WINBOOL fCancelPendingCallbacks
+);
+
+WINBASEAPI VOID WINAPI WaitForThreadpoolWaitCallbacks(
+  PTP_WAIT pwa,
+  WINBOOL fCancelPendingCallbacks
+);
+
+WINBASEAPI VOID WINAPI WaitForThreadpoolWorkCallbacks(
+  PTP_WORK pwk,
+  WINBOOL fCancelPendingCallbacks
+);
+
+WINBASEAPI WINBOOL WINAPI Wow64GetThreadContext(
+  HANDLE hThread,
+  PWOW64_CONTEXT lpContext
+);
+
+WINBASEAPI WINBOOL WINAPI Wow64RevertWow64FsRedirection(
+  PVOID OldValue
+);
+
+WINBASEAPI WINBOOL WINAPI Wow64SetThreadContext(
+  HANDLE hThread,
+  const WOW64_CONTEXT *lpContext
+);
+
+WINBASEAPI DWORD WINAPI Wow64SuspendThread(
+  HANDLE hThread
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#if (_WIN32_WINNT >= 0x0601)
+WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx(
+  PPROCESSOR_NUMBER ProcNumber
+);
+
+WINBASEAPI WINBOOL WINAPI GetLogicalProcessorInformationEx(
+  LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
+  PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer,
+  PDWORD ReturnedLength
+);
+
+WINBASEAPI WINBOOL WINAPI GetNumaAvailableMemoryNodeEx(
+  USHORT Node,
+  PULONGLONG AvailableBytes
+);
+
+WINBASEAPI WINBOOL WINAPI GetNumaNodeProcessorMaskEx(
+  USHORT Node,
+  PGROUP_AFFINITY ProcessorMask
+);
+
+WINBASEAPI WINBOOL WINAPI GetNumaProcessorNodeEx(
+  PPROCESSOR_NUMBER Processor,
+  PUSHORT NodeNumber
+);
+
+WINBASEAPI WINBOOL WINAPI GetNumaProximityNodeEx(
+  ULONG ProximityId,
+  PUSHORT NodeNumber
+);
+
+WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(
+  HANDLE hProcess,
+  LPSECURITY_ATTRIBUTES lpThreadAttributes,
+  SIZE_T dwStackSize,
+  LPTHREAD_START_ROUTINE lpStartAddress,
+  LPVOID lpParameter,
+  DWORD dwCreationFlags,
+  LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
+  LPDWORD lpThreadId
+);
+
+WINBASEAPI WINBOOL WINAPI QueryUnbiasedInterruptTime(
+  PULONGLONG UnbiasedTime
+);
+
+WINBASEAPI WINBOOL WINAPI AddConditionalAce(
+  PACL pAcl,
+  DWORD dwAceRevision,
+  DWORD AceFlags,
+  UCHAR AceType,
+  DWORD AccessMask,
+  PSID pSid,
+  PWCHAR ConditionStr,
+  DWORD *ReturnLength
+);
+
+#ifdef _WIN64
+typedef struct _UMS_COMPLETION_LIST *PUMS_COMPLETION_LIST;
+typedef struct _UMS_CONTEXT *PUMS_CONTEXT;
+
+typedef enum _UMS_SCHEDULER_REASON {
+  UmsSchedulerStartup = 0,
+  UmsSchedulerThreadBlocked = 1,
+  UmsSchedulerThreadYield = 2
+} UMS_SCHEDULER_REASON;
+
+typedef VOID (*PUMS_SCHEDULER_ENTRY_POINT)(
+  UMS_SCHEDULER_REASON Reason,
+  ULONG_PTR ActivationPayload,
+  PVOID SchedulerParam
+);
+
+typedef enum _UMS_THREAD_INFO_CLASS {
+  UmsThreadInvalidInfoClass   = 0,
+  UmsThreadUserContext        = 1,
+  UmsThreadPriority           = 2,
+  UmsThreadAffinity           = 3,
+  UmsThreadTeb                = 4,
+  UmsThreadIsSuspended        = 5,
+  UmsThreadIsTerminated       = 6,
+  UmsThreadMaxInfoClass       = 7 
+} UMS_THREAD_INFO_CLASS, *PUMS_THREAD_INFO_CLASS;
+
+typedef struct _UMS_SCHEDULER_STARTUP_INFO {
+  ULONG                      UmsVersion;
+  PUMS_COMPLETION_LIST       CompletionList;
+  PUMS_SCHEDULER_ENTRY_POINT SchedulerProc;
+  PVOID                      SchedulerParam;
+} UMS_SCHEDULER_STARTUP_INFO, *PUMS_SCHEDULER_STARTUP_INFO;
+
+WINBASEAPI WINBOOL CreateUmsCompletionList(
+  PUMS_COMPLETION_LIST *UmsCompletionList
+);
+
+WINBASEAPI WINBOOL CreateUmsThreadContext(
+  PUMS_CONTEXT *lpUmsThread
+);
+
+WINBASEAPI WINBOOL EnterUmsSchedulingMode(
+  PUMS_SCHEDULER_STARTUP_INFO SchedulerStartupInfo
+);
+
+WINBASEAPI WINBOOL DequeueUmsCompletionListItems(
+  PUMS_COMPLETION_LIST UmsCompletionList,
+  DWORD WaitTimeOut,
+  PUMS_CONTEXT *UmsThreadList
+);
+
+WINBASEAPI WINBOOL GetUmsCompletionListEvent(
+  PUMS_COMPLETION_LIST UmsCompletionList,
+  PHANDLE UmsCompletionEvent
+);
+
+WINBASEAPI WINBOOL DeleteUmsCompletionList(
+  PUMS_COMPLETION_LIST UmsCompletionList
+);
+
+WINBASEAPI WINBOOL DeleteUmsThreadContext(
+  PUMS_CONTEXT UmsThread
+);
+
+WINBASEAPI WINBOOL QueryUmsThreadInformation(
+  PUMS_CONTEXT UmsThread,
+  UMS_THREAD_INFO_CLASS UmsThreadInfoClass,
+  PVOID UmsThreadInformation,
+  ULONG UmsThreadInformationLength,
+  PULONG ReturnLength
+);
+
+WINBASEAPI WINBOOL SetUmsThreadInformation(
+  PUMS_CONTEXT UmsThread,
+  UMS_THREAD_INFO_CLASS UmsThreadInfoClass,
+  PVOID UmsThreadInformation,
+  ULONG UmsThreadInformationLength
+);
+
+WINBASEAPI WINBOOL ExecuteUmsThread(
+  PUMS_CONTEXT UmsThread
+);
+
+WINBASEAPI WINBOOL UmsThreadYield(
+  PVOID SchedulerParam
+);
+
+WINBASEAPI PUMS_CONTEXT GetNextUmsListItem(
+  PUMS_CONTEXT UmsContext
+);
+
+#endif /* _WIN64 */
 #endif /*(_WIN32_WINNT >= 0x0601)*/
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/wincon.h b/mingw-w64-headers/include/wincon.h
index 4ab71fa..a5e6179 100644
--- a/mingw-w64-headers/include/wincon.h
+++ b/mingw-w64-headers/include/wincon.h
@@ -275,6 +275,88 @@
   WINBASEAPI DWORD WINAPI GetConsoleAliasExesA(LPSTR ExeNameBuffer,DWORD ExeNameBufferLength);
   WINBASEAPI DWORD WINAPI GetConsoleAliasExesW(LPWSTR ExeNameBuffer,DWORD ExeNameBufferLength);
 
+#if (_WIN32_WINNT >= 0x0600)
+#define LF_FACESIZE 32
+
+typedef struct _CONSOLE_FONT_INFOEX {
+  ULONG cbSize;
+  DWORD nFont;
+  COORD dwFontSize;
+  UINT  FontFamily;
+  UINT  FontWeight;
+  WCHAR FaceName[LF_FACESIZE];
+} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
+
+typedef struct _CONSOLE_HISTORY_INFO {
+  UINT  cbSize;
+  UINT  HistoryBufferSize;
+  UINT  NumberOfHistoryBuffers;
+  DWORD dwFlags;
+} CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
+
+typedef struct _CONSOLE_READCONSOLE_CONTROL {
+  ULONG nLength;
+  ULONG nInitialChars;
+  ULONG dwCtrlWakeupMask;
+  ULONG dwControlKeyState;
+} CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX {
+  ULONG      cbSize;
+  COORD      dwSize;
+  COORD      dwCursorPosition;
+  WORD       wAttributes;
+  SMALL_RECT srWindow;
+  COORD      dwMaximumWindowSize;
+  WORD       wPopupAttributes;
+  BOOL       bFullscreenSupported;
+  COLORREF   ColorTable[16];
+} CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
+
+WINBOOL WINAPI GetConsoleHistoryInfo(
+  PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo
+);
+
+#define GetConsoleOriginalTitle __MINGW_NAME_AW(GetConsoleOriginalTitle)
+
+DWORD WINAPI GetConsoleOriginalTitleA(
+  LPSTR lpConsoleTitle,
+  DWORD nSize
+);
+
+DWORD WINAPI GetConsoleOriginalTitleW(
+  LPWSTR lpConsoleTitle,
+  DWORD nSize
+);
+
+WINBOOL WINAPI GetConsoleScreenBufferInfoEx(
+  HANDLE hConsoleOutput,
+  PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx
+);
+
+WINBOOL WINAPI GetCurrentConsoleFontEx(
+  HANDLE hConsoleOutput,
+  WINBOOL bMaximumWindow,
+  PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx
+);
+
+WINBOOL WINAPI SetConsoleHistoryInfo(
+  PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo
+);
+
+WINBOOL WINAPI SetConsoleScreenBufferInfoEx(
+  HANDLE hConsoleOutput,
+  PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx
+);
+
+WINBOOL WINAPI SetCurrentConsoleFontEx(
+  HANDLE hConsoleOutput,
+  WINBOOL bMaximumWindow,
+  PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx
+);
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/wincred.h b/mingw-w64-headers/include/wincred.h
index ed33759..bdca491 100644
--- a/mingw-w64-headers/include/wincred.h
+++ b/mingw-w64-headers/include/wincred.h
@@ -314,6 +314,145 @@
   CREDUIAPI DWORD WINAPI CredUIStoreSSOCredW (PCWSTR pszRealm,PCWSTR pszUsername,PCWSTR pszPassword,WINBOOL bPersist);
   CREDUIAPI DWORD WINAPI CredUIReadSSOCredW (PCWSTR pszRealm,PWSTR *ppszUsername);
 
+#if (_WIN32_WINNT >= 0x0600)
+#define CredFindBestCredential __MINGW_NAME_AW(CredFindBestCredential)
+#define CredIsProtected __MINGW_NAME_AW(CredIsProtected)
+#define CredPackAuthenticationBuffer __MINGW_NAME_AW(CredPackAuthenticationBuffer)
+#define CredProtect __MINGW_NAME_AW(CredProtect)
+#define CredUIPromptForWindowsCredentials __MINGW_NAME_AW(CredUIPromptForWindowsCredentials)
+#define CredUnPackAuthenticationBuffer __MINGW_NAME_AW(CredUnPackAuthenticationBuffer)
+#define CredUnprotect __MINGW_NAME_AW(CredUnprotect)
+
+typedef enum _CRED_PROTECTION_TYPE {
+  CredUnprotected         = 0,
+  CredUserProtection      = 1,
+  CredTrustedProtection   = 2 
+} CRED_PROTECTION_TYPE, *PCRED_PROTECTION_TYPE;
+
+WINADVAPI WINBOOL WINAPI CredFindBestCredentialA(
+  LPCSTR TargetName,
+  DWORD Type,
+  DWORD Flags,
+  PCREDENTIALA *Credential
+);
+
+WINADVAPI WINBOOL WINAPI CredFindBestCredentialW(
+  LPCWSTR TargetName,
+  DWORD Type,
+  DWORD Flags,
+  PCREDENTIALW *Credential
+);
+
+WINADVAPI WINBOOL WINAPI CredIsProtectedA(
+  LPSTR pszProtectedCredentials,
+  CRED_PROTECTION_TYPE *pProtectionType
+);
+
+WINADVAPI WINBOOL WINAPI CredIsProtectedW(
+  LPWSTR pszProtectedCredentials,
+  CRED_PROTECTION_TYPE *pProtectionType
+);
+
+CREDUIAPI WINBOOL WINAPI CredPackAuthenticationBufferA(
+  DWORD dwFlags,
+  LPSTR pszUserName,
+  LPSTR pszPassword,
+  PBYTE pPackedCredentials,
+  DWORD *pcbPackedCredentials
+);
+
+CREDUIAPI WINBOOL WINAPI CredPackAuthenticationBufferW(
+  DWORD dwFlags,
+  LPWSTR pszUserName,
+  LPWSTR pszPassword,
+  PBYTE pPackedCredentials,
+  DWORD *pcbPackedCredentials
+);
+
+WINADVAPI WINBOOL WINAPI CredProtectW(
+  WINBOOL fAsSelf,
+  LPWSTR pszCredentials,
+  DWORD cchCredentials,
+  LPWSTR pszProtectedCredentials,
+  DWORD *pcchMaxChars,
+  CRED_PROTECTION_TYPE *ProtectionType
+);
+
+WINADVAPI WINBOOL WINAPI CredProtectA(
+  WINBOOL fAsSelf,
+  LPSTR pszCredentials,
+  DWORD cchCredentials,
+  LPSTR pszProtectedCredentials,
+  DWORD *pcchMaxChars,
+  CRED_PROTECTION_TYPE *ProtectionType
+);
+
+CREDUIAPI DWORD WINAPI CredUIPromptForWindowsCredentialsA(
+  PCREDUI_INFOA pUiInfo,
+  DWORD dwAuthError,
+  ULONG *pulAuthPackage,
+  LPCVOID pvInAuthBuffer,
+  ULONG ulInAuthBufferSize,
+  LPVOID *ppvOutAuthBuffer,
+  ULONG *pulOutAuthBufferSize,
+  WINBOOL *pfSave,
+  DWORD dwFlags
+);
+
+CREDUIAPI DWORD WINAPI CredUIPromptForWindowsCredentialsW(
+  PCREDUI_INFOW pUiInfo,
+  DWORD dwAuthError,
+  ULONG *pulAuthPackage,
+  LPCVOID pvInAuthBuffer,
+  ULONG ulInAuthBufferSize,
+  LPVOID *ppvOutAuthBuffer,
+  ULONG *pulOutAuthBufferSize,
+  WINBOOL *pfSave,
+  DWORD dwFlags
+);
+
+CREDUIAPI WINBOOL WINAPI CredUnPackAuthenticationBufferA(
+  DWORD dwFlags,
+  PVOID pAuthBuffer,
+  DWORD cbAuthBuffer,
+  LPSTR pszUserName,
+  DWORD *pcchMaxUserName,
+  LPSTR pszDomainName,
+  DWORD *pcchMaxDomainame,
+  LPSTR pszPassword,
+  DWORD *pcchMaxPassword
+);
+
+CREDUIAPI WINBOOL WINAPI CredUnPackAuthenticationBufferW(
+  DWORD dwFlags,
+  PVOID pAuthBuffer,
+  DWORD cbAuthBuffer,
+  LPWSTR pszUserName,
+  DWORD *pcchMaxUserName,
+  LPWSTR pszDomainName,
+  DWORD *pcchMaxDomainame,
+  LPWSTR pszPassword,
+  DWORD *pcchMaxPassword
+);
+
+WINADVAPI WINBOOL WINAPI CredUnprotectA(
+  WINBOOL fAsSelf,
+  LPSTR pszProtectedCredentials,
+  DWORD cchCredentials,
+  LPSTR pszCredentials,
+  DWORD *pcchMaxChars
+);
+
+WINADVAPI WINBOOL WINAPI CredUnprotectW(
+  WINBOOL fAsSelf,
+  LPWSTR pszProtectedCredentials,
+  DWORD cchCredentials,
+  LPWSTR pszCredentials,
+  DWORD *pcchMaxChars
+);
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/wincrypt.h b/mingw-w64-headers/include/wincrypt.h
index 3f81f40..8bfb9e4 100644
--- a/mingw-w64-headers/include/wincrypt.h
+++ b/mingw-w64-headers/include/wincrypt.h
@@ -9,6 +9,8 @@
 #include <_mingw.h>
 #include <_mingw_unicode.h>
 #include <guiddef.h>
+#include <bcrypt.h>
+#include <ncrypt.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -201,8 +203,12 @@
 #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
 #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
 
-  typedef ULONG_PTR HCRYPTPROV;
+#ifndef __HCRYPTKEY__
+#define __HCRYPTKEY__
+/* In ncrypt.h too */
   typedef ULONG_PTR HCRYPTKEY;
+  typedef ULONG_PTR HCRYPTPROV;
+#endif
   typedef ULONG_PTR HCRYPTHASH;
 
 #define CRYPT_VERIFYCONTEXT 0xF0000000
@@ -4214,6 +4220,519 @@
 
   WINIMPM WINBOOL WINAPI PFXExportCertStore(HCERTSTORE hStore,CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
 
+#if (_WIN32_WINNT >= 0x0600)
+#define szOID_LOYALTY_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.1"
+#define szOID_BACKGROUND_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.2"
+#define szOID_QC_EU_COMPLIANCE "0.4.0.1862.1.1"
+#define szOID_QC_SSCD "0.4.0.1862.1.4"
+#define CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x04000000
+
+#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME L"SrvOcspRespMinValiditySeconds"
+#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT (10 * 60)
+#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"SrvOcspRespUrlRetrievalTimeoutMilliseconds"
+#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 * 1000)
+#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMaxBeforeNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (4 * 60 * 60)
+#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinBeforeNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (2 * 60)
+#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinAfterNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT (1 * 60)
+
+typedef LPVOID HCERT_SERVER_OCSP_RESPONSE;
+
+typedef WINBOOL ( WINAPI *PFN_CERT_CREATE_CONTEXT_SORT_FUNC )(
+  DWORD cbTotalEncoded,
+  DWORD cbRemainEncoded,
+  DWORD cEntry,
+  void *pvSort
+);
+
+#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllExportPublicKeyInfoEx2"
+
+typedef WINBOOL ( WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC )(
+  NCRYPT_KEY_HANDLE hNCryptKey,
+  DWORD dwCertEncodingType,
+  LPSTR pszPublicKeyObjId,
+  DWORD dwFlags,
+  void *pvAuxInfo,
+  PCERT_PUBLIC_KEY_INFO pInfo,
+  DWORD *pcbInfo
+);
+
+#define CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC "CryptDllExtractEncodedSignatureParameters"
+
+typedef WINBOOL ( WINAPI *PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC )(
+  DWORD dwCertEncodingType,
+  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+  void **ppvDecodedSignPara,
+  LPWSTR *ppwszCNGHashAlgid
+);
+
+typedef WINBOOL ( WINAPI *PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC )(
+  NCRYPT_KEY_HANDLE hKey,
+  DWORD dwCertEncodingType,
+  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+  void *pvDecodedSignPara,
+  LPCWSTR pwszCNGPubKeyAlgid,
+  LPCWSTR pwszCNGHashAlgid,
+  BYTE *pbComputedHash,
+  DWORD cbComputedHash,
+  BYTE *pbSignature,
+  DWORD *pcbSignature
+);
+
+typedef WINBOOL ( WINAPI *PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC )(
+  DWORD dwCertEncodingType,
+  PCERT_PUBLIC_KEY_INFO pPubKeyInfo,
+  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+  void *pvDecodedSignPara,
+  LPCWSTR pwszCNGPubKeyAlgid,
+  LPCWSTR pwszCNGHashAlgid,
+  BYTE *pbComputedHash,
+  DWORD cbComputedHash,
+  BYTE *pbSignature,
+  DWORD cbSignature
+);
+
+#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllImportPublicKeyInfoEx2"
+
+typedef WINBOOL ( WINAPI *PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC )(
+  DWORD dwCertEncodingType,
+  PCERT_PUBLIC_KEY_INFO pInfo,
+  DWORD dwFlags,
+  void *pvAuxInfo,
+  BCRYPT_KEY_HANDLE *phKey
+);
+
+typedef struct _CERT_HASHED_URL {
+  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+  CRYPT_HASH_BLOB            Hash;
+  LPWSTR                     pwszUrl;
+} CERT_HASHED_URL, *PCERT_HASHED_URL;
+
+typedef struct _CERT_BIOMETRIC_DATA {
+  DWORD dwTypeOfBiometricDataChoice;
+  __MINGW_EXTENSION union {
+    DWORD dwPredefined;
+    LPSTR pszObjId;
+  };
+  CERT_HASHED_URL HashedUrl;
+} CERT_BIOMETRIC_DATA, *PCERT_BIOMETRIC_DATA;
+
+typedef struct _CERT_BIOMETRIC_EXT_INFO {
+  DWORD                cBiometricData;
+  PCERT_BIOMETRIC_DATA rgBiometricData;
+} CERT_BIOMETRIC_EXT_INFO, *PCERT_BIOMETRIC_EXT_INFO;
+
+typedef struct _CERT_ECC_SIGNATURE {
+  CRYPT_UINT_BLOB r;
+  CRYPT_UINT_BLOB s;
+} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;
+
+typedef struct _CERT_LOGOTYPE_DETAILS {
+  LPWSTR           pwszMimeType;
+  DWORD            cHashedUrl;
+  PCERT_HASHED_URL rgHashedUrl;
+} CERT_LOGOTYPE_DETAILS, *PCERT_LOGOTYPE_DETAILS;
+
+typedef struct _CERT_LOGOTYPE_AUDIO_INFO {
+  DWORD  dwFileSize;
+  DWORD  dwPlayTime;
+  DWORD  dwChannels;
+  DWORD  dwSampleRate;
+  LPWSTR pwszLanguage;
+} CERT_LOGOTYPE_AUDIO_INFO, *PCERT_LOGOTYPE_AUDIO_INFO;
+
+typedef struct _CERT_LOGOTYPE_AUDIO {
+  CERT_LOGOTYPE_DETAILS     LogotypeDetails;
+  PCERT_LOGOTYPE_AUDIO_INFO pLogotypeAudioInfo;
+} CERT_LOGOTYPE_AUDIO, *PCERT_LOGOTYPE_AUDIO;
+
+typedef struct _CERT_LOGOTYPE_IMAGE_INFO {
+  DWORD  dwLogotypeImageInfoChoice;
+  DWORD  dwFileSize;
+  DWORD  dwXSize;
+  DWORD  dwYSize;
+  DWORD  dwLogotypeImageResolutionChoice;
+  __MINGW_EXTENSION union {
+    DWORD dwNumBits;
+    DWORD dwTableSize;
+  };
+  LPWSTR pwszLanguage;
+} CERT_LOGOTYPE_IMAGE_INFO, *PCERT_LOGOTYPE_IMAGE_INFO;
+
+typedef struct _CERT_LOGOTYPE_IMAGE {
+  CERT_LOGOTYPE_DETAILS     LogotypeDetails;
+  PCERT_LOGOTYPE_IMAGE_INFO pLogotypeImageInfo;
+} CERT_LOGOTYPE_IMAGE, *PCERT_LOGOTYPE_IMAGE;
+
+typedef struct _CERT_LOGOTYPE_DATA {
+  DWORD                cLogotypeImage;
+  PCERT_LOGOTYPE_IMAGE rgLogotypeImage;
+  DWORD                cLogotypeAudio;
+  PCERT_LOGOTYPE_AUDIO rgLogotypeAudio;
+} CERT_LOGOTYPE_DATA, *PCERT_LOGOTYPE_DATA;
+
+typedef struct _CERT_LOGOTYPE_REFERENCE {
+  DWORD            cHashedUrl;
+  PCERT_HASHED_URL rgHashedUrl;
+} CERT_LOGOTYPE_REFERENCE, *PCERT_LOGOTYPE_REFERENCE;
+
+typedef struct _CERT_LOGOTYPE_INFO {
+  DWORD dwLogotypeInfoChoice;
+  __MINGW_EXTENSION union {
+    PCERT_LOGOTYPE_DATA      pLogotypeDirectInfo;
+    PCERT_LOGOTYPE_REFERENCE pLogotypeIndirectInfo;
+  } ;
+} CERT_LOGOTYPE_INFO, *PCERT_LOGOTYPE_INFO;
+
+typedef struct _CERT_OTHER_LOGOTYPE_INFO {
+  LPSTR              pszObjId;
+  CERT_LOGOTYPE_INFO LogotypeInfo;
+} CERT_OTHER_LOGOTYPE_INFO, *PCERT_OTHER_LOGOTYPE_INFO;
+
+typedef struct _CERT_LOGOTYPE_EXT_INFO {
+  DWORD                     cCommunityLogo;
+  PCERT_LOGOTYPE_INFO       rgCommunityLogo;
+  PCERT_LOGOTYPE_INFO       pIssuerLogo;
+  PCERT_LOGOTYPE_INFO       pSubjectLogo;
+  DWORD                     cOtherLogo;
+  PCERT_OTHER_LOGOTYPE_INFO rgOtherLogo;
+} CERT_LOGOTYPE_EXT_INFO, *PCERT_LOGOTYPE_EXT_INFO;
+
+typedef struct _CERT_QC_STATEMENT {
+  LPSTR            pszStatementId;
+  CRYPT_OBJID_BLOB StatementInfo;
+} CERT_QC_STATEMENT, *PCERT_QC_STATEMENT;
+
+typedef struct _CERT_QC_STATEMENTS_EXT_INFO {
+  DWORD              cStatement;
+  PCERT_QC_STATEMENT rgStatement;
+} CERT_QC_STATEMENTS_EXT_INFO, *PCERT_QC_STATEMENTS_EXT_INFO;
+
+typedef struct _CERT_REVOCATION_CHAIN_PARA {
+  DWORD            cbSize;
+  HCERTCHAINENGINE hChainEngine;
+  HCERTSTORE       hAdditionalStore;
+  DWORD            dwChainFlags;
+  DWORD            dwUrlRetrievalTimeout;
+  LPFILETIME       pftCurrentTime;
+  LPFILETIME       pftCacheResync;
+  DWORD            cbMaxUrlRetrievalByteCount;
+} CERT_REVOCATION_CHAIN_PARA, *PCERT_REVOCATION_CHAIN_PARA;
+
+typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT {
+  DWORD cbSize;
+  BYTE  *pbEncodedOcspResponse;
+  DWORD cbEncodedOcspResponse;
+} CERT_SERVER_OCSP_RESPONSE_CONTEXT, *PCERT_SERVER_OCSP_RESPONSE_CONTEXT, *PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
+
+#ifndef __NCRYPT_KEY_HANDLE__
+#define __NCRYPT_KEY_HANDLE__
+/*in ncrypt.h too*/
+typedef LPVOID NCRYPT_KEY_HANDLE;
+#endif
+
+typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO {
+  DWORD                      cbSize;
+  CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+  PFN_CMSG_ALLOC             pfnAlloc;
+  PFN_CMSG_FREE              pfnFree;
+  NCRYPT_KEY_HANDLE          hNCryptKey;
+  BYTE                       *pbContentEncryptKey;
+  DWORD                      cbContentEncryptKey;
+  BCRYPT_KEY_HANDLE          hCNGContentEncryptKey;
+  BYTE                       *pbCNGContentEncryptKeyObject;
+} CMSG_CNG_CONTENT_DECRYPT_INFO, *PCMSG_CNG_CONTENT_DECRYPT_INFO;
+
+typedef struct _CRYPT_AES_128_KEY_STATE {
+  unsigned char Key[16];
+  unsigned char IV[16];
+  unsigned char EncryptionState[11][16];
+  unsigned char DecryptionState[11][16];
+  unsigned char Feedback[16];
+} CRYPT_AES_128_KEY_STATE, *PCRYPT_AES_128_KEY_STATE;
+
+typedef struct _CRYPT_AES_256_KEY_STATE {
+  unsigned char Key[32];
+  unsigned char IV[16];
+  unsigned char EncryptionState[15][16];
+  unsigned char DecryptionState[15][16];
+  unsigned char Feedback[16];
+} CRYPT_AES_256_KEY_STATE, *PCRYPT_AES_256_KEY_STATE;
+
+typedef struct _ROOT_INFO_LUID {
+  DWORD LowPart;
+  LONG  HighPart;
+} ROOT_INFO_LUID, *PROOT_INFO_LUID;
+
+WINCRYPT32API VOID WINAPI CertAddRefServerOcspResponse(HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse);
+HCERT_SERVER_OCSP_RESPONSE WINAPI CertOpenServerOcspResponse(
+  PCCERT_CHAIN_CONTEXT pChainContext,
+  DWORD dwFlags,
+  LPVOID pvReserved
+);
+
+VOID WINAPI CertAddRefServerOcspResponseContext(
+  PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
+);
+
+VOID WINAPI CertCloseServerOcspResponse(
+  HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
+  DWORD dwFlags
+);
+
+VOID WINAPI CertFreeServerOcspResponseContext(
+  PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
+);
+
+PCCERT_SERVER_OCSP_RESPONSE_CONTEXT WINAPI CertGetServerOcspResponseContext(
+  HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
+  DWORD dwFlags,
+  LPVOID pvReserved
+);
+
+WINBOOL WINAPI CertRetrieveLogoOrBiometricInfo(
+  PCCERT_CONTEXT pCertContext,
+  LPCSTR lpszLogoOrBiometricType,
+  DWORD dwRetrievalFlags,
+  DWORD dwTimeout,
+  DWORD dwFlags,
+  void *pvReserved,
+  BYTE **ppbData,
+  DWORD *pcbData,
+  LPWSTR *ppwszMimeType
+);
+
+typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_KEY_TRANS )(
+  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
+  PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,
+  DWORD dwFlags,
+  void *pvReserved
+);
+
+typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_KEY_AGREE )(
+  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
+  PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,
+  DWORD dwFlags,
+  void *pvReserved
+);
+
+typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY )(
+  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
+  DWORD dwFlags,
+  void *pvReserved
+);
+
+#define CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC "CryptMsgDllCNGImportKeyTrans"
+
+#define CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH 4
+
+typedef struct _CRYPT_ECC_CMS_SHARED_INFO {
+  CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+  CRYPT_DATA_BLOB            EntityUInfo;
+  BYTE                       rgbSuppPubInfo[CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH];
+} CRYPT_ECC_CMS_SHARED_INFO, *PCRYPT_ECC_CMS_SHARED_INFO;
+
+typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
+  DWORD                       cbSize;
+  int                         iDeltaCrlIndicator;
+  LPFILETIME                  pftCacheResync;
+  LPFILETIME                  pLastSyncTime;
+  LPFILETIME                  pMaxAgeTime;
+  PCERT_REVOCATION_CHAIN_PARA pChainPara;
+  PCRYPT_INTEGER_BLOB         pDeltaCrlIndicator;
+} CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO, *PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
+
+#define szOID_RSA_MGF1 "1.2.840.113549.1.1.8"
+
+typedef struct _CRYPT_MASK_GEN_ALGORITHM {
+  LPSTR                      pszObjId;
+  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+} CRYPT_MASK_GEN_ALGORITHM, *PCRYPT_MASK_GEN_ALGORITHM;
+
+typedef struct _CRYPT_PKCS12_PBE_PARAMS {
+  int   iIterations;
+  ULONG cbSalt;
+} CRYPT_PKCS12_PBE_PARAMS;
+
+#define szOID_RSA_PSPECIFIED "1.2.840.113549.1.1.9"
+
+typedef struct _CRYPT_PSOURCE_ALGORITHM {
+  LPSTR           pszObjId;
+  CRYPT_DATA_BLOB EncodingParameters;
+} CRYPT_PSOURCE_ALGORITHM, *PCRYPT_PSOURCE_ALGORITHM;
+
+typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS {
+  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+  CRYPT_MASK_GEN_ALGORITHM   MaskGenAlgorithm;
+  DWORD                      dwSaltLength;
+  DWORD                      dwTrailerField;
+} CRYPT_RSA_SSA_PSS_PARAMETERS, *PCRYPT_RSA_SSA_PSS_PARAMETERS;
+
+typedef struct _CRYPT_RSAES_OAEP_PARAMETERS {
+  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+  CRYPT_MASK_GEN_ALGORITHM   MaskGenAlgorithm;
+  CRYPT_PSOURCE_ALGORITHM    PSourceAlgorithm;
+} CRYPT_RSAES_OAEP_PARAMETERS, *PCRYPT_RSAES_OAEP_PARAMETERS;
+
+typedef struct _CRYPT_SMART_CARD_ROOT_INFO {
+  BYTE           rgbCardID[16];
+  ROOT_INFO_LUID luid;
+} CRYPT_SMART_CARD_ROOT_INFO, *PCRYPT_SMART_CARD_ROOT_INFO;
+
+#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH 0
+#define CRYPTNET_URL_CACHE_DISABLE_FLUSH 0xFFFFFFFF
+
+typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO {
+  DWORD    cbSize;
+  DWORD    dwExemptSeconds;
+  FILETIME ExpireTime;
+} CRYPTNET_URL_CACHE_FLUSH_INFO, *PCRYPTNET_URL_CACHE_FLUSH_INFO;
+
+#define CRYPTNET_URL_CACHE_PRE_FETCH_NONE 0
+#define CRYPTNET_URL_CACHE_PRE_FETCH_BLOB 1
+#define CRYPTNET_URL_CACHE_PRE_FETCH_CRL 2
+#define CRYPTNET_URL_CACHE_PRE_FETCH_OCSP 3
+#define CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB 5
+#define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
+
+typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
+  DWORD    cbSize;
+  DWORD    dwObjectType;
+  DWORD    dwError;
+  DWORD    dwReserved;
+  FILETIME ThisUpdateTime;
+  FILETIME NextUpdateTime;
+  FILETIME PublishTime;
+} CRYPTNET_URL_CACHE_PRE_FETCH_INFO, *PCRYPTNET_URL_CACHE_PRE_FETCH_INFO;
+
+#define CRYPTNET_URL_CACHE_RESPONSE_NONE 0
+#define CRYPTNET_URL_CACHE_RESPONSE_HTTP 1
+#define CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000
+
+typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO {
+  DWORD    cbSize;
+  WORD     wResponseType;
+  WORD     wResponseFlags;
+  FILETIME LastModifiedTime;
+  DWORD    dwMaxAge;
+  LPCWSTR  pwszETag;
+  DWORD    dwProxyId;
+} CRYPTNET_URL_CACHE_RESPONSE_INFO, *PCRYPTNET_URL_CACHE_RESPONSE_INFO;
+
+typedef struct _OCSP_CERT_ID {
+  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+  CRYPT_HASH_BLOB            IssuerNameHash;
+  CRYPT_HASH_BLOB            IssuerKeyHash;
+  CRYPT_INTEGER_BLOB         SerialNumber;
+} OCSP_CERT_ID, *POCSP_CERT_ID;
+
+
+typedef struct _OCSP_BASIC_REVOKED_INFO {
+  FILETIME RevocationDate;
+  DWORD    dwCrlReasonCode;
+} OCSP_BASIC_REVOKED_INFO, *POCSP_BASIC_REVOKED_INFO;
+
+typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
+  OCSP_CERT_ID    CertId;
+  DWORD           dwCertStatus;
+  __MINGW_EXTENSION union {
+    POCSP_BASIC_REVOKED_INFO pRevokedInfo;
+  };
+  FILETIME        ThisUpdate;
+  FILETIME        NextUpdate;
+  DWORD           cExtension;
+  PCERT_EXTENSION rgExtension;
+} OCSP_BASIC_RESPONSE_ENTRY, *POCSP_BASIC_RESPONSE_ENTRY;
+
+typedef struct _OCSP_BASIC_RESPONSE_INFO {
+  DWORD                      dwVersion;
+  DWORD                      dwResponderIdChoice;
+  __MINGW_EXTENSION union {
+    CERT_NAME_BLOB  ByNameResponderId;
+    CRYPT_HASH_BLOB ByKeyResponderId;
+  };
+  FILETIME                   ProducedAt;
+  DWORD                      cResponseEntry;
+  POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry;
+  DWORD                      cExtension;
+  PCERT_EXTENSION            rgExtension;
+} OCSP_BASIC_RESPONSE_INFO, *POCSP_BASIC_RESPONSE_INFO;
+
+typedef struct _OCSP_REQUEST_ENTRY {
+  OCSP_CERT_ID    CertId;
+  DWORD           cExtension;
+  PCERT_EXTENSION rgExtension;
+} OCSP_REQUEST_ENTRY, *POCSP_REQUEST_ENTRY;
+
+typedef struct _OCSP_REQUEST_INFO {
+  DWORD                dwVersion;
+  PCERT_ALT_NAME_ENTRY pRequestorName;
+  DWORD                cRequestEntry;
+  POCSP_REQUEST_ENTRY  rgRequestEntry;
+  DWORD                cExtension;
+  PCERT_EXTENSION      rgExtension;
+} OCSP_REQUEST_INFO, *POCSP_REQUEST_INFO;
+
+#define OCSP_SUCCESSFUL_RESPONSE 0
+#define OCSP_MALFORMED_REQUEST_RESPONSE 1
+#define OCSP_INTERNAL_ERROR_RESPONSE 2
+#define OCSP_TRY_LATER_RESPONSE 3
+#define OCSP_SIG_REQUIRED_RESPONSE 5
+#define OCSP_UNAUTHORIZED_RESPONSE 6
+
+typedef struct _OCSP_RESPONSE_INFO {
+  DWORD            dwStatus;
+  LPSTR            pszObjId;
+  CRYPT_OBJID_BLOB Value;
+} OCSP_RESPONSE_INFO, *POCSP_RESPONSE_INFO;
+
+typedef struct _OCSP_SIGNATURE_INFO {
+  CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+  CRYPT_BIT_BLOB             Signature;
+  DWORD                      cCertEncoded;
+  PCERT_BLOB                 rgCertEncoded;
+} OCSP_SIGNATURE_INFO, *POCSP_SIGNATURE_INFO;
+
+typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
+  CRYPT_DER_BLOB      ToBeSigned;
+  OCSP_SIGNATURE_INFO SignatureInfo;
+} OCSP_BASIC_SIGNED_RESPONSE_INFO, *POCSP_BASIC_SIGNED_RESPONSE_INFO;
+
+typedef struct _OCSP_SIGNED_REQUEST_INFO {
+  CRYPT_DER_BLOB       ToBeSigned;
+  POCSP_SIGNATURE_INFO pOptionalSignatureInfo;
+} OCSP_SIGNED_REQUEST_INFO, *POCSP_SIGNED_REQUEST_INFO;
+
+WINBOOL WINAPI CryptHashCertificate2(
+  LPCWSTR pwszCNGHashAlgid,
+  DWORD dwFlags,
+  void *pvReserved,
+  BYTE *pbEncoded,
+  DWORD cbEncoded,
+  BYTE *pbComputedHash,
+  DWORD *pcbComputedHash
+);
+
+WINBOOL WINAPI CryptImportPublicKeyInfoEx2(
+  DWORD dwCertEncodingType,
+  PCERT_PUBLIC_KEY_INFO pInfo,
+  DWORD dwFlags,
+  void *pvAuxInfo,
+  BCRYPT_KEY_HANDLE *phKey
+);
+
+WINBOOL WINAPI CryptUpdateProtectedState(
+  PSID pOldSid,
+  LPCWSTR pwszOldPassword,
+  DWORD dwFlags,
+  DWORD *pdwSuccessCount,
+  DWORD *pdwFailureCount
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/windef.h b/mingw-w64-headers/include/windef.h
index 687a5c6..506f426 100644
--- a/mingw-w64-headers/include/windef.h
+++ b/mingw-w64-headers/include/windef.h
@@ -102,12 +102,11 @@
 #pragma push_macro("BOOL")
 #undef BOOL
 #if !defined(__OBJC__) && !defined(__OBJC_BOOL) && !defined(__objc_INCLUDE_GNU)
-typedef int BOOL;
+typedef WINBOOL BOOL;
 #endif
-#define BOOL WINBOOL
-typedef BOOL *PBOOL;
-typedef BOOL *LPBOOL;
 #pragma pop_macro("BOOL")
+typedef WINBOOL *PBOOL;
+typedef WINBOOL *LPBOOL;
 #endif /* _DEF_WINBOOL_ */
 
 typedef unsigned char BYTE;
diff --git a/mingw-w64-headers/include/windot11.h b/mingw-w64-headers/include/windot11.h
new file mode 100644
index 0000000..1b683aa
--- /dev/null
+++ b/mingw-w64-headers/include/windot11.h
@@ -0,0 +1,35 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WINDOT11
+#define _INC_WINDOT11
+#include <ntddnis.h>
+#include <wlantypes.h>
+
+typedef UCHAR DOT11_MAC_ADDRESS[6];
+typedef DOT11_MAC_ADDRESS* PDOT11_MAC_ADDRESS;
+
+typedef enum _DOT11_PHY_TYPE {
+  dot11_phy_type_unknown      = 0,
+  dot11_phy_type_any          = 0,
+  dot11_phy_type_fhss         = 1,
+  dot11_phy_type_dsss         = 2,
+  dot11_phy_type_irbaseband   = 3,
+  dot11_phy_type_ofdm         = 4,
+  dot11_phy_type_hrdsss       = 5,
+  dot11_phy_type_erp          = 6,
+  dot11_phy_type_ht           = 7,
+  dot11_phy_type_IHV_start    = 0x80000000,
+  dot11_phy_type_IHV_end      = 0xffffffff 
+} DOT11_PHY_TYPE, *PDOT11_PHY_TYPE;
+
+typedef struct _DOT11_BSSID_LIST {
+  NDIS_OBJECT_HEADER Header;
+  ULONG              uNumOfEntries;
+  ULONG              uTotalNumOfEntries;
+  DOT11_MAC_ADDRESS  BSSIDs[1];
+} DOT11_BSSID_LIST, *PDOT11_BSSID_LIST;
+
+#endif /*_INC_WINDOT11*/
diff --git a/mingw-w64-headers/include/winerror.h b/mingw-w64-headers/include/winerror.h
index ebc84ac..d9bb201 100644
--- a/mingw-w64-headers/include/winerror.h
+++ b/mingw-w64-headers/include/winerror.h
@@ -3055,6 +3055,8 @@
 #define SCARD_W_EOF _HRESULT_TYPEDEF_(0x8010006DL)
 #define SCARD_W_CANCELLED_BY_USER _HRESULT_TYPEDEF_(0x8010006EL)
 #define SCARD_W_CARD_NOT_AUTHENTICATED _HRESULT_TYPEDEF_(0x8010006FL)
+#define SCARD_W_CACHE_ITEM_NOT_FOUND _HRESULT_TYPEDEF_(0x80100070L)
+#define SCARD_W_CACHE_ITEM_STALE _HRESULT_TYPEDEF_(0x80100071L)
 #define COMADMIN_E_OBJECTERRORS _HRESULT_TYPEDEF_(0x80110401L)
 #define COMADMIN_E_OBJECTINVALID _HRESULT_TYPEDEF_(0x80110402L)
 #define COMADMIN_E_KEYMISSING _HRESULT_TYPEDEF_(0x80110403L)
@@ -3168,4 +3170,64 @@
 #define COMADMIN_E_SAFERINVALID _HRESULT_TYPEDEF_(0x80110822L)
 #define COMADMIN_E_REGISTRY_ACCESSDENIED _HRESULT_TYPEDEF_(0x80110823L)
 #define COMADMIN_E_PARTITIONS_DISABLED _HRESULT_TYPEDEF_(0x80110824L)
+
+#if (_WIN32_WINNT >= 0x0600)
+#define FWP_E_CALLOUT_NOT_FOUND 0x80320001
+#define FWP_E_CONDITION_NOT_FOUND 0x80320002
+#define FWP_E_FILTER_NOT_FOUND 0x80320003
+#define FWP_E_LAYER_NOT_FOUND 0x80320004
+#define FWP_E_PROVIDER_NOT_FOUND 0x80320005
+#define FWP_E_PROVIDER_CONTEXT_NOT_FOUND 0x80320006
+#define FWP_E_SUBLAYER_NOT_FOUND 0x80320007
+#define FWP_E_NOT_FOUND 0x80320008
+#define FWP_E_ALREADY_EXISTS 0x80320009
+#define FWP_E_IN_USE 0x8032000A
+#define FWP_E_DYNAMIC_SESSION_IN_PROGRESS 0x8032000B
+#define FWP_E_WRONG_SESSION 0x8032000C
+#define FWP_E_NO_TXN_IN_PROGRESS 0x8032000D
+#define FWP_E_TXN_IN_PROGRESS 0x8032000E
+#define FWP_E_TXN_ABORTED 0x8032000F
+#define FWP_E_SESSION_ABORTED 0x80320010
+#define FWP_E_INCOMPATIBLE_TXN 0x80320011
+#define FWP_E_TIMEOUT 0x80320012
+#define FWP_E_NET_EVENTS_DISABLED 0x80320013
+#define FWP_E_INCOMPATIBLE_LAYER 0x80320014
+#define FWP_E_KM_CLIENTS_ONLY 0x80320015
+#define FWP_E_LIFETIME_MISMATCH 0x80320016
+#define FWP_E_BUILTIN_OBJECT 0x80320017
+#define FWP_E_TOO_MANY_CALLOUTS 0x80320018
+#define FWP_E_NOTIFICATION_DROPPED 0x80320019
+#define FWP_E_TRAFFIC_MISMATCH 0x8032001A
+#define FWP_E_INCOMPATIBLE_SA_STATE 0x8032001B
+#define FWP_E_NULL_POINTER 0x8032001C
+#define FWP_E_INVALID_ENUMERATOR 0x8032001D
+#define FWP_E_INVALID_FLAGS 0x8032001E
+#define FWP_E_INVALID_NET_MASK 0x8032001F
+#define FWP_E_INVALID_RANGE 0x80320020
+#define FWP_E_INVALID_INTERVAL 0x80320021
+#define FWP_E_ZERO_LENGTH_ARRAY 0x80320022
+#define FWP_E_NULL_DISPLAY_NAME 0x80320023
+#define FWP_E_INVALID_ACTION_TYPE 0x80320024
+#define FWP_E_INVALID_WEIGHT 0x80320025
+#define FWP_E_MATCH_TYPE_MISMATCH 0x80320026
+#define FWP_E_TYPE_MISMATCH 0x80320027
+#define FWP_E_OUT_OF_BOUNDS 0x80320028
+#define FWP_E_RESERVED 0x80320029
+#define FWP_E_DUPLICATE_CONDITION 0x8032002A
+#define FWP_E_DUPLICATE_KEYMOD 0x8032002B
+#define FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER 0x8032002C
+#define FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER 0x8032002D
+#define FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER 0x8032002E
+#define FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT 0x8032002F
+#define FWP_E_INCOMPATIBLE_AUTH_METHOD 0x80320030
+#define FWP_E_INCOMPATIBLE_DH_GROUP 0x80320031L
+#define FWP_E_EM_NOT_SUPPORTED 0x80320032
+#define FWP_E_NEVER_MATCH 0x80320033
+#define FWP_E_PROVIDER_CONTEXT_MISMATCH 0x80320034
+#define FWP_E_INVALID_PARAMETER 0x80320035
+#define FWP_E_TOO_MANY_SUBLAYERS 0x80320036
+#define FWP_E_CALLOUT_NOTIFICATION_FAILED 0x80320037
+#define FWP_E_INVALID_AUTH_TRANSFORM 0x80320038
+#define FWP_E_INVALID_CIPHER_TRANSFORM 0x80320039
+#endif /*(_WIN32_WINNT >= 0x0600)*/
 #endif // _WINERROR_
diff --git a/mingw-w64-headers/include/winevt.h b/mingw-w64-headers/include/winevt.h
new file mode 100644
index 0000000..2568b2b
--- /dev/null
+++ b/mingw-w64-headers/include/winevt.h
@@ -0,0 +1,576 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WINEVT
+#define _INC_WINEVT
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _EVT_CHANNEL_CLOCK_TYPE {
+  EvtChannelClockTypeSystemTime   = 0,
+  EvtChannelClockTypeQPC          = 1 
+} EVT_CHANNEL_CLOCK_TYPE;
+
+typedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID {
+  EvtChannelConfigEnabled                 = 0,
+  EvtChannelConfigIsolation               = 1,
+  EvtChannelConfigType                    = 2,
+  EvtChannelConfigOwningPublisher         = 3,
+  EvtChannelConfigClassicEventlog         = 4,
+  EvtChannelConfigAccess                  = 5,
+  EvtChannelLoggingConfigRetention        = 6,
+  EvtChannelLoggingConfigAutoBackup       = 7,
+  EvtChannelLoggingConfigMaxSize          = 8,
+  EvtChannelLoggingConfigLogFilePath      = 9,
+  EvtChannelPublishingConfigLevel         = 10,
+  EvtChannelPublishingConfigKeywords      = 11,
+  EvtChannelPublishingConfigControlGuid   = 12,
+  EvtChannelPublishingConfigBufferSize    = 13,
+  EvtChannelPublishingConfigMinBuffers    = 14,
+  EvtChannelPublishingConfigMaxBuffers    = 15,
+  EvtChannelPublishingConfigLatency       = 16,
+  EvtChannelPublishingConfigClockType     = 17,
+  EvtChannelPublishingConfigSidType       = 18,
+  EvtChannelPublisherList                 = 19,
+  EvtChannelPublishingConfigFileMax       = 20,
+  EvtChannelConfigPropertyIdEND           = 21 
+} EVT_CHANNEL_CONFIG_PROPERTY_ID;
+
+typedef enum _EVT_CHANNEL_ISOLATION_TYPE {
+  EvtChannelIsolationTypeApplication   = 0,
+  EvtChannelIsolationTypeSystem        = 1,
+  EvtChannelIsolationTypeCustom        = 2 
+} EVT_CHANNEL_ISOLATION_TYPE;
+
+typedef enum _EVT_CHANNEL_REFERENCE_FLAGS {
+  EvtChannelReferenceImported   = 0x1 
+} EVT_CHANNEL_REFERENCE_FLAGS;
+
+typedef enum _EVT_CHANNEL_SID_TYPE {
+  EvtChannelSidTypeNone         = 0,
+  EvtChannelSidTypePublishing   = 1 
+} EVT_CHANNEL_SID_TYPE;
+
+typedef enum _EVT_CHANNEL_TYPE {
+  EvtChannelTypeAdmin         = 0,
+  EvtChannelTypeOperational   = 1,
+  EvtChannelTypeAnalytic      = 2,
+  EvtChannelTypeDebug         = 3 
+} EVT_CHANNEL_TYPE;
+
+typedef enum _EVT_EVENT_METADATA_PROPERTY_ID {
+  EventMetadataEventID            = 0,
+  EventMetadataEventVersion       = 1,
+  EventMetadataEventChannel       = 2,
+  EventMetadataEventLevel         = 3,
+  EventMetadataEventOpcode        = 4,
+  EventMetadataEventTask          = 5,
+  EventMetadataEventKeyword       = 6,
+  EventMetadataEventMessageID     = 7,
+  EventMetadataEventTemplate      = 8,
+  EvtEventMetadataPropertyIdEND   = 9 
+} EVT_EVENT_METADATA_PROPERTY_ID;
+
+typedef enum _EVT_EVENT_PROPERTY_ID {
+  EvtEventQueryIDs        = 0,
+  EvtEventPath            = 1,
+  EvtEventPropertyIdEND   = 2 
+} EVT_EVENT_PROPERTY_ID;
+
+typedef enum _EVT_EXPORTLOG_FLAGS {
+  EvtExportLogChannelPath           = 0x1,
+  EvtExportLogFilePath              = 0x2,
+  EvtExportLogTolerateQueryErrors   = 0x1000 
+} EVT_EXPORTLOG_FLAGS;
+
+typedef enum _EVT_FORMAT_MESSAGE_FLAGS {
+  EvtFormatMessageEvent      = 1,
+  EvtFormatMessageLevel      = 2,
+  EvtFormatMessageTask       = 3,
+  EvtFormatMessageOpcode     = 4,
+  EvtFormatMessageKeyword    = 5,
+  EvtFormatMessageChannel    = 6,
+  EvtFormatMessageProvider   = 7,
+  EvtFormatMessageId         = 8,
+  EvtFormatMessageXml        = 9 
+} EVT_FORMAT_MESSAGE_FLAGS;
+
+typedef enum _EVT_LOG_PROPERTY_ID {
+  EvtLogCreationTime         = 0,
+  EvtLogLastAccessTime       = 1,
+  EvtLogLastWriteTime        = 2,
+  EvtLogFileSize             = 3,
+  EvtLogAttributes           = 4,
+  EvtLogNumberOfLogRecords   = 5,
+  EvtLogOldestRecordNumber   = 6,
+  EvtLogFull                 = 7 
+} EVT_LOG_PROPERTY_ID;
+
+typedef enum _EVT_LOGIN_CLASS {
+  EvtRpcLogin   = 1 
+} EVT_LOGIN_CLASS;
+
+typedef enum _EVT_OPEN_LOG_FLAGS {
+  EvtOpenChannelPath   = 0x1,
+  EvtOpenFilePath      = 0x2 
+} EVT_OPEN_LOG_FLAGS;
+
+typedef enum _EVT_PUBLISHER_METADATA_PROPERTY_ID {
+  EvtPublisherMetadataPublisherGuid               = 0,
+  EvtPublisherMetadataResourceFilePath,
+  EvtPublisherMetadataParameterFilePath,
+  EvtPublisherMetadataMessageFilePath,
+  EvtPublisherMetadataHelpLink,
+  EvtPublisherMetadataPublisherMessageID,
+  EvtPublisherMetadataChannelReferences,
+  EvtPublisherMetadataChannelReferencePath,
+  EvtPublisherMetadataChannelReferenceIndex,
+  EvtPublisherMetadataChannelReferenceID,
+  EvtPublisherMetadataChannelReferenceFlags,
+  EvtPublisherMetadataChannelReferenceMessageID,
+  EvtPublisherMetadataLevels,
+  EvtPublisherMetadataLevelName,
+  EvtPublisherMetadataLevelValue,
+  EvtPublisherMetadataLevelMessageID,
+  EvtPublisherMetadataTasks,
+  EvtPublisherMetadataTaskName,
+  EvtPublisherMetadataTaskEventGuid,
+  EvtPublisherMetadataTaskValue,
+  EvtPublisherMetadataTaskMessageID,
+  EvtPublisherMetadataOpcodes,
+  EvtPublisherMetadataOpcodeName,
+  EvtPublisherMetadataOpcodeValue,
+  EvtPublisherMetadataOpcodeMessageID,
+  EvtPublisherMetadataKeywords,
+  EvtPublisherMetadataKeywordName,
+  EvtPublisherMetadataKeywordValue,
+  EvtPublisherMetadataKeywordMessageID,
+  EvtPublisherMetadataPropertyIdEND 
+} EVT_PUBLISHER_METADATA_PROPERTY_ID;
+
+typedef enum _EVT_QUERY_FLAGS {
+  EvtQueryChannelPath           = 0x1,
+  EvtQueryFilePath              = 0x2,
+  EvtQueryForwardDirection      = 0x100,
+  EvtQueryReverseDirection      = 0x200,
+  EvtQueryTolerateQueryErrors   = 0x1000 
+} EVT_QUERY_FLAGS;
+
+typedef enum _EVT_QUERY_PROPERTY_ID {
+  EvtQueryNames           = 0,
+  EvtQueryStatuses        = 1,
+  EvtQueryPropertyIdEND   = 2 
+} EVT_QUERY_PROPERTY_ID;
+
+typedef enum _EVT_RENDER_CONTEXT_FLAGS {
+  EvtRenderContextValues   = 0,
+  EvtRenderContextSystem   = 1,
+  EvtRenderContextUser     = 2  
+} EVT_RENDER_CONTEXT_FLAGS;
+
+typedef enum _EVT_RENDER_FLAGS {
+  EvtRenderEventValues   = 0,
+  EvtRenderEventXml      = 1,
+  EvtRenderBookmark      = 2 
+} EVT_RENDER_FLAGS;
+
+typedef struct _EVT_RPC_LOGIN {
+  LPWSTR Server;
+  LPWSTR User;
+  LPWSTR Domain;
+  LPWSTR Password;
+  DWORD  Flags;
+} EVT_RPC_LOGIN;
+
+typedef enum _EVT_RPC_LOGIN_FLAGS {
+  EvtRpcLoginAuthDefault     = 0,
+  EvtRpcLoginAuthNegotiate   = 1,
+  EvtRpcLoginAuthKerberos    = 2,
+  EvtRpcLoginAuthNTLM        = 3 
+} EVT_RPC_LOGIN_FLAGS;
+
+typedef enum _EVT_SEEK_FLAGS {
+  EvtSeekRelativeToFirst      = 1,
+  EvtSeekRelativeToLast       = 2,
+  EvtSeekRelativeToCurrent    = 3,
+  EvtSeekRelativeToBookmark   = 4,
+  EvtSeekOriginMask           = 7,
+  EvtSeekStrict               = 0x10000 
+} EVT_SEEK_FLAGS;
+
+typedef enum _EVT_SUBSCRIBE_FLAGS {
+  EvtSubscribeToFutureEvents        = 1,
+  EvtSubscribeStartAtOldestRecord   = 2,
+  EvtSubscribeStartAfterBookmark    = 3,
+  EvtSubscribeOriginMask            = 0x3,
+  EvtSubscribeTolerateQueryErrors   = 0x1000,
+  EvtSubscribeStrict                = 0x10000 
+} EVT_SUBSCRIBE_FLAGS;
+
+typedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION {
+  EvtSubscribeActionError     = 0,
+  EvtSubscribeActionDeliver   = 1 
+} EVT_SUBSCRIBE_NOTIFY_ACTION;
+
+typedef enum _EVT_SYSTEM_PROPERTY_ID {
+  EvtSystemProviderName        = 0,
+  EvtSystemProviderGuid,
+  EvtSystemEventID,
+  EvtSystemQualifiers,
+  EvtSystemLevel,
+  EvtSystemTask,
+  EvtSystemOpcode,
+  EvtSystemKeywords,
+  EvtSystemTimeCreated,
+  EvtSystemEventRecordId,
+  EvtSystemActivityID,
+  EvtSystemRelatedActivityID,
+  EvtSystemProcessID,
+  EvtSystemThreadID,
+  EvtSystemChannel,
+  EvtSystemComputer,
+  EvtSystemUserID,
+  EvtSystemVersion,
+  EvtSystemPropertyIdEND 
+} EVT_SYSTEM_PROPERTY_ID;
+
+typedef enum _EVT_VARIANT_TYPE {
+  EvtVarTypeNull         = 0,
+  EvtVarTypeString       = 1,
+  EvtVarTypeAnsiString   = 2,
+  EvtVarTypeSByte        = 3,
+  EvtVarTypeByte         = 4,
+  EvtVarTypeInt16        = 5,
+  EvtVarTypeUInt16       = 6,
+  EvtVarTypeInt32        = 7,
+  EvtVarTypeUInt32       = 8,
+  EvtVarTypeInt64        = 9,
+  EvtVarTypeUInt64       = 10,
+  EvtVarTypeSingle       = 11,
+  EvtVarTypeDouble       = 12,
+  EvtVarTypeBoolean      = 13,
+  EvtVarTypeBinary       = 14,
+  EvtVarTypeGuid         = 15,
+  EvtVarTypeSizeT        = 16,
+  EvtVarTypeFileTime     = 17,
+  EvtVarTypeSysTime      = 18,
+  EvtVarTypeSid          = 19,
+  EvtVarTypeHexInt32     = 20,
+  EvtVarTypeHexInt64     = 21,
+  EvtVarTypeEvtHandle    = 32,
+  EvtVarTypeEvtXml       = 35 
+} EVT_VARIANT_TYPE;
+
+typedef struct _EVT_VARIANT {
+  __MINGW_EXTENSION union {
+    WINBOOL    BooleanVal;
+    INT8       SByteVal;
+    INT16      Int16Val;
+    INT32      Int32Val;
+    INT64      Int64Val;
+    UINT8      ByteVal;
+    UINT16     UInt16Val;
+    UINT32     UInt32Val;
+    UINT64     UInt64Val;
+    float      SingleVal;
+    double     DoubleVal;
+    ULONGLONG  FileTimeVal;
+    SYSTEMTIME *SysTimeVal;
+    GUID       *GuidVal;
+    LPCWSTR    StringVal;
+    LPCSTR     AnsiStringVal;
+    PBYTE      BinaryVal;
+    PSID       SidVal;
+    size_t     SizeTVal;
+    EVT_HANDLE EvtHandleVal;
+    BOOL       *BooleanArr;
+    INT8       *SByteArr;
+    INT16      *Int16Arr;
+    INT32      *Int32Arr;
+    INT64      *Int64Arr;
+    UINT8      *ByteArr;
+    UINT16     *UInt16Arr;
+    UINT32     *UInt32Arr;
+    UINT64     *UInt64Arr;
+    float      *SingleArr;
+    double     *DoubleArr;
+    FILETIME   *FileTimeArr;
+    SYSTEMTIME *SysTimeArr;
+    GUID       *GuidArr;
+    LPWSTR     *StringArr;
+    LPSTR      *AnsiStringArr;
+    PSID       *SidArr;
+    size_t     *SizeTArr;
+    LPCWSTR    XmlVal;
+    LPCWSTR*   XmlValArr;
+  };
+  DWORD Count;
+  DWORD Type;
+} EVT_VARIANT, *PEVT_VARIANT;
+
+typedef LPVOID EVT_HANDLE;
+typedef LPVOID EVT_OBJECT_ARRAY_PROPERTY_HANDLE;
+
+typedef DWORD ( WINAPI *EVT_SUBSCRIBE_CALLBACK )(
+    EVT_SUBSCRIBE_NOTIFY_ACTION Action,
+    PVOID UserContext,
+    EVT_HANDLE Event
+);
+
+WINBOOL WINAPI EvtArchiveExportedLog(
+  EVT_HANDLE Session,
+  LPCWSTR LogFilePath,
+  LCID Locale,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtCancel(
+  EVT_HANDLE Object
+);
+
+WINBOOL WINAPI EvtClearLog(
+  EVT_HANDLE Session,
+  LPCWSTR ChannelPath,
+  LPCWSTR TargetFilePath,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtClose(
+  EVT_HANDLE Object
+);
+
+EVT_HANDLE WINAPI EvtCreateBookmark(
+  LPCWSTR BookmarkXml
+);
+
+EVT_HANDLE WINAPI EvtCreateRenderContext(
+  DWORD ValuePathsCount,
+  LPCWSTR *ValuePaths,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtExportLog(
+  EVT_HANDLE Session,
+  LPCWSTR Path,
+  LPCWSTR Query,
+  LPCWSTR TargetFilePath,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtFormatMessage(
+  EVT_HANDLE PublisherMetadata,
+  EVT_HANDLE Event,
+  DWORD MessageId,
+  DWORD ValueCount,
+  PEVT_VARIANT Values,
+  DWORD Flags,
+  DWORD BufferSize,
+  LPWSTR Buffer,
+  PDWORD BufferUsed
+);
+
+WINBOOL WINAPI EvtGetChannelConfigProperty(
+  EVT_HANDLE ChannelConfig,
+  EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  DWORD PropertyValueBufferSize,
+  PEVT_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EvtGetEventInfo(
+  EVT_HANDLE Event,
+  EVT_EVENT_PROPERTY_ID PropertyId,
+  DWORD PropertyValueBufferSize,
+  PEVT_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EvtGetEventMetadataProperty(
+  EVT_HANDLE EventMetadata,
+  EVT_EVENT_METADATA_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  DWORD EventMetadataPropertyBufferSize,
+  PEVT_VARIANT EventMetadataPropertyBuffer,
+  PDWORD EventMetadataPropertyBufferUsed
+);
+
+DWORD WINAPI EvtGetExtendedStatus(
+  DWORD BufferSize,
+  LPWSTR Buffer,
+  PDWORD BufferUsed
+);
+
+WINBOOL WINAPI EvtGetLogInfo(
+  EVT_HANDLE Log,
+  EVT_LOG_PROPERTY_ID PropertyId,
+  DWORD PropertyValueBufferSize,
+  PEVT_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EvtGetObjectArrayProperty(
+  EVT_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  DWORD PropertyId,
+  DWORD ArrayIndex,
+  DWORD Flags,
+  DWORD PropertyValueBufferSize,
+  PEVT_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EvtGetObjectArraySize(
+  EVT_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray,
+  PDWORD ObjectArraySize
+);
+
+WINBOOL WINAPI EvtGetPublisherMetadataProperty(
+  EVT_HANDLE PublisherMetadata,
+  EVT_PUBLISHER_METADATA_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  DWORD PublisherMetadataPropertyBufferSize,
+  PEVT_VARIANT PublisherMetadataPropertyBuffer,
+  PDWORD PublisherMetadataPropertyBufferUsed
+);
+
+WINBOOL WINAPI EvtGetQueryInfo(
+  EVT_HANDLE QueryOrSubscription,
+  EVT_QUERY_PROPERTY_ID PropertyId,
+  DWORD PropertyValueBufferSize,
+  PEVT_VARIANT PropertyValueBuffer,
+  PDWORD PropertyValueBufferUsed
+);
+
+WINBOOL WINAPI EvtNext(
+  EVT_HANDLE ResultSet,
+  DWORD EventArraySize,
+  EVT_HANDLE* EventArray,
+  DWORD Timeout,
+  DWORD Flags,
+  PDWORD Returned
+);
+
+WINBOOL WINAPI EvtNextChannelPath(
+  EVT_HANDLE ChannelEnum,
+  DWORD ChannelPathBufferSize,
+  LPWSTR ChannelPathBuffer,
+  PDWORD ChannelPathBufferUsed
+);
+
+EVT_HANDLE WINAPI EvtNextEventMetadata(
+  EVT_HANDLE EventMetadataEnum,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtNextPublisherId(
+  EVT_HANDLE PublisherEnum,
+  DWORD PublisherIdBufferSize,
+  LPWSTR PublisherIdBuffer,
+  PDWORD PublisherIdBufferUsed
+);
+
+EVT_HANDLE WINAPI EvtOpenChannelConfig(
+  EVT_HANDLE Session,
+  LPCWSTR ChannelPath,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenChannelEnum(
+  EVT_HANDLE Session,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenEventMetadataEnum(
+  EVT_HANDLE PublisherMetadata,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenLog(
+  EVT_HANDLE Session,
+  LPCWSTR Path,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenPublisherEnum(
+  EVT_HANDLE Session,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenPublisherMetadata(
+  EVT_HANDLE Session,
+  LPCWSTR PublisherIdentity,
+  LPCWSTR LogFilePath,
+  LCID Locale,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtOpenSession(
+  EVT_LOGIN_CLASS LoginClass,
+  PVOID Login,
+  DWORD Timeout,
+  DWORD Flags
+);
+
+EVT_HANDLE WINAPI EvtQuery(
+  EVT_HANDLE Session,
+  LPCWSTR Path,
+  LPCWSTR Query,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtRender(
+  EVT_HANDLE Context,
+  EVT_HANDLE Fragment,
+  DWORD Flags,
+  DWORD BufferSize,
+  PVOID Buffer,
+  PDWORD BufferUsed,
+  PDWORD PropertyCount
+);
+
+WINBOOL WINAPI EvtSaveChannelConfig(
+  EVT_HANDLE ChannelConfig,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtSeek(
+  EVT_HANDLE ResultSet,
+  LONGLONG Position,
+  EVT_HANDLE Bookmark,
+  DWORD Timeout,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtSetChannelConfigProperty(
+  EVT_HANDLE ChannelConfig,
+  EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+  DWORD Flags,
+  PEVT_VARIANT PropertyValue
+);
+
+EVT_HANDLE WINAPI EvtSubscribe(
+  EVT_HANDLE Session,
+  HANDLE SignalEvent,
+  LPCWSTR ChannelPath,
+  LPCWSTR Query,
+  EVT_HANDLE Bookmark,
+  PVOID context,
+  EVT_SUBSCRIBE_CALLBACK Callback,
+  DWORD Flags
+);
+
+WINBOOL WINAPI EvtUpdateBookmark(
+  EVT_HANDLE Bookmark,
+  EVT_HANDLE Event
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_TDH*/
diff --git a/mingw-w64-headers/include/winioctl.h b/mingw-w64-headers/include/winioctl.h
index c586987..15af592 100644
--- a/mingw-w64-headers/include/winioctl.h
+++ b/mingw-w64-headers/include/winioctl.h
@@ -1676,6 +1676,308 @@
 #define COPYFILE_SIS_REPLACE 0x0002
 #define COPYFILE_SIS_FLAGS 0x0003
 
+#if (_WIN32_WINNT >= 0x0600)
+/* FIXME: these do not belong here: they should be in
+ * ddk/classpnp.h as enum MEDIA_CHANGE_DETECTION_STATE
+ */
+#define MediaUnknown 0
+#define MediaPresent 1
+#define MediaNotPresent 2
+#define MediaUnavailable 3
+
+typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
+  BOOLEAN CloseDisc;
+} FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
+
+typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
+  BOOLEAN Disable;
+} FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
+
+typedef struct _FILE_QUERY_SPARING_BUFFER {
+  ULONG   SparingUnitBytes;
+  BOOLEAN SoftwareSparing;
+  ULONG   TotalSpareBlocks;
+  ULONG   FreeSpareBlocks;
+} FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
+
+typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
+  LARGE_INTEGER DirectoryCount;
+  LARGE_INTEGER FileCount;
+  WORD          FsFormatMajVersion;
+  WORD          FsFormatMinVersion;
+  WCHAR         FsFormatName[12];
+  LARGE_INTEGER FormatTime;
+  LARGE_INTEGER LastUpdateTime;
+  WCHAR         CopyrightInfo[34];
+  WCHAR         AbstractInfo[34];
+  WCHAR         FormattingImplementationInfo[34];
+  WCHAR         LastModifyingImplementationInfo[34];
+} FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
+
+#define SET_REPAIR_ENABLED                          0x00000001
+#define SET_REPAIR_VOLUME_BITMAP_SCAN               0x00000002
+#define SET_REPAIR_DELETE_CROSSLINK                 0x00000004
+#define SET_REPAIR_WARN_ABOUT_DATA_LOSS             0x00000008
+#define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010
+#define SET_REPAIR_VALID_MASK                       0x0000001F
+
+typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
+  ShrinkPrepare,
+  ShrinkCommit,
+  ShrinkAbort
+} SHRINK_VOLUME_REQUEST_TYPES;
+
+typedef struct _SHRINK_VOLUME_INFORMATION {
+  SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
+  DWORDLONG                   Flags;
+  LONGLONG                    NewNumberOfSectors;
+} SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
+
+#define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
+#define TXFS_RM_FLAG_RENAME_RM 0x00000002
+#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
+#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
+#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
+#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
+#define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
+#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
+#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
+#define TXFS_RM_FLAG_GROW_LOG 0x00000400
+#define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
+#define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
+#define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
+#define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
+#define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
+#define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
+#define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
+
+#define TXFS_LOGGING_MODE_SIMPLE 1
+#define TXFS_LOGGING_MODE_FULL 2
+
+#define TXFS_TRANSACTION_STATE_NONE      0
+#define TXFS_TRANSACTION_STATE_ACTIVE    1
+#define TXFS_TRANSACTION_STATE_PREPARED  2
+#define TXFS_TRANSACTION_STATE_NOTACTIVE 3
+
+#define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE                        | \
+                                    TXFS_RM_FLAG_RENAME_RM                           | \
+                                    TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX             | \
+                                    TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN             | \
+                                    TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
+                                    TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        | \
+                                    TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          | \
+                                    TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          | \
+                                    TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN          | \
+                                    TXFS_RM_FLAG_SHRINK_LOG                          | \
+                                    TXFS_RM_FLAG_GROW_LOG                            | \
+                                    TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                | \
+                                    TXFS_RM_FLAG_PRESERVE_CHANGES                    | \
+                                    TXFS_RM_FLAG_RESET_RM_AT_NEXT_START              | \
+                                    TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START       | \
+                                    TXFS_RM_FLAG_PREFER_CONSISTENCY                  | \
+                                    TXFS_RM_FLAG_PREFER_AVAILABILITY)
+
+typedef struct _TXFS_MODIFY_RM {
+  ULONG     Flags;
+  ULONG     LogContainerCountMax;
+  ULONG     LogContainerCountMin;
+  ULONG     LogContainerCount;
+  ULONG     LogGrowthIncrement;
+  ULONG     LogAutoShrinkPercentage;
+  ULONGLONG Reserved;
+  USHORT    LoggingMode;
+} TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
+
+#define TXFS_RM_STATE_NOT_STARTED 0
+#define TXFS_RM_STATE_STARTING 1
+#define TXFS_RM_STATE_ACTIVE 3
+#define TXFS_RM_STATE_SHUTTING_DOWN 4
+
+#define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS                           \
+                (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS   |   \
+                 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT          |   \
+                 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX            |   \
+                 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN            |   \
+                 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                |   \
+                 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START         |   \
+                 TXFS_RM_FLAG_PREFER_CONSISTENCY                    |   \
+                 TXFS_RM_FLAG_PREFER_AVAILABILITY)
+
+typedef struct _TXFS_QUERY_RM_INFORMATION {
+  ULONG         BytesRequired;
+  ULONGLONG     TailLsn;
+  ULONGLONG     CurrentLsn;
+  ULONGLONG     ArchiveTailLsn;
+  ULONGLONG     LogContainerSize;
+  LARGE_INTEGER HighestVirtualClock;
+  ULONG         LogContainerCount;
+  ULONG         LogContainerCountMax;
+  ULONG         LogContainerCountMin;
+  ULONG         LogGrowthIncrement;
+  ULONG         LogAutoShrinkPercentage;
+  ULONG         Flags;
+  USHORT        LoggingMode;
+  USHORT        Reserved;
+  ULONG         RmState;
+  ULONGLONG     LogCapacity;
+  ULONGLONG     LogFree;
+  ULONGLONG     TopsSize;
+  ULONGLONG     TopsUsed;
+  ULONGLONG     TransactionCount;
+  ULONGLONG     OnePCCount;
+  ULONGLONG     TwoPCCount;
+  ULONGLONG     NumberLogFileFull;
+  ULONGLONG     OldestTransactionAge;
+  GUID          RMName;
+  ULONG         TmLogPathOffset;
+} TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
+
+#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
+#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
+
+#define TXFS_ROLLFORWARD_REDO_VALID_FLAGS                               \
+                (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN |         \
+                 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
+
+typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
+  LARGE_INTEGER LastVirtualClock;
+  ULONGLONG     LastRedoLsn;
+  ULONGLONG     HighestRecoveryLsn;
+  ULONG         Flags;
+} TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
+
+#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
+#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
+#define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
+#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
+#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
+#define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
+#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
+#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
+#define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
+#define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
+#define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
+#define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
+#define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
+
+#define TXFS_START_RM_VALID_FLAGS                                           \
+                (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX             |   \
+                 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN             |   \
+                 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                  |   \
+                 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS |   \
+                 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        |   \
+                 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          |   \
+                 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                 |   \
+                 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          |   \
+                 TXFS_START_RM_FLAG_LOGGING_MODE                        |   \
+                 TXFS_START_RM_FLAG_PRESERVE_CHANGES                    |   \
+                 TXFS_START_RM_FLAG_PREFER_CONSISTENCY                  |   \
+                 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
+
+typedef struct _TXFS_START_RM_INFORMATION {
+  ULONG     Flags;
+  ULONGLONG LogContainerSize;
+  ULONG     LogContainerCountMin;
+  ULONG     LogContainerCountMax;
+  ULONG     LogGrowthIncrement;
+  ULONG     LogAutoShrinkPercentage;
+  ULONG     TmLogPathOffset;
+  USHORT    TmLogPathLength;
+  USHORT    LoggingMode;
+  USHORT    LogPathLength;
+  USHORT    Reserved;
+  WCHAR     LogPath[1];
+} TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
+
+typedef struct _TXFS_GET_METADATA_INFO_OUT {
+  __MINGW_EXTENSION struct {
+    LONGLONG LowPart;
+    LONGLONG HighPart;
+  } TxfFileId;
+  GUID      LockingTransaction;
+  ULONGLONG LastLsn;
+  ULONG     TransactionState;
+} TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
+
+#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
+#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x000000012
+
+typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
+  ULONGLONG Offset;
+  ULONG     NameFlags;
+  LONGLONG  FileId;
+  ULONG     Reserved1;
+  ULONG     Reserved2;
+  LONGLONG  Reserved3;
+  WCHAR     FileName[1];
+} TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
+
+typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
+  GUID      KtmTransaction;
+  ULONGLONG NumberOfFiles;
+  ULONGLONG BufferSizeRequired;
+  ULONGLONG Offset;
+} TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
+
+typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
+  GUID     TransactionId;
+  ULONG    TransactionState;
+  ULONG    Reserved1;
+  ULONG    Reserved2;
+  LONGLONG Reserved3;
+} TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
+
+typedef struct _TXFS_LIST_TRANSACTIONS {
+  ULONGLONG NumberOfTransactions;
+  ULONGLONG BufferSizeRequired;
+} TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
+
+typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
+  __MINGW_EXTENSION union {
+    ULONG BufferLength;
+    UCHAR Buffer;
+  } DUMMYUNIONNAME;
+} TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
+
+typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
+  UCHAR Buffer;
+} TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
+
+#define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
+#define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
+
+typedef struct _TXFS_GET_TRANSACTED_VERSION {
+  ULONG  ThisBaseVersion;
+  ULONG  LatestVersion;
+  USHORT ThisMiniVersion;
+  USHORT FirstMiniVersion;
+  USHORT LatestMiniVersion;
+} TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
+
+#define TXFS_SAVEPOINT_SET 1
+#define TXFS_SAVEPOINT_ROLLBACK 2
+#define TXFS_SAVEPOINT_CLEAR 4
+#define TXFS_SAVEPOINT_CLEAR_ALL 16
+
+typedef struct _TXFS_SAVEPOINT_INFORMATION {
+  HANDLE KtmTransaction;
+  ULONG  ActionCode;
+  ULONG  SavepointId;
+} TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
+
+typedef struct _TXFS_CREATE_MINIVERSION_INFO {
+  USHORT StructureVersion;
+  USHORT StructureLength;
+  ULONG  BaseVersion;
+  USHORT MiniVersion;
+} TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
+
+typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
+  WINBOOL TransactionsActiveAtSnapshot;
+} TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #endif /* _FILESYSTEMFSCTL_ */
 
 
diff --git a/mingw-w64-headers/include/winnls.h b/mingw-w64-headers/include/winnls.h
index 10dc718..d31414e 100644
--- a/mingw-w64-headers/include/winnls.h
+++ b/mingw-w64-headers/include/winnls.h
@@ -447,6 +447,9 @@
 #define CAL_GREGORIAN_ARABIC 10
 #define CAL_GREGORIAN_XLIT_ENGLISH 11
 #define CAL_GREGORIAN_XLIT_FRENCH 12
+#if (_WIN32_WINNT >= 0x0600)
+#define CAL_UMALQURA 23
+#endif /* (_WIN32_WINNT >= 0x0600) */
 
 #define LGRPID_WESTERN_EUROPE 0x0001
 #define LGRPID_CENTRAL_EUROPE 0x0002
@@ -720,6 +723,321 @@
   WINBASEAPI int WINAPI IdnToNameprepUnicode(DWORD dwFlags,LPCWSTR lpUnicodeCharStr,int cchUnicodeChar,LPWSTR lpNameprepCharStr,int cchNameprepChar);
   WINBASEAPI int WINAPI IdnToUnicode(DWORD dwFlags,LPCWSTR lpASCIICharStr,int cchASCIIChar,LPWSTR lpUnicodeCharStr,int cchUnicodeChar);
 
+WINBASEAPI LANGID WINAPI SetThreadUILanguage(
+  LANGID LangId
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct _FILEMUIINFO {
+  DWORD dwSize;
+  DWORD dwVersion;
+  DWORD dwFileType;
+  BYTE  pChecksum[16];
+  BYTE  pServiceChecksum[16];
+  DWORD dwLanguageNameOffset;
+  DWORD dwTypeIDMainSize;
+  DWORD dwTypeIDMainOffset;
+  DWORD dwTypeNameMainOffset;
+  DWORD dwTypeIDMUISize;
+  DWORD dwTypeIDMUIOffset;
+  DWORD dwTypeNameMUIOffset;
+  BYTE  abBuffer[8];
+} FILEMUIINFO, *PFILEMUIINFO;
+
+typedef struct _nlsversioninfoex {
+  DWORD dwNLSVersionInfoSize;
+  DWORD dwNLSVersion;
+  DWORD dwDefinedVersion;
+  DWORD dwEffectiveId;
+  GUID  guidCustomVersion;
+} NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;
+
+WINBASEAPI int WINAPI CompareStringEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwCmpFlags,
+  LPCWSTR lpString1,
+  int cchCount1,
+  LPCWSTR lpString2,
+  int cchCount2,
+  LPNLSVERSIONINFO lpVersionInformation,
+  LPVOID lpReserved,
+  LPARAM lParam
+);
+
+WINBASEAPI int WINAPI CompareStringOrdinal(
+  LPCWSTR lpString1,
+  int cchCount1,
+  LPCWSTR lpString2,
+  int cchCount2,
+  WINBOOL bIgnoreCase
+);
+
+typedef WINBOOL (CALLBACK *CALINFO_ENUMPROCEXEX)(
+  LPWSTR lpCalendarInfoString,
+  CALID Calendar,
+  LPWSTR lpReserved,
+  LPARAM lParam
+);
+
+typedef WINBOOL (CALLBACK *DATEFMT_ENUMPROCEXEX)(
+  LPWSTR lpDateFormatString,
+  CALID CalendarID,
+  LPARAM lParam
+);
+
+WINBASEAPI WINBOOL WINAPI EnumCalendarInfoExEx(
+  CALINFO_ENUMPROCEXEX pCalInfoEnumProcExEx,
+  LPCWSTR lpLocaleName,
+  CALID Calendar,
+  LPCWSTR lpReserved,
+  CALTYPE CalType,
+  LPARAM lParam
+);
+
+WINBASEAPI WINBOOL WINAPI EnumDateFormatsExEx(
+  DATEFMT_ENUMPROCEXEX lpDateFmtEnumProcExEx,
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  LPARAM lParam
+);
+
+typedef WINBOOL (CALLBACK *LOCALE_ENUMPROCEX)(
+  LPWSTR lpLocaleString,
+  DWORD dwFlags,
+  LPARAM lParam
+);
+
+WINBASEAPI WINBOOL WINAPI EnumSystemLocalesEx(
+  LOCALE_ENUMPROCEX lpLocaleEnumProcEx,
+  DWORD dwFlags,
+  LPARAM lParam,
+  LPVOID lpReserved
+);
+
+typedef WINBOOL (CALLBACK *TIMEFMT_ENUMPROCEX)(
+  LPWSTR lpTimeFormatString,
+  LPARAM lParam
+);
+
+WINBASEAPI WINBOOL WINAPI EnumTimeFormatsEx(
+  TIMEFMT_ENUMPROCEX lpTimeFmtEnumProcEx,
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  LPARAM lParam
+);
+
+WINBASEAPI int WINAPI FindNLSString(
+  LCID Locale,
+  DWORD dwFindNLSStringFlags,
+  LPCWSTR lpStringSource,
+  int cchSource,
+  LPCWSTR lpStringValue,
+  int cchValue,
+  LPINT pcchFound
+);
+
+WINBASEAPI int WINAPI FindNLSStringEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwFindNLSStringFlags,
+  LPCWSTR lpStringSource,
+  int cchSource,
+  LPCWSTR lpStringValue,
+  int cchValue,
+  LPINT pcchFound,
+  LPNLSVERSIONINFO lpVersionInformation,
+  LPVOID lpReserved,
+  LPARAM lParam
+);
+
+WINBASEAPI int WINAPI GetDateFormatEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  const SYSTEMTIME *lpDate,
+  LPCWSTR lpFormat,
+  LPWSTR lpDateStr,
+  int cchDate,
+  LPCWSTR lpCalendar
+);
+
+WINBASEAPI int WINAPI GetDurationFormat(
+  LCID Locale,
+  DWORD dwFlags,
+  const SYSTEMTIME *lpDuration,
+  ULONGLONG ullDuration,
+  LPCWSTR lpFormat,
+  LPWSTR lpDurationStr,
+  int cchDuration
+);
+
+WINBASEAPI int WINAPI GetDurationFormatEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  const SYSTEMTIME *lpDuration,
+  ULONGLONG ullDuration,
+  LPCWSTR lpFormat,
+  LPWSTR lpDurationStr,
+  int cchDuration
+);
+
+WINBASEAPI WINBOOL WINAPI GetFileMUIInfo(
+  DWORD dwFlags,
+  PCWSTR pcwszFilePath,
+  PFILEMUIINFO pFileMUIInfo,
+  DWORD *pcbFileMUIInfo
+);
+
+WINBASEAPI WINBOOL WINAPI GetFileMUIPath(
+  DWORD dwFlags,
+  PCWSTR pcwszFilePath,
+  PWSTR pwszLanguage,
+  PULONG pcchLanguage,
+  PWSTR pwszFileMUIPath,
+  PULONG pcchFileMUIPath,
+  PULONGLONG pululEnumerator
+);
+
+WINBASEAPI int WINAPI GetLocaleInfoEx(
+  LPCWSTR lpLocaleName,
+  LCTYPE LCType,
+  LPWSTR lpLCData,
+  int cchData
+);
+
+WINBASEAPI WINBOOL WINAPI GetNLSVersion(
+  NLS_FUNCTION Function,
+  LCID Locale,
+  LPNLSVERSIONINFO lpVersionInformation
+);
+
+WINBASEAPI WINBOOL WINAPI GetNLSVersionEx(
+  NLS_FUNCTION function,
+  LPCWSTR lpLocaleName,
+  LPNLSVERSIONINFOEX lpVersionInformation
+);
+
+WINBASEAPI int WINAPI GetNumberFormatEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  LPCWSTR lpValue,
+  const NUMBERFMT *lpFormat,
+  LPWSTR lpNumberStr,
+  int cchNumber
+);
+
+WINBASEAPI int WINAPI GetStringScripts(
+  DWORD dwFlags,
+  LPCWSTR lpString,
+  int cchString,
+  LPWSTR lpScripts,
+  int cchScripts
+);
+
+WINBASEAPI int WINAPI GetSystemDefaultLocaleName(
+  LPWSTR lpLocaleName,
+  int cchLocaleName
+);
+
+typedef WCHAR *PZZWSTR; /*__nullnullterminated*/
+typedef CONST WCHAR *PCZZWSTR; /*__nullnullterminated*/
+
+WINBASEAPI WINBOOL WINAPI GetSystemPreferredUILanguages(
+  DWORD dwFlags,
+  PULONG pulNumLanguages,
+  PZZWSTR pwszLanguagesBuffer,
+  PULONG pcchLanguagesBuffer
+);
+
+WINBASEAPI WINBOOL WINAPI GetThreadPreferredUILanguages(
+  DWORD dwFlags,
+  PULONG pulNumLanguages,
+  PZZWSTR pwszLanguagesBuffer,
+  PULONG pcchLanguagesBuffer
+);
+
+WINBASEAPI LANGID WINAPI GetThreadUILanguage(void);
+
+WINBASEAPI WINBOOL WINAPI SetThreadPreferredUILanguages(
+  DWORD dwFlags,
+  PCZZWSTR pwszLanguagesBuffer,
+  PULONG pulNumLanguages
+);
+
+WINBASEAPI int WINAPI GetTimeFormatEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwFlags,
+  const SYSTEMTIME *lpTime,
+  LPCWSTR lpFormat,
+  LPWSTR lpTimeStr,
+  int cchTime
+);
+
+WINBASEAPI WINBOOL WINAPI GetUILanguageInfo(
+  DWORD dwFlags,
+  PCZZWSTR pwmszLanguage,
+  PZZWSTR pwszFallbackLanguages,
+  PDWORD pcchFallbackLanguages,
+  PDWORD pdwAttributes
+);
+
+WINBASEAPI int WINAPI GetUserDefaultLocaleName(
+  LPWSTR lpLocaleName,
+  int cchLocaleName
+);
+
+WINBASEAPI WINBOOL WINAPI GetUserPreferredUILanguages(
+  DWORD dwFlags,
+  PULONG pulNumLanguages,
+  PZZWSTR pwszLanguagesBuffer,
+  PULONG pcchLanguagesBuffer
+);
+
+WINBASEAPI int WINAPI LCIDToLocaleName(
+  LCID Locale,
+  LPWSTR lpName,
+  int cchName,
+  DWORD dwFlags
+);
+
+WINBASEAPI int WINAPI LCMapStringEx(
+  LPCWSTR lpLocaleName,
+  DWORD dwMapFlags,
+  LPCWSTR lpSrcStr,
+  int cchSrc,
+  LPWSTR lpDestStr,
+  int cchDest,
+  LPNLSVERSIONINFO lpVersionInformation,
+  LPVOID lpReserved,
+  LPARAM lParam
+);
+
+WINBASEAPI LCID WINAPI LocaleNameToLCID(
+  LPCWSTR lpName,
+  DWORD dwFlags
+);
+
+WINBASEAPI int WINAPI NormalizeString(
+  NORM_FORM NormForm,
+  LPCWSTR lpSrcString,
+  int cwSrcLength,
+  LPWSTR lpDstString,
+  int cwDstLength
+);
+
+WINBASEAPI WINBOOL WINAPI RtlIsValidLocaleName(
+  LPCWSTR LocaleName,
+  ULONG Flags
+);
+
+WINBASEAPI WINBOOL VerifyScripts(
+  DWORD dwFlags,
+  LPCWSTR lpLocaleScripts,
+  int cchLocaleScripts,
+  LPCWSTR lpTestScripts,
+  int cchTestScripts
+);
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
 #endif
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/winreg.h b/mingw-w64-headers/include/winreg.h
index 0471a20..e0842f3 100644
--- a/mingw-w64-headers/include/winreg.h
+++ b/mingw-w64-headers/include/winreg.h
@@ -224,6 +224,228 @@
   WINADVAPI LONG WINAPI RegSaveKeyExW(HKEY hKey,LPCWSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD Flags);
   WINADVAPI LONG WINAPI Wow64Win32ApiEntry (DWORD dwFuncNumber,DWORD dwFlag,DWORD dwRes);
 
+#if (_WIN32_WINNT >= 0x0600)
+
+#define RegCopyTree __MINGW_NAME_AW(RegCopyTree)
+WINADVAPI LONG WINAPI RegCopyTreeA(
+  HKEY hKeySrc,
+  LPCSTR lpSubKey,
+  HKEY hKeyDest
+);
+
+WINADVAPI LONG WINAPI RegCopyTreeW(
+  HKEY hKeySrc,
+  LPCWSTR lpSubKey,
+  HKEY hKeyDest
+);
+
+#define RegCreateKeyTransacted __MINGW_NAME_AW(RegCreateKeyTransacted)
+WINADVAPI LONG WINAPI RegCreateKeyTransactedA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  DWORD Reserved,
+  LPSTR lpClass,
+  DWORD dwOptions,
+  REGSAM samDesired,
+  const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  PHKEY phkResult,
+  LPDWORD lpdwDisposition,
+  HANDLE hTransaction,
+  PVOID pExtendedParemeter
+);
+
+WINADVAPI LONG WINAPI RegCreateKeyTransactedW(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  DWORD Reserved,
+  LPWSTR lpClass,
+  DWORD dwOptions,
+  REGSAM samDesired,
+  const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+  PHKEY phkResult,
+  LPDWORD lpdwDisposition,
+  HANDLE hTransaction,
+  PVOID pExtendedParemeter
+);
+
+#define RegDeleteKeyEx __MINGW_NAME_AW(RegDeleteKeyEx)
+WINADVAPI LONG WINAPI RegDeleteKeyExA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  REGSAM samDesired,
+  DWORD Reserved
+);
+
+WINADVAPI LONG WINAPI RegDeleteKeyExW(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  REGSAM samDesired,
+  DWORD Reserved
+);
+
+#define RegDeleteKeyTransacted __MINGW_NAME_AW(RegDeleteKeyTransacted)
+WINADVAPI LONG WINAPI RegDeleteKeyTransactedA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  REGSAM samDesired,
+  DWORD Reserved,
+  HANDLE hTransaction,
+  PVOID pExtendedParameter
+);
+
+WINADVAPI LONG WINAPI RegDeleteKeyTransactedW(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  REGSAM samDesired,
+  DWORD Reserved,
+  HANDLE hTransaction,
+  PVOID pExtendedParameter
+);
+
+#define RegDeleteKeyValue __MINGW_NAME_AW(RegDeleteKeyValue)
+WINADVAPI LONG WINAPI RegDeleteKeyValueA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  LPCSTR lpValueName
+);
+
+WINADVAPI LONG WINAPI RegDeleteKeyValueW(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  LPCWSTR lpValueName
+);
+
+#define RegDeleteTree __MINGW_NAME_AW(RegDeleteTree)
+WINADVAPI LONG WINAPI RegDeleteTreeA(
+  HKEY hKey,
+  LPCSTR lpSubKey
+);
+
+WINADVAPI LONG WINAPI RegDeleteTreeW(
+  HKEY hKey,
+  LPCWSTR lpSubKey
+);
+
+WINADVAPI LONG WINAPI RegDisablePredefinedCacheEx(void);
+
+WINADVAPI LONG WINAPI RegDisableReflectionKey(
+  HKEY hBase
+);
+
+WINADVAPI LONG WINAPI RegEnableReflectionKey(
+  HKEY hBase
+);
+
+WINADVAPI LONG WINAPI RegGetValueA(
+  HKEY hkey,
+  LPCSTR lpSubKey,
+  LPCSTR lpValue,
+  DWORD dwFlags,
+  LPDWORD pdwType,
+  PVOID pvData,
+  LPDWORD pcbData
+);
+
+WINADVAPI LONG WINAPI RegGetValueWA(
+  HKEY hkey,
+  LPCWSTR lpSubKey,
+  LPCWSTR lpValue,
+  DWORD dwFlags,
+  LPDWORD pdwType,
+  PVOID pvData,
+  LPDWORD pcbData
+);
+
+#define RegGetValue __MINGW_NAME_AW(RegGetValue)
+
+WINADVAPI LONG WINAPI RegLoadAppKeyA(
+  LPCSTR lpFile,
+  PHKEY phkResult,
+  REGSAM samDesired,
+  DWORD dwOptions,
+  DWORD Reserved
+);
+
+WINADVAPI LONG WINAPI RegLoadAppKeyW(
+  LPCWSTR lpFile,
+  PHKEY phkResult,
+  REGSAM samDesired,
+  DWORD dwOptions,
+  DWORD Reserved
+);
+
+#define RegLoadAppKey __MINGW_NAME_AW(RegLoadAppKey)
+
+WINADVAPI LONG WINAPI RegLoadMUIStringA(
+  HKEY hKey,
+  LPCSTR pszValue,
+  LPSTR pszOutBuf,
+  DWORD cbOutBuf,
+  LPDWORD pcbData,
+  DWORD Flags,
+  LPCSTR pszDirectory
+);
+
+WINADVAPI LONG WINAPI RegLoadMUIStringW(
+  HKEY hKey,
+  LPCWSTR pszValue,
+  LPWSTR pszOutBuf,
+  DWORD cbOutBuf,
+  LPDWORD pcbData,
+  DWORD Flags,
+  LPCWSTR pszDirectory
+);
+
+#define RegLoadMUIString __MINGW_NAME_AW(RegLoadMUIString)
+
+WINADVAPI LONG WINAPI RegOpenKeyTransactedA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  DWORD ulOptions,
+  REGSAM samDesired,
+  PHKEY phkResult,
+  HANDLE hTransaction,
+  PVOID pExtendedParameter
+);
+
+WINADVAPI LONG WINAPI RegOpenKeyTransactedW(
+  HKEY hKey,
+  LPCWSTR lpSubKey,
+  DWORD ulOptions,
+  REGSAM samDesired,
+  PHKEY phkResult,
+  HANDLE hTransaction,
+  PVOID pExtendedParameter
+);
+
+#define RegOpenKeyTransacted __MINGW_NAME_AW(RegOpenKeyTransacted)
+
+WINADVAPI LONG WINAPI RegQueryReflectionKey(
+  HKEY    hBase,
+  WINBOOL *bIsReflectionDisabled
+);
+
+WINADVAPI LONG WINAPI RegSetKeyValueA(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  LPCSTR lpValueName,
+  DWORD dwType,
+  LPCVOID lpData,
+  DWORD cbData
+);
+
+WINADVAPI LONG WINAPI RegSetKeyValueW(
+  HKEY hKey,
+  LPCSTR lpSubKey,
+  LPCSTR lpValueName,
+  DWORD dwType,
+  LPCVOID lpData,
+  DWORD cbData
+);
+#define RegSetKeyValue __MINGW_NAME_AW(RegSetKeyValue)
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/winsatcominterfacei.h b/mingw-w64-headers/include/winsatcominterfacei.h
new file mode 100644
index 0000000..efcafaa
--- /dev/null
+++ b/mingw-w64-headers/include/winsatcominterfacei.h
@@ -0,0 +1,33 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_WINSATCOMINTERFACEI
+#define _INC_WINSATCOMINTERFACEI
+
+typedef enum _WINSAT_ASSESSMENT_STATE {
+  WINSAT_ASSESSMENT_STATE_MIN                        = 0,
+  WINSAT_ASSESSMENT_STATE_UNKNOWN                    = 0,
+  WINSAT_ASSESSMENT_STATE_VALID                      = 1,
+  WINSAT_ASSESSMENT_STATE_INCOHERENT_WITH_HARDWARE   = 2,
+  WINSAT_ASSESSMENT_STATE_NOT_AVAILABLE              = 3,
+  WINSAT_ASSESSMENT_STATE_INVALID                    = 4,
+  WINSAT_ASSESSMENT_STATE_MAX                        = 4 
+} WINSAT_ASSESSMENT_STATE;
+
+typedef enum _WINSAT_ASSESSMENT_TYPE {
+  WINSAT_ASSESSMENT_MEMORY     = 0,
+  WINSAT_ASSESSMENT_CPU        = 1,
+  WINSAT_ASSESSMENT_DISK       = 2,
+  WINSAT_ASSESSMENT_D3D        = 3,
+  WINSAT_ASSESSMENT_GRAPHICS   = 4 
+} WINSAT_ASSESSMENT_TYPE;
+
+typedef enum _WINSAT_BITMAP_SIZE {
+  WINSAT_BITMAP_SIZE_SMALL    = 0,
+  WINSAT_BITMAP_SIZE_NORMAL   = 1 
+} WINSAT_BITMAP_SIZE;
+
+#endif /*_INC_WINSATCOMINTERFACEI*/
diff --git a/mingw-w64-headers/include/winscard.h b/mingw-w64-headers/include/winscard.h
index 55bb03d..815f204 100644
--- a/mingw-w64-headers/include/winscard.h
+++ b/mingw-w64-headers/include/winscard.h
@@ -385,6 +385,54 @@
   extern WINSCARDAPI LONG WINAPI GetOpenCardNameW(LPOPENCARDNAMEW);
   extern WINSCARDAPI LONG WINAPI SCardDlgExtendedError(void);
 
+#if (_WIN32_WINNT >= 0x0600)
+LONG WINAPI SCardGetTransmitCount(
+  SCARDHANDLE hCard,
+  LPDWORD pcTransmitCount
+);
+
+LONG WINAPI SCardReadCacheA(
+  SCARDCONTEXT hContext,
+  UUID *CardIdentifier,
+  DWORD FreshnessCounter,
+  LPSTR LookupName,
+  PBYTE Data,
+  DWORD *DataLen
+);
+
+LONG WINAPI SCardReadCacheW(
+  SCARDCONTEXT hContext,
+  UUID *CardIdentifier,
+  DWORD FreshnessCounter,
+  LPWSTR LookupName,
+  PBYTE Data,
+  DWORD *DataLen
+);
+
+#define SCardReadCache __MINGW_NAME_AW(SCardReadCache)
+
+LONG WINAPI SCardWriteCacheA(
+  SCARDCONTEXT hContext,
+  UUID *CardIdentifier,
+  DWORD FreshnessCounter,
+  LPSTR LookupName,
+  PBYTE Data,
+  DWORD DataLen
+);
+
+LONG WINAPI SCardWriteCacheW(
+  SCARDCONTEXT hContext,
+  UUID *CardIdentifier,
+  DWORD FreshnessCounter,
+  LPWSTR LookupName,
+  PBYTE Data,
+  DWORD DataLen
+);
+
+#define SCardWriteCache __MINGW_NAME_AW(SCardWriteCache)
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/winsock2.h b/mingw-w64-headers/include/winsock2.h
index d14aaed..808ff21 100644
--- a/mingw-w64-headers/include/winsock2.h
+++ b/mingw-w64-headers/include/winsock2.h
@@ -39,6 +39,7 @@
 #endif
 #endif /* WINSOCK_API_LINKAGE */
 #define WSAAPI			WINAPI
+#define WSPAPI			WINAPI
 
 /* undefine macros from winsock.h */
 #include <mingw_inc/_ws1_undef.h>
@@ -610,6 +611,7 @@
   typedef struct sockaddr_storage SOCKADDR_STORAGE;
   typedef struct sockaddr_storage *PSOCKADDR_STORAGE;
   typedef struct sockaddr_storage *LPSOCKADDR_STORAGE;
+  typedef u_short ADDRESS_FAMILY;
 
 #ifndef _tagBLOB_DEFINED
 #define _tagBLOB_DEFINED
@@ -696,7 +698,7 @@
   typedef struct _SOCKET_ADDRESS_LIST {
     INT iAddressCount;
     SOCKET_ADDRESS Address[1];
-  } SOCKET_ADDRESS_LIST,*LPSOCKET_ADDRESS_LIST;
+  } SOCKET_ADDRESS_LIST,*PSOCKET_ADDRESS_LIST,*LPSOCKET_ADDRESS_LIST;
 
   typedef struct _AFPROTOCOLS {
     INT iAddressFamily;
@@ -771,6 +773,15 @@
 #define LUP_FLUSHCACHE 0x1000
 #define LUP_FLUSHPREVIOUS 0x2000
 
+#define LUP_RETURN_PREFERRED_NAMES 0x10000
+#define LUP_ADDRCONFIG 0x100000
+#define LUP_DUAL_ADDR 0x200000
+
+#define LUP_SECURE 0x8000
+
+#define LUP_NON_AUTHORITATIVE 0x4000
+#define LUP_RES_RESERVICE 0x8000
+
 #define RESULT_IS_ALIAS 0x0001
 #define RESULT_IS_ADDED 0x0010
 #define RESULT_IS_CHANGED 0x0020
@@ -1074,6 +1085,117 @@
 #define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
 #define WSAGETSELECTERROR(lParam) HIWORD(lParam)
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _WSANAMESPACE_INFOEXA {
+  GUID   NSProviderId;
+  DWORD  dwNameSpace;
+  WINBOOL   fActive;
+  DWORD  dwVersion;
+  LPSTR lpszIdentifier;
+  BLOB   ProviderSpecific;
+} WSANAMESPACE_INFOEXA, *PWSANAMESPACE_INFOEXA, *LPWSANAMESPACE_INFOEXA;
+
+typedef struct _WSANAMESPACE_INFOEXW {
+  GUID   NSProviderId;
+  DWORD  dwNameSpace;
+  WINBOOL   fActive;
+  DWORD  dwVersion;
+  LPWSTR lpszIdentifier;
+  BLOB   ProviderSpecific;
+} WSANAMESPACE_INFOEXW, *PWSANAMESPACE_INFOEXW, *LPWSANAMESPACE_INFOEXW;
+
+__MINGW_TYPEDEF_AW(WSANAMESPACE_INFOEX)
+__MINGW_TYPEDEF_AW(PWSANAMESPACE_INFOEX)
+__MINGW_TYPEDEF_AW(LPWSANAMESPACE_INFOEX)
+
+typedef struct _WSAQUERYSET2A {
+  DWORD         dwSize;
+  LPSTR         lpszServiceInstanceName;
+  LPWSAVERSION  lpVersion;
+  LPSTR         lpszComment;
+  DWORD         dwNameSpace;
+  LPGUID        lpNSProviderId;
+  LPSTR         lpszContext;
+  DWORD         dwNumberOfProtocols;
+  LPAFPROTOCOLS lpafpProtocols;
+  LPSTR         lpszQueryString;
+  DWORD         dwNumberOfCsAddrs;
+  LPCSADDR_INFO lpcsaBuffer;
+  DWORD         dwOutputFlags;
+  LPBLOB        lpBlob;
+} WSAQUERYSET2A, *PWSAQUERYSET2A, *LPWSAQUERYSET2A;
+
+typedef struct _WSAQUERYSET2W {
+  DWORD         dwSize;
+  LPWSTR        lpszServiceInstanceName;
+  LPWSAVERSION  lpVersion;
+  LPWSTR        lpszComment;
+  DWORD         dwNameSpace;
+  LPGUID        lpNSProviderId;
+  LPTSTR        lpszContext;
+  DWORD         dwNumberOfProtocols;
+  LPAFPROTOCOLS lpafpProtocols;
+  LPWSTR        lpszQueryString;
+  DWORD         dwNumberOfCsAddrs;
+  LPCSADDR_INFO lpcsaBuffer;
+  DWORD         dwOutputFlags;
+  LPBLOB        lpBlob;
+} WSAQUERYSET2W, *PWSAQUERYSET2W, *LPWSAQUERYSET2W;
+
+typedef struct pollfd {
+  SOCKET fd;
+  short  events;
+  short  revents;
+} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD;
+
+WINSOCK_API_LINKAGE WINBOOL PASCAL WSAConnectByList(
+  SOCKET s,
+  PSOCKET_ADDRESS_LIST SocketAddressList,
+  LPDWORD LocalAddressLength,
+  LPSOCKADDR LocalAddress,
+  LPDWORD RemoteAddressLength,
+  LPSOCKADDR RemoteAddress,
+  const struct timeval *timeout,
+  LPWSAOVERLAPPED Reserved
+);
+
+WINSOCK_API_LINKAGE WINBOOL PASCAL WSAConnectByNameA(
+  SOCKET s,
+  LPSTR nodename,
+  LPSTR servicename,
+  LPDWORD LocalAddressLength,
+  LPSOCKADDR LocalAddress,
+  LPDWORD RemoteAddressLength,
+  LPSOCKADDR RemoteAddress,
+  const struct timeval *timeout,
+  LPWSAOVERLAPPED Reserved
+);
+
+WINSOCK_API_LINKAGE WINBOOL PASCAL WSAConnectByNameW(
+  SOCKET s,
+  LPWSTR nodename,
+  LPWSTR servicename,
+  LPDWORD LocalAddressLength,
+  LPSOCKADDR LocalAddress,
+  LPDWORD RemoteAddressLength,
+  LPSOCKADDR RemoteAddress,
+  const struct timeval *timeout,
+  LPWSAOVERLAPPED Reserved
+);
+#define WSAConnectByName __MINGW_NAME_AW(WSAConnectByName)
+
+INT WSPAPI WSAEnumNameSpaceProvidersExA(
+  LPDWORD lpdwBufferLength,
+  LPWSANAMESPACE_INFOEXA lpnspBuffer
+);
+
+INT WSPAPI WSAEnumNameSpaceProvidersExW(
+  LPDWORD lpdwBufferLength,
+  LPWSANAMESPACE_INFOEXW lpnspBuffer
+);
+#define WSAEnumNameSpaceProvidersEx __MINGW_NAME_AW(WSAEnumNameSpaceProvidersEx)
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
@@ -1086,4 +1208,6 @@
 #include <wsipv6ok.h>
 #endif
 
+#include <mswsock.h>
+
 #endif /* _WINSOCK2API_ */
diff --git a/mingw-w64-headers/include/winspool.h b/mingw-w64-headers/include/winspool.h
index f2c7b8f..d8ff5c5 100644
--- a/mingw-w64-headers/include/winspool.h
+++ b/mingw-w64-headers/include/winspool.h
@@ -1350,10 +1350,49 @@
 
 #if (_WIN32_WINNT >= 0x0600)
 #define AddPrinterConnection2 __MINGW_NAME_AW(AddPrinterConnection2)
+#define DeletePrinterDriverPackage __MINGW_NAME_AW(DeletePrinterDriverPackage)
+#define DocumentEvent __MINGW_NAME_AW(DocumentEvent)
 
 #define PRINTER_CONNECTION_MISMATCH 0x00000020
 #define PRINTER_CONNECTION_NO_UI    0x00000040
 
+typedef enum tagPRINTER_OPTION_FLAGS {
+  PRINTER_OPTION_NO_CACHE,
+  PRINTER_OPTION_CACHE,
+  PRINTER_OPTION_CLIENT_CHANGE 
+} PRINTER_OPTION_FLAGS;
+
+typedef enum tagEPrintXPSJobOperation {
+  kJobProduction,
+  kJobConsumption 
+} EPrintXPSJobOperation;
+
+typedef enum tagEPrintXPSJobProgress {
+  kAddingDocumentSequence,
+  kDocumentSequenceAdded,
+  kAddingFixedDocument,
+  kFixedDocumentAdded,
+  kAddingFixedPage,
+  kFixedPageAdded,
+  kResourceAdded,
+  kFontAdded,
+  kImageAdded,
+  kXpsDocumentCommitted 
+} EPrintXPSJobProgress;
+
+typedef enum tagMxdcS0PageEnums {
+  MXDC_RESOURCE_TTF,
+  MXDC_RESOURCE_JPEG,
+  MXDC_RESOURCE_PNG,
+  MXDC_RESOURCE_TIFF,
+  MXDC_RESOURCE_WDP,
+  MXDC_RESOURCE_DICTIONARY,
+  MXDC_RESOURCE_ICC_PROFILE,
+  MXDC_RESOURCE_JPEG_THUMBNAIL,
+  MXDC_RESOURCE_PNG_THUMBNAIL,
+  MXDC_RESOURCE_MAX 
+} MXDC_S0_PAGE_ENUMS;
+
 typedef struct _PRINTER_CONNECTION_INFO_1 {
   DWORD  dwFlags;
   LPTSTR pszDriverName;
@@ -1362,6 +1401,285 @@
   WINBOOL AddPrinterConnection2W(HWND hWnd,LPCWSTR pszName,DWORD dwLevel,PVOID pConnectionInfo);
   WINBOOL AddPrinterConnection2A(HWND hWnd,LPCSTR pszName,DWORD dwLevel,PVOID pConnectionInfo); /*Not supported and returns ERROR_NOT_SUPPORTED.*/
 
+HRESULT WINAPI DeletePrinterDriverPackageA(
+  LPCSTR pszServer,
+  LPCSTR pszInfPath,
+  LPCSTR pszEnvironment
+);
+
+HRESULT WINAPI DeletePrinterDriverPackageW(
+  LPCWSTR pszServer,
+  LPCWSTR pszInfPath,
+  LPCWSTR pszEnvironment
+);
+
+HRESULT DocumentEventA(
+  HANDLE hPrinter,
+  HDC hdc,
+  INT iEsc,
+  ULONG cbIn,
+  PVOID pvIn,
+  ULONG cbOut,
+  PVOID pvOut
+);
+
+HRESULT DocumentEventW(
+  HANDLE hPrinter,
+  HDC hdc,
+  INT iEsc,
+  ULONG cbIn,
+  PVOID pvIn,
+  ULONG cbOut,
+  PVOID pvOut
+);
+
+typedef struct _DRIVER_INFO_8W {
+  DWORD     cVersion;
+  LPWSTR    pName;
+  LPWSTR    pEnvironment;
+  LPWSTR    pDriverPath;
+  LPWSTR    pDataFile;
+  LPWSTR    pConfigFile;
+  LPWSTR    pHelpFile;
+  LPWSTR    pDependentFiles;
+  LPWSTR    pMonitorName;
+  LPWSTR    pDefaultDataType;
+  LPWSTR    pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPWSTR    pszMfgName;
+  LPWSTR    pszOEMUrl;
+  LPWSTR    pszHardwareID;
+  LPWSTR    pszProvider;
+  LPWSTR    pszPrintProcessor;
+  LPWSTR    pszVendorSetup;
+  LPWSTR    pszzColorProfiles;
+  LPWSTR    pszInfPath;
+  DWORD     dwPrinterDriverAttributes;
+  LPWSTR    pszzCoreDriverDependencies;
+  FILETIME  ftMinInboxDriverVerDate;
+  DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
+
+typedef struct _DRIVER_INFO_8A {
+  DWORD     cVersion;
+  LPSTR    pName;
+  LPSTR    pEnvironment;
+  LPSTR    pDriverPath;
+  LPSTR    pDataFile;
+  LPSTR    pConfigFile;
+  LPSTR    pHelpFile;
+  LPSTR    pDependentFiles;
+  LPSTR    pMonitorName;
+  LPSTR    pDefaultDataType;
+  LPSTR    pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPSTR    pszMfgName;
+  LPSTR    pszOEMUrl;
+  LPSTR    pszHardwareID;
+  LPSTR    pszProvider;
+  LPSTR    pszPrintProcessor;
+  LPSTR    pszVendorSetup;
+  LPSTR    pszzColorProfiles;
+  LPSTR    pszInfPath;
+  DWORD     dwPrinterDriverAttributes;
+  LPSTR    pszzCoreDriverDependencies;
+  FILETIME  ftMinInboxDriverVerDate;
+  DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
+
+typedef struct _FORM_INFO_2A {
+  DWORD   Flags;
+  LPSTR   pName;
+  SIZEL   Size;
+  RECTL   ImageableArea;
+  LPCSTR  pKeyword;
+  DWORD   StringType;
+  LPCSTR  pMuiDll;
+  DWORD   dwResourceId;
+  LPCSTR  pDisplayName;
+  LANGID  wLangId;
+} FORM_INFO_2A, *PFORM_INFO_2A;
+
+typedef struct _FORM_INFO_2W {
+  DWORD   Flags;
+  LPWSTR  pName;
+  SIZEL   Size;
+  RECTL   ImageableArea;
+  LPCSTR  pKeyword;
+  DWORD   StringType;
+  LPCWSTR pMuiDll;
+  DWORD   dwResourceId;
+  LPCWSTR pDisplayName;
+  LANGID  wLangId;
+} FORM_INFO_2W, *PFORM_INFO_2W;
+
+__MINGW_TYPEDEF_AW(DRIVER_INFO_8)
+__MINGW_TYPEDEF_AW(PDRIVER_INFO_8)
+__MINGW_TYPEDEF_AW(LPDRIVER_INFO_8)
+__MINGW_TYPEDEF_AW(FORM_INFO_2)
+__MINGW_TYPEDEF_AW(PFORM_INFO_2)
+
+typedef struct _PRINTPROCESSOR_CAPS_2 {
+  DWORD dwLevel;
+  DWORD dwNupOptions;
+  DWORD dwPageOrderFlags;
+  DWORD dwNumberOfCopies;
+  DWORD dwNupDirectionCaps;
+  DWORD dwNupBorderCaps;
+  DWORD dwBookletHandlingCaps;
+  DWORD dwDuplexHandlingCaps;
+  DWORD dwScalingCaps;
+} PRINTPROCESSOR_CAPS_2, *PPRINTPROCESSOR_CAPS_2;
+
+HRESULT ReportJobProcessingProgress(
+  HANDLE printerHandle,
+  ULONG jobId,
+  EPrintXPSJobOperation jobOperation,
+  EPrintXPSJobProgress jobProgress
+);
+
+typedef struct _CORE_PRINTER_DRIVERA {
+  GUID      CoreDriverGUID;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  CHAR      szPackageID[MAX_PATH];
+} CORE_PRINTER_DRIVERA, *PCORE_PRINTER_DRIVERA;
+
+typedef struct _CORE_PRINTER_DRIVERW {
+  GUID      CoreDriverGUID;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  WCHAR     szPackageID[MAX_PATH];
+} CORE_PRINTER_DRIVERW, *PCORE_PRINTER_DRIVERW;
+
+typedef struct _PRINTER_OPTIONS {
+  UINT  cbSize;
+  DWORD dwFlags;
+} PRINTER_OPTIONS, *PPRINTER_OPTIONS;
+
+__MINGW_TYPEDEF_AW(CORE_PRINTER_DRIVER)
+__MINGW_TYPEDEF_AW(PCORE_PRINTER_DRIVER)
+#define GetCorePrinterDrivers __MINGW_NAME_AW(GetCorePrinterDrivers)
+#define GetPrinterDriver2 __MINGW_NAME_AW(GetPrinterDriver2)
+#define GetPrinterDriverPackagePath __MINGW_NAME_AW(GetPrinterDriverPackagePath)
+#define GetSpoolFileHandle __MINGW_NAME_AW(GetSpoolFileHandle)
+
+HRESULT WINAPI GetCorePrinterDriversA(
+  LPCSTR pszServer,
+  LPCSTR pszEnvironment,
+  LPCSTR pszzCoreDriverDependencies,
+  DWORD cCorePrinterDrivers,
+  PCORE_PRINTER_DRIVERA pCorePrinterDrivers
+);
+
+HRESULT WINAPI GetCorePrinterDriversW(
+  LPCWSTR pszServer,
+  LPCWSTR pszEnvironment,
+  LPCWSTR pszzCoreDriverDependencies,
+  DWORD cCorePrinterDrivers,
+  PCORE_PRINTER_DRIVERW pCorePrinterDrivers
+);
+
+/*Unsupported*/
+WINBOOL WINAPI GetPrinterDriver2A(
+  HWND hWnd,
+  HANDLE hPrinter,
+  LPSTR pEnvironment,
+  DWORD Level,
+  LPBYTE pDriverInfo,
+  DWORD cbBuf,
+  LPDWORD pcbNeeded
+);
+
+WINBOOL WINAPI GetPrinterDriver2W(
+  HWND hWnd,
+  HANDLE hPrinter,
+  LPWSTR pEnvironment,
+  DWORD Level,
+  LPBYTE pDriverInfo,
+  DWORD cbBuf,
+  LPDWORD pcbNeeded
+);
+
+HRESULT WINAPI GetPrinterDriverPackagePathA(
+  LPCSTR pszServer,
+  LPCSTR pszEnvironment,
+  LPCSTR pszLanguage,
+  LPCSTR pszPackageID,
+  LPSTR  pszDriverPackageCab,
+  DWORD  cchDriverPackageCab,
+  LPDWORD pcchRequiredSize
+);
+
+HRESULT WINAPI GetPrinterDriverPackagePathW(
+  LPCWSTR pszServer,
+  LPCWSTR pszEnvironment,
+  LPCWSTR pszLanguage,
+  LPCWSTR pszPackageID,
+  LPWSTR  pszDriverPackageCab,
+  DWORD   cchDriverPackageCab,
+  LPDWORD pcchRequiredSize
+);
+
+HANDLE WINAPI GetSpoolFileHandleA(
+  HANDLE hPrinter
+);
+
+HANDLE WINAPI GetSpoolFileHandleW(
+  HANDLE hPrinter
+);
+
+HANDLE WINAPI CommitSpoolData(
+  HANDLE hPrinter,
+  HANDLE hSpoolFile,
+  DWORD cbCommit
+);
+
+WINBOOL WINAPI CloseSpoolFileHandle(
+  HANDLE hPrinter,
+  HANDLE hSpoolFile
+);
+
+WINBOOL WINAPI OpenPrinter2A(
+  LPCSTR pPrinterName,
+  LPHANDLE phPrinter,
+  LPPRINTER_DEFAULTS pDefault,
+  PPRINTER_OPTIONS pOptions
+);
+
+WINBOOL WINAPI OpenPrinter2W(
+  LPCWSTR pPrinterName,
+  LPHANDLE phPrinter,
+  LPPRINTER_DEFAULTS pDefault,
+  PPRINTER_OPTIONS pOptions
+);
+
+#define OpenPrinter2 __MINGW_NAME_AW(OpenPrinter2)
+
+HRESULT WINAPI UploadPrinterDriverPackageA(
+  LPCSTR pszServer,
+  LPCSTR pszInfPath,
+  LPCSTR pszEnvironment,
+  DWORD dwFlags,
+  HWND hwnd,
+  LPSTR pszDestInfPath,
+  PULONG pcchDestInfPath
+);
+
+HRESULT WINAPI UploadPrinterDriverPackageW(
+  LPCWSTR pszServer,
+  LPCWSTR pszInfPath,
+  LPCWSTR pszEnvironment,
+  DWORD dwFlags,
+  HWND hwnd,
+  LPWSTR pszDestInfPath,
+  PULONG pcchDestInfPath
+);
+
+#define UploadPrinterDriverPackage __MINGW_NAME_AW(UploadPrinterDriverPackage)
+
 #endif /*(_WIN32_WINNT >= 0x0600)*/
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/winsvc.h b/mingw-w64-headers/include/winsvc.h
index 94a88b8..51a8785 100644
--- a/mingw-w64-headers/include/winsvc.h
+++ b/mingw-w64-headers/include/winsvc.h
@@ -328,6 +328,147 @@
   WINADVAPI WINBOOL WINAPI StartServiceW(SC_HANDLE hService,DWORD dwNumServiceArgs,LPCWSTR *lpServiceArgVectors);
   WINADVAPI WINBOOL WINAPI UnlockServiceDatabase(SC_LOCK ScLock);
 
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef VOID( CALLBACK * PFN_SC_NOTIFY_CALLBACK ) (
+  PVOID pParameter 
+);
+
+typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSA {
+  DWORD                  dwReason;
+  LPSTR                  pszComment;
+  SERVICE_STATUS_PROCESS ServiceStatus;
+} SERVICE_CONTROL_STATUS_REASON_PARAMSA, *PSERVICE_CONTROL_STATUS_REASON_PARAMSA;
+
+typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSW {
+  DWORD                  dwReason;
+  LPWSTR                 pszComment;
+  SERVICE_STATUS_PROCESS ServiceStatus;
+} SERVICE_CONTROL_STATUS_REASON_PARAMSW, *PSERVICE_CONTROL_STATUS_REASON_PARAMSW;
+
+__MINGW_TYPEDEF_AW(SERVICE_CONTROL_STATUS_REASON_PARAMS)
+__MINGW_TYPEDEF_AW(PSERVICE_CONTROL_STATUS_REASON_PARAMS)
+
+#define SERVICE_STOP_REASON_FLAG_CUSTOM 0x20000000
+#define SERVICE_STOP_REASON_FLAG_PLANNED 0x40000000
+#define SERVICE_STOP_REASON_FLAG_UNPLANNED 0x10000000
+
+#define SERVICE_STOP_REASON_MAJOR_APPLICATION 0x00050000
+#define SERVICE_STOP_REASON_MAJOR_HARDWARE 0x00020000
+#define SERVICE_STOP_REASON_MAJOR_NONE 0x00060000
+#define SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM 0x00030000
+#define SERVICE_STOP_REASON_MAJOR_OTHER 0x00010000
+#define SERVICE_STOP_REASON_MAJOR_SOFTWARE 0x00040000
+
+#define SERVICE_STOP_REASON_MINOR_DISK 0x00000008
+#define SERVICE_STOP_REASON_MINOR_ENVIRONMENT 0x0000000a
+#define SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER 0x0000000b
+#define SERVICE_STOP_REASON_MINOR_HUNG 0x00000006
+#define SERVICE_STOP_REASON_MINOR_INSTALLATION 0x00000003
+#define SERVICE_STOP_REASON_MINOR_MAINTENANCE 0x00000002
+#define SERVICE_STOP_REASON_MINOR_MMC 0x00000016
+#define SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000011
+#define SERVICE_STOP_REASON_MINOR_NETWORKCARD 0x00000009
+#define SERVICE_STOP_REASON_MINOR_NONE 0x00060000
+#define SERVICE_STOP_REASON_MINOR_OTHER 0x00000001
+#define SERVICE_STOP_REASON_MINOR_OTHERDRIVER 0x0000000c
+#define SERVICE_STOP_REASON_MINOR_RECONFIG 0x00000005
+#define SERVICE_STOP_REASON_MINOR_SECURITY 0x00000010
+#define SERVICE_STOP_REASON_MINOR_SECURITYFIX 0x0000000f
+#define SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000015
+#define SERVICE_STOP_REASON_MINOR_SERVICEPACK 0x0000000d
+#define SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000013
+#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE 0x0000000e
+#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL 0x0000000e
+#define SERVICE_STOP_REASON_MINOR_UNSTABLE 0x00000007
+#define SERVICE_STOP_REASON_MINOR_UPGRADE 0x00000004
+#define SERVICE_STOP_REASON_MINOR_WMI 0x00000012
+
+typedef struct _SERVICE_NOTIFYA {
+  DWORD                  dwVersion;
+  PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
+  PVOID                  pContext;
+  DWORD                  dwNotificationStatus;
+  SERVICE_STATUS_PROCESS ServiceStatus;
+  DWORD                  dwNotificationTriggered;
+  LPSTR                  pszServiceNames;
+} SERVICE_NOTIFYA, *PSERVICE_NOTIFYA;
+
+typedef struct _SERVICE_NOTIFYW {
+  DWORD                  dwVersion;
+  PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
+  PVOID                  pContext;
+  DWORD                  dwNotificationStatus;
+  SERVICE_STATUS_PROCESS ServiceStatus;
+  DWORD                  dwNotificationTriggered;
+  LPWSTR                 pszServiceNames;
+} SERVICE_NOTIFYW, *PSERVICE_NOTIFYW;
+
+__MINGW_TYPEDEF_AW(SERVICE_NOTIFY)
+__MINGW_TYPEDEF_AW(PSERVICE_NOTIFY)
+
+typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
+  WINBOOL fDelayedAutostart;
+} SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
+
+typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
+  WINBOOL fFailureActionsOnNonCrashFailures;
+} SERVICE_FAILURE_ACTIONS_FLAG, *LPSERVICE_FAILURE_ACTIONS_FLAG;
+
+typedef struct _SERVICE_PRESHUTDOWN_INFO {
+  DWORD dwPreshutdownTimeout;
+} SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
+  LPSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
+  LPWSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
+
+__MINGW_TYPEDEF_AW(SERVICE_REQUIRED_PRIVILEGES_INFO)
+
+#define SERVICE_SID_TYPE_NONE 0x00000000
+#define SERVICE_SID_TYPE_RESTRICTED 0x00000003
+#define SERVICE_SID_TYPE_UNRESTRICTED 0x00000001
+
+typedef struct _SERVICE_SID_INFO {
+  DWORD dwServiceSidType;
+} SERVICE_SID_INFO, *LPSERVICE_SID_INFO;
+
+WINADVAPI WINBOOL WINAPI ControlServiceExA(
+  SC_HANDLE hService,
+  DWORD dwControl,
+  DWORD dwInfoLevel,
+  PVOID pControlParams
+);
+
+WINADVAPI WINBOOL WINAPI ControlServiceExW(
+  SC_HANDLE hService,
+  DWORD dwControl,
+  DWORD dwInfoLevel,
+  PVOID pControlParams
+);
+
+#define ControlServiceEx __MINGW_NAME_AW(ControlServiceEx)
+
+#define NotifyServiceStatusChange __MINGW_NAME_AW(NotifyServiceStatusChange)
+
+DWORD WINAPI NotifyServiceStatusChangeA(
+  SC_HANDLE hService,
+  DWORD dwNotifyMask,
+  PSERVICE_NOTIFYA pNotifyBuffer
+);
+
+DWORD WINAPI NotifyServiceStatusChangeW(
+  SC_HANDLE hService,
+  DWORD dwNotifyMask,
+  PSERVICE_NOTIFYW pNotifyBuffer
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/winsxs.h b/mingw-w64-headers/include/winsxs.h
new file mode 100644
index 0000000..a29b299
--- /dev/null
+++ b/mingw-w64-headers/include/winsxs.h
@@ -0,0 +1,94 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WINSXS
+#define _INC_WINSXS
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum ASM_CMP_FLAGS {
+  ASM_CMPF_NAME               = 0x1,
+  ASM_CMPF_MAJOR_VERSION      = 0x2,
+  ASM_CMPF_MINOR_VERSION      = 0x4,
+  ASM_CMPF_BUILD_NUMBER       = 0x8,
+  ASM_CMPF_REVISION_NUMBER    = 0x10,
+  ASM_CMPF_PUBLIC_KEY_TOKEN   = 0x20,
+  ASM_CMPF_CULTURE            = 0x40,
+  ASM_CMPF_CUSTOM             = 0x80,
+  ASM_CMPF_ALL,
+  ASM_CMPF_DEFAULT            = 0x100 
+} ASM_CMP_FLAGS ;
+
+typedef enum ASM_NAME {
+  ASM_NAME_PUBLIC_KEY,
+  ASM_NAME_PUBLIC_KEY_TOKEN,
+  ASM_NAME_HASH_VALUE,
+  ASM_NAME_NAME,
+  ASM_NAME_MAJOR_VERSION,
+  ASM_NAME_MINOR_VERSION,
+  ASM_NAME_BUILD_NUMBER,
+  ASM_NAME_REVISION_NUMBER,
+  ASM_NAME_CULTURE,
+  ASM_NAME_PROCESSOR_ID_ARRAY,
+  ASM_NAME_OSINFO_ARRAY,
+  ASM_NAME_HASH_ALGID,
+  ASM_NAME_ALIAS,
+  ASM_NAME_CODEBASE_URL,
+  ASM_NAME_CODEBASE_LASTMOD,
+  ASM_NAME_NULL_PUBLIC_KEY,
+  ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+  ASM_NAME_CUSTOM,
+  ASM_NAME_NULL_CUSTOM,
+  ASM_NAME_MVID,
+  ASM_NAME_MAX_PARAMS 
+} ASM_NAME ;
+
+typedef enum _CREATE_ASM_NAME_OBJ_FLAGS {
+  CANOF_PARSE_DISPLAY_NAME   = 0x1,
+  CANOF_SET_DEFAULT_VALUES   = 0x2 
+} CREATE_ASM_NAME_OBJ_FLAGS ;
+
+typedef struct _ASSEMBLY_INFO  {
+  ULONG          cbAssemblyInfo;
+  DWORD          dwAssemblyFlags;
+  ULARGE_INTEGER uliAssemblySizeInKB;
+  LPWSTR         pszCurrentAssemblyPathBuf;
+  ULONG          cchBuf;
+} ASSEMBLY_INFO;
+
+typedef enum  {
+  ASM_DISPLAYF_VERSION                 = 0x1,
+  ASM_DISPLAYF_CULTURE                 = 0x2,
+  ASM_DISPLAYF_PUBLIC_KEY_TOKEN        = 0x4,
+  ASM_DISPLAYF_PUBLIC_KEY              = 0x8,
+  ASM_DISPLAYF_CUSTOM                  = 0x10,
+  ASM_DISPLAYF_PROCESSORARCHITECTURE   = 0x20,
+  ASM_DISPLAYF_LANGUAGEID              = 0x40 
+} ASM_DISPLAY_FLAGS;
+
+typedef struct _FUSION_INSTALL_REFERENCE  {
+  DWORD   cbSize;
+  DWORD   dwFlags;
+  GUID    guidScheme;
+  LPCWSTR szIdentifier;
+  LPCWSTR szNonCannonicalData;
+} FUSION_INSTALL_REFERENCE , *LPFUSION_INSTALL_REFERENCE;
+
+/* in sxs.dll but not in any headers
+HRESULT STDAPI CreateAssemblyCache(
+    IAssemblyCache **ppAsmCache,
+    DWORD dwReserved
+);
+
+HRESULT STDAPI CreateAssemblyNameObject(
+    LPASSEMBLYNAME **ppAssemblyNameObj,
+    LPCWSTR szAssemblyName,
+    DWORD dwFlags,
+    LPVOID pvReserved
+);
+
+*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WINSXS*/
diff --git a/mingw-w64-headers/include/wintrust.h b/mingw-w64-headers/include/wintrust.h
index f9937c0..abff06a 100644
--- a/mingw-w64-headers/include/wintrust.h
+++ b/mingw-w64-headers/include/wintrust.h
@@ -603,6 +603,17 @@
 
 #endif
 
+HRESULT WINAPI WTHelperCertCheckValidSignature(
+    CRYPT_PROVIDER_DATA *pProvData
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+void WINAPI WintrustSetDefaultIncludePEPageHashes(
+  WINBOOL fIncludePEPageHashes
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/winuser.h b/mingw-w64-headers/include/winuser.h
index f2929f6..1177b45 100644
--- a/mingw-w64-headers/include/winuser.h
+++ b/mingw-w64-headers/include/winuser.h
@@ -5303,6 +5303,54 @@
   WINUSERAPI UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST pRawInputDeviceList,PUINT puiNumDevices,UINT cbSize);
   WINUSERAPI LRESULT WINAPI DefRawInputProc(PRAWINPUT *paRawInput,INT nInput,UINT cbSizeHeader);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _AUDIODESCRIPTION {
+  UINT cbSize;
+  BOOL Enabled;
+  LCID Locale;
+} AUDIODESCRIPTION, *PAUDIODESCRIPTION;
+
+#define CreateDesktopEx __MINGW_NAME_AW(CreateDesktopEx)
+
+HDESK WINAPI CreateDesktopExA(
+  LPCSTR lpszDesktop,
+  LPCSTR lpszDevice,
+  DEVMODE *pDevmode,
+  DWORD dwFlags,
+  ACCESS_MASK dwDesiredAccess,
+  LPSECURITY_ATTRIBUTES lpsa,
+  ULONG ulHeapSize,
+  PVOID pvoid
+);
+
+HDESK WINAPI CreateDesktopExW(
+  LPCWSTR lpszDesktop,
+  LPCWSTR lpszDevice,
+  DEVMODE *pDevmode,
+  DWORD dwFlags,
+  ACCESS_MASK dwDesiredAccess,
+  LPSECURITY_ATTRIBUTES lpsa,
+  ULONG ulHeapSize,
+  PVOID pvoid
+);
+
+WINBOOL WINAPI ShutdownBlockReasonCreate(
+  HWND hWnd,
+  LPCWSTR pwszReason
+);
+
+WINBOOL WINAPI ShutdownBlockReasonDestroy(
+  HWND hWnd
+);
+
+WINBOOL WINAPI ShutdownBlockReasonQuery(
+  HWND hWnd,
+  LPWSTR pwszBuff,
+  DWORD *pcchBuff
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #endif /* NOUSER */
 
 #ifdef __cplusplus
diff --git a/mingw-w64-headers/include/wlanapi.h b/mingw-w64-headers/include/wlanapi.h
new file mode 100644
index 0000000..cc96702
--- /dev/null
+++ b/mingw-w64-headers/include/wlanapi.h
@@ -0,0 +1,718 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WLANAPI
+#define _INC_WLANAPI
+#include <windot11.h>
+#include <eaptypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef DWORD WLAN_REASON_CODE, *PWLAN_REASON_CODE;
+
+typedef struct _DOT11_NETWORK {
+  DOT11_SSID     dot11Ssid;
+  DOT11_BSS_TYPE dot11BssType;
+} DOT11_NETWORK, *PDOT11_NETWORK;
+
+typedef enum _DOT11_RADIO_STATE {
+  dot11_radio_state_unknown,
+  dot11_radio_state_on,
+  dot11_radio_state_off 
+} DOT11_RADIO_STATE, *PDOT11_RADIO_STATE;
+
+typedef enum _WLAN_INTERFACE_STATE {
+  wlan_interface_state_not_ready               = 0,
+  wlan_interface_state_connected               = 1,
+  wlan_interface_state_ad_hoc_network_formed   = 2,
+  wlan_interface_state_disconnecting           = 3,
+  wlan_interface_state_disconnected            = 4,
+  wlan_interface_state_associating             = 5,
+  wlan_interface_state_discovering             = 6,
+  wlan_interface_state_authenticating          = 7 
+} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
+
+typedef enum _WLAN_CONNECTION_MODE {
+  wlan_connection_mode_profile,
+  wlan_connection_mode_temporary_profile,
+  wlan_connection_mode_discovery_secure,
+  wlan_connection_mode_discovery_unsecure,
+  wlan_connection_mode_auto,
+  wlan_connection_mode_invalid 
+} WLAN_CONNECTION_MODE, *PWLAN_CONNECTION_MODE;
+
+typedef enum _WLAN_INTERFACE_TYPE {
+  wlan_interface_type_emulated_802_11   = 0,
+  wlan_interface_type_native_802_11,
+  wlan_interface_type_invalid 
+} WLAN_INTERFACE_TYPE, *PWLAN_INTERFACE_TYPE;
+
+typedef enum _WLAN_INTF_OPCODE {
+  wlan_intf_opcode_autoconf_start                               = 0x000000000,
+  wlan_intf_opcode_autoconf_enabled,
+  wlan_intf_opcode_background_scan_enabled,
+  wlan_intf_opcode_media_streaming_mode,
+  wlan_intf_opcode_radio_state,
+  wlan_intf_opcode_bss_type,
+  wlan_intf_opcode_interface_state,
+  wlan_intf_opcode_current_connection,
+  wlan_intf_opcode_channel_number,
+  wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs,
+  wlan_intf_opcode_supported_adhoc_auth_cipher_pairs,
+  wlan_intf_opcode_supported_country_or_region_string_list,
+  wlan_intf_opcode_current_operation_mode,
+  wlan_intf_opcode_supported_safe_mode,
+  wlan_intf_opcode_certified_safe_mode,
+  wlan_intf_opcode_hosted_network_capable,
+  wlan_intf_opcode_autoconf_end                                 = 0x0fffffff,
+  wlan_intf_opcode_msm_start                                    = 0x10000100,
+  wlan_intf_opcode_statistics,
+  wlan_intf_opcode_rssi,
+  wlan_intf_opcode_msm_end                                      = 0x1fffffff,
+  wlan_intf_opcode_security_start                               = 0x20010000,
+  wlan_intf_opcode_security_end                                 = 0x2fffffff,
+  wlan_intf_opcode_ihv_start                                    = 0x30000000,
+  wlan_intf_opcode_ihv_end                                      = 0x3fffffff 
+} WLAN_INTF_OPCODE, *PWLAN_INTF_OPCODE;
+
+typedef enum _WLAN_OPCODE_VALUE_TYPE {
+  wlan_opcode_value_type_query_only            = 0,
+  wlan_opcode_value_type_set_by_group_policy   = 1,
+  wlan_opcode_value_type_set_by_user           = 2,
+  wlan_opcode_value_type_invalid               = 3 
+} WLAN_OPCODE_VALUE_TYPE, *PWLAN_OPCODE_VALUE_TYPE;
+
+typedef enum _WLAN_POWER_SETTING {
+  wlan_power_setting_no_saving,
+  wlan_power_setting_low_saving,
+  wlan_power_setting_medium_saving,
+  wlan_power_setting_maximum_saving,
+  wlan_power_setting_invalid 
+} WLAN_POWER_SETTING, *PWLAN_POWER_SETTING;
+
+typedef struct _WLAN_ASSOCIATION_ATTRIBUTES {
+  DOT11_SSID          dot11Ssid;
+  DOT11_BSS_TYPE      dot11BssType;
+  DOT11_MAC_ADDRESS   dot11Bssid;
+  DOT11_PHY_TYPE      dot11PhyType;
+  ULONG               uDot11PhyIndex;
+  WLAN_SIGNAL_QUALITY wlanSignalQuality;
+  ULONG               ulRxRate;
+  ULONG               ulTxRate;
+} WLAN_ASSOCIATION_ATTRIBUTES, *PWLAN_ASSOCIATION_ATTRIBUTES;
+
+typedef struct _WLAN_AUTH_CIPHER_PAIR_LIST {
+  DWORD                  dwNumberOfItems;
+  DOT11_AUTH_CIPHER_PAIR pAuthCipherPairList;
+} WLAN_AUTH_CIPHER_PAIR_LIST, *PWLAN_AUTH_CIPHER_PAIR_LIST;
+
+typedef struct _WLAN_NOTIFICATION_DATA {
+  DWORD NotificationSource;
+  DWORD NotificationCode;
+  GUID  InterfaceGuid;
+  DWORD dwDataSize;
+  PVOID pData;
+} WLAN_NOTIFICATION_DATA, *PWLAN_NOTIFICATION_DATA;
+
+#define WLAN_MAX_PHY_TYPE_NUMBER 8
+
+typedef struct _WLAN_AVAILABLE_NETWORK {
+  WCHAR                  strProfileName[256];
+  DOT11_SSID             dot11Ssid;
+  DOT11_BSS_TYPE         dot11BssType;
+  ULONG                  uNumberOfBssids;
+  WINBOOL                bNetworkConnectable;
+  WLAN_REASON_CODE       wlanNotConnectableReason;
+  ULONG                  uNumberOfPhyTypes;
+  DOT11_PHY_TYPE         dot11PhyTypes[WLAN_MAX_PHY_TYPE_NUMBER];
+  WINBOOL                bMorePhyTypes;
+  WLAN_SIGNAL_QUALITY    wlanSignalQuality;
+  WINBOOL                bSecurityEnabled;
+  DOT11_AUTH_ALGORITHM   dot11DefaultAuthAlgorithm;
+  DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;
+  DWORD                  dwFlags;
+  DWORD                  dwReserved;
+} WLAN_AVAILABLE_NETWORK, *PWLAN_AVAILABLE_NETWORK;
+
+typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
+  DWORD                  dwNumberOfItems;
+  DWORD                  dwIndex;
+  WLAN_AVAILABLE_NETWORK Network[1];
+} WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST;
+
+typedef struct _WLAN_BSS_LIST {
+  DWORD          dwTotalSize;
+  DWORD          dwNumberOfItems;
+  WLAN_BSS_ENTRY wlanBssEntries[1];
+} WLAN_BSS_LIST, *PWLAN_BSS_LIST;
+
+typedef struct _WLAN_SECURITY_ATTRIBUTES {
+  WINBOOL                bSecurityEnabled;
+  WINBOOL                bOneXEnabled;
+  DOT11_AUTH_ALGORITHM   dot11AuthAlgorithm;
+  DOT11_CIPHER_ALGORITHM dot11CipherAlgorithm;
+} WLAN_SECURITY_ATTRIBUTES, *PWLAN_SECURITY_ATTRIBUTES;
+
+typedef struct _WLAN_CONNECTION_ATTRIBUTES {
+  WLAN_INTERFACE_STATE        isState;
+  WLAN_CONNECTION_MODE        wlanConnectionMode;
+  WCHAR                       strProfileName[256];
+  WLAN_ASSOCIATION_ATTRIBUTES wlanAssociationAttributes;
+  WLAN_SECURITY_ATTRIBUTES    wlanSecurityAttributes;
+} WLAN_CONNECTION_ATTRIBUTES, *PWLAN_CONNECTION_ATTRIBUTES;
+
+/* Assuming stdcall */
+typedef VOID (CALLBAC *WLAN_NOTIFICATION_CALLBACK)(
+  PWLAN_NOTIFICATION_DATA ,
+  PVOID 
+);
+
+#define WLAN_MAX_NAME_LENGTH 256
+
+typedef struct _WLAN_CONNECTION_NOTIFICATION_DATA {
+  WLAN_CONNECTION_MODE wlanConnectionMode;
+  WCHAR                strProfileName[WLAN_MAX_NAME_LENGTH];
+  DOT11_SSID           dot11Ssid;
+  DOT11_BSS_TYPE       dot11BssType;
+  BOOL                 bSecurityEnabled;
+  WLAN_REASON_CODE     wlanReasonCode;
+  DWORD                dwFlags;
+  WCHAR                strProfileXml[1];
+} WLAN_CONNECTION_NOTIFICATION_DATA, *PWLAN_CONNECTION_NOTIFICATION_DATA;
+
+#define WLAN_CONNECTION_HIDDEN_NETWORK 0x00000001
+#define WLAN_CONNECTION_ADHOC_JOIN_ONLY 0x00000002
+#define WLAN_CONNECTION_IGNORE_PRIVACY_BIT 0x00000004
+#define WLAN_CONNECTION_EAPOL_PASSTHROUGH 0x00000008
+
+typedef struct _WLAN_CONNECTION_PARAMETERS {
+  WLAN_CONNECTION_MODE wlanConnectionMode;
+  LPCWSTR              strProfile;
+  PDOT11_SSID          pDot11Ssid;
+  PDOT11_BSSID_LIST    pDesiredBssidList;
+  DOT11_BSS_TYPE       dot11BssType;
+  DWORD                dwFlags;
+} WLAN_CONNECTION_PARAMETERS, *PWLAN_CONNECTION_PARAMETERS;
+
+typedef struct _WLAN_INTERFACE_INFO {
+  GUID                 InterfaceGuid;
+  WCHAR                strInterfaceDescription[256];
+  WLAN_INTERFACE_STATE isState;
+} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
+
+typedef struct _WLAN_INTERFACE_INFO_LIST {
+  DWORD               dwNumberOfItems;
+  DWORD               dwIndex;
+  WLAN_INTERFACE_INFO InterfaceInfo[];
+} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
+
+typedef struct _WLAN_PROFILE_INFO {
+  WCHAR strProfileName[256];
+  DWORD dwFlags;
+} WLAN_PROFILE_INFO, *PWLAN_PROFILE_INFO;
+
+typedef struct _WLAN_PROFILE_INFO_LIST {
+  DWORD             dwNumberOfItems;
+  DWORD             dwIndex;
+  WLAN_PROFILE_INFO ProfileInfo[1];
+} WLAN_PROFILE_INFO_LIST, *PWLAN_PROFILE_INFO_LIST;
+
+PVOID WINAPI WlanAllocateMemory(
+  DWORD dwMemorySize
+);
+
+DWORD WINAPI WlanCloseHandle(
+  HANDLE hClientHandle,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanConnect(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  const PWLAN_CONNECTION_PARAMETERS pConnectionParameters,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanDeleteProfile(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanDisconnect(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanEnumInterfaces(
+  HANDLE hClientHandle,
+  PVOID pReserved,
+  PWLAN_INTERFACE_INFO_LIST *ppInterfaceList
+);
+
+VOID WINAPI WlanFreeMemory(
+  PVOID pMemory
+);
+
+DWORD WINAPI WlanGetAvailableNetworkList(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  DWORD dwFlags,
+  PVOID pReserved,
+  PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList
+);
+
+DWORD WINAPI WlanGetProfile(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  PVOID pReserved,
+  LPWSTR *pstrProfileXml,
+  DWORD *pdwFlags,
+  PDWORD pdwGrantedAccess
+);
+
+DWORD WINAPI WlanGetProfileList(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  PVOID pReserved,
+  PWLAN_PROFILE_INFO_LIST *ppProfileList
+);
+
+DWORD WINAPI WlanOpenHandle(
+  DWORD dwClientVersion,
+  PVOID pReserved,
+  PDWORD pdwNegotiatedVersion,
+  PHANDLE phClientHandle
+);
+
+DWORD WINAPI WlanQueryInterface(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  WLAN_INTF_OPCODE OpCode,
+  PVOID pReserved,
+  PDWORD pdwDataSize,
+  PVOID *ppData,
+  PWLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType
+);
+
+DWORD WINAPI WlanReasonCodeToString(
+  DWORD dwReasonCode,
+  DWORD dwBufferSize,
+  PWCHAR pStringBuffer,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanRegisterNotification(
+  HANDLE hClientHandle,
+  DWORD dwNotifSource,
+  WINBOOL bIgnoreDuplicate,
+  WLAN_NOTIFICATION_CALLBACK  funcCallback,
+  PVOID pCallbackContext,
+  PVOID pReserved,
+  PDWORD pdwPrevNotifSource
+);
+
+DWORD WINAPI WlanScan(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  const PDOT11_SSID pDot11Ssid,
+  const PWLAN_RAW_DATA pIeData,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetInterface(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  WLAN_INTF_OPCODE OpCode,
+  DWORD dwDataSize,
+  const PVOID pData,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetProfile(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  DWORD dwFlags,
+  LPCWSTR strProfileXml,
+  LPCWSTR strAllUserProfileSecurity,
+  WINBOOL bOverwrite,
+  PVOID pReserved,
+  DWORD *pdwReasonCode
+);
+
+DWORD WINAPI WlanSetProfileEapXmlUserData(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  DWORD dwFlags,
+  LPCWSTR strEapXmlUserData,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetProfileList(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  DWORD dwItems,
+  LPCWSTR *strProfileNames,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetProfilePosition(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  DWORD dwPosition,
+  PVOID pReserved
+);
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef char[3] DOT11_COUNTRY_OR_REGION_STRING;
+
+typedef enum _WLAN_AUTOCONF_OPCODE {
+  wlan_autoconf_opcode_start                                       = 0,
+  wlan_autoconf_opcode_show_denied_networks                        = 1,
+  wlan_autoconf_opcode_power_setting                               = 2,
+  wlan_autoconf_opcode_only_use_gp_profiles_for_allowed_networks   = 3,
+  wlan_autoconf_opcode_allow_explicit_creds                        = 4,
+  wlan_autoconf_opcode_block_period                                = 5,
+  wlan_autoconf_opcode_allow_virtual_station_extensibility         = 6,
+  wlan_autoconf_opcode_end                                         = 7 
+} WLAN_AUTOCONF_OPCODE, *PWLAN_AUTOCONF_OPCODE;
+
+typedef enum _WL_DISPLAY_PAGES {
+  WLConnectionPage,
+  WLSecurityPage 
+} WL_DISPLAY_PAGES, *PWL_DISPLAY_PAGES;
+
+typedef enum _WLAN_ADHOC_NETWORK_STATE {
+  wlan_adhoc_network_state_formed      = 0,
+  wlan_adhoc_network_state_connected   = 1 
+} WLAN_ADHOC_NETWORK_STATE;
+
+typedef enum _WLAN_IHV_CONTROL_TYPE {
+  wlan_ihv_control_type_service,
+  wlan_ihv_control_type_driver 
+} WLAN_IHV_CONTROL_TYPE, *PWLAN_IHV_CONTROL_TYPE;
+
+typedef enum _WLAN_FILTER_LIST_TYPE {
+  wlan_filter_list_type_gp_permit,
+  wlan_filter_list_type_gp_deny,
+  wlan_filter_list_type_user_permit,
+  wlan_filter_list_type_user_deny 
+} WLAN_FILTER_LIST_TYPE, *PWLAN_FILTER_LIST_TYPE;
+
+typedef enum _WLAN_SECURABLE_OBJECT {
+  wlan_secure_permit_list                      = 0,
+  wlan_secure_deny_list                        = 1,
+  wlan_secure_ac_enabled                       = 2,
+  wlan_secure_bc_scan_enabled                  = 3,
+  wlan_secure_bss_type                         = 4,
+  wlan_secure_show_denied                      = 5,
+  wlan_secure_interface_properties             = 6,
+  wlan_secure_ihv_control                      = 7,
+  wlan_secure_all_user_profiles_order          = 8,
+  wlan_secure_add_new_all_user_profiles        = 9,
+  wlan_secure_add_new_per_user_profiles        = 10,
+  wlan_secure_media_streaming_mode_enabled     = 11,
+  wlan_secure_current_operation_mode           = 12,
+  wlan_secure_get_plaintext_key                = 13,
+  wlan_secure_hosted_network_elevated_access   = 14 
+} WLAN_SECURABLE_OBJECT, *PWLAN_SECURABLE_OBJECT;
+
+typedef struct _DOT11_NETWORK_LIST {
+  DWORD         dwNumberOfItems;
+  DWORD         dwIndex;
+  DOT11_NETWORK Network[1];
+} DOT11_NETWORK_LIST, *PDOT11_NETWORK_LIST;
+
+typedef struct _WLAN_BSS_ENTRY {
+  DOT11_SSID        dot11Ssid;
+  ULONG             uPhyId;
+  DOT11_MAC_ADDRESS dot11Bssid;
+  DOT11_BSS_TYPE    dot11BssType;
+  DOT11_PHY_TYPE    dot11BssPhyType;
+  LONG              lRssi;
+  ULONG             uLinkQuality;
+  BOOLEAN           bInRegDomain;
+  USHORT            usBeaconPeriod;
+  ULONGLONG         ullTimestamp;
+  ULONGLONG         ullHostTimestamp;
+  USHORT            usCapabilityInformation;
+  ULONG             ulChCenterFrequency;
+  WLAN_RATE_SET     wlanRateSet;
+  ULONG             ulIeOffset;
+  ULONG             ulIeSize;
+} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
+
+typedef struct _WLAN_COUNTRY_OR_REGION_STRING_LIST {
+  DWORD                          dwNumberOfItems;
+  DOT11_COUNTRY_OR_REGION_STRING pCountryOrRegionStringList[1];
+} WLAN_COUNTRY_OR_REGION_STRING_LIST, *PWLAN_COUNTRY_OR_REGION_STRING_LIST;
+
+#define WLAN_MAX_PHY_INDEX 64
+
+typedef struct _WLAN_INTERFACE_CAPABILITY {
+  WLAN_INTERFACE_TYPE interfaceType;
+  WINBOOL             bDot11DSupported;
+  DWORD               dwMaxDesiredSsidListSize;
+  DWORD               dwMaxDesiredBssidListSize;
+  DWORD               dwNumberOfSupportedPhys;
+  DOT11_PHY_TYPE      dot11PhyTypes[WLAN_MAX_PHY_INDEX];
+} WLAN_INTERFACE_CAPABILITY, *PWLAN_INTERFACE_CAPABILITY;
+
+typedef struct _WLAN_MAC_FRAME_STATISTICS {
+  ULONGLONG ullTransmittedFrameCount;
+  ULONGLONG ullReceivedFrameCount;
+  ULONGLONG ullWEPExcludedCount;
+  ULONGLONG ullTKIPLocalMICFailures;
+  ULONGLONG ullTKIPReplays;
+  ULONGLONG ullTKIPICVErrorCount;
+  ULONGLONG ullCCMPReplays;
+  ULONGLONG ullCCMPDecryptErrors;
+  ULONGLONG ullWEPUndecryptableCount;
+  ULONGLONG ullWEPICVErrorCount;
+  ULONGLONG ullDecryptSuccessCount;
+  ULONGLONG ullDecryptFailureCount;
+} WLAN_MAC_FRAME_STATISTICS, *PWLAN_MAC_FRAME_STATISTICS;
+
+typedef struct _WLAN_MSM_NOTIFICATION_DATA {
+  WLAN_CONNECTION_MODE wlanConnectionMode;
+  WCHAR                strProfileName[WLAN_MAX_NAME_LENGTH];
+  DOT11_SSID           dot11Ssid;
+  DOT11_BSS_TYPE       dot11BssType;
+  DOT11_MAC_ADDRESS    dot11MacAddr;
+  BOOL                 bSecurityEnabled;
+  BOOL                 bFirstPeer;
+  BOOL                 bLastPeer;
+  WLAN_REASON_CODE     wlanReasonCode;
+} WLAN_MSM_NOTIFICATION_DATA, *PWLAN_MSM_NOTIFICATION_DATA;
+
+typedef struct _WLAN_PHY_FRAME_STATISTICS {
+  ULONGLONG ullTransmittedFrameCount;
+  ULONGLONG ullMulticastTransmittedFrameCount;
+  ULONGLONG ullFailedCount;
+  ULONGLONG ullRetryCount;
+  ULONGLONG ullMultipleRetryCount;
+  ULONGLONG ullMaxTXLifetimeExceededCount;
+  ULONGLONG ullTransmittedFragmentCount;
+  ULONGLONG ullRTSSuccessCount;
+  ULONGLONG ullRTSFailureCount;
+  ULONGLONG ullACKFailureCount;
+  ULONGLONG ullReceivedFrameCount;
+  ULONGLONG ullMulticastReceivedFrameCount;
+  ULONGLONG ullPromiscuousReceivedFrameCount;
+  ULONGLONG ullMaxRXLifetimeExceededCount;
+  ULONGLONG ullFrameDuplicateCount;
+  ULONGLONG ullReceivedFragmentCount;
+  ULONGLONG ullPromiscuousReceivedFragmentCount;
+  ULONGLONG ullFCSErrorCount;
+} WLAN_PHY_FRAME_STATISTICS, *PWLAN_PHY_FRAME_STATISTICS;
+
+typedef struct _WLAN_PHY_RADIO_STATE {
+  DWORD             dwPhyIndex;
+  DOT11_RADIO_STATE dot11SoftwareRadioState;
+  DOT11_RADIO_STATE dot11HardwareRadioState;
+} WLAN_PHY_RADIO_STATE, *PWLAN_PHY_RADIO_STATE;
+
+typedef struct _WLAN_RADIO_STATE {
+  DWORD                dwNumberOfPhys;
+  WLAN_PHY_RADIO_STATE PhyRadioState[64];
+} WLAN_RADIO_STATE, *PWLAN_RADIO_STATE;
+
+#define DOT11_RATE_SET_MAX_LENGTH 126
+
+typedef struct _WLAN_RATE_SET {
+  ULONG  uRateSetLength;
+  USHORT usRateSet[DOT11_RATE_SET_MAX_LENGTH];
+} WLAN_RATE_SET, *PWLAN_RATE_SET;
+
+#define DOT11_PSD_IE_MAX_DATA_SIZE 240
+#define DOT11_PSD_IE_MAX_ENTRY_NUMBER 5
+
+typedef struct _WLAN_RAW_DATA {
+  DWORD dwDataSize;
+  BYTE  DataBlob[1];
+} WLAN_RAW_DATA, *PWLAN_RAW_DATA;
+
+typedef struct _WLAN_RAW_DATA_LIST {
+  DWORD dwTotalSize;
+  DWORD dwNumberOfItems;
+  __MINGW_EXTENSION struct {
+    DWORD dwDataOffset;
+    DWORD dwDataSize;
+  } DataList[1];
+} WLAN_RAW_DATA_LIST, *PWLAN_RAW_DATA_LIST;
+
+typedef struct _WLAN_STATISTICS {
+  ULONGLONG                 ullFourWayHandshakeFailures;
+  ULONGLONG                 ullTKIPCounterMeasuresInvoked;
+  ULONGLONG                 ullReserved;
+  WLAN_MAC_FRAME_STATISTICS MacUcastCounters;
+  WLAN_MAC_FRAME_STATISTICS MacMcastCounters;
+  DWORD                     dwNumberOfPhys;
+  WLAN_PHY_FRAME_STATISTICS PhyCounters[1];
+} WLAN_STATISTICS, *PWLAN_STATISTICS;
+
+DWORD WINAPI WlanExtractPsdIEDataList(
+  HANDLE hClientHandle,
+  DWORD dwIeDataSize,
+  const PBYTE pRawIeData,
+  LPCWSTR strFormat,
+  PVOID pReserved,
+  PWLAN_RAW_DATA_LIST *ppPsdIEDataList
+);
+
+DWORD WINAPI WlanGetFilterList(
+  HANDLE hClientHandle,
+  WLAN_FILTER_LIST_TYPE wlanFilterListType,
+  PVOID pReserved,
+  PDOT11_NETWORK_LIST *ppNetworkList
+);
+
+DWORD WINAPI WlanGetInterfaceCapability(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  PVOID pReserved,
+  PWLAN_INTERFACE_CAPABILITY *ppCapability
+);
+
+DWORD WINAPI WlanGetNetworkBssList(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  const  PDOT11_SSID pDot11Ssid,
+  DOT11_BSS_TYPE dot11BssType,
+  WINBOOL bSecurityEnabled,
+  PVOID pReserved,
+  PWLAN_BSS_LIST *ppWlanBssList
+);
+
+DWORD WINAPI WlanGetProfileCustomUserData(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  PVOID pReserved,
+  DWORD *pdwDataSize,
+  PBYTE *ppData
+);
+
+DWORD WINAPI WlanGetSecuritySettings(
+  HANDLE hClientHandle,
+  WLAN_SECURABLE_OBJECT SecurableObject,
+  PWLAN_OPCODE_VALUE_TYPE pValueType,
+  LPWSTR *pstrCurrentSDDL,
+  PDWORD pdwGrantedAccess
+);
+
+DWORD WINAPI WlanIhvControl(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  WLAN_IHV_CONTROL_TYPE Type,
+  DWORD dwInBufferSize,
+  PVOID pInBuffer,
+  DWORD dwOutBufferSize,
+  PVOID pOutBuffer,
+  PDWORD pdwBytesReturned
+);
+
+DWORD WINAPI WlanQueryAutoConfigParameter(
+  HANDLE hClientHandle,
+  WLAN_AUTOCONF_OPCODE OpCode,
+  PVOID pReserved,
+  PDWORD pdwDataSize,
+  PVOID ppData,
+  PWLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType
+);
+
+DWORD WINAPI WlanRenameProfile(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strOldProfileName,
+  LPCWSTR strNewProfileName,
+  PVOID pReserved
+);
+
+#define WLAN_PROFILE_USER 0x00000002
+#define WLAN_PROFILE_CONNECTION_MODE_SET_BY_CLIENT 0x00010000
+#define WLAN_PROFILE_CONNECTION_MODE_AUTO 0x00020000
+
+DWORD WINAPI WlanSaveTemporaryProfile(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  LPCWSTR strAllUserProfileSecurity,
+  DWORD dwFlags,
+  WINBOOL bOverWrite,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetAutoConfigParameter(
+  HANDLE hClientHandle,
+  WLAN_AUTOCONF_OPCODE OpCode,
+  DWORD dwDataSize,
+  const PVOID pData,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetFilterList(
+  HANDLE hClientHandle,
+  WLAN_FILTER_LIST_TYPE wlanFilterListType,
+  const PDOT11_NETWORK_LIST pNetworkList,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetProfileCustomUserData(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  DWORD dwDataSize,
+  const PBYTE pData,
+  PVOID pReserved
+);
+
+DWORD WlanSetProfileEapUserData(
+  HANDLE hClientHandle,
+  const GUID *pInterfaceGuid,
+  LPCWSTR strProfileName,
+  EAP_METHOD_TYPE eapType,
+  DWORD dwFlags,
+  DWORD dwEapUserDataSize,
+  const LPBYTE pbEapUserData,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetPsdIEDataList(
+  HANDLE hClientHandle,
+  LPCWSTR strFormat,
+  const PWLAN_RAW_DATA_LIST pPsdIEDataList,
+  PVOID pReserved
+);
+
+DWORD WINAPI WlanSetSecuritySettings(
+  HANDLE hClientHandle,
+  WLAN_SECURABLE_OBJECT SecurableObject,
+  LPCWSTR strModifiedSDDL
+);
+
+DWORD WINAPI WlanUIEditProfile(
+  DWORD dwClientVersion,
+  LPCWSTR wstrProfileName,
+  GUID *pInterfaceGuid,
+  HWND hWnd,
+  WL_DISPLAY_PAGES wlStartPage,
+  PVOID pReserved,
+  PWLAN_REASON_CODE *pWlanReasonCode
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WLANAPI*/
diff --git a/mingw-w64-headers/include/wlantypes.h b/mingw-w64-headers/include/wlantypes.h
new file mode 100644
index 0000000..eff7707
--- /dev/null
+++ b/mingw-w64-headers/include/wlantypes.h
@@ -0,0 +1,73 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WLANTYPES
+#define _INC_WLANTYPES
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DOT11_SSID_MAX_LENGTH 32
+
+typedef enum _DOT11_CIPHER_ALGORITHM {
+  DOT11_CIPHER_ALGO_NONE            = 0x00,
+  DOT11_CIPHER_ALGO_WEP40           = 0x01,
+  DOT11_CIPHER_ALGO_TKIP            = 0x02,
+  DOT11_CIPHER_ALGO_CCMP            = 0x04,
+  DOT11_CIPHER_ALGO_WEP104          = 0x05,
+  DOT11_CIPHER_ALGO_WPA_USE_GROUP   = 0x100,
+  DOT11_CIPHER_ALGO_RSN_USE_GROUP   = 0x100,
+  DOT11_CIPHER_ALGO_WEP             = 0x101,
+  DOT11_CIPHER_ALGO_IHV_START       = 0x80000000,
+  DOT11_CIPHER_ALGO_IHV_END         = 0xffffffff 
+} DOT11_CIPHER_ALGORITHM, *PDOT11_CIPHER_ALGORITHM;
+
+typedef enum _DOT11_AUTH_ALGORITHM {
+  DOT11_AUTH_ALGO_80211_OPEN         = 1,
+  DOT11_AUTH_ALGO_80211_SHARED_KEY   = 2,
+  DOT11_AUTH_ALGO_WPA                = 3,
+  DOT11_AUTH_ALGO_WPA_PSK            = 4,
+  DOT11_AUTH_ALGO_WPA_NONE           = 5,
+  DOT11_AUTH_ALGO_RSNA               = 6,
+  DOT11_AUTH_ALGO_RSNA_PSK           = 7,
+  DOT11_AUTH_ALGO_IHV_START          = 0x80000000,
+  DOT11_AUTH_ALGO_IHV_END            = 0xffffffff 
+} DOT11_AUTH_ALGORITHM, *PDOT11_AUTH_ALGORITHM;
+
+typedef enum _DOT11_CIPHER_ALGORITHM {
+  DOT11_CIPHER_ALGO_NONE            = 0x00,
+  DOT11_CIPHER_ALGO_WEP40           = 0x01,
+  DOT11_CIPHER_ALGO_TKIP            = 0x02,
+  DOT11_CIPHER_ALGO_CCMP            = 0x04,
+  DOT11_CIPHER_ALGO_WEP104          = 0x05,
+  DOT11_CIPHER_ALGO_WPA_USE_GROUP   = 0x100,
+  DOT11_CIPHER_ALGO_RSN_USE_GROUP   = 0x100,
+  DOT11_CIPHER_ALGO_WEP             = 0x101,
+  DOT11_CIPHER_ALGO_IHV_START       = 0x80000000,
+  DOT11_CIPHER_ALGO_IHV_END         = 0xffffffff 
+} DOT11_CIPHER_ALGORITHM, *PDOT11_CIPHER_ALGORITHM;
+
+typedef enum _DOT11_BSS_TYPE {
+  dot11_BSS_type_infrastructure   = 1,
+  dot11_BSS_type_independent      = 2,
+  dot11_BSS_type_any              = 3 
+} DOT11_BSS_TYPE, *PDOT11_BSS_TYPE;
+
+typedef struct _DOT11_AUTH_CIPHER_PAIR {
+  DOT11_AUTH_ALGORITHM   AuthAlgoId;
+  DOT11_CIPHER_ALGORITHM CipherAlgoId;
+} DOT11_AUTH_CIPHER_PAIR, *PDOT11_AUTH_CIPHER_PAIR;
+
+typedef struct _DOT11_SSID {
+  ULONG uSSIDLength;
+  UCHAR ucSSID[DOT11_SSID_MAX_LENGTH];
+} DOT11_SSID, *PDOT11_SSID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_WLANTYPES*/
diff --git a/mingw-w64-headers/include/wmcontainer.h b/mingw-w64-headers/include/wmcontainer.h
new file mode 100644
index 0000000..af16bc4
--- /dev/null
+++ b/mingw-w64-headers/include/wmcontainer.h
@@ -0,0 +1,594 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WMCONTAINER
+#define _INC_WMCONTAINER
+#include <propsys.h>
+#include <mfidl.h>
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __IMFASFSplitter_FWD_DEFINED__
+#define __IMFASFSplitter_FWD_DEFINED__
+typedef struct IMFASFSplitter IMFASFSplitter;
+#endif
+
+typedef struct IMFASFContentInfo IMFASFContentInfo;
+typedef struct IMFASFProfile IMFASFProfile;
+typedef struct IMFActivate IMFActivate;
+
+#ifndef __MFTIME_DEFINED__
+#define __MFTIME_DEFINED__
+__MINGW_EXTENSION typedef LONGLONG MFTIME;
+#endif
+
+typedef enum ASF_SELECTION_STATUS {
+  ASF_STATUS_NOTSELECTED       = 0,
+  ASF_STATUS_CLEANPOINTSONLY   = 1,
+  ASF_STATUS_ALLDATAUNITS      = 2 
+} ASF_SELECTION_STATUS;
+
+typedef enum ASF_STATUSFLAGS {
+  ASF_STATUSFLAGS_INCOMPLETE       = 0x00000001,
+  ASF_STATUSFLAGS_NONFATAL_ERROR   = 0x00000002 
+} ASF_STATUSFLAGS;
+
+typedef enum MFASF_MULTIPLEXERFLAGS {
+  MFASF_MULTIPLEXER_AUTOADJUST_BITRATE   = 0x00000001 
+} MFASF_MULTIPLEXERFLAGS;
+
+typedef enum MFASF_SPLITTERFLAGS {
+  MFASF_SPLITTER_REVERSE   = 0x00000001,
+  MFASF_SPLITTER_WMDRM     = 0x00000002 
+} MFASF_SPLITTERFLAGS;
+
+typedef enum MFASF_STREAMSELECTORFLAGS {
+  MFASF_STREAMSELECTOR_DISABLE_THINNING      = 0x00000001,
+  MFASF_STREAMSELECTOR_USE_AVERAGE_BITRATE   = 0x00000002 
+} MFASF_STREAMSELECTORFLAGS;
+
+typedef struct ASF_MUX_STATISTICS {
+  DWORD cFramesWritten;
+  DWORD cFramesDropped;
+} ASF_MUX_STATISTICS;
+
+typedef struct _ASF_INDEX_IDENTIFIER {
+  GUID guidIndexType;
+  WORD wStreamNumber;
+} ASF_INDEX_IDENTIFIER;
+
+typedef struct _ASF_INDEX_DESCRIPTOR {
+  ASF_INDEX_IDENTIFIER Identifier;
+  WORD                 cPerEntryBytes;
+  WCHAR                szDescription[32];
+  DWORD                dwInterval;
+} ASF_INDEX_DESCRIPTOR;
+
+#undef  INTERFACE
+#define INTERFACE IMFASFMutualExclusion
+DECLARE_INTERFACE_(IMFASFMutualExclusion,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFASFMutualExclusion methods */
+    STDMETHOD_(HRESULT,AddRecord)(THIS_ DWORD *pdwRecordNumber) PURE;
+    STDMETHOD_(HRESULT,AddStreamForRecord)(THIS_ DWORD dwRecordNumber,WORD wStreamNumber) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFMutualExclusion **ppIMutex) PURE;
+    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *pdwRecordCount) PURE;
+    STDMETHOD_(HRESULT,GetStreamsForRecord)(THIS_ DWORD dwRecordNumber,WORD *pwStreamNumArray,DWORD *pcStreams) PURE;
+    STDMETHOD_(HRESULT,GetType)(THIS_ GUID *pguidType) PURE;
+    STDMETHOD_(HRESULT,RemoveRecord)(THIS_ DWORD dwRecordNumber) PURE;
+    STDMETHOD_(HRESULT,RemoveStreamFromRecord)(THIS_ DWORD dwRecordNumber,WORD wStreamNumber) PURE;
+    STDMETHOD_(HRESULT,SetType)(THIS_ REFGUID guidType) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFMutualExclusion_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFMutualExclusion_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFMutualExclusion_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFMutualExclusion_AddRecord(This,pdwRecordNumber) (This)->lpVtbl->AddRecord(This,pdwRecordNumber)
+#define IMFASFMutualExclusion_AddStreamForRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->AddStreamForRecord(This,dwRecordNumber,wStreamNumber)
+#define IMFASFMutualExclusion_Clone(This,ppIMutex) (This)->lpVtbl->Clone(This,ppIMutex)
+#define IMFASFMutualExclusion_GetRecordCount(This,pdwRecordCount) (This)->lpVtbl->GetRecordCount(This,pdwRecordCount)
+#define IMFASFMutualExclusion_GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams) (This)->lpVtbl->GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams)
+#define IMFASFMutualExclusion_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
+#define IMFASFMutualExclusion_RemoveRecord(This,dwRecordNumber) (This)->lpVtbl->RemoveRecord(This,dwRecordNumber)
+#define IMFASFMutualExclusion_RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber)
+#define IMFASFMutualExclusion_SetType(This,guidType) (This)->lpVtbl->SetType(This,guidType)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFStreamPrioritization
+DECLARE_INTERFACE_(IMFASFStreamPrioritization,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFASFStreamPrioritization methods */
+    STDMETHOD_(HRESULT,AddStream)(THIS_ WORD wStreamNumber,WORD wStreamFlags) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
+    STDMETHOD_(HRESULT,GetStream)(THIS_ DWORD dwStreamIndex,WORD *pwStreamNumber,WORD *pwStreamFlags) PURE;
+    STDMETHOD_(HRESULT,GetStreamCount)(THIS_ DWORD dwStreamIndex) PURE;
+    STDMETHOD_(HRESULT,RemoveStream)(THIS_ DWORD dwStreamIndex) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFStreamPrioritization_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFStreamPrioritization_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFStreamPrioritization_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFStreamPrioritization_AddStream(This,wStreamNumber,wStreamFlags) (This)->lpVtbl->AddStream(This,wStreamNumber,wStreamFlags)
+#define IMFASFStreamPrioritization_Clone(This,ppIStreamPrioritization) (This)->lpVtbl->Clone(This,ppIStreamPrioritization)
+#define IMFASFStreamPrioritization_GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags)
+#define IMFASFStreamPrioritization_GetStreamCount(This,dwStreamIndex) (This)->lpVtbl->GetStreamCount(This,dwStreamIndex)
+#define IMFASFStreamPrioritization_RemoveStream(This,dwStreamIndex) (This)->lpVtbl->RemoveStream(This,dwStreamIndex)
+#endif /*COBJMACROS*/
+
+
+#undef  INTERFACE
+#define INTERFACE IMFASFSplitter
+DECLARE_INTERFACE_(IMFASFSplitter,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFASFSplitter methods */
+    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
+    STDMETHOD_(HRESULT,GetLastSendTime)(THIS_ DWORD *pdwLastSendTime) PURE;
+    STDMETHOD_(HRESULT,GetNextSample)(THIS_ DWORD *pdwStatusFlags,WORD *pwStreamNumber,IMFSample **ppISample) PURE;
+    STDMETHOD_(HRESULT,GetSelectedStreams)(THIS_ WORD *pwStreamNumbers,WORD *pwNumStreams) PURE;
+    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
+    STDMETHOD_(HRESULT,ParseData)(THIS_ IMFMediaBuffer *pIBuffer,DWORD cbBufferOffset,DWORD cbLength) PURE;
+    STDMETHOD_(HRESULT,SelectStreams)(THIS_ WORD *pwStreamNumbers,WORD wNumStreams) PURE;
+    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFSplitter_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFSplitter_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFSplitter_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFSplitter_Flush() (This)->lpVtbl->Flush(This)
+#define IMFASFSplitter_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFSplitter_GetLastSendTime(This,pdwLastSendTime) (This)->lpVtbl->GetLastSendTime(This,pdwLastSendTime)
+#define IMFASFSplitter_GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample) (This)->lpVtbl->GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample)
+#define IMFASFSplitter_GetSelectedStreams(This,pwStreamNumbers,pwNumStreams) (This)->lpVtbl->GetSelectedStreams(This,pwStreamNumbers,pwNumStreams)
+#define IMFASFSplitter_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFSplitter_ParseData(This,pIBuffer,cbBufferOffset,cbLength) (This)->lpVtbl->ParseData(This,pIBuffer,cbBufferOffset,cbLength)
+#define IMFASFSplitter_SelectStreams(This,pwStreamNumbers,wNumStreams) (This)->lpVtbl->SelectStreams(This,pwStreamNumbers,wNumStreams)
+#define IMFASFSplitter_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFContentInfo
+DECLARE_INTERFACE_(IMFASFContentInfo,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFASFContentInfo methods */
+    STDMETHOD_(HRESULT,GenerateHeader)(THIS_ IMFMediaBuffer *pIHeader,DWORD *pcbHeader) PURE;
+    STDMETHOD_(HRESULT,GeneratePresentationDescriptor)(THIS_ IMFPresentationDescriptor **ppIPresentationDescriptor) PURE;
+    STDMETHOD_(HRESULT,GetEncodingConfigurationPropertyStore)(THIS_ WORD wStreamNumber,IPropertyStore **ppIStore) PURE;
+    STDMETHOD_(HRESULT,GetHeaderSize)(THIS_ IMFMediaBuffer *pIStartOfContent,QWORD *cbHeaderSize) PURE;
+    STDMETHOD_(HRESULT,GetProfile)(THIS_ IMFASFProfile **ppIProfile) PURE;
+    STDMETHOD_(HRESULT,ParseHeader)(THIS_ IMFMediaBuffer *pIHeaderBuffer,QWORD cbOffsetWithinHeader) PURE;
+    STDMETHOD_(HRESULT,SetProfile)(THIS_ IMFASFProfile *pIProfile) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFContentInfo_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFContentInfo_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFContentInfo_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFContentInfo_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFASFContentInfo_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFASFContentInfo_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFASFContentInfo_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFASFContentInfo_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFASFContentInfo_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFASFContentInfo_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFASFContentInfo_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFASFContentInfo_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFASFContentInfo_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFASFContentInfo_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFASFContentInfo_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFASFContentInfo_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFASFContentInfo_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFASFContentInfo_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFASFContentInfo_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFASFContentInfo_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFASFContentInfo_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFASFContentInfo_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFASFContentInfo_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFASFContentInfo_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFASFContentInfo_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFASFContentInfo_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFASFContentInfo_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFASFContentInfo_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFASFContentInfo_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFASFContentInfo_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFASFContentInfo_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFASFContentInfo_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFASFContentInfo_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFASFContentInfo_GenerateHeader(This,pIHeader,pcbHeader) (This)->lpVtbl->GenerateHeader(This,pIHeader,pcbHeader)
+#define IMFASFContentInfo_GeneratePresentationDescriptor(This,ppIPresentationDescriptor) (This)->lpVtbl->GeneratePresentationDescriptor(This,ppIPresentationDescriptor)
+#define IMFASFContentInfo_GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore) (This)->lpVtbl->GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore)
+#define IMFASFContentInfo_GetHeaderSize(This,pIStartOfContent,cbHeaderSize) (This)->lpVtbl->GetHeaderSize(This,pIStartOfContent,cbHeaderSize)
+#define IMFASFContentInfo_GetProfile(This,ppIProfile) (This)->lpVtbl->GetProfile(This,ppIProfile)
+#define IMFASFContentInfo_ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader) (This)->lpVtbl->ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader)
+#define IMFASFContentInfo_SetProfile(This,pIProfile) (This)->lpVtbl->SetProfile(This,pIProfile)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFStreamConfig
+DECLARE_INTERFACE_(IMFASFStreamConfig,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFASFStreamConfig methods */
+    STDMETHOD_(HRESULT,AddPayloadExtension)(THIS_ GUID guidExtensionSystemID,WORD cbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD cbExtensionSystemInfo) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFStreamConfig **ppIStreamConfig) PURE;
+    STDMETHOD_(HRESULT,GetMediaType)(THIS_ IMFMediaType **ppIMediaType) PURE;
+    STDMETHOD_(HRESULT,GetPayloadExtension)(THIS_ WORD wPayloadExtensionNumber,GUID *pguidExtensionSystemID,WORD *pcbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD *pcbExtensionSystemInfo) PURE;
+    STDMETHOD_(HRESULT,GetPayloadExtensionCount)(THIS_ WORD *pcPayloadExtensions) PURE;
+    STDMETHOD_(WORD,GetStreamNumber)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetStreamType)(THIS_ GUID *pguidStreamType) PURE;
+    STDMETHOD_(HRESULT,RemoveAllPayloadExtensions)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetMediaType)(THIS_ IMFMediaType *pIMediaType) PURE;
+    STDMETHOD_(HRESULT,SetStreamNumber)(THIS_ WORD wStreamNum) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFStreamConfig_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFStreamConfig_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFStreamConfig_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFStreamConfig_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFASFStreamConfig_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFASFStreamConfig_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFASFStreamConfig_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFASFStreamConfig_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFASFStreamConfig_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFASFStreamConfig_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFASFStreamConfig_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFASFStreamConfig_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFASFStreamConfig_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFASFStreamConfig_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFASFStreamConfig_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFASFStreamConfig_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFASFStreamConfig_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFASFStreamConfig_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFASFStreamConfig_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFASFStreamConfig_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFASFStreamConfig_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFASFStreamConfig_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFASFStreamConfig_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFASFStreamConfig_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFASFStreamConfig_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFASFStreamConfig_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFASFStreamConfig_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFASFStreamConfig_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFASFStreamConfig_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFASFStreamConfig_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFASFStreamConfig_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFASFStreamConfig_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFASFStreamConfig_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFASFStreamConfig_AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo) (This)->lpVtbl->AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo)
+#define IMFASFStreamConfig_Clone(This,ppIStreamConfig) (This)->lpVtbl->Clone(This,ppIStreamConfig)
+#define IMFASFStreamConfig_GetMediaType(This,ppIMediaType) (This)->lpVtbl->GetMediaType(This,ppIMediaType)
+#define IMFASFStreamConfig_GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo) (This)->lpVtbl->GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo)
+#define IMFASFStreamConfig_GetPayloadExtensionCount(This,pcPayloadExtensions) (This)->lpVtbl->GetPayloadExtensionCount(This,pcPayloadExtensions)
+#define IMFASFStreamConfig_GetStreamNumber() (This)->lpVtbl->GetStreamNumber(This)
+#define IMFASFStreamConfig_GetStreamType(This,pguidStreamType) (This)->lpVtbl->GetStreamType(This,pguidStreamType)
+#define IMFASFStreamConfig_RemoveAllPayloadExtensions() (This)->lpVtbl->RemoveAllPayloadExtensions(This)
+#define IMFASFStreamConfig_SetMediaType(This,pIMediaType) (This)->lpVtbl->SetMediaType(This,pIMediaType)
+#define IMFASFStreamConfig_SetStreamNumber(This,wStreamNum) (This)->lpVtbl->SetStreamNumber(This,wStreamNum)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFProfile
+DECLARE_INTERFACE_(IMFASFProfile,IMFAttributes)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFAttributes methods */
+    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
+    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
+    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
+    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
+    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
+    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
+    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
+    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
+    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
+    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
+    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
+    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
+    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
+    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
+    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
+    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
+    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
+    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
+    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
+
+    /* IMFASFProfile methods */
+    STDMETHOD_(HRESULT,AddMutualExclusion)(THIS_ IMFASFMutualExclusion *pIMutex) PURE;
+    STDMETHOD_(HRESULT,AddStreamPrioritization)(THIS_ IMFASFStreamPrioritization *pIStreamPrioritization) PURE;
+    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFProfile **ppIProfile) PURE;
+    STDMETHOD_(HRESULT,CreateMutualExclusion)(THIS_ IMFASFMutualExclusion **ppIMutex) PURE;
+    STDMETHOD_(HRESULT,CreateStream)(THIS_ IMFMediaType *pIMediaType,IMFASFStreamConfig **ppIStream) PURE;
+    STDMETHOD_(HRESULT,CreateStreamPrioritization)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
+    STDMETHOD_(HRESULT,GetMutualExclusion)(THIS_ DWORD dwMutexIndex,IMFASFMutualExclusion **ppIMutex) PURE;
+    STDMETHOD_(HRESULT,GetMutualExclusionCount)(THIS_ DWORD *pcMutexs) PURE;
+    STDMETHOD_(HRESULT,GetStream)(THIS_ DWORD dwStreamIndex,WORD *pwStreamNumber,IMFASFStreamConfig **ppIStream) PURE;
+    STDMETHOD_(HRESULT,GetStreamByNumber)(THIS_ WORD wStreamNumber,IMFASFStreamConfig **ppIStream) PURE;
+    STDMETHOD_(HRESULT,GetStreamCount)(THIS_ DWORD *pcStreams) PURE;
+    STDMETHOD_(HRESULT,GetStreamPrioritization)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
+    STDMETHOD_(HRESULT,RemoveMutualExclusion)(THIS_ DWORD dwMutexIndex) PURE;
+    STDMETHOD_(HRESULT,RemoveStream)(THIS_ WORD wStreamNumber) PURE;
+    STDMETHOD_(HRESULT,RemoveStreamPrioritization)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetStream)(THIS_ IMFASFStreamConfig *pIStream) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFProfile_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFProfile_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFProfile_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFProfile_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFASFProfile_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFASFProfile_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+#define IMFASFProfile_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
+#define IMFASFProfile_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFASFProfile_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFASFProfile_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFASFProfile_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFASFProfile_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFASFProfile_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFASFProfile_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFASFProfile_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFASFProfile_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFASFProfile_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFASFProfile_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFASFProfile_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFASFProfile_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFASFProfile_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFASFProfile_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFASFProfile_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFASFProfile_LockStore() (This)->lpVtbl->LockStore(This)
+#define IMFASFProfile_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFASFProfile_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFASFProfile_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFASFProfile_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFASFProfile_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFASFProfile_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFASFProfile_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFASFProfile_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFASFProfile_UnlockStore() (This)->lpVtbl->UnlockStore(This)
+#define IMFASFProfile_AddMutualExclusion(This,pIMutex) (This)->lpVtbl->AddMutualExclusion(This,pIMutex)
+#define IMFASFProfile_AddStreamPrioritization(This,pIStreamPrioritization) (This)->lpVtbl->AddStreamPrioritization(This,pIStreamPrioritization)
+#define IMFASFProfile_Clone(This,ppIProfile) (This)->lpVtbl->Clone(This,ppIProfile)
+#define IMFASFProfile_CreateMutualExclusion(This,ppIMutex) (This)->lpVtbl->CreateMutualExclusion(This,ppIMutex)
+#define IMFASFProfile_CreateStream(This,pIMediaType,ppIStream) (This)->lpVtbl->CreateStream(This,pIMediaType,ppIStream)
+#define IMFASFProfile_CreateStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->CreateStreamPrioritization(This,ppIStreamPrioritization)
+#define IMFASFProfile_GetMutualExclusion(This,dwMutexIndex,ppIMutex) (This)->lpVtbl->GetMutualExclusion(This,dwMutexIndex,ppIMutex)
+#define IMFASFProfile_GetMutualExclusionCount(This,pcMutexs) (This)->lpVtbl->GetMutualExclusionCount(This,pcMutexs)
+#define IMFASFProfile_GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream)
+#define IMFASFProfile_GetStreamByNumber(This,wStreamNumber,ppIStream) (This)->lpVtbl->GetStreamByNumber(This,wStreamNumber,ppIStream)
+#define IMFASFProfile_GetStreamCount(This,pcStreams) (This)->lpVtbl->GetStreamCount(This,pcStreams)
+#define IMFASFProfile_GetStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->GetStreamPrioritization(This,ppIStreamPrioritization)
+#define IMFASFProfile_RemoveMutualExclusion(This,dwMutexIndex) (This)->lpVtbl->RemoveMutualExclusion(This,dwMutexIndex)
+#define IMFASFProfile_RemoveStream(This,wStreamNumber) (This)->lpVtbl->RemoveStream(This,wStreamNumber)
+#define IMFASFProfile_RemoveStreamPrioritization() (This)->lpVtbl->RemoveStreamPrioritization(This)
+#define IMFASFProfile_SetStream(This,pIStream) (This)->lpVtbl->SetStream(This,pIStream)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFIndexer
+DECLARE_INTERFACE_(IMFASFIndexer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFASFIndexer methods */
+    STDMETHOD_(HRESULT,CommitIndex)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
+    STDMETHOD_(HRESULT,GenerateIndexEntries)(THIS_ IMFSample *pIASFPacketSample) PURE;
+    STDMETHOD_(HRESULT,GetCompletedIndex)(THIS_ IMFMediaBuffer *pIIndexBuffer,QWORD cbOffsetWithinIndex) PURE;
+    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
+    STDMETHOD_(HRESULT,GetIndexByteStreamCount)(THIS_ DWORD *pcByteStreams) PURE;
+    STDMETHOD_(HRESULT,GetIndexPosition)(THIS_ IMFASFContentInfo *pIContentInfo,QWORD *pcbIndexOffset) PURE;
+    STDMETHOD_(HRESULT,GetIndexStatus)(THIS_ ASF_INDEX_IDENTIFIER *pIndexIdentifier,WINBOOL *pfIsIndexed,BYTE *pbIndexDescriptor,DWORD *pcbIndexDescriptor) PURE;
+    STDMETHOD_(HRESULT,GetIndexWriteSpace)(THIS_ QWORD *pcbIndexWriteSpace) PURE;
+    STDMETHOD_(HRESULT,GetSeekPositionForValue)(THIS_ const PROPVARIANT *pvarValue,ASF_INDEX_IDENTIFIER *pIndexIdentifier,QWORD *pcbOffsetWithinData,MFTIME *phnsApproxTime,DWORD *pdwPayloadNumberOfStreamWithinPacket) PURE;
+    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
+    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD_(HRESULT,SetIndexByteStreams)(THIS_ IMFByteStream **ppIByteStreams,DWORD cByteStreams) PURE;
+    STDMETHOD_(HRESULT,SetIndexStatus)(THIS_ BYTE *pIndexDescriptor,DWORD cbIndexDescriptor,WINBOOL fGenerateIndex) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFIndexer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFIndexer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFIndexer_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFIndexer_CommitIndex(This,pIContentInfo) (This)->lpVtbl->CommitIndex(This,pIContentInfo)
+#define IMFASFIndexer_GenerateIndexEntries(This,pIASFPacketSample) (This)->lpVtbl->GenerateIndexEntries(This,pIASFPacketSample)
+#define IMFASFIndexer_GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex) (This)->lpVtbl->GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex)
+#define IMFASFIndexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFIndexer_GetIndexByteStreamCount(This,pcByteStreams) (This)->lpVtbl->GetIndexByteStreamCount(This,pcByteStreams)
+#define IMFASFIndexer_GetIndexPosition(This,pIContentInfo,pcbIndexOffset) (This)->lpVtbl->GetIndexPosition(This,pIContentInfo,pcbIndexOffset)
+#define IMFASFIndexer_GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor) (This)->lpVtbl->GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor)
+#define IMFASFIndexer_GetIndexWriteSpace(This,pcbIndexWriteSpace) (This)->lpVtbl->GetIndexWriteSpace(This,pcbIndexWriteSpace)
+#define IMFASFIndexer_GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket) (This)->lpVtbl->GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket)
+#define IMFASFIndexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFIndexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#define IMFASFIndexer_SetIndexByteStreams(This,ppIByteStreams,cByteStreams) (This)->lpVtbl->SetIndexByteStreams(This,ppIByteStreams,cByteStreams)
+#define IMFASFIndexer_SetIndexStatus(This,pIndexDescriptor,cbIndexDescriptor,fGenerateIndex) (This)->lpVtbl->SetIndexStatus(This,pIndexDescriptor,cbIndexDescriptor,fGenerateIndex)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IMFASFMultiplexer
+DECLARE_INTERFACE_(IMFASFMultiplexer,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IMFASFMultiplexer methods */
+    STDMETHOD_(HRESULT,End)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
+    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
+    STDMETHOD_(HRESULT,GetNextPacket)(THIS_ DWORD *pdwStatusFlags,IMFSample **ppIPacket) PURE;
+    STDMETHOD_(HRESULT,GetStatistics)(THIS_ WORD wStreamNumber,ASF_MUX_STATISTICS *pMuxStats) PURE;
+    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
+    STDMETHOD_(HRESULT,ProcessSample)(THIS_ WORD wStreamNumber,IMFSample *pISample,LONGLONG hnsTimestampAdjust) PURE;
+    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD_(HRESULT,SetSyncTolerance)(THIS_ DWORD msSyncTolerance) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IMFASFMultiplexer_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFMultiplexer_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IMFASFMultiplexer_Release(This) (This)->pVtbl->Release(This)
+#define IMFASFMultiplexer_End(This,pIContentInfo) (This)->lpVtbl->End(This,pIContentInfo)
+#define IMFASFMultiplexer_Flush() (This)->lpVtbl->Flush(This)
+#define IMFASFMultiplexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFMultiplexer_GetNextPacket(This,pdwStatusFlags,ppIPacket) (This)->lpVtbl->GetNextPacket(This,pdwStatusFlags,ppIPacket)
+#define IMFASFMultiplexer_GetStatistics(This,wStreamNumber,pMuxStats) (This)->lpVtbl->GetStatistics(This,wStreamNumber,pMuxStats)
+#define IMFASFMultiplexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFMultiplexer_ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust) (This)->lpVtbl->ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust)
+#define IMFASFMultiplexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#define IMFASFMultiplexer_SetSyncTolerance(This,msSyncTolerance) (This)->lpVtbl->SetSyncTolerance(This,msSyncTolerance)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);
+HRESULT WINAPI MFCreateAttributes(IMFAttributes **ppMFAttributes,UINT32 cInitialSize);
+HRESULT WINAPI MFCreateWMAEncoderActivate(IMFMediaType *pMediaType,IPropertyStore *pEncodingConfigurationProperties,IMFActivate **ppActivate);
+HRESULT WINAPI MFCreateWMVEncoderActivate(IMFMediaType *pMediaType,IPropertyStore *pEncodingConfigurationProperties,IMFActivate **ppActivate);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /*_INC_WMCONTAINER*/
diff --git a/mingw-w64-headers/include/ws2bth.h b/mingw-w64-headers/include/ws2bth.h
new file mode 100644
index 0000000..f92c6e9
--- /dev/null
+++ b/mingw-w64-headers/include/ws2bth.h
@@ -0,0 +1,51 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WS2BTH
+#define _INC_WS2BTH
+#include <bthsdpdef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _BTH_QUERY_SERVICE {
+  ULONG             type;
+  ULONG             serviceHandle;
+  SdpQueryUuid      uuids[MAX_UUIDS_IN_QUERY];
+  ULONG             numRange;
+  SdpAttributeRange pRange[1];
+} BTH_QUERY_SERVICE, *PBTH_QUERY_SERVICE;
+
+typedef struct _BTH_QUERY_DEVICE {
+  ULONG LAP;
+  UCHAR length;
+} BTH_QUERY_DEVICE, *PBTH_QUERY_DEVICE;
+
+typedef struct _BTH_RADIO_IN_RANGE {
+  BTH_DEVICE_INFO deviceInfo;
+  ULONG           previousDeviceFlags;
+} BTH_RADIO_IN_RANGE, *PBTH_RADIO_IN_RANGE;
+
+typedef struct _BTH_SET_SERVICE {
+  PULONG pSdpVersion;
+  HANDLE *pRecordHandle;
+  ULONG  fCodService;
+  ULONG  Reserved[5];
+  ULONG  ulRecordLength;
+  UCHAR  pRecord[1];
+} BTH_SET_SERVICE, *PBTH_SET_SERVICE;
+
+typedef struct _SOCKADDR_BTH {
+  USHORT   addressFamily;
+  BTH_ADDR btAddr;
+  GUID     serviceClassId;
+  ULONG    port;
+} SOCKADDR_BTH, *PSOCKADDR_BTH;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*_INC_WS2BTH*/
diff --git a/mingw-w64-headers/include/ws2ipdef.h b/mingw-w64-headers/include/ws2ipdef.h
new file mode 100644
index 0000000..1c94083
--- /dev/null
+++ b/mingw-w64-headers/include/ws2ipdef.h
@@ -0,0 +1,56 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WS2IPDEF
+#define _INC_WS2IPDEF
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _MULTICAST_MODE_TYPE {
+  MCAST_INCLUDE   = 0,
+  MCAST_EXCLUDE
+} MULTICAST_MODE_TYPE;
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef struct _sockaddr_in6_pair {
+  PSOCKADDR_IN6 SourceAddress;
+  PSOCKADDR_IN6 DestinationAddress;
+} SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR;
+
+typedef union _SOCKADDR_INET {
+  SOCKADDR_IN    Ipv4;
+  SOCKADDR_IN6   Ipv6;
+  ADDRESS_FAMILY si_family;
+} SOCKADDR_INET, *PSOCKADDR_INET;
+
+typedef struct group_filter {
+  ULONG               gf_interface;
+  SOCKADDR_STORAGE    gf_group;
+  MULTICAST_MODE_TYPE gf_fmode;
+  ULONG               gf_numsrc;
+  SOCKADDR_STORAGE    gf_slist[1];
+} GROUP_FILTER, *PGROUP_FILTER;
+
+typedef struct group_req {
+  ULONG            gr_interface;
+  SOCKADDR_STORAGE gr_group;
+} GROUP_REQ, *PGROUP_REQ;
+
+typedef struct group_source_req {
+  ULONG            gsr_interface;
+  SOCKADDR_STORAGE gsr_group;
+  SOCKADDR_STORAGE gsr_source;
+} GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_INC_WS2IPDEF*/
diff --git a/mingw-w64-headers/include/ws2spi.h b/mingw-w64-headers/include/ws2spi.h
index 6767b0e..41ded25 100644
--- a/mingw-w64-headers/include/ws2spi.h
+++ b/mingw-w64-headers/include/ws2spi.h
@@ -227,6 +227,220 @@
 
   INT WSAAPI NSPStartup(LPGUID lpProviderId,LPNSP_ROUTINE lpnspRoutines);
 
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef int (WSAAPI *LPNSPV2CLEANUP)(
+  LPGUID lpProviderId,
+  LPVOID pvClientSessionArg
+);
+
+typedef int (WSAAPI *LPNSPV2CLIENTSESSIONRUNDOWN)(
+  LPGUID lpProviderId,
+  LPVOID pvClientSessionArg
+);
+
+typedef int (WSAAPI *LPNSPV2LOOKUPSERVICEBEGIN)(
+  LPGUID lpProviderId,
+  LPWSAQUERYSET2W lpqsRestrictions,
+  DWORD dwControlFlags,
+  LPVOID lpvClientSessionArg,
+  LPHANDLE lphLookup
+);
+
+typedef int (WSAAPI *LPNSPV2LOOKUPSERVICEEND)(
+  HANDLE hLookup
+);
+
+typedef int (WSAAPI *LPNSPV2LOOKUPSERVICENEXTEX)(
+  HANDLE hAsyncCall,
+  HANDLE hLookup,
+  DWORD dwControlFlags,
+  LPDWORD lpdwBufferLength,
+  LPWSAQUERYSET2W lpqsResults
+);
+
+typedef int (WSAAPI *LPNSPV2SETSERVICEEX)(
+  HANDLE hAsyncCall,
+  LPGUID lpProviderId,
+  LPWSAQUERYSET2W lpqsRegInfo,
+  WSAESETSERVICEOP essOperation,
+  DWORD dwControlFlags,
+  LPVOID lpvClientSessionArg
+);
+
+typedef int (WSAAPI *LPNSPV2STARTUP)(
+  LPGUID lpProviderId,
+  LPVOID *ppvClientSessionArg
+);
+
+typedef struct _NSPV2_ROUTINE {
+  DWORD                       cbSize;
+  DWORD                       dwMajorVersion;
+  DWORD                       dwMinorVersion;
+  LPNSPV2STARTUP              NSPv2Startup;
+  LPNSPV2CLEANUP              NSPv2Cleanup;
+  LPNSPV2LOOKUPSERVICEBEGIN   NSPv2LookupServiceBegin;
+  LPNSPV2LOOKUPSERVICENEXTEX  NSPv2LookupServiceNextEx;
+  LPNSPV2LOOKUPSERVICEEND     NSPv2LookupServiceEnd;
+  LPNSPV2SETSERVICEEX         NSPv2SetServiceEx;
+  LPNSPV2CLIENTSESSIONRUNDOWN NSPv2ClientSessionRundown;
+} NSPV2_ROUTINE, *PNSPV2_ROUTINE, *LPCNSPV2_ROUTINE;
+
+typedef enum _WSC_PROVIDER_INFO_TYPE {
+  ProviderInfoLspCategories,
+  ProviderInfoAudit 
+} WSC_PROVIDER_INFO_TYPE;
+
+typedef struct _WSC_PROVIDER_AUDIT_INFO {
+  DWORD RecordSize;
+  PVOID Reserved;
+} WSC_PROVIDER_AUDIT_INFO, *PWSC_PROVIDER_AUDIT_INFO;
+
+INT WSAAPI WSAAdvertiseProvider(
+  const GUID *puuidProviderId,
+  const LPCNSPV2_ROUTINE *pNSPv2Routine
+);
+
+INT WSPAPI WSAProviderCompleteAsyncCall(
+  HANDLE hAsyncCall,
+  INT iRetCode
+);
+
+INT WSPAPI WSAUnadvertiseProvider(
+  const GUID *puuidProviderId
+);
+
+int WSPAPI WSCGetApplicationCategory(
+  LPCWSTR Path,
+  DWORD PathLength,
+  LPCWSTR Extra,
+  DWORD ExtraLength,
+  DWORD *pPermittedLspCategories,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCGetProviderInfo(
+  LPGUID lpProviderId,
+  WSC_PROVIDER_INFO_TYPE InfoType,
+  PBYTE Info,
+  size_t *InfoSize,
+  DWORD Flags,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCInstallProviderAndChains(
+  const LPGUID lpProviderId,
+  const LPWSTR lpszProviderDllPath,
+  const LPWSTR lpszLspName,
+  DWORD dwServiceFlags,
+  const LPWSAPROTOCOL_INFO lpProtocolInfoList,
+  DWORD dwNumberOfEntries,
+  LPDWORD lpdwCatalogEntryId,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCSetApplicationCategory(
+  LPCWSTR Path,
+  DWORD PathLength,
+  LPCWSTR Extra,
+  DWORD ExtraLength,
+  DWORD PermittedLspCategories,
+  DWORD *pPrevPermLspCat,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCSetProviderInfo(
+  LPGUID lpProviderId,
+  WSC_PROVIDER_INFO_TYPE InfoType,
+  PBYTE Info,
+  size_t InfoSize,
+  DWORD Flags,
+  LPINT lpErrno
+);
+
+int WSAAPI WSCInstallNameSpaceEx(
+  LPWSTR lpszIdentifier,
+  LPWSTR lpszPathName,
+  DWORD dwNameSpace,
+  DWORD dwVersion,
+  LPGUID lpProviderId,
+  LPBLOB lpProviderInfo
+);
+
+#ifdef _WIN64
+int WSPAPI WSCDeinstallProvider32(
+  LPGUID lpProviderId,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCEnableNSProvider32(
+  LPGUID lpProviderId,
+  WINBOOL fEnable
+);
+
+INT WSPAPI WSCEnumNameSpaceProviders32(
+  LPDWORD lpdwBufferLength,
+  LPWSANAMESPACE_INFOW lpnspBuffer
+);
+
+INT WSPAPI WSCEnumNameSpaceProvidersEx32(
+  LPDWORD lpdwBufferLength,
+  LPWSANAMESPACE_INFOEXW lpnspBuffer
+);
+
+int WSPAPI WSCGetProviderInfo32(
+  LPGUID lpProviderId,
+  WSC_PROVIDER_INFO_TYPE InfoType,
+  PBYTE Info,
+  size_t *InfoSize,
+  DWORD Flags,
+  LPINT lpErrno
+);
+
+int WSAAPI WSCInstallNameSpaceEx32(
+  LPWSTR lpszIdentifier,
+  LPWSTR lpszPathName,
+  DWORD dwNameSpace,
+  DWORD dwVersion,
+  LPGUID lpProviderId,
+  LPBLOB lpProviderInfo
+);
+
+int WSPAPI WSCInstallProviderAndChains64_32(
+  const LPGUID lpProviderId,
+  const LPWSTR lpszProviderDllPath,
+  const LPWSTR lpszProviderDllPath32,
+  const LPWSTR lpszLspName,
+  DWORD dwServiceFlags,
+  const LPWSAPROTOCOL_INFO lpProtocolInfoList,
+  DWORD dwNumberOfEntries,
+  LPDWORD lpdwCatalogEntryId,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCSetProviderInfo32(
+  LPGUID lpProviderId,
+  WSC_PROVIDER_INFO_TYPE InfoType,
+  PBYTE Info,
+  size_t InfoSize,
+  DWORD Flags,
+  LPINT lpErrno
+);
+
+int WSPAPI WSCWriteNameSpaceOrder32(
+  LPGUID lpProviderId,
+  DWORD dwNumberOfEntries
+);
+
+int WSPAPI WSCWriteProviderOrder32(
+  LPDWORD lpwdCatalogEntryId,
+  DWORD dwNumberOfEntries
+);
+
+#endif /* _WIN64*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/ws2tcpip.h b/mingw-w64-headers/include/ws2tcpip.h
index 5967e44..7b634e3 100644
--- a/mingw-w64-headers/include/ws2tcpip.h
+++ b/mingw-w64-headers/include/ws2tcpip.h
@@ -8,10 +8,6 @@
 
 #include <_mingw_unicode.h>
 
-#if __GNUC__ >=3
-#pragma GCC system_header
-#endif
-
 #include <winsock2.h>
 #include <mingw_inc/_ip_mreq1.h>
 
@@ -31,9 +27,6 @@
 
 #define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr))
 
-#define MCAST_INCLUDE 0
-#define MCAST_EXCLUDE 1
-
 #define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long)
 
 #define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long)
@@ -105,6 +98,8 @@
 typedef struct sockaddr_in6 *PSOCKADDR_IN6;
 typedef struct sockaddr_in6 *LPSOCKADDR_IN6;
 
+#include <ws2ipdef.h>
+
 #define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port)
 
 #define IN6ADDR_ANY_INIT { 0 }
@@ -341,6 +336,8 @@
 #define NI_NUMERICSERV 0x08
 #define NI_DGRAM 0x10
 
+#include <mstcpip.h>
+
 #if (_WIN32_WINNT >= 0x0600)
 #define addrinfoEx __MINGW_NAME_AW(addrinfoEx)
 #define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX)
@@ -378,10 +375,76 @@
 typedef PVOID LOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/
 typedef LOOKUPSERVICE_COMPLETION_ROUTINE *LPLOOKUPSERVICE_COMPLETION_ROUTINE;
 
-int WSAAPI GetAddrInfoExA(LPCSTR pName,LPCSTR pServiceName,DWORD dwNameSpace,LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,struct timeval *timeout,LPOVERLAPPED lpOverlapped,LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,LPHANDLE lpNameHandle);
-int WSAAPI GetAddrInfoExW(LPCWSTR pName,LPCWSTR pServiceName,DWORD dwNameSpace,LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,struct timeval *timeout,LPOVERLAPPED lpOverlapped,LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,LPHANDLE lpNameHandle);
-void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo);
-void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo);
+WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(LPCSTR pName,LPCSTR pServiceName,DWORD dwNameSpace,LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,struct timeval *timeout,LPOVERLAPPED lpOverlapped,LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,LPHANDLE lpNameHandle);
+WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(LPCWSTR pName,LPCWSTR pServiceName,DWORD dwNameSpace,LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,struct timeval *timeout,LPOVERLAPPED lpOverlapped,LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,LPHANDLE lpNameHandle);
+WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo);
+WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo);
+
+WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(
+  PCSTR pName,
+  PCSTR pServiceName,
+  SOCKET_ADDRESS *pAddresses,
+  DWORD dwAddressCount,
+  LPBLOB lpBlob,
+  DWORD dwFlags,
+  DWORD dwNameSpace,
+  LPGUID lpNspId,
+  struct timeval *timeout,
+  LPOVERLAPPED lpOverlapped,
+  LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  LPHANDLE lpNameHandle
+);
+
+WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(
+  PCWSTR pName,
+  PCWSTR pServiceName,
+  SOCKET_ADDRESS *pAddresses,
+  DWORD dwAddressCount,
+  LPBLOB lpBlob,
+  DWORD dwFlags,
+  DWORD dwNameSpace,
+  LPGUID lpNspId,
+  struct timeval *timeout,
+  LPOVERLAPPED lpOverlapped,
+  LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  LPHANDLE lpNameHandle
+);
+
+#define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx)
+
+WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer(
+  SOCKET Socket,
+  const struct sockaddr PeerAddress,
+  ULONG peerAddressLen
+);
+
+WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity(
+  SOCKET Socket,
+  const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate,
+  ULONG SecurityQueryTemplateLen,
+  SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo,
+  ULONG *SecurityQueryInfoLen,
+  LPWSAOVERLAPPED Overlapped,
+  LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
+);
+
+WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void);
+
+WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName(
+  SOCKET Socket,
+  const SOCKET_PEER_TARGET_NAME *PeerTargetName,
+  ULONG PeerTargetNameLen,
+  LPWSAOVERLAPPED Overlapped,
+  LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
+);
+
+WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity(
+  SOCKET Socket,
+  const SOCKET_SECURITY_SETTINGS *SecuritySettings,
+  ULONG SecuritySettingsLen,
+  LPWSAOVERLAPPED Overlapped,
+  LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
+);
 
 #endif /*(_WIN32_WINNT >= 0x0600)*/
 
diff --git a/mingw-w64-headers/include/wsdapi.h b/mingw-w64-headers/include/wsdapi.h
new file mode 100644
index 0000000..20c4a67
--- /dev/null
+++ b/mingw-w64-headers/include/wsdapi.h
@@ -0,0 +1,55 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDAPI
+#define _INC_WSDAPI
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct IWSDAsyncResult IWSDAsyncResult;
+typedef struct IWSDServiceProxy IWSDServiceProxy;
+typedef struct IWSDEndpointProxy IWSDEndpointProxy;
+
+typedef struct IWSDMessageParameters IWSDMessageParameters;
+typedef struct IWSDServiceMessaging IWSDServiceMessaging;
+
+typedef struct _WSD_EVENT WSD_EVENT;
+typedef struct _WSD_SOAP_FAULT_SUBCODE WSD_SOAP_FAULT_SUBCODE;
+typedef struct _WSD_LOCALIZED_STRING_LIST WSD_LOCALIZED_STRING_LIST;
+typedef struct _WSD_URI_LIST WSD_URI_LIST;
+typedef struct _WSD_NAME_LIST WSD_NAME_LIST;
+typedef struct _WSD_SERVICE_METADATA_LIST WSD_SERVICE_METADATA_LIST;
+typedef struct _WSD_PROBE_MATCH_LIST WSD_PROBE_MATCH_LIST;
+
+typedef struct _WSDXML_NAME WSDXML_NAME;
+typedef struct _WSDXML_ELEMENT WSDXML_ELEMENT;
+typedef struct _WSDXML_NODE WSDXML_NODE;
+typedef struct _WSDXML_ATTRIBUTE WSDXML_ATTRIBUTE;
+typedef struct _WSDXML_PREFIX_MAPPING WSDXML_PREFIX_MAPPING;
+typedef struct _WSDXML_ELEMENT_LIST WSDXML_ELEMENT_LIST;
+typedef struct _WSDXML_TYPE WSDXML_TYPE;
+typedef struct _WSD_METADATA_SECTION_LIST WSD_METADATA_SECTION_LIST;
+typedef struct _WSD_METADATA_SECTION WSD_METADATA_SECTION;
+typedef struct _WSD_ENDPOINT_REFERENCE_LIST WSD_ENDPOINT_REFERENCE_LIST;
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <wsdtypes.h>
+#include <wsdbase.h>
+#include <wsdxmldom.h>
+#include <wsdxml.h>
+#include <wsdhost.h>
+#include <wsdutil.h>
+#include <wsdclient.h>
+#include <wsddisco.h>
+#include <wsdattachment.h>
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDAPI*/
diff --git a/mingw-w64-headers/include/wsdattachment.h b/mingw-w64-headers/include/wsdattachment.h
new file mode 100644
index 0000000..9fd4578
--- /dev/null
+++ b/mingw-w64-headers/include/wsdattachment.h
@@ -0,0 +1,100 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDATTACHMENT
+#define _INC_WSDATTACHMENT
+#if (_WIN32_WINNT >= 0x0600)
+
+#undef  INTERFACE
+#define INTERFACE IWSDAttachment
+DECLARE_INTERFACE_(IWSDAttachment,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAttachment methods */
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDAttachment_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDAttachment_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDAttachment_Release(This) (This)->pVtbl->Release(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDInboundAttachment
+DECLARE_INTERFACE_(IWSDInboundAttachment,IWSDAttachment)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAttachment methods */
+
+    /* IWSDInboundAttachment methods */
+    STDMETHOD_(HRESULT,Read)(THIS_ BYTE *pBuffer,DWORD dwBytesToRead,LPDWORD pdwNumberofBytesRead) PURE;
+    STDMETHOD_(HRESULT,Close)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDInboundAttachment_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDInboundAttachment_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDInboundAttachment_Release(This) (This)->pVtbl->Release(This)
+#define IWSDInboundAttachment_Read(This,pBuffer,dwBytesToRead,pdwNumberofBytesRead) (This)->lpVtbl->Read(This,pBuffer,dwBytesToRead,pdwNumberofBytesRead)
+#define IWSDInboundAttachment_Close() (This)->lpVtbl->Close(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDOutboundAttachment
+DECLARE_INTERFACE_(IWSDOutboundAttachment,IWSDAttachment)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAttachment methods */
+
+    /* IWSDOutboundAttachment methods */
+    STDMETHOD_(HRESULT,Write)(THIS_ const BYTE *pBuffer,DWORD dwBytesToWrite,LPDWORD pdwNumberofBytesWritten) PURE;
+    STDMETHOD_(HRESULT,Close)(THIS) PURE;
+    STDMETHOD_(HRESULT,Abort)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDOutboundAttachment_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDOutboundAttachment_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDOutboundAttachment_Release(This) (This)->pVtbl->Release(This)
+#define IWSDOutboundAttachment_Write(This,pBuffer,dwBytesToWrite,pdwNumberofBytesWritten) (This)->lpVtbl->Write(This,pBuffer,dwBytesToWrite,pdwNumberofBytesWritten)
+#define IWSDOutboundAttachment_Close() (This)->lpVtbl->Close(This)
+#define IWSDOutboundAttachment_Abort() (This)->lpVtbl->Abort(This)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI WSDCreateOutboundAttachment(
+  IWSDOutboundAttachment **attachmentOut
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDATTACHMENT*/
diff --git a/mingw-w64-headers/include/wsdbase.h b/mingw-w64-headers/include/wsdbase.h
new file mode 100644
index 0000000..d6def59
--- /dev/null
+++ b/mingw-w64-headers/include/wsdbase.h
@@ -0,0 +1,316 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDBASE
+#define _INC_WSDBASE
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef enum _WSDUdpMessageType {
+  ONE_WAY   = 0,
+  TWO_WAY   = 1 
+} WSDUdpMessageType;
+
+typedef struct _WSDUpdRetransmitParams {
+  ULONG ulSendDelay;
+  ULONG ulRepeat;
+  ULONG ulRepeatMinDelay;
+  ULONG ulRepeatMaxDelay;
+  ULONG ulRepeatUpperDelay;
+} WSDUdpRetransmitParams, *PWSDUdpRetransmitParams;
+
+#undef  INTERFACE
+#define INTERFACE IWSDTransportAddress
+DECLARE_INTERFACE_(IWSDTransportAddress,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDTransportAddress methods */
+    STDMETHOD_(HRESULT,GetPort)(THIS_ WORD *pwPort) PURE;
+    STDMETHOD_(HRESULT,SetPort)(THIS_ WORD wPort) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddress)(THIS_ LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddressEx)(THIS_ WINBOOL fSafe,LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,SetTransportAddress)(THIS_ LPCWSTR pszAddress) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDTransportAddress_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDTransportAddress_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDTransportAddress_Release(This) (This)->pVtbl->Release(This)
+#define IWSDTransportAddress_GetPort(This,pwPort) (This)->lpVtbl->GetPort(This,pwPort)
+#define IWSDTransportAddress_SetPort(This,wPort) (This)->lpVtbl->SetPort(This,wPort)
+#define IWSDTransportAddress_GetTransportAddress(This,ppszAddress) (This)->lpVtbl->GetTransportAddress(This,ppszAddress)
+#define IWSDTransportAddress_GetTransportAddressEx(This,fSafe,ppszAddress) (This)->lpVtbl->GetTransportAddressEx(This,fSafe,ppszAddress)
+#define IWSDTransportAddress_SetTransportAddress(This,pszAddress) (This)->lpVtbl->SetTransportAddress(This,pszAddress)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDHttpAddress
+DECLARE_INTERFACE_(IWSDHttpAddress,IWSDTransportAddress)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDTransportAddress methods */
+    STDMETHOD_(HRESULT,GetPort)(THIS_ WORD *pwPort) PURE;
+    STDMETHOD_(HRESULT,SetPort)(THIS_ WORD wPort) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddress)(THIS_ LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddressEx)(THIS_ WINBOOL fSafe,LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,SetTransportAddress)(THIS_ LPCWSTR pszAddress) PURE;
+
+    /* IWSDHttpAddress methods */
+    STDMETHOD_(HRESULT,GetSecure)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetSecure)(THIS_ WINBOOL fSecure) PURE;
+    STDMETHOD_(HRESULT,GetPath)(THIS_ LPCWSTR *ppszPath) PURE;
+    STDMETHOD_(HRESULT,SetPath)(THIS_ LPCWSTR pszPath) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDHttpAddress_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDHttpAddress_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDHttpAddress_Release(This) (This)->pVtbl->Release(This)
+#define IWSDHttpAddress_GetPort(This,pwPort) (This)->lpVtbl->GetPort(This,pwPort)
+#define IWSDHttpAddress_SetPort(This,wPort) (This)->lpVtbl->SetPort(This,wPort)
+#define IWSDHttpAddress_GetTransportAddress(This,ppszAddress) (This)->lpVtbl->GetTransportAddress(This,ppszAddress)
+#define IWSDHttpAddress_GetTransportAddressEx(This,fSafe,ppszAddress) (This)->lpVtbl->GetTransportAddressEx(This,fSafe,ppszAddress)
+#define IWSDHttpAddress_SetTransportAddress(This,pszAddress) (This)->lpVtbl->SetTransportAddress(This,pszAddress)
+#define IWSDHttpAddress_GetSecure() (This)->lpVtbl->GetSecure(This)
+#define IWSDHttpAddress_SetSecure(This,fSecure) (This)->lpVtbl->SetSecure(This,fSecure)
+#define IWSDHttpAddress_GetPath(This,ppszPath) (This)->lpVtbl->GetPath(This,ppszPath)
+#define IWSDHttpAddress_SetPath(This,pszPath) (This)->lpVtbl->SetPath(This,pszPath)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDUdpAddress
+DECLARE_INTERFACE_(IWSDUdpAddress,IWSDTransportAddress)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDTransportAddress methods */
+    STDMETHOD_(HRESULT,GetPort)(THIS_ WORD *pwPort) PURE;
+    STDMETHOD_(HRESULT,SetPort)(THIS_ WORD wPort) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddress)(THIS_ LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,GetTransportAddressEx)(THIS_ WINBOOL fSafe,LPCWSTR *ppszAddress) PURE;
+    STDMETHOD_(HRESULT,SetTransportAddress)(THIS_ LPCWSTR pszAddress) PURE;
+
+    /* IWSDUdpAddress methods */
+    STDMETHOD_(HRESULT,SetSockaddr)(THIS_ const SOCKADDR_STORAGE *pSockAddr) PURE;
+    STDMETHOD_(HRESULT *,GetSockaddr)(THIS_ SOCKADDR_STORAGE *pSockAddr) PURE;
+    STDMETHOD_(HRESULT,SetExclusive)(THIS_ WINBOOL fExclusive) PURE;
+    STDMETHOD_(HRESULT,GetExclusive)(THIS) PURE;
+    STDMETHOD_(HRESULT,SetMessageType)(THIS_ WSDUdpMessageType messageType) PURE;
+    STDMETHOD_(HRESULT,GetMessageType)(THIS_ WSDUdpMessageType *pMessageType) PURE;
+    STDMETHOD_(HRESULT,SetTTL)(THIS_ DWORD dwTTL) PURE;
+    STDMETHOD_(HRESULT,GetTTL)(THIS_ DWORD *pdwTTL) PURE;
+    STDMETHOD_(HRESULT,SetAlias)(THIS_ const GUID *pAlias) PURE;
+    STDMETHOD_(HRESULT,GetAlias)(THIS_ GUID *pAlias) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDUdpAddress_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDUdpAddress_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDUdpAddress_Release(This) (This)->pVtbl->Release(This)
+#define IWSDUdpAddress_GetPort(This,pwPort) (This)->lpVtbl->GetPort(This,pwPort)
+#define IWSDUdpAddress_SetPort(This,wPort) (This)->lpVtbl->SetPort(This,wPort)
+#define IWSDUdpAddress_GetTransportAddress(This,ppszAddress) (This)->lpVtbl->GetTransportAddress(This,ppszAddress)
+#define IWSDUdpAddress_GetTransportAddressEx(This,fSafe,ppszAddress) (This)->lpVtbl->GetTransportAddressEx(This,fSafe,ppszAddress)
+#define IWSDUdpAddress_SetTransportAddress(This,pszAddress) (This)->lpVtbl->SetTransportAddress(This,pszAddress)
+#define IWSDUdpAddress_SetSockaddr(This,pSockAddr) (This)->lpVtbl->SetSockaddr(This,pSockAddr)
+#define IWSDUdpAddress_GetSockaddr(This,pSockAddr) (This)->lpVtbl->GetSockaddr(This,pSockAddr)
+#define IWSDUdpAddress_SetExclusive(This,fExclusive) (This)->lpVtbl->SetExclusive(This,fExclusive)
+#define IWSDUdpAddress_GetExclusive() (This)->lpVtbl->GetExclusive(This)
+#define IWSDUdpAddress_SetMessageType(This,messageType) (This)->lpVtbl->SetMessageType(This,messageType)
+#define IWSDUdpAddress_GetMessageType(This,pMessageType) (This)->lpVtbl->GetMessageType(This,pMessageType)
+#define IWSDUdpAddress_SetTTL(This,dwTTL) (This)->lpVtbl->SetTTL(This,dwTTL)
+#define IWSDUdpAddress_GetTTL(This,pdwTTL) (This)->lpVtbl->GetTTL(This,pdwTTL)
+#define IWSDUdpAddress_SetAlias(This,pAlias) (This)->lpVtbl->SetAlias(This,pAlias)
+#define IWSDUdpAddress_GetAlias(This,pAlias) (This)->lpVtbl->GetAlias(This,pAlias)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDAddress
+DECLARE_INTERFACE_(IWSDAddress,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAddress methods */
+    STDMETHOD_(HRESULT,Serialize)(THIS_ LPWSTR pszBuffer,DWORD cchLength,WINBOOL fSafe) PURE;
+    STDMETHOD_(HRESULT,Deserialize)(THIS_ LPCWSTR pszBuffer) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDAddress_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDAddress_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDAddress_Release(This) (This)->pVtbl->Release(This)
+#define IWSDAddress_Serialize(This,pszBuffer,cchLength,fSafe) (This)->lpVtbl->Serialize(This,pszBuffer,cchLength,fSafe)
+#define IWSDAddress_Deserialize(This,pszBuffer) (This)->lpVtbl->Deserialize(This,pszBuffer)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDMessageParameters
+DECLARE_INTERFACE_(IWSDMessageParameters,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDServiceMessaging methods */
+    STDMETHOD_(HRESULT,GetLocalAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetLocalAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetRemoteAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetRemoteAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetLowerParameters)(THIS_ IWSDMessageParameters **ppTxParams) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDMessageParameters_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDMessageParameters_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDMessageParameters_Release(This) (This)->pVtbl->Release(This)
+#define IWSDMessageParameters_GetLocalAddress(This,ppAddress) (This)->lpVtbl->GetLocalAddress(This,ppAddress)
+#define IWSDMessageParameters_SetLocalAddress(This,pAddress) (This)->lpVtbl->SetLocalAddress(This,pAddress)
+#define IWSDMessageParameters_GetRemoteAddress(This,ppAddress) (This)->lpVtbl->GetRemoteAddress(This,ppAddress)
+#define IWSDMessageParameters_SetRemoteAddress(This,pAddress) (This)->lpVtbl->SetRemoteAddress(This,pAddress)
+#define IWSDMessageParameters_GetLowerParameters(This,ppTxParams) (This)->lpVtbl->GetLowerParameters(This,ppTxParams)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDHttpMessageParameters
+DECLARE_INTERFACE_(IWSDHttpMessageParameters,IWSDMessageParameters)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDServiceMessaging methods */
+    STDMETHOD_(HRESULT,GetLocalAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetLocalAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetRemoteAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetRemoteAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetLowerParameters)(THIS_ IWSDMessageParameters **ppTxParams) PURE;
+
+    /* IWSDHttpMessageParameters methods */
+    STDMETHOD_(HRESULT,SetInboundHttpHeaders)(THIS_ LPCWSTR pszHeaders) PURE;
+    STDMETHOD_(HRESULT,GetInboundHttpHeaders)(THIS_ LPCWSTR *ppszHeaders) PURE;
+    STDMETHOD_(HRESULT,SetOutboundHttpHeaders)(THIS_ LPCWSTR pszHeaders) PURE;
+    STDMETHOD_(HRESULT,GetOutboundHttpHeaders)(THIS_ LPCWSTR *ppszHeaders) PURE;
+    STDMETHOD_(HRESULT,SetID)(THIS_ LPCWSTR pszId) PURE;
+    STDMETHOD_(HRESULT,GetID)(THIS_ LPCWSTR *ppszId) PURE;
+    STDMETHOD_(HRESULT,SetContext)(THIS_ IUnknown *pContext) PURE;
+    STDMETHOD_(HRESULT,GetContext)(THIS_ IUnknown **ppContext) PURE;
+    STDMETHOD_(HRESULT,Clear)(THIS) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDHttpMessageParameters_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDHttpMessageParameters_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDHttpMessageParameters_Release(This) (This)->pVtbl->Release(This)
+#define IWSDHttpMessageParameters_GetLocalAddress(This,ppAddress) (This)->lpVtbl->GetLocalAddress(This,ppAddress)
+#define IWSDHttpMessageParameters_SetLocalAddress(This,pAddress) (This)->lpVtbl->SetLocalAddress(This,pAddress)
+#define IWSDHttpMessageParameters_GetRemoteAddress(This,ppAddress) (This)->lpVtbl->GetRemoteAddress(This,ppAddress)
+#define IWSDHttpMessageParameters_SetRemoteAddress(This,pAddress) (This)->lpVtbl->SetRemoteAddress(This,pAddress)
+#define IWSDHttpMessageParameters_GetLowerParameters(This,ppTxParams) (This)->lpVtbl->GetLowerParameters(This,ppTxParams)
+#define IWSDHttpMessageParameters_SetInboundHttpHeaders(This,pszHeaders) (This)->lpVtbl->SetInboundHttpHeaders(This,pszHeaders)
+#define IWSDHttpMessageParameters_GetInboundHttpHeaders(This,ppszHeaders) (This)->lpVtbl->GetInboundHttpHeaders(This,ppszHeaders)
+#define IWSDHttpMessageParameters_SetOutboundHttpHeaders(This,pszHeaders) (This)->lpVtbl->SetOutboundHttpHeaders(This,pszHeaders)
+#define IWSDHttpMessageParameters_GetOutboundHttpHeaders(This,ppszHeaders) (This)->lpVtbl->GetOutboundHttpHeaders(This,ppszHeaders)
+#define IWSDHttpMessageParameters_SetID(This,pszId) (This)->lpVtbl->SetID(This,pszId)
+#define IWSDHttpMessageParameters_GetID(This,ppszId) (This)->lpVtbl->GetID(This,ppszId)
+#define IWSDHttpMessageParameters_SetContext(This,pContext) (This)->lpVtbl->SetContext(This,pContext)
+#define IWSDHttpMessageParameters_GetContext(This,ppContext) (This)->lpVtbl->GetContext(This,ppContext)
+#define IWSDHttpMessageParameters_Clear() (This)->lpVtbl->Clear(This)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDUdpMessageParameters
+DECLARE_INTERFACE_(IWSDUdpMessageParameters,IWSDMessageParameters)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDServiceMessaging methods */
+    STDMETHOD_(HRESULT,GetLocalAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetLocalAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetRemoteAddress)(THIS_ IWSDAddress **ppAddress) PURE;
+    STDMETHOD_(HRESULT,SetRemoteAddress)(THIS_ IWSDAddress *pAddress) PURE;
+    STDMETHOD_(HRESULT,GetLowerParameters)(THIS_ IWSDMessageParameters **ppTxParams) PURE;
+
+    /* IWSDUdpMessageParameters methods */
+    STDMETHOD_(HRESULT,SetRetransmitParams)(THIS_ const WSDUdpRetransmitParams *pParams) PURE;
+    STDMETHOD_(HRESULT,GetRetransmitParams)(THIS_ WSDUdpRetransmitParams *pParams) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDUdpMessageParameters_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDUdpMessageParameters_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDUdpMessageParameters_Release(This) (This)->pVtbl->Release(This)
+#define IWSDUdpMessageParameters_GetLocalAddress(This,ppAddress) (This)->lpVtbl->GetLocalAddress(This,ppAddress)
+#define IWSDUdpMessageParameters_SetLocalAddress(This,pAddress) (This)->lpVtbl->SetLocalAddress(This,pAddress)
+#define IWSDUdpMessageParameters_GetRemoteAddress(This,ppAddress) (This)->lpVtbl->GetRemoteAddress(This,ppAddress)
+#define IWSDUdpMessageParameters_SetRemoteAddress(This,pAddress) (This)->lpVtbl->SetRemoteAddress(This,pAddress)
+#define IWSDUdpMessageParameters_GetLowerParameters(This,ppTxParams) (This)->lpVtbl->GetLowerParameters(This,ppTxParams)
+#define IWSDUdpMessageParameters_SetRetransmitParams(This,pParams) (This)->lpVtbl->SetRetransmitParams(This,pParams)
+#define IWSDUdpMessageParameters_GetRetransmitParams(This,pParams) (This)->lpVtbl->GetRetransmitParams(This,pParams)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI WSDCreateHttpAddress(
+  IWSDHttpAddress **ppAddress
+);
+
+HRESULT WINAPI WSDCreateHttpMessageParameters(
+  IWSDHttpMessageParameters **ppTxParams
+);
+
+HRESULT WINAPI WSDCreateUdpAddress(
+  IWSDUdpAddress **ppAddress
+);
+
+HRESULT WINAPI WSDCreateUdpMessageParameters(
+  IWSDUdpMessageParameters **ppTxParams
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDBASE*/
diff --git a/mingw-w64-headers/include/wsdclient.h b/mingw-w64-headers/include/wsdclient.h
new file mode 100644
index 0000000..cc23d4c
--- /dev/null
+++ b/mingw-w64-headers/include/wsdclient.h
@@ -0,0 +1,255 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDCLIENT
+#define _INC_WSDCLIENT
+#if (_WIN32_WINNT >= 0x0600)
+
+#undef  INTERFACE
+#define INTERFACE IWSDEventingStatus
+DECLARE_INTERFACE_(IWSDEventingStatus,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDEventingStatus methods */
+    STDMETHOD(SubscriptionRenewed)(THIS_ LPCWSTR pszSubscriptionAction) PURE;
+    STDMETHOD(SubscriptionRenewalFailed)(THIS_ LPCWSTR pszSubscriptionAction,HRESULT hr) PURE;
+    STDMETHOD(SubscriptionEnded)(THIS_ LPCWSTR pszSubscriptionAction) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDEventingStatus_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDEventingStatus_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDEventingStatus_Release(This) (This)->pVtbl->Release(This)
+#define IWSDEventingStatus_SubscriptionRenewed(This,pszSubscriptionAction) (This)->lpVtbl->SubscriptionRenewed(This,pszSubscriptionAction)
+#define IWSDEventingStatus_SubscriptionRenewalFailed(This,pszSubscriptionAction,hr) (This)->lpVtbl->SubscriptionRenewalFailed(This,pszSubscriptionAction,hr)
+#define IWSDEventingStatus_SubscriptionEnded(This,pszSubscriptionAction) (This)->lpVtbl->SubscriptionEnded(This,pszSubscriptionAction)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDAsyncCallback
+DECLARE_INTERFACE_(IWSDAsyncCallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAsyncCallback methods */
+    STDMETHOD_(HRESULT,AsyncOperationComplete)(THIS_ IWSDAsyncResult *pAsyncResult,IUnknown *pAsyncState) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDAsyncCallback_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDAsyncCallback_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDAsyncCallback_Release(This) (This)->pVtbl->Release(This)
+#define IWSDAsyncCallback_AsyncOperationComplete(This,pAsyncResult,pAsyncState) (This)->lpVtbl->AsyncOperationComplete(This,pAsyncResult,pAsyncState)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDAsyncResult
+DECLARE_INTERFACE_(IWSDAsyncResult,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDAsyncResult methods */
+    STDMETHOD_(HRESULT,SetCallback)(THIS_ IWSDAsyncCallback *pCallback,IUnknown *pAsyncState) PURE;
+    STDMETHOD_(HRESULT,SetWaitHandle)(THIS_ HANDLE hWaitHandle) PURE;
+    STDMETHOD_(HRESULT,HasCompleted)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetAsyncState)(THIS_ IUnknown **ppAsyncState) PURE;
+    STDMETHOD_(HRESULT,Abort)(THIS) PURE;
+    STDMETHOD_(HRESULT,GetEvent)(THIS_ WSD_EVENT *pEvent) PURE;
+    STDMETHOD_(HRESULT,GetEndpointProxy)(THIS_ IWSDEndpointProxy **ppEndpoint) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDAsyncResult_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDAsyncResult_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDAsyncResult_Release(This) (This)->pVtbl->Release(This)
+#define IWSDAsyncResult_SetCallback(This,pCallback,pAsyncState) (This)->lpVtbl->SetCallback(This,pCallback,pAsyncState)
+#define IWSDAsyncResult_SetWaitHandle(This,hWaitHandle) (This)->lpVtbl->SetWaitHandle(This,hWaitHandle)
+#define IWSDAsyncResult_HasCompleted() (This)->lpVtbl->HasCompleted(This)
+#define IWSDAsyncResult_GetAsyncState(This,ppAsyncState) (This)->lpVtbl->GetAsyncState(This,ppAsyncState)
+#define IWSDAsyncResult_Abort() (This)->lpVtbl->Abort(This)
+#define IWSDAsyncResult_GetEvent(This,pEvent) (This)->lpVtbl->GetEvent(This,pEvent)
+#define IWSDAsyncResult_GetEndpointProxy(This,ppEndpoint) (This)->lpVtbl->GetEndpointProxy(This,ppEndpoint)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDDeviceProxy
+DECLARE_INTERFACE_(IWSDDeviceProxy,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDDeviceProxy methods */
+    STDMETHOD_(HRESULT,Init)(THIS_ LPCWSTR pszDeviceId,IWSDAddress *pDeviceAddress,LPCWSTR pszLocalId,IWSDDeviceProxy *pSponsor) PURE;
+    STDMETHOD_(HRESULT,BeginGetMetadata)(THIS_ IWSDAsyncResult **ppResult) PURE;
+    STDMETHOD_(HRESULT,EndGetMetadata)(THIS_ IWSDAsyncResult *pResult) PURE;
+    STDMETHOD_(HRESULT,GetHostMetadata)(THIS_ WSD_HOST_METADATA **ppHostMetadata) PURE;
+    STDMETHOD_(HRESULT,GetThisModelMetadata)(THIS_ WSD_THIS_MODEL_METADATA **ppManufacturerMetadata) PURE;
+    STDMETHOD_(HRESULT,GetThisDeviceMetadata)(THIS_ WSD_THIS_DEVICE_METADATA **ppThisDeviceMetadata) PURE;
+    STDMETHOD_(HRESULT,GetAllMetadata)(THIS_ WSD_METADATA_SECTION_LIST **ppMetadata) PURE;
+    STDMETHOD_(HRESULT,GetServiceProxyById)(THIS_ LPCWSTR pszServiceId,IWSDServiceProxy **ppServiceProxy) PURE;
+    STDMETHOD_(HRESULT,GetServiceProxyByType)(THIS_ const WSDXML_NAME *pType,IWSDServiceProxy **ppServiceProxy) PURE;
+    STDMETHOD_(HRESULT,GetEndpointProxy)(THIS_ IWSDEndpointProxy **ppProxy) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDDeviceProxy_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDDeviceProxy_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDDeviceProxy_Release(This) (This)->pVtbl->Release(This)
+#define IWSDDeviceProxy_Init(This,pszDeviceId,pDeviceAddress,pszLocalId,pSponsor) (This)->lpVtbl->Init(This,pszDeviceId,pDeviceAddress,pszLocalId,pSponsor)
+#define IWSDDeviceProxy_BeginGetMetadata(This,ppResult) (This)->lpVtbl->BeginGetMetadata(This,ppResult)
+#define IWSDDeviceProxy_EndGetMetadata(This,pResult) (This)->lpVtbl->EndGetMetadata(This,pResult)
+#define IWSDDeviceProxy_GetHostMetadata(This,ppHostMetadata) (This)->lpVtbl->GetHostMetadata(This,ppHostMetadata)
+#define IWSDDeviceProxy_GetThisModelMetadata(This,ppManufacturerMetadata) (This)->lpVtbl->GetThisModelMetadata(This,ppManufacturerMetadata)
+#define IWSDDeviceProxy_GetThisDeviceMetadata(This,ppThisDeviceMetadata) (This)->lpVtbl->GetThisDeviceMetadata(This,ppThisDeviceMetadata)
+#define IWSDDeviceProxy_GetAllMetadata(This,ppMetadata) (This)->lpVtbl->GetAllMetadata(This,ppMetadata)
+#define IWSDDeviceProxy_GetServiceProxyById(This,pszServiceId,ppServiceProxy) (This)->lpVtbl->GetServiceProxyById(This,pszServiceId,ppServiceProxy)
+#define IWSDDeviceProxy_GetServiceProxyByType(This,pType,ppServiceProxy) (This)->lpVtbl->GetServiceProxyByType(This,pType,ppServiceProxy)
+#define IWSDDeviceProxy_GetEndpointProxy(This,ppProxy) (This)->lpVtbl->GetEndpointProxy(This,ppProxy)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDMetadataExchange
+DECLARE_INTERFACE_(IWSDMetadataExchange,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDMetadataExchange methods */
+    STDMETHOD_(HRESULT,GetMetadata)(THIS_ WSD_METADATA_SECTION_LIST **MetadataOut) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDMetadataExchange_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDMetadataExchange_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDMetadataExchange_Release(This) (This)->pVtbl->Release(This)
+#define IWSDMetadataExchange_GetMetadata(This,MetadataOut) (This)->lpVtbl->GetMetadata(This,MetadataOut)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDServiceProxy
+DECLARE_INTERFACE_(IWSDServiceProxy,IWSDMetadataExchange)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDMetadataExchange methods */
+    STDMETHOD_(HRESULT,GetMetadata)(THIS_ WSD_METADATA_SECTION_LIST **MetadataOut) PURE;
+
+    /* IWSDServiceProxy methods */
+    STDMETHOD_(HRESULT,BeginGetMetadata)(THIS_ IWSDAsyncResult **ppResult) PURE;
+    STDMETHOD_(HRESULT,EndGetMetadata)(THIS_ IWSDAsyncResult *pResult,WSD_METADATA_SECTION_LIST **ppMetadata) PURE;
+    STDMETHOD_(HRESULT,GetServiceMetadata)(THIS_ WSD_SERVICE_METADATA **ppServiceMetadata) PURE;
+    STDMETHOD_(HRESULT,SubscribeToOperation)(THIS_ const WSD_OPERATION *pOperation,IUnknown *pUnknown,const WSDXML_ELEMENT *pAny,WSDXML_ELEMENT **ppAny) PURE;
+    STDMETHOD_(HRESULT,UnsubscribeToOperation)(THIS_ const WSD_OPERATION *pOperation) PURE;
+    STDMETHOD_(HRESULT,SetEventingStatusCallback)(THIS_ IWSDEventingStatus *pStatus) PURE;
+    STDMETHOD_(HRESULT,GetEndpointProxy)(THIS_ IWSDEndpointProxy **ppProxy) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDServiceProxy_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDServiceProxy_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDServiceProxy_Release(This) (This)->pVtbl->Release(This)
+#define IWSDServiceProxy_BeginGetMetadata(This,ppResult) (This)->lpVtbl->BeginGetMetadata(This,ppResult)
+#define IWSDServiceProxy_EndGetMetadata(This,pResult,ppMetadata) (This)->lpVtbl->EndGetMetadata(This,pResult,ppMetadata)
+#define IWSDServiceProxy_GetServiceMetadata(This,ppServiceMetadata) (This)->lpVtbl->GetServiceMetadata(This,ppServiceMetadata)
+#define IWSDServiceProxy_SubscribeToOperation(This,pOperation,pUnknown,pAny,ppAny) (This)->lpVtbl->SubscribeToOperation(This,pOperation,pUnknown,pAny,ppAny)
+#define IWSDServiceProxy_UnsubscribeToOperation(This,pOperation) (This)->lpVtbl->UnsubscribeToOperation(This,pOperation)
+#define IWSDServiceProxy_SetEventingStatusCallback(This,pStatus) (This)->lpVtbl->SetEventingStatusCallback(This,pStatus)
+#define IWSDServiceProxy_GetEndpointProxy(This,ppProxy) (This)->lpVtbl->GetEndpointProxy(This,ppProxy)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDEndpointProxy
+DECLARE_INTERFACE_(IWSDEndpointProxy,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDEndpointProxy methods */
+    STDMETHOD_(HRESULT,SendOneWayRequest)(THIS_ const void *pBody,const WSD_OPERATION *pOperation) PURE;
+    STDMETHOD_(HRESULT,SendTwoWayRequest)(THIS_ const void *pBody,const WSD_OPERATION *pOperation,WSD_SYNCHRONOUS_RESPONSE_CONTEXT *pResponseContext) PURE;
+    STDMETHOD_(HRESULT,SendTwoWayRequestAsync)(THIS_ const void *pBody,const WSD_OPERATION *pOperation,IUnknown *pAsyncState,IWSDAsyncCallback *pCallback,IWSDAsyncResult **pResult) PURE;
+    STDMETHOD_(HRESULT,AbortAsyncOperation)(THIS_ IWSDAsyncResult *pAsyncResult) PURE;
+    STDMETHOD_(HRESULT,ProcessFault)(THIS_ const WSD_SOAP_FAULT *pFault) PURE;
+    STDMETHOD_(HRESULT,GetErrorInfo)(THIS_ const LPCWSTR *ppszErrorInfo) PURE;
+    STDMETHOD_(HRESULT,GetFaultInfo)(THIS_ WSD_SOAP_FAULT **ppFault) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDEndpointProxy_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDEndpointProxy_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDEndpointProxy_Release(This) (This)->pVtbl->Release(This)
+#define IWSDEndpointProxy_SendOneWayRequest(This,pBody,pOperation) (This)->lpVtbl->SendOneWayRequest(This,pBody,pOperation)
+#define IWSDEndpointProxy_SendTwoWayRequest(This,pBody,pOperation,pResponseContext) (This)->lpVtbl->SendTwoWayRequest(This,pBody,pOperation,pResponseContext)
+#define IWSDEndpointProxy_SendTwoWayRequestAsync(This,pBody,pOperation,pAsyncState,pCallback,pResult) (This)->lpVtbl->SendTwoWayRequestAsync(This,pBody,pOperation,pAsyncState,pCallback,pResult)
+#define IWSDEndpointProxy_AbortAsyncOperation(This,pAsyncResult) (This)->lpVtbl->AbortAsyncOperation(This,pAsyncResult)
+#define IWSDEndpointProxy_ProcessFault(This,pFault) (This)->lpVtbl->ProcessFault(This,pFault)
+#define IWSDEndpointProxy_GetErrorInfo(This,ppszErrorInfo) (This)->lpVtbl->GetErrorInfo(This,ppszErrorInfo)
+#define IWSDEndpointProxy_GetFaultInfo(This,ppFault) (This)->lpVtbl->GetFaultInfo(This,ppFault)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI WSDCreateDeviceProxy(
+  const WCHAR *pszDeviceId,
+  const WCHAR *pszLocalId,
+  IWSDXMLContext *pContext,
+  IWSDDeviceProxy **ppDeviceProxy
+);
+
+HRESULT WINAPI WSDCreateDeviceProxyAdvanced(
+  const WCHAR *pszDeviceId,
+  IWSDAddress *pDeviceAddress,
+  const WCHAR *pszLocalId,
+  IWSDXMLContext *pContext,
+  IWSDDeviceProxy **ppDeviceProxy
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDCLIENT*/
diff --git a/mingw-w64-headers/include/wsddisco.h b/mingw-w64-headers/include/wsddisco.h
new file mode 100644
index 0000000..7f85298
--- /dev/null
+++ b/mingw-w64-headers/include/wsddisco.h
@@ -0,0 +1,232 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDDISCO
+#define _INC_WSDDISCO
+#if (_WIN32_WINNT >= 0x0600)
+
+#undef  INTERFACE
+#define INTERFACE IWSDScopeMatchingRule
+DECLARE_INTERFACE_(IWSDScopeMatchingRule,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDScopeMatchingRule methods */
+    STDMETHOD_(HRESULT,GetScopeRule)(THIS_ LPCWSTR *ppszScopeMatchingRule) PURE;
+    STDMETHOD_(HRESULT,MatchScopes)(THIS_ LPCWSTR pszScope1,LPCWSTR pszScope2,BOOL *pfMatch) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDScopeMatchingRule_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDScopeMatchingRule_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDScopeMatchingRule_Release(This) (This)->pVtbl->Release(This)
+#define IWSDScopeMatchingRule_GetScopeRule(This,ppszScopeMatchingRule) (This)->lpVtbl->GetScopeRule(This,ppszScopeMatchingRule)
+#define IWSDScopeMatchingRule_MatchScopes(This,pszScope1,pszScope2,pfMatch) (This)->lpVtbl->MatchScopes(This,pszScope1,pszScope2,pfMatch)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDiscoveryPublisherNotify
+DECLARE_INTERFACE_(IWSDiscoveryPublisherNotify,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDiscoveryPublisherNotify methods */
+    STDMETHOD_(HRESULT,ProbeHandler)(THIS_ const WSD_SOAP_MESSAGE *pSoap,IWSDMessageParameters *pMessageParameters) PURE;
+    STDMETHOD_(HRESULT,ResolveHandler)(THIS_ const WSD_SOAP_MESSAGE *pSoap,IWSDMessageParameters *pMessageParameters) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDiscoveryPublisherNotify_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDiscoveryPublisherNotify_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDiscoveryPublisherNotify_Release(This) (This)->pVtbl->Release(This)
+#define IWSDiscoveryPublisherNotify_ProbeHandler(This,pSoap,pMessageParameters) (This)->lpVtbl->ProbeHandler(This,pSoap,pMessageParameters)
+#define IWSDiscoveryPublisherNotify_ResolveHandler(This,pSoap,pMessageParameters) (This)->lpVtbl->ResolveHandler(This,pSoap,pMessageParameters)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDiscoveredService
+DECLARE_INTERFACE_(IWSDiscoveredService,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDiscoveryProviderNotify methods */
+    STDMETHOD_(HRESULT *,GetEndpointReference)(THIS_ WSD_ENDPOINT_REFERENCE **ppEndPointReference) PURE;
+    STDMETHOD_(HRESULT,GetTypes)(THIS_ WSD_NAME_LIST **ppTypesList) PURE;
+    STDMETHOD_(HRESULT,GetScopes)(THIS_ WSD_URI_LIST **ppScopesList) PURE;
+    STDMETHOD_(HRESULT,GetXAddrs)(THIS_ WSD_URI_LIST **ppXAddrsList) PURE;
+    STDMETHOD_(HRESULT,GetMetadataVersion)(THIS_ ULONGLONG *pullMetadataVersion) PURE;
+    STDMETHOD_(HRESULT,GetExtendedDiscoXML)(THIS_ WSDXML_ELEMENT **ppHeaderAny,WSDXML_ELEMENT **ppBodyAny) PURE;
+    STDMETHOD_(HRESULT,GetProbeResolveTag)(THIS_ LPCWSTR *ppszTag) PURE;
+    STDMETHOD_(HRESULT,GetRemoteTransportAddress)(THIS_ LPCWSTR *ppszRemoteTransportAddress) PURE;
+    STDMETHOD_(HRESULT,GetLocalTransportAddress)(THIS_ LPCWSTR *ppszLocalTransportAddress) PURE;
+    STDMETHOD_(HRESULT,GetLocalInterfaceGUID)(THIS_ GUID *pGuid) PURE;
+    STDMETHOD_(HRESULT *,GetInstanceId)(THIS_ ULONGLONG *pullInstanceId) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDiscoveredService_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDiscoveredService_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDiscoveredService_Release(This) (This)->pVtbl->Release(This)
+#define IWSDiscoveredService_GetEndpointReference(This,ppEndPointReference) (This)->lpVtbl->GetEndpointReference(This,ppEndPointReference)
+#define IWSDiscoveredService_GetTypes(This,ppTypesList) (This)->lpVtbl->GetTypes(This,ppTypesList)
+#define IWSDiscoveredService_GetScopes(This,ppScopesList) (This)->lpVtbl->GetScopes(This,ppScopesList)
+#define IWSDiscoveredService_GetXAddrs(This,ppXAddrsList) (This)->lpVtbl->GetXAddrs(This,ppXAddrsList)
+#define IWSDiscoveredService_GetMetadataVersion(This,pullMetadataVersion) (This)->lpVtbl->GetMetadataVersion(This,pullMetadataVersion)
+#define IWSDiscoveredService_GetExtendedDiscoXML(This,ppHeaderAny,ppBodyAny) (This)->lpVtbl->GetExtendedDiscoXML(This,ppHeaderAny,ppBodyAny)
+#define IWSDiscoveredService_GetProbeResolveTag(This,ppszTag) (This)->lpVtbl->GetProbeResolveTag(This,ppszTag)
+#define IWSDiscoveredService_GetRemoteTransportAddress(This,ppszRemoteTransportAddress) (This)->lpVtbl->GetRemoteTransportAddress(This,ppszRemoteTransportAddress)
+#define IWSDiscoveredService_GetLocalTransportAddress(This,ppszLocalTransportAddress) (This)->lpVtbl->GetLocalTransportAddress(This,ppszLocalTransportAddress)
+#define IWSDiscoveredService_GetLocalInterfaceGUID(This,pGuid) (This)->lpVtbl->GetLocalInterfaceGUID(This,pGuid)
+#define IWSDiscoveredService_GetInstanceId(This,pullInstanceId) (This)->lpVtbl->GetInstanceId(This,pullInstanceId)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDiscoveryProviderNotify
+DECLARE_INTERFACE_(IWSDiscoveryProviderNotify,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDiscoveryProviderNotify methods */
+    STDMETHOD_(HRESULT,Add)(THIS_ IWSDiscoveredService *pService) PURE;
+    STDMETHOD_(HRESULT,Remove)(THIS_ IWSDiscoveredService *pService) PURE;
+    STDMETHOD_(HRESULT,SearchFailed)(THIS_ HRESULT hr,LPCWSTR pszTag) PURE;
+    STDMETHOD_(HRESULT,SearchComplete)(THIS_ LPCWSTR pszTag) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDiscoveryProviderNotify_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDiscoveryProviderNotify_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDiscoveryProviderNotify_Release(This) (This)->pVtbl->Release(This)
+#define IWSDiscoveryProviderNotify_Add(This,pService) (This)->lpVtbl->Add(This,pService)
+#define IWSDiscoveryProviderNotify_Remove(This,pService) (This)->lpVtbl->Remove(This,pService)
+#define IWSDiscoveryProviderNotify_SearchFailed(This,hr,pszTag) (This)->lpVtbl->SearchFailed(This,hr,pszTag)
+#define IWSDiscoveryProviderNotify_SearchComplete(This,pszTag) (This)->lpVtbl->SearchComplete(This,pszTag)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDiscoveryProvider
+DECLARE_INTERFACE_(IWSDiscoveryProvider,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDiscoveryProvider methods */
+    STDMETHOD_(HRESULT,SetAddressFamily)(THIS_ DWORD dwAddressFamily) PURE;
+    STDMETHOD_(HRESULT,Attach)(THIS_ IWSDiscoveryProviderNotify *pSink) PURE;
+    STDMETHOD_(HRESULT,Detach)(THIS) PURE;
+    STDMETHOD_(HRESULT,SearchById)(THIS_ LPCWSTR pszId,LPCWSTR pszTag) PURE;
+    STDMETHOD_(HRESULT,SearchByAddress)(THIS_ LPCWSTR pszAddress,LPCWSTR pszTag) PURE;
+    STDMETHOD_(HRESULT,SearchByType)(THIS_ LPCWSTR pszTag) PURE;
+    STDMETHOD_(HRESULT,GetXMLContext)(THIS_ IWSDXMLContext **ppContext) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDiscoveryProvider_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDiscoveryProvider_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDiscoveryProvider_Release(This) (This)->pVtbl->Release(This)
+#define IWSDiscoveryProvider_SetAddressFamily(This,dwAddressFamily) (This)->lpVtbl->SetAddressFamily(This,dwAddressFamily)
+#define IWSDiscoveryProvider_Attach(This,pSink) (This)->lpVtbl->Attach(This,pSink)
+#define IWSDiscoveryProvider_Detach() (This)->lpVtbl->Detach(This)
+#define IWSDiscoveryProvider_SearchById(This,pszId,pszTag) (This)->lpVtbl->SearchById(This,pszId,pszTag)
+#define IWSDiscoveryProvider_SearchByAddress(This,pszAddress,pszTag) (This)->lpVtbl->SearchByAddress(This,pszAddress,pszTag)
+#define IWSDiscoveryProvider_SearchByType(This,pszTag) (This)->lpVtbl->SearchByType(This,pszTag)
+#define IWSDiscoveryProvider_GetXMLContext(This,ppContext) (This)->lpVtbl->GetXMLContext(This,ppContext)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDiscoveryPublisher
+DECLARE_INTERFACE_(IWSDiscoveryPublisher,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDiscoveryPublisher methods */
+    STDMETHOD_(HRESULT,SetAddressFamily)(THIS_ DWORD dwAddressFamily) PURE;
+    STDMETHOD_(HRESULT,RegisterNotificationSink)(THIS_ IWSDiscoveryPublisherNotify *pSink) PURE;
+    STDMETHOD_(HRESULT,UnRegisterNotificationSink)(THIS_ IWSDiscoveryPublisherNotify *pSink) PURE;
+    STDMETHOD_(HRESULT,Publish)(THIS_ LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSD_URI_LIST *pXAddrsList) PURE;
+    STDMETHOD_(HRESULT,UnPublish)(THIS_ LPCWSTR pszDeviceId,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSDXML_ELEMENT *pAny) PURE;
+    STDMETHOD_(HRESULT,MatchProbe)(THIS_ const WSD_SOAP_MESSAGE *pProbeMessage,IWSDMessageParameters *pMessageParameters,LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSD_URI_LIST *pXAddrsList) PURE;
+    STDMETHOD_(HRESULT,MatchResolve)(THIS_ const WSD_SOAP_MESSAGE *pResolveMessage,IWSDMessageParameters *pMessageParameters,LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSD_URI_LIST *pXAddrsList) PURE;
+    STDMETHOD_(HRESULT,PublishEx)(THIS_ LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSDXML_ELEMENT *pAny) PURE;
+    STDMETHOD_(HRESULT,MatchProbeEx)(THIS_ const WSD_SOAP_MESSAGE *pProbeMessage,IWSDMessageParameters *pMessageParameters,LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSDXML_ELEMENT *pAny) PURE;
+    STDMETHOD_(HRESULT,MatchResolveEx)(THIS_ const WSD_SOAP_MESSAGE *pResolveMessage,IWSDMessageParameters *pMessageParameters,LPCWSTR pszId,ULONGLONG ullMetadataVersion,ULONGLONG ullInstanceId,ULONGLONG ullMessageNumber,const WSDXML_ELEMENT *pAny) PURE;
+    STDMETHOD_(HRESULT,RegisterScopeMatchingRule)(THIS_ IWSDScopeMatchingRule *pScopeMatchingRule) PURE;
+    STDMETHOD_(HRESULT,UnRegisterScopeMatchingRule)(THIS_ IWSDScopeMatchingRule *pScopeMatchingRule) PURE;
+    STDMETHOD_(HRESULT,GetXMLContext)(THIS_ IWSDXMLContext **ppContext) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDiscoveryPublisher_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDiscoveryPublisher_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDiscoveryPublisher_Release(This) (This)->pVtbl->Release(This)
+#define IWSDiscoveryPublisher_SetAddressFamily(This,dwAddressFamily) (This)->lpVtbl->SetAddressFamily(This,dwAddressFamily)
+#define IWSDiscoveryPublisher_RegisterNotificationSink(This,pSink) (This)->lpVtbl->RegisterNotificationSink(This,pSink)
+#define IWSDiscoveryPublisher_UnRegisterNotificationSink(This,pSink) (This)->lpVtbl->UnRegisterNotificationSink(This,pSink)
+#define IWSDiscoveryPublisher_Publish(This,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList) (This)->lpVtbl->Publish(This,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList)
+#define IWSDiscoveryPublisher_UnPublish(This,pszDeviceId,ullInstanceId,ullMessageNumber,pAny) (This)->lpVtbl->UnPublish(This,pszDeviceId,ullInstanceId,ullMessageNumber,pAny)
+#define IWSDiscoveryPublisher_MatchProbe(This,pProbeMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList) (This)->lpVtbl->MatchProbe(This,pProbeMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList)
+#define IWSDiscoveryPublisher_MatchResolve(This,pResolveMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList) (This)->lpVtbl->MatchResolve(This,pResolveMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pXAddrsList)
+#define IWSDiscoveryPublisher_PublishEx(This,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny) (This)->lpVtbl->PublishEx(This,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny)
+#define IWSDiscoveryPublisher_MatchProbeEx(This,pProbeMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny) (This)->lpVtbl->MatchProbeEx(This,pProbeMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny)
+#define IWSDiscoveryPublisher_MatchResolveEx(This,pResolveMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny) (This)->lpVtbl->MatchResolveEx(This,pResolveMessage,pMessageParameters,pszId,ullMetadataVersion,ullInstanceId,ullMessageNumber,pAny)
+#define IWSDiscoveryPublisher_RegisterScopeMatchingRule(This,pScopeMatchingRule) (This)->lpVtbl->RegisterScopeMatchingRule(This,pScopeMatchingRule)
+#define IWSDiscoveryPublisher_UnRegisterScopeMatchingRule(This,pScopeMatchingRule) (This)->lpVtbl->UnRegisterScopeMatchingRule(This,pScopeMatchingRule)
+#define IWSDiscoveryPublisher_GetXMLContext(This,ppContext) (This)->lpVtbl->GetXMLContext(This,ppContext)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI WSDCreateDiscoveryProvider(
+  IWSDXMLContext *pContext,
+  IWSDiscoveryProvider **ppProvider
+);
+
+HRESULT WINAPI WSDCreateDiscoveryPublisher(
+  IWSDXMLContext *pContext,
+  IWSDiscoveryPublisher **ppPublisher
+);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDDISCO*/
diff --git a/mingw-w64-headers/include/wsdhost.h b/mingw-w64-headers/include/wsdhost.h
new file mode 100644
index 0000000..fa67648
--- /dev/null
+++ b/mingw-w64-headers/include/wsdhost.h
@@ -0,0 +1,125 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDHOST
+#define _INC_WSDHOST
+#if (_WIN32_WINNT >= 0x0600)
+#undef  INTERFACE
+#define INTERFACE IWSDServiceMessaging
+DECLARE_INTERFACE_(IWSDServiceMessaging,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDServiceMessaging methods */
+    STDMETHOD_(HRESULT,FaultRequest)(THIS_ WSD_SOAP_HEADER *pRequestHeader,IWSDMessageParameters *pMessageParameters,WSD_SOAP_FAULT *pFault) PURE;
+    STDMETHOD_(HRESULT,SendResponse)(THIS_ void *pBody,WSD_OPERATION *pOperation,IWSDMessageParameters *pMessageParameters) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDServiceMessaging_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDServiceMessaging_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDServiceMessaging_Release(This) (This)->pVtbl->Release(This)
+#define IWSDServiceMessaging_FaultRequest(This,pRequestHeader,pMessageParameters,pFault) (This)->lpVtbl->FaultRequest(This,pRequestHeader,pMessageParameters,pFault)
+#define IWSDServiceMessaging_SendResponse(This,pBody,pOperation,pMessageParameters) (This)->lpVtbl->SendResponse(This,pBody,pOperation,pMessageParameters)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDDeviceHostNotify
+DECLARE_INTERFACE_(IWSDDeviceHostNotify,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDDeviceHostNotify methods */
+    STDMETHOD_(HRESULT,GetService)(THIS_ LPCWSTR pszServiceId,IUnknown **ppService) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDDeviceHostNotify_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDDeviceHostNotify_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDDeviceHostNotify_Release(This) (This)->pVtbl->Release(This)
+#define IWSDDeviceHostNotify_GetService(This,pszServiceId,ppService) (This)->lpVtbl->GetService(This,pszServiceId,ppService)
+#endif /*COBJMACROS*/
+
+#undef  INTERFACE
+#define INTERFACE IWSDDeviceHost
+DECLARE_INTERFACE_(IWSDDeviceHost,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDDeviceHost methods */
+    STDMETHOD_(HRESULT,Init)(THIS_ LPCWSTR pszLocalId,DWORD dwHostAddressCount) PURE;
+    STDMETHOD_(HRESULT,Start)(THIS_ ULONGLONG ullInstanceId,const WSD_URI_LIST *pScopeList,IWSDDeviceHostNotify *pNotificationSink) PURE;
+    STDMETHOD_(HRESULT,Stop)(THIS) PURE;
+    STDMETHOD_(HRESULT,Terminate)(THIS) PURE;
+    STDMETHOD_(HRESULT,RegisterPortType)(THIS_ const WSD_PORT_TYPE *pPortType) PURE;
+    STDMETHOD_(HRESULT,SetMetadata)(THIS_ const WSD_THIS_MODEL_METADATA *pThisModelMetadata,const WSD_THIS_DEVICE_METADATA *pThisDeviceMetadata,const WSD_METADATA_SECTION_LIST *pCustomMetadata) PURE;
+    STDMETHOD_(HRESULT,RegisterService)(THIS_ LPCWSTR pszServiceId,IUnknown *pService) PURE;
+    STDMETHOD_(HRESULT,RetireService)(THIS_ LPCWSTR pszServiceId) PURE;
+    STDMETHOD_(HRESULT,AddDynamicService)(THIS_ LPCWSTR pszServiceId,IUnknown *pService) PURE;
+    STDMETHOD_(HRESULT,RemoveDynamicService)(THIS_ LPCWSTR pszServiceId) PURE;
+    STDMETHOD_(HRESULT,SetServiceDiscoverable)(THIS_ const WCHAR *pszServiceId,WINBOOL fDiscoverable) PURE;
+    STDMETHOD_(HRESULT,SignalEvent)(THIS_ LPCWSTR pszServiceId,const void *pBody,const WSD_OPERATION *pOperation) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDDeviceHost_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDDeviceHost_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDDeviceHost_Release(This) (This)->pVtbl->Release(This)
+#define IWSDDeviceHost_Init(This,pszLocalId,dwHostAddressCount) (This)->lpVtbl->Init(This,pszLocalId,dwHostAddressCount)
+#define IWSDDeviceHost_Start(This,ullInstanceId,pScopeList,pNotificationSink) (This)->lpVtbl->Start(This,ullInstanceId,pScopeList,pNotificationSink)
+#define IWSDDeviceHost_Stop() (This)->lpVtbl->Stop(This)
+#define IWSDDeviceHost_Terminate() (This)->lpVtbl->Terminate(This)
+#define IWSDDeviceHost_RegisterPortType(This,pPortType) (This)->lpVtbl->RegisterPortType(This,pPortType)
+#define IWSDDeviceHost_SetMetadata(This,pThisModelMetadata,pThisDeviceMetadata,pCustomMetadata) (This)->lpVtbl->SetMetadata(This,pThisModelMetadata,pThisDeviceMetadata,pCustomMetadata)
+#define IWSDDeviceHost_RegisterService(This,pszServiceId,pService) (This)->lpVtbl->RegisterService(This,pszServiceId,pService)
+#define IWSDDeviceHost_RetireService(This,pszServiceId) (This)->lpVtbl->RetireService(This,pszServiceId)
+#define IWSDDeviceHost_AddDynamicService(This,pszServiceId,pService) (This)->lpVtbl->AddDynamicService(This,pszServiceId,pService)
+#define IWSDDeviceHost_RemoveDynamicService(This,pszServiceId) (This)->lpVtbl->RemoveDynamicService(This,pszServiceId)
+#define IWSDDeviceHost_SetServiceDiscoverable(This,pszServiceId,fDiscoverable) (This)->lpVtbl->SetServiceDiscoverable(This,pszServiceId,fDiscoverable)
+#define IWSDDeviceHost_SignalEvent(This,pszServiceId,pBody,pOperation) (This)->lpVtbl->SignalEvent(This,pszServiceId,pBody,pOperation)
+#endif /*COBJMACROS*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI WSDCreateDeviceHost(
+  const WCHAR *pszLocalId,
+  IWSDXMLContext *pContext,
+  IWSDDeviceHost **ppDeviceHost
+);
+
+HRESULT WSDCreateDeviceHostAdvanced(
+  const WCHAR *pszLocalId,
+  IWSDXMLContext *pContext,
+  IWSDAddress **ppHostAddresses,
+  DWORD dwHostAddressCount,
+  IWSDDeviceHost **ppDeviceHost
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDHOST*/
diff --git a/mingw-w64-headers/include/wsdtypes.h b/mingw-w64-headers/include/wsdtypes.h
new file mode 100644
index 0000000..0ae5a14
--- /dev/null
+++ b/mingw-w64-headers/include/wsdtypes.h
@@ -0,0 +1,392 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDTYPES
+#define _INC_WSDTYPES
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _WSD_PROTOCOL_TYPE {
+  WSD_PT_NONE    = 0x00,
+  WSD_PT_UDP     = 0x01,
+  WSD_PT_HTTP    = 0x02,
+  WSD_PT_HTTPS   = 0x04,
+  WSD_PT_ALL     = 0xff 
+} WSD_PROTOCOL_TYPE;
+
+typedef enum _WSDEventType {
+  WSDET_NONE                   = 0,
+  WSDET_INCOMING_MESSAGE       = 1,
+  WSDET_INCOMING_FAULT         = 2,
+  WSDET_TRANSMISSION_FAILURE   = 3,
+  WSDET_RESPONSE_TIMEOUT       = 4 
+} WSDEventType;
+
+typedef HRESULT ( *PWSD_SOAP_MESSAGE_HANDLER )(
+    IUnknown *thisUnknown,
+    WSD_EVENT *event
+);
+
+typedef HRESULT ( *WSD_STUB_FUNCTION )(
+    IUnknown *server,
+    IWSDServiceMessaging *session,
+    WSD_EVENT *event
+);
+
+typedef struct _WSD_HANDLER_CONTEXT {
+  PWSD_SOAP_MESSAGE_HANDLER Handler;
+  void                      *PVoid;
+  IUnknown                  *Unknown;
+} WSD_HANDLER_CONTEXT;
+
+typedef struct _WSD_REFERENCE_PROPERTIES {
+  WSDXML_ELEMENT *Any;
+} WSD_REFERENCE_PROPERTIES;
+
+typedef struct _WSD_REFERENCE_PARAMETERS {
+  WSDXML_ELEMENT *Any;
+} WSD_REFERENCE_PARAMETERS;
+
+typedef struct _WSD_ENDPOINT_REFERENCE {
+  const WCHAR              *Address;
+  WSD_REFERENCE_PROPERTIES ReferenceProperties;
+  WSD_REFERENCE_PARAMETERS ReferenceParameters;
+  WSDXML_NAME              *PortType;
+  WSDXML_NAME              *ServiceName;
+  WSDXML_ELEMENT           *Any;
+} WSD_ENDPOINT_REFERENCE;
+
+typedef struct _WSD_APP_SEQUENCE {
+  ULONGLONG   InstanceId;
+  const WCHAR *SequenceId;
+  ULONGLONG   MessageNumber;
+} WSD_APP_SEQUENCE;
+
+typedef struct _WSD_HEADER_RELATESTO {
+  WSDXML_NAME *RelationshipType;
+  const WCHAR *MessageID;
+} WSD_HEADER_RELATESTO;
+
+typedef struct _WSD_SOAP_HEADER {
+  const WCHAR            *To;
+  const WCHAR            *Action;
+  const WCHAR            *MessageID;
+  WSD_HEADER_RELATESTO   RelatesTo;
+  WSD_ENDPOINT_REFERENCE *ReplyTo;
+  WSD_ENDPOINT_REFERENCE *From;
+  WSD_ENDPOINT_REFERENCE *FaultTo;
+  WSD_APP_SEQUENCE       *AppSequence;
+  WSDXML_ELEMENT         *AnyHeaders;
+} WSD_SOAP_HEADER;
+
+typedef struct _WSD_SOAP_MESSAGE {
+  WSD_SOAP_HEADER Header;
+  void            *Body;
+  WSDXML_TYPE     *BodyType;
+} WSD_SOAP_MESSAGE;
+
+typedef struct _WSD_OPERATION {
+  WSDXML_TYPE       *RequestType;
+  WSDXML_TYPE       *ResponseType;
+  WSD_STUB_FUNCTION RequestStubFunction;
+} WSD_OPERATION;
+
+typedef struct _WSD_EVENT {
+  HRESULT               Hr;
+  DWORD                 EventType;
+  WCHAR                 *DispatchTag;
+  WSD_HANDLER_CONTEXT   HandlerContext;
+  WSD_SOAP_MESSAGE      *Soap;
+  WSD_OPERATION         *Operation;
+  IWSDMessageParameters *MessageParameters;
+} WSD_EVENT;
+
+typedef struct _WSD_SOAP_FAULT_SUBCODE {
+  WSDXML_NAME            *Value;
+  WSD_SOAP_FAULT_SUBCODE *Subcode;
+} WSD_SOAP_FAULT_SUBCODE;
+
+typedef struct _WSD_SOAP_FAULT_CODE {
+  WSDXML_NAME            *Value;
+  WSD_SOAP_FAULT_SUBCODE *Subcode;
+} WSD_SOAP_FAULT_CODE;
+
+typedef struct _WSD_LOCALIZED_STRING {
+  const WCHAR *lang;
+  const WCHAR *String;
+} WSD_LOCALIZED_STRING;
+
+typedef struct _WSD_LOCALIZED_STRING_LIST {
+  WSD_LOCALIZED_STRING_LIST *Next;
+  WSD_LOCALIZED_STRING      *Element;
+} WSD_LOCALIZED_STRING_LIST;
+
+typedef struct _WSD_SOAP_FAULT_REASON {
+  WSD_LOCALIZED_STRING_LIST *Text;
+} WSD_SOAP_FAULT_REASON;
+
+typedef struct _WSD_SOAP_FAULT {
+  WSD_SOAP_FAULT_CODE   *Code;
+  WSD_SOAP_FAULT_REASON *Reason;
+  const WCHAR           *Node;
+  const WCHAR           *Role;
+  WSDXML_ELEMENT        *Detail;
+} WSD_SOAP_FAULT;
+
+typedef struct _REQUESTBODY_GetStatus {
+  WSDXML_ELEMENT *Any;
+} REQUESTBODY_GetStatus;
+
+typedef struct _WSD_DURATION {
+  WINBOOL isPositive;
+  ULONG year;
+  ULONG month;
+  ULONG day;
+  ULONG hour;
+  ULONG minute;
+  ULONG second;
+  ULONG millisecond;
+} WSD_DURATION;
+
+typedef struct _WSD_DATETIME {
+  WINBOOL isPositive;
+  ULONG year;
+  UCHAR month;
+  UCHAR day;
+  UCHAR hour;
+  UCHAR minute;
+  UCHAR second;
+  UINT  millisecond;
+  WINBOOL TZIsLocal;
+  WINBOOL TZIsPositive;
+  UCHAR TZHour;
+  UCHAR TZMinute;
+} WSD_DATETIME;
+
+typedef struct _WSD_EVENTING_EXPIRES {
+  WSD_DURATION *Duration;
+  WSD_DATETIME *DateTime;
+} WSD_EVENTING_EXPIRES;
+
+typedef struct _REQUESTBODY_Renew {
+  WSD_EVENTING_EXPIRES *Expires;
+  WSDXML_ELEMENT       *Any;
+} REQUESTBODY_Renew;
+
+typedef struct _WSD_EVENTING_DELIVERY_MODE {
+  const WCHAR *Mode;
+  void        *Data;
+} WSD_EVENTING_DELIVERY_MODE;
+
+typedef struct _WSD_EVENTING_FILTER {
+  const WCHAR *Dialect;
+  void        *Data;
+} WSD_EVENTING_FILTER;
+
+typedef struct _REQUESTBODY_Subscribe {
+  WSD_ENDPOINT_REFERENCE     *EndTo;
+  WSD_EVENTING_DELIVERY_MODE *Delivery;
+  WSD_EVENTING_EXPIRES       *Expires;
+  WSD_EVENTING_FILTER        *Filter;
+  WSDXML_ELEMENT             *Any;
+} REQUESTBODY_Subscribe;
+
+typedef struct _REQUESTBODY_Unsubscribe {
+  WSDXML_ELEMENT *any;
+} REQUESTBODY_Unsubscribe;
+
+typedef struct _WSD_METADATA_SECTION_LIST {
+  WSD_METADATA_SECTION_LIST *Next;
+  WSD_METADATA_SECTION      *Element;
+} WSD_METADATA_SECTION_LIST;
+
+typedef struct _RESPONSEBODY_GetMetadata {
+  WSD_METADATA_SECTION_LIST *Metadata;
+} RESPONSEBODY_GetMetadata;
+
+typedef struct _RESPONSEBODY_GetStatus {
+  WSD_EVENTING_EXPIRES *expires;
+  WSDXML_ELEMENT       *any;
+} RESPONSEBODY_GetStatus;
+
+typedef struct _RESPONSEBODY_Renew {
+  WSD_EVENTING_EXPIRES *expires;
+  WSDXML_ELEMENT       *Any;
+} RESPONSEBODY_Renew;
+
+typedef struct _RESPONSEBODY_Subscribe {
+  WSD_ENDPOINT_REFERENCE *SubscriptionManager;
+  WSD_EVENTING_EXPIRES   *expires;
+  WSDXML_ELEMENT         *Any;
+} RESPONSEBODY_Subscribe;
+
+typedef struct _RESPONSEBODY_SubscriptionEnd {
+  WSD_ENDPOINT_REFERENCE *SubscriptionManager;
+  const WCHAR            *Status;
+  WSD_LOCALIZED_STRING   *Reason;
+  WSDXML_ELEMENT         *Any;
+} RESPONSEBODY_SubscriptionEnd;
+
+typedef struct _WSD_BYE {
+  WSD_ENDPOINT_REFERENCE *EndpointReference;
+  WSDXML_ELEMENT         *Any;
+} WSD_BYE;
+
+typedef struct _WSD_ENDPOINT_REFERENCE_LIST {
+  WSD_ENDPOINT_REFERENCE_LIST *Next;
+  WSD_ENDPOINT_REFERENCE      *Element;
+} WSD_ENDPOINT_REFERENCE_LIST;
+
+typedef struct _WSD_EVENTING_DELIVERY_MODE_PUSH {
+  WSD_ENDPOINT_REFERENCE *NotifyTo;
+} WSD_EVENTING_DELIVERY_MODE_PUSH;
+
+typedef struct _WSD_URI_LIST {
+  WSD_URI_LIST *Next;
+  const WCHAR  *Element;
+} WSD_URI_LIST;
+
+typedef struct _WSD_EVENTING_FILTER_ACTION {
+  WSD_URI_LIST *Actions;
+} WSD_EVENTING_FILTER_ACTION;
+
+typedef struct _WSD_NAME_LIST {
+  WSD_NAME_LIST *Next;
+  WSDXML_NAME   *Element;
+} WSD_NAME_LIST;
+
+typedef struct _WSD_SCOPES {
+  const WCHAR  *MatchBy;
+  WSD_URI_LIST *Scopes;
+} WSD_SCOPES;
+
+typedef struct _WSD_HELLO {
+  WSD_ENDPOINT_REFERENCE *EndpointReference;
+  WSD_NAME_LIST          *Types;
+  WSD_SCOPES             *Scopes;
+  WSD_URI_LIST           *XAddrs;
+  ULONGLONG              MetadataVersion;
+  WSDXML_ELEMENT         *Any;
+} WSD_HELLO;
+
+typedef struct _WSD_SERVICE_METADATA {
+  WSD_ENDPOINT_REFERENCE_LIST *EndpointReference;
+  WSD_NAME_LIST               *Types;
+  const WCHAR                 *ServiceId;
+  WSDXML_ELEMENT              *Any;
+} WSD_SERVICE_METADATA;
+
+typedef struct _WSD_SERVICE_METADATA_LIST {
+  WSD_SERVICE_METADATA_LIST *Next;
+  WSD_SERVICE_METADATA      *Element;
+} WSD_SERVICE_METADATA_LIST;
+
+typedef struct _WSD_HOST_METADATA {
+  WSD_SERVICE_METADATA      *Host;
+  WSD_SERVICE_METADATA_LIST *Hosted;
+} WSD_HOST_METADATA;
+
+typedef struct _WSD_METADATA_SECTION {
+  const WCHAR            *Dialect;
+  const WCHAR            *Identifier;
+  void                   *Data;
+  WSD_ENDPOINT_REFERENCE *MetadataReference;
+  const WCHAR            *Location;
+  WSDXML_ELEMENT         *Any;
+} WSD_METADATA_SECTION;
+
+typedef struct _WSD_PORT_TYPE {
+  DWORD             EncodedName;
+  DWORD             OperationCount;
+  WSD_OPERATION     *Operations;
+  WSD_PROTOCOL_TYPE ProtocolType;
+} WSD_PORT_TYPE;
+
+typedef struct _WSD_PROBE {
+  WSD_NAME_LIST  *Types;
+  WSD_SCOPES     *Scopes;
+  WSDXML_ELEMENT *Any;
+} WSD_PROBE;
+
+typedef struct _WSD_PROBE_MATCH {
+  WSD_ENDPOINT_REFERENCE *EndpointReference;
+  WSD_NAME_LIST          *Types;
+  WSD_SCOPES             *Scopes;
+  WSD_URI_LIST           *XAddrs;
+  ULONGLONG              MetadataVersion;
+  WSDXML_ELEMENT         *Any;
+} WSD_PROBE_MATCH;
+
+typedef struct _WSD_PROBE_MATCH_LIST {
+  WSD_PROBE_MATCH_LIST *Next;
+  WSD_PROBE_MATCH      *Element;
+} WSD_PROBE_MATCH_LIST;
+
+typedef struct _WSD_PROBE_MATCHES {
+  WSD_PROBE_MATCH_LIST *ProbeMatch;
+  WSDXML_ELEMENT       *Any;
+} WSD_PROBE_MATCHES;
+
+typedef struct _WSD_RELATIONSHIP_METADATA {
+  const WCHAR       *Type;
+  WSD_HOST_METADATA *Data;
+  WSDXML_ELEMENT    *Any;
+} WSD_RELATIONSHIP_METADATA;
+
+typedef struct _WSD_RESOLVE {
+  WSD_ENDPOINT_REFERENCE *EndpointReference;
+  WSDXML_ELEMENT         *Any;
+} WSD_RESOLVE;
+
+typedef struct _WSD_RESOLVE_MATCH {
+  WSD_ENDPOINT_REFERENCE *EndpointReference;
+  WSD_NAME_LIST          *Types;
+  WSD_SCOPES             *Scopes;
+  WSD_URI_LIST           *XAddrs;
+  ULONGLONG              MetadataVersion;
+  WSDXML_ELEMENT         *Any;
+} WSD_RESOLVE_MATCH;
+
+typedef struct _WSD_RESOLVE_MATCHES {
+  WSD_RESOLVE_MATCH *ResolveMatch;
+  WSDXML_ELEMENT    *Any;
+} WSD_RESOLVE_MATCHES;
+
+typedef struct _WSD_SYNCHRONOUS_RESPONSE_CONTEXT {
+  HRESULT               hr;
+  HANDLE                eventHandle;
+  IWSDMessageParameters *messageParameters;
+  void                  *results;
+} WSD_SYNCHRONOUS_RESPONSE_CONTEXT;
+
+typedef struct _WSD_THIS_DEVICE_METADATA {
+  WSD_LOCALIZED_STRING_LIST *FriendlyName;
+  const WCHAR               *FirmwareVersion;
+  const WCHAR               *SerialNumber;
+  WSDXML_ELEMENT            *Any;
+} WSD_THIS_DEVICE_METADATA;
+
+typedef struct _WSD_THIS_MODEL_METADATA {
+  WSD_LOCALIZED_STRING_LIST *Manufacturer;
+  const WCHAR               *ManufacturerUrl;
+  WSD_LOCALIZED_STRING_LIST *ModelName;
+  const WCHAR               *ModelNumber;
+  const WCHAR               *ModelUrl;
+  const WCHAR               *PresentationUrl;
+  WSDXML_ELEMENT            *Any;
+} WSD_THIS_MODEL_METADATA;
+
+typedef struct _WSD_UNKNOWN_LOOKUP {
+  WSDXML_ELEMENT *Any;
+} WSD_UNKNOWN_LOOKUP;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDTYPES*/
diff --git a/mingw-w64-headers/include/wsdutil.h b/mingw-w64-headers/include/wsdutil.h
new file mode 100644
index 0000000..58b0cc1
--- /dev/null
+++ b/mingw-w64-headers/include/wsdutil.h
@@ -0,0 +1,95 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDUTIL
+#define _INC_WSDUTIL
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* WINAPI WSDAllocateLinkedMemory(
+  void *pParent,
+  size_t cbSize
+);
+
+void WINAPI WSDAttachLinkedMemory(
+  void *pParent,
+  void *pChild
+);
+
+void WINAPI WSDDetachLinkedMemory(
+  void *pVoid
+);
+
+void WINAPI WSDFreeLinkedMemory(
+  void *pVoid
+);
+
+HRESULT WINAPI WSDGenerateFault(
+  const LPCWSTR *pszCode,
+  const LPCWSTR *pszSubCode,
+  const LPCWSTR *pszReason,
+  const LPCWSTR *pszDetail,
+  IWSDXMLContext *pContext,
+  WSD_SOAP_FAULT **ppFault
+);
+
+#define WSDAPI_OPTION_MAX_INBOUND_MESSAGE_SIZE 0x0001
+
+HRESULT WINAPI WSDGenerateFaultEx(
+  WSDXML_NAME *pCode,
+  WSDXML_NAME *pSubCode,
+  WSD_LOCALIZED_STRING_LIST *pReasons,
+  const LPCWSTR *pszDetail,
+  WSD_SOAP_FAULT **ppFault
+);
+
+HRESULT WINAPI WSDGetConfigurationOption(
+  DWORD dwOption,
+  LPVOID pVoid,
+  DWORD cbOutBuffer
+);
+
+HRESULT WINAPI WSDSetConfigurationOption(
+  DWORD dwOption,
+  LPVOID pVoid,
+  DWORD cbInBuffer
+);
+
+STDAPI WSDXMLAddChild(
+  WSDXML_ELEMENT *pParent,
+  WSDXML_ELEMENT *pChild
+);
+
+STDAPI WSDXMLAddSibling(
+  WSDXML_ELEMENT *pFirst,
+  WSDXML_ELEMENT *pSecond
+);
+
+STDAPI WSDXMLBuildAnyForSingleElement(
+  WSDXML_NAME *pElementName,
+  const LPCWSTR *pszText,
+  WSDXML_ELEMENT **ppAny
+);
+
+HRESULT WINAPI WSDXMLCleanupElement(
+  WSDXML_ELEMENT *pAny
+);
+
+STDAPI WSDXMLGetValueFromAny(
+  const WCHAR *pszNamespace,
+  const WCHAR *pszName,
+  WSDXML_ELEMENT *pAny,
+  const LPCWSTR *ppszValue
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDUTIL*/
diff --git a/mingw-w64-headers/include/wsdxml.h b/mingw-w64-headers/include/wsdxml.h
new file mode 100644
index 0000000..9b71507
--- /dev/null
+++ b/mingw-w64-headers/include/wsdxml.h
@@ -0,0 +1,51 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDXML
+#define _INC_WSDXML
+#if (_WIN32_WINNT >= 0x0600)
+
+#undef  INTERFACE
+#define INTERFACE IWSDXMLContext
+DECLARE_INTERFACE_(IWSDXMLContext,IUnknown)
+{
+    BEGIN_INTERFACE
+
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IWSDXMLContext methods */
+    STDMETHOD_(HRESULT,SetNamespaces)(THIS_ const PCWSDXML_NAMESPACE *pNamespaces,WORD wNamespacesCount,BYTE bLayerNumber) PURE;
+    STDMETHOD_(HRESULT,SetTypes)(THIS_ const PCWSDXML_TYPE *pTypes,DWORD dwTypesCount,BYTE bLayerNumber) PURE;
+    STDMETHOD_(HRESULT,AddNamespace)(THIS_ const LPCWSTR *pszUri,const LPCWSTR *pszSuggestedPrefix,WSDXML_NAMESPACE **ppNamespace) PURE;
+
+    END_INTERFACE
+};
+#ifdef COBJMACROS
+#define IWSDXMLContext_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
+#define IWSDXMLContext_AddRef(This) (This)->pVtbl->AddRef(This)
+#define IWSDXMLContext_Release(This) (This)->pVtbl->Release(This)
+#define IWSDXMLContext_SetNamespaces(This,pNamespaces,wNamespacesCount,bLayerNumber) (This)->lpVtbl->SetNamespaces(This,pNamespaces,wNamespacesCount,bLayerNumber)
+#define IWSDXMLContext_SetTypes(This,pTypes,dwTypesCount,bLayerNumber) (This)->lpVtbl->SetTypes(This,pTypes,dwTypesCount,bLayerNumber)
+#define IWSDXMLContext_AddNamespace(This,pszUri,pszSuggestedPrefix,ppNamespace) (This)->lpVtbl->AddNamespace(This,pszUri,pszSuggestedPrefix,ppNamespace)
+#endif /*COBJMACROS*/
+
+/* In WsdXml.idl
+HRESULT WINAPI WSDXMLCreateContext(
+  __out  IWSDXMLContext **ppContext
+);
+
+HRESULT WINAPI WSDXMLGetNameFromBuiltinNamespace(
+    LPCWSTR pszNamespace,
+    LPCWSTR pszName,
+    WSDXML_NAME **ppName
+);
+
+*/
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDXML*/
diff --git a/mingw-w64-headers/include/wsdxmldom.h b/mingw-w64-headers/include/wsdxmldom.h
new file mode 100644
index 0000000..87b5302
--- /dev/null
+++ b/mingw-w64-headers/include/wsdxmldom.h
@@ -0,0 +1,81 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _INC_WSDXMLDOM
+#define _INC_WSDXMLDOM
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _WSDXML_TYPE {
+  WCHAR *Uri;
+  BYTE  *Table;
+} WSDXML_TYPE;
+
+typedef const WSDXML_TYPE *PCWSDXML_TYPE;
+
+typedef struct _WSDXML_NAMESPACE {
+  const WCHAR *Uri;
+  const WCHAR *PreferredPrefix;
+  WSDXML_NAME *Names;
+  WORD        NamesCount;
+  WORD        Encoding;
+} WSDXML_NAMESPACE;
+
+typedef const WSDXML_NAMESPACE *PCWSDXML_NAMESPACE;
+
+typedef struct _WSDXML_NAME {
+  WSDXML_NAMESPACE *Space;
+  WCHAR            *LocalName;
+} WSDXML_NAME;
+
+typedef struct _WSDXML_NODE {
+  enum DUMMYUNIONNAME {
+     ElementType,
+     TextType
+  }           Type;
+  WSDXML_ELEMENT *Parent;
+  WSDXML_NODE    *Next;
+} WSDXML_NODE;
+
+typedef struct _WSDXML_TEXT {
+  WSDXML_NODE Node;
+  WCHAR       *Text;
+} WSDXML_TEXT;
+
+typedef struct _WSDXML_ATTRIBUTE {
+  WSDXML_ELEMENT   *Element;
+  WSDXML_ATTRIBUTE *Next;
+  WSDXML_NAME      *Name;
+  WCHAR            *Value;
+} WSDXML_ATTRIBUTE;
+
+typedef struct _WSDXML_PREFIX_MAPPING {
+  DWORD                 Refs;
+  WSDXML_PREFIX_MAPPING *Next;
+  WSDXML_NAMESPACE      *Space;
+  WCHAR                 *Prefix;
+} WSDXML_PREFIX_MAPPING;
+
+typedef struct _WSDXML_ELEMENT {
+  WSDXML_NODE           Node;
+  WSDXML_NAME           *Name;
+  WSDXML_ATTRIBUTE      *FirstAttribute;
+  WSDXML_NODE           *FirstChild;
+  WSDXML_PREFIX_MAPPING *PrefixMappings;
+} WSDXML_ELEMENT;
+
+typedef struct _WSDXML_ELEMENT_LIST {
+  WSDXML_ELEMENT_LIST *Next;
+  WSDXML_ELEMENT      *Element;
+} WSDXML_ELEMENT_LIST;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*_INC_WSDXMLDOM*/
diff --git a/mingw-w64-headers/include/wsrm.h b/mingw-w64-headers/include/wsrm.h
index 4824009..731e43c 100644
--- a/mingw-w64-headers/include/wsrm.h
+++ b/mingw-w64-headers/include/wsrm.h
@@ -89,4 +89,63 @@
   UCHAR FECGroupSize;
   BOOLEAN fFECOnDemandParityEnabled;
 } RM_FEC_INFO;
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _eWINDOW_ADVANCE_METHOD {
+  E_WINDOW_ADVANCE_BY_TIME     = 1,
+  E_WINDOW_USE_AS_DATA_CACHE 
+} eWINDOW_ADVANCE_METHOD;
+
+typedef struct _RM_FEC_INFO {
+  USHORT  FECBlockSize;
+  USHORT  FECProActivePackets;
+  UCHAR   FECGroupSize;
+  BOOLEAN fFECOnDemandParityEnabled;
+} RM_FEC_INFO;
+
+typedef struct _RM_RECEIVER_STATS {
+  ULONGULONG NumODataPacketsReceived;
+  ULONGULONG NumRDataPacketsReceived;
+  ULONGULONG NumDuplicateDataPackets;
+  ULONGULONG DataBytesReceived;
+  ULONGULONG TotalBytesReceived;
+  ULONGULONG RateKBitsPerSecOverall;
+  ULONGULONG RateKBitsPerSecLast;
+  ULONGULONG TrailingEdgeSeqId;
+  ULONGULONG LeadingEdgeSeqId;
+  ULONGULONG AverageSequencesInWindow;
+  ULONGULONG MinSequencesInWindow;
+  ULONGULONG MaxSequencesInWindow;
+  ULONGULONG FirstNakSequenceNumber;
+  ULONGULONG NumPendingNaks;
+  ULONGULONG NumOutstandingNaks;
+  ULONGULONG NumDataPacketsBuffered;
+  ULONGULONG TotalSelectiveNaksSent;
+  ULONGULONG TotalParityNaksSent;
+} RM_RECEIVER_STATS;
+
+typedef struct _RM_SEND_WINDOW {
+  ULONG RateKbitsPerSec;
+  ULONG WindowSizeInMSecs;
+  ULONG WindowSizeInBytes;
+} RM_SEND_WINDOW;
+
+typedef struct _RM_SENDER_STATS {
+  ULONGULONG DataBytesSent;
+  ULONGULONG TotalBytesSent;
+  ULONGULONG NaksReceived;
+  ULONGULONG NaksReceivedTooLate;
+  ULONGULONG NumOutstandingNaks;
+  ULONGULONG NumNaksAfterRData;
+  ULONGULONG RepairPacketsSent;
+  ULONGULONG BufferSpaceAvailable;
+  ULONGULONG TrailingEdgeSeqId;
+  ULONGULONG LeadingEdgeSeqId;
+  ULONGULONG RateKBitsPerSecOverall;
+  ULONGULONG RateKBitsPerSecLast;
+  ULONGULONG TotalODataPacketsSent;
+} RM_SENDER_STATS;
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #endif
diff --git a/mingw-w64-headers/include/wtsapi32.h b/mingw-w64-headers/include/wtsapi32.h
index 19d2f75..354ec1a 100644
--- a/mingw-w64-headers/include/wtsapi32.h
+++ b/mingw-w64-headers/include/wtsapi32.h
@@ -195,6 +195,145 @@
   WINBOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd);
   WINBOOL WINAPI WTSQueryUserToken(ULONG SessionId,PHANDLE phToken);
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _WTSCLIENTW {
+  WCHAR   ClientName[CLIENTNAME_LENGTH + 1];
+  WCHAR   Domain[DOMAIN_LENGTH + 1 ];
+  WCHAR   UserName[USERNAME_LENGTH + 1];
+  WCHAR   WorkDirectory[MAX_PATH + 1];
+  WCHAR   InitialProgram[MAX_PATH + 1];
+  BYTE    EncryptionLevel;
+  ULONG   ClientAddressFamily;
+  USHORT  ClientAddress[CLIENTADDRESS_LENGTH + 1];
+  USHORT  HRes;
+  USHORT  VRes;
+  USHORT  ColorDepth;
+  WCHAR   ClientDirectory[MAX_PATH + 1];
+  ULONG   ClientBuildNumber;
+  ULONG   ClientHardwareId;
+  USHORT  ClientProductId;
+  USHORT  OutBufCountHost;
+  USHORT  OutBufCountClient;
+  USHORT  OutBufLength;
+  WCHAR     DeviceId[MAX_PATH + 1];
+} WTSCLIENTW, *PWTSCLIENTW;
+
+typedef struct _WTSCLIENTA {
+  CHAR   ClientName[CLIENTNAME_LENGTH + 1];
+  CHAR   Domain[DOMAIN_LENGTH + 1 ];
+  CHAR   UserName[USERNAME_LENGTH + 1];
+  CHAR   WorkDirectory[MAX_PATH + 1];
+  CHAR   InitialProgram[MAX_PATH + 1];
+  BYTE    EncryptionLevel;
+  ULONG   ClientAddressFamily;
+  USHORT  ClientAddress[CLIENTADDRESS_LENGTH + 1];
+  USHORT  HRes;
+  USHORT  VRes;
+  USHORT  ColorDepth;
+  CHAR   ClientDirectory[MAX_PATH + 1];
+  ULONG   ClientBuildNumber;
+  ULONG   ClientHardwareId;
+  USHORT  ClientProductId;
+  USHORT  OutBufCountHost;
+  USHORT  OutBufCountClient;
+  USHORT  OutBufLength;
+  CHAR     DeviceId[MAX_PATH + 1];
+} WTSCLIENTA, *PWTSCLIENTA;
+
+__MINGW_TYPEDEF_AW(WTSCLIENT)
+__MINGW_TYPEDEF_AW(PWTSCLIENT)
+
+typedef struct _WTSINFOW {
+  WTS_CONNECTSTATE_CLASS State;
+  DWORD                  SessionId;
+  DWORD                  IncomingBytes;
+  DWORD                  OutgoingBytes;
+  DWORD                  IncomingCompressedBytes;
+  DWORD                  OutgoingCompressedBytes;
+  WCHAR                  WinStationName;
+  WCHAR                  Domain;
+  WCHAR                  UserName;
+  LARGE_INTEGER          ConnectTime;
+  LARGE_INTEGER          DisconnectTime;
+  LARGE_INTEGER          LastInputTime;
+  LARGE_INTEGER          LogonTime;
+  LARGE_INTEGER          CurrentTime;
+} WTSINFOW, *PWTSINFOW;
+
+typedef struct _WTSINFOA {
+  WTS_CONNECTSTATE_CLASS State;
+  DWORD                  SessionId;
+  DWORD                  IncomingBytes;
+  DWORD                  OutgoingBytes;
+  DWORD                  IncomingCompressedBytes;
+  DWORD                  OutgoingCompressedBytes;
+  CHAR                  WinStationName;
+  CHAR                  Domain;
+  CHAR                  UserName;
+  LARGE_INTEGER          ConnectTime;
+  LARGE_INTEGER          DisconnectTime;
+  LARGE_INTEGER          LastInputTime;
+  LARGE_INTEGER          LogonTime;
+  LARGE_INTEGER          CurrentTime;
+} WTSINFOA, *PWTSINFOA;
+
+__MINGW_TYPEDEF_AW(WTSINFO)
+__MINGW_TYPEDEF_AW(PWTSINFO)
+
+WINBOOL WINAPI WTSConnectSessionA(
+  ULONG LogonId,
+  ULONG TargetLogonId,
+  PSTR   pPassword,
+  WINBOOL bWait
+);
+
+WINBOOL WINAPI WTSConnectSessionW(
+  ULONG LogonId,
+  ULONG TargetLogonId,
+  PWSTR  pPassword,
+  WINBOOL bWait
+);
+
+WINBOOL WTSRegisterSessionNotificationEx(
+  HANDLE hServer,
+  HWND hWnd,
+  DWORD dwFlags
+);
+
+WINBOOL WINAPI WTSStartRemoteControlSessionA(
+  LPSTR pTargetServerName,
+  ULONG TargetLogonId,
+  BYTE HotkeyVk,
+  USHORT HotkeyModifiers
+);
+
+WINBOOL WINAPI WTSStartRemoteControlSessionW(
+  LPWSTR pTargetServerName,
+  ULONG TargetLogonId,
+  BYTE HotkeyVk,
+  USHORT HotkeyModifiers
+);
+
+#define WTSStartRemoteControlSession __MINGW_NAME_AW(WTSStartRemoteControlSession)
+#define WTSConnectSession __MINGW_NAME_AW(WTSConnectSession)
+
+WINBOOL WINAPI WTSStopRemoteControlSession(
+  ULONG LogonId
+);
+
+WINBOOL WINAPI WTSUnRegisterSessionNotificationEx(
+  HANDLE hServer,
+  HWND hWnd
+);
+
+HANDLE WINAPI WTSVirtualChannelOpenEx(
+  DWORD SessionId,
+  LPSTR pVirtualName,
+  DWORD flags
+);
+
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-headers/include/wtypes.h b/mingw-w64-headers/include/wtypes.h
index 2805cbd..365d729 100644
--- a/mingw-w64-headers/include/wtypes.h
+++ b/mingw-w64-headers/include/wtypes.h
@@ -694,6 +694,13 @@
   extern RPC_IF_HANDLE __MIDL_itf_wtypes_0003_v0_0_c_ifspec;
   extern RPC_IF_HANDLE __MIDL_itf_wtypes_0003_v0_0_s_ifspec;
 
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _PROPERTYKEY {
+  GUID  fmtid;
+  DWORD pid;
+} PROPERTYKEY;
+#endif /*(_WIN32_WINNT >= 0x0600)*/
+
 #ifdef __cplusplus
 }
 #endif