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
