include/dinputd: Generate H from IDL
diff --git a/mingw-w64-headers/include/dinputd.h b/mingw-w64-headers/include/dinputd.h
new file mode 100644
index 0000000..91d4fa0
--- /dev/null
+++ b/mingw-w64-headers/include/dinputd.h
@@ -0,0 +1,1198 @@
+/*** Autogenerated by WIDL 5.0-rc1 from dinputd.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dinputd_h__
+#define __dinputd_h__
+
+/* Forward declarations */
+
+#ifndef __IDirectInputEffectDriver_FWD_DEFINED__
+#define __IDirectInputEffectDriver_FWD_DEFINED__
+typedef interface IDirectInputEffectDriver IDirectInputEffectDriver;
+#ifdef __cplusplus
+interface IDirectInputEffectDriver;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectInputJoyConfig_FWD_DEFINED__
+#define __IDirectInputJoyConfig_FWD_DEFINED__
+typedef interface IDirectInputJoyConfig IDirectInputJoyConfig;
+#ifdef __cplusplus
+interface IDirectInputJoyConfig;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDirectInputJoyConfig8_FWD_DEFINED__
+#define __IDirectInputJoyConfig8_FWD_DEFINED__
+typedef interface IDirectInputJoyConfig8 IDirectInputJoyConfig8;
+#ifdef __cplusplus
+interface IDirectInputJoyConfig8;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "winapifamily.h"
+#ifndef DIRECTINPUT_VERSION
+#define DIRECTINPUT_VERSION 0x0800
+#endif
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+typedef struct DIOBJECTATTRIBUTES {
+    DWORD dwFlags;
+    WORD wUsagePage;
+    WORD wUsage;
+} DIOBJECTATTRIBUTES;
+typedef struct DIOBJECTATTRIBUTES *LPDIOBJECTATTRIBUTES;
+typedef const DIOBJECTATTRIBUTES *LPCDIOBJECTATTRIBUTES;
+
+typedef struct DIFFOBJECTATTRIBUTES {
+    DWORD dwFFMaxForce;
+    DWORD dwFFForceResolution;
+} DIFFOBJECTATTRIBUTES;
+typedef struct DIFFOBJECTATTRIBUTES *LPDIFFOBJECTATTRIBUTES;
+typedef const DIFFOBJECTATTRIBUTES *LPCDIFFOBJECTATTRIBUTES;
+
+typedef struct DIOBJECTCALIBRATION {
+    LONG lMin;
+    LONG lCenter;
+    LONG lMax;
+} DIOBJECTCALIBRATION;
+typedef struct DIOBJECTCALIBRATION *LPDIOBJECTCALIBRATION;
+typedef const DIOBJECTCALIBRATION *LPCDIOBJECTCALIBRATION;
+
+typedef struct DIPOVCALIBRATION {
+    LONG lMin[5];
+    LONG lMax[5];
+} DIPOVCALIBRATION;
+typedef struct DIPOVCALIBRATION *LPDIPOVCALIBRATION;
+typedef const DIPOVCALIBRATION *LPCDIPOVCALIBRATION;
+
+typedef struct DIEFFECTATTRIBUTES {
+    DWORD dwEffectId;
+    DWORD dwEffType;
+    DWORD dwStaticParams;
+    DWORD dwDynamicParams;
+    DWORD dwCoords;
+} DIEFFECTATTRIBUTES;
+typedef struct DIEFFECTATTRIBUTES *LPDIEFFECTATTRIBUTES;
+typedef const DIEFFECTATTRIBUTES *LPCDIEFFECTATTRIBUTES;
+
+typedef struct DIFFDEVICEATTRIBUTES {
+    DWORD dwFlags;
+    DWORD dwFFSamplePeriod;
+    DWORD dwFFMinTimeResolution;
+} DIFFDEVICEATTRIBUTES;
+typedef struct DIFFDEVICEATTRIBUTES *LPDIFFDEVICEATTRIBUTES;
+typedef const DIFFDEVICEATTRIBUTES *LPCDIFFDEVICEATTRIBUTES;
+
+typedef struct DIDRIVERVERSIONS {
+    DWORD dwSize;
+    DWORD dwFirmwareRevision;
+    DWORD dwHardwareRevision;
+    DWORD dwFFDriverVersion;
+} DIDRIVERVERSIONS;
+typedef struct DIDRIVERVERSIONS *LPDIDRIVERVERSIONS;
+typedef const DIDRIVERVERSIONS *LPCDIDRIVERVERSIONS;
+
+typedef struct DIDEVICESTATE {
+    DWORD dwSize;
+    DWORD dwState;
+    DWORD dwLoad;
+} DIDEVICESTATE;
+typedef struct DIDEVICESTATE *LPDIDEVICESTATE;
+#define DEV_STS_EFFECT_RUNNING DIEGES_PLAYING
+#ifndef DIJ_RINGZERO
+
+typedef struct DIHIDFFINITINFO {
+    DWORD dwSize;
+    LPWSTR pwszDeviceInterface;
+    GUID GuidInstance;
+} DIHIDFFINITINFO;
+typedef struct DIHIDFFINITINFO *LPDIHIDFFINITINFO;
+#if 0
+typedef struct DIEFFESCAPE DIEFFESCAPE;
+typedef struct DIEFFESCAPE *LPDIEFFESCAPE;
+typedef struct DIEFFECT DIEFFECT;
+typedef struct DIEFFECT *LPDIEFFECT;
+typedef const DIEFFECT *LPCDIEFFECT;
+#endif
+
+/*****************************************************************************
+ * IDirectInputEffectDriver interface
+ */
+#ifndef __IDirectInputEffectDriver_INTERFACE_DEFINED__
+#define __IDirectInputEffectDriver_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectInputEffectDriver, 0x02538130, 0x898f, 0x11d0, 0x9a,0xd0, 0x00,0xa0,0xc9,0xa0,0x6e,0x35);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("02538130-898f-11d0-9ad0-00a0c9a06e35")
+IDirectInputEffectDriver : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE DeviceID(
+        DWORD a,
+        DWORD b,
+        DWORD c,
+        DWORD d,
+        LPVOID e) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVersions(
+        LPDIDRIVERVERSIONS a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Escape(
+        DWORD a,
+        DWORD b,
+        LPDIEFFESCAPE c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGain(
+        DWORD a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendForceFeedbackCommand(
+        DWORD a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetForceFeedbackState(
+        DWORD a,
+        LPDIDEVICESTATE b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DownloadEffect(
+        DWORD a,
+        DWORD b,
+        LPDWORD c,
+        LPCDIEFFECT d,
+        DWORD e) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DestroyEffect(
+        DWORD a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEffect(
+        DWORD a,
+        DWORD b,
+        DWORD c,
+        DWORD d) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StopEffect(
+        DWORD a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEffectStatus(
+        DWORD a,
+        DWORD b,
+        LPDWORD c) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectInputEffectDriver, 0x02538130, 0x898f, 0x11d0, 0x9a,0xd0, 0x00,0xa0,0xc9,0xa0,0x6e,0x35)
+#endif
+#else
+typedef struct IDirectInputEffectDriverVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectInputEffectDriver *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectInputEffectDriver *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectInputEffectDriver *This);
+
+    /*** IDirectInputEffectDriver methods ***/
+    HRESULT (STDMETHODCALLTYPE *DeviceID)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b,
+        DWORD c,
+        DWORD d,
+        LPVOID e);
+
+    HRESULT (STDMETHODCALLTYPE *GetVersions)(
+        IDirectInputEffectDriver *This,
+        LPDIDRIVERVERSIONS a);
+
+    HRESULT (STDMETHODCALLTYPE *Escape)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b,
+        LPDIEFFESCAPE c);
+
+    HRESULT (STDMETHODCALLTYPE *SetGain)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *SendForceFeedbackCommand)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *GetForceFeedbackState)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        LPDIDEVICESTATE b);
+
+    HRESULT (STDMETHODCALLTYPE *DownloadEffect)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b,
+        LPDWORD c,
+        LPCDIEFFECT d,
+        DWORD e);
+
+    HRESULT (STDMETHODCALLTYPE *DestroyEffect)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *StartEffect)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b,
+        DWORD c,
+        DWORD d);
+
+    HRESULT (STDMETHODCALLTYPE *StopEffect)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectStatus)(
+        IDirectInputEffectDriver *This,
+        DWORD a,
+        DWORD b,
+        LPDWORD c);
+
+    END_INTERFACE
+} IDirectInputEffectDriverVtbl;
+
+interface IDirectInputEffectDriver {
+    CONST_VTBL IDirectInputEffectDriverVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectInputEffectDriver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectInputEffectDriver_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectInputEffectDriver_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectInputEffectDriver methods ***/
+#define IDirectInputEffectDriver_DeviceID(This,a,b,c,d,e) (This)->lpVtbl->DeviceID(This,a,b,c,d,e)
+#define IDirectInputEffectDriver_GetVersions(This,a) (This)->lpVtbl->GetVersions(This,a)
+#define IDirectInputEffectDriver_Escape(This,a,b,c) (This)->lpVtbl->Escape(This,a,b,c)
+#define IDirectInputEffectDriver_SetGain(This,a,b) (This)->lpVtbl->SetGain(This,a,b)
+#define IDirectInputEffectDriver_SendForceFeedbackCommand(This,a,b) (This)->lpVtbl->SendForceFeedbackCommand(This,a,b)
+#define IDirectInputEffectDriver_GetForceFeedbackState(This,a,b) (This)->lpVtbl->GetForceFeedbackState(This,a,b)
+#define IDirectInputEffectDriver_DownloadEffect(This,a,b,c,d,e) (This)->lpVtbl->DownloadEffect(This,a,b,c,d,e)
+#define IDirectInputEffectDriver_DestroyEffect(This,a,b) (This)->lpVtbl->DestroyEffect(This,a,b)
+#define IDirectInputEffectDriver_StartEffect(This,a,b,c,d) (This)->lpVtbl->StartEffect(This,a,b,c,d)
+#define IDirectInputEffectDriver_StopEffect(This,a,b) (This)->lpVtbl->StopEffect(This,a,b)
+#define IDirectInputEffectDriver_GetEffectStatus(This,a,b,c) (This)->lpVtbl->GetEffectStatus(This,a,b,c)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectInputEffectDriver_QueryInterface(IDirectInputEffectDriver* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectInputEffectDriver_AddRef(IDirectInputEffectDriver* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectInputEffectDriver_Release(IDirectInputEffectDriver* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectInputEffectDriver methods ***/
+static FORCEINLINE HRESULT IDirectInputEffectDriver_DeviceID(IDirectInputEffectDriver* This,DWORD a,DWORD b,DWORD c,DWORD d,LPVOID e) {
+    return This->lpVtbl->DeviceID(This,a,b,c,d,e);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_GetVersions(IDirectInputEffectDriver* This,LPDIDRIVERVERSIONS a) {
+    return This->lpVtbl->GetVersions(This,a);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_Escape(IDirectInputEffectDriver* This,DWORD a,DWORD b,LPDIEFFESCAPE c) {
+    return This->lpVtbl->Escape(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_SetGain(IDirectInputEffectDriver* This,DWORD a,DWORD b) {
+    return This->lpVtbl->SetGain(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_SendForceFeedbackCommand(IDirectInputEffectDriver* This,DWORD a,DWORD b) {
+    return This->lpVtbl->SendForceFeedbackCommand(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_GetForceFeedbackState(IDirectInputEffectDriver* This,DWORD a,LPDIDEVICESTATE b) {
+    return This->lpVtbl->GetForceFeedbackState(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_DownloadEffect(IDirectInputEffectDriver* This,DWORD a,DWORD b,LPDWORD c,LPCDIEFFECT d,DWORD e) {
+    return This->lpVtbl->DownloadEffect(This,a,b,c,d,e);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_DestroyEffect(IDirectInputEffectDriver* This,DWORD a,DWORD b) {
+    return This->lpVtbl->DestroyEffect(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_StartEffect(IDirectInputEffectDriver* This,DWORD a,DWORD b,DWORD c,DWORD d) {
+    return This->lpVtbl->StartEffect(This,a,b,c,d);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_StopEffect(IDirectInputEffectDriver* This,DWORD a,DWORD b) {
+    return This->lpVtbl->StopEffect(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputEffectDriver_GetEffectStatus(IDirectInputEffectDriver* This,DWORD a,DWORD b,LPDWORD c) {
+    return This->lpVtbl->GetEffectStatus(This,a,b,c);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectInputEffectDriver_INTERFACE_DEFINED__ */
+
+#endif /* DIJ_RINGZERO */
+#ifndef JOY_HW_NONE
+#define JOY_HW_NONE 0
+#define JOY_HW_CUSTOM 1
+#define JOY_HW_2A_2B_GENERIC 2
+#define JOY_HW_2A_4B_GENERIC 3
+#define JOY_HW_2B_GAMEPAD 4
+#define JOY_HW_2B_FLIGHTYOKE 5
+#define JOY_HW_2B_FLIGHTYOKETHROTTLE 6
+#define JOY_HW_3A_2B_GENERIC 7
+#define JOY_HW_3A_4B_GENERIC 8
+#define JOY_HW_4B_GAMEPAD 9
+#define JOY_HW_4B_FLIGHTYOKE 10
+#define JOY_HW_4B_FLIGHTYOKETHROTTLE 11
+#define JOY_HW_TWO_2A_2B_WITH_Y 12
+#define JOY_HW_LASTENTRY 13
+#define JOY_ISCAL_XY 0x00000001
+#define JOY_ISCAL_Z 0x00000002
+#define JOY_ISCAL_R 0x00000004
+#define JOY_ISCAL_U 0x00000008
+#define JOY_ISCAL_V 0x00000010
+#define JOY_ISCAL_POV 0x00000020
+#define JOY_POVVAL_FORWARD (0)
+
+#define JOY_POVVAL_BACKWARD (1)
+
+#define JOY_POVVAL_LEFT (2)
+
+#define JOY_POVVAL_RIGHT (3)
+
+#define JOY_POV_NUMDIRS (4)
+
+#define JOY_HWS_HASZ 0x00000001
+#define JOY_HWS_HASPOV 0x00000002
+#define JOY_HWS_POVISBUTTONCOMBOS 0x00000004
+#define JOY_HWS_POVISPOLL 0x00000008
+#define JOY_HWS_ISYOKE 0x00000010
+#define JOY_HWS_ISGAMEPAD 0x00000020
+#define JOY_HWS_ISCARCTRL 0x00000040
+#define JOY_HWS_XISJ1Y 0x00000080
+#define JOY_HWS_XISJ2X 0x00000100
+#define JOY_HWS_XISJ2Y 0x00000200
+#define JOY_HWS_YISJ1X 0x00000400
+#define JOY_HWS_YISJ2X 0x00000800
+#define JOY_HWS_YISJ2Y 0x00001000
+#define JOY_HWS_ZISJ1X 0x00002000
+#define JOY_HWS_ZISJ1Y 0x00004000
+#define JOY_HWS_ZISJ2X 0x00008000
+#define JOY_HWS_POVISJ1X 0x00010000
+#define JOY_HWS_POVISJ1Y 0x00020000
+#define JOY_HWS_POVISJ2X 0x00040000
+#define JOY_HWS_HASR 0x00080000
+#define JOY_HWS_RISJ1X 0x00100000
+#define JOY_HWS_RISJ1Y 0x00200000
+#define JOY_HWS_RISJ2Y 0x00400000
+#define JOY_HWS_HASU 0x00800000
+#define JOY_HWS_HASV 0x01000000
+#define JOY_US_HASRUDDER 0x00000001
+#define JOY_US_PRESENT 0x00000002
+#define JOY_US_ISOEM 0x00000004
+#define JOY_US_RESERVED 0x80000000
+#define JOYTYPE_ZEROGAMEENUMOEMDATA 0x00000001
+#define JOYTYPE_NOAUTODETECTGAMEPORT 0x00000002
+#define JOYTYPE_NOHIDDIRECT 0x00000004
+#define JOYTYPE_ANALOGCOMPAT 0x00000008
+#define JOYTYPE_DEFAULTPROPSHEET 0x80000000
+#define JOYTYPE_DEVICEHIDE 0x00010000
+#define JOYTYPE_MOUSEHIDE 0x00020000
+#define JOYTYPE_KEYBHIDE 0x00040000
+#define JOYTYPE_GAMEHIDE 0x00080000
+#define JOYTYPE_HIDEACTIVE 0x00100000
+#define JOYTYPE_INFOMASK 0x00E00000
+#define JOYTYPE_INFODEFAULT 0x00000000
+#define JOYTYPE_INFOYYPEDALS 0x00200000
+#define JOYTYPE_INFOZYPEDALS 0x00400000
+#define JOYTYPE_INFOYRPEDALS 0x00600000
+#define JOYTYPE_INFOZRPEDALS 0x00800000
+#define JOYTYPE_INFOZISSLIDER 0x00200000
+#define JOYTYPE_INFOZISZ 0x00400000
+#define JOYTYPE_ENABLEINPUTREPORT 0x01000000
+
+typedef struct joypos_tag {
+    DWORD dwX;
+    DWORD dwY;
+    DWORD dwZ;
+    DWORD dwR;
+    DWORD dwU;
+    DWORD dwV;
+} JOYPOS;
+typedef struct joypos_tag *LPJOYPOS;
+
+typedef struct joyrange_tag {
+    JOYPOS jpMin;
+    JOYPOS jpMax;
+    JOYPOS jpCenter;
+} JOYRANGE;
+typedef struct joyrange_tag *LPJOYRANGE;
+
+typedef struct joyreguservalues_tag {
+    DWORD dwTimeOut;
+    JOYRANGE jrvRanges;
+    JOYPOS jpDeadZone;
+} JOYREGUSERVALUES;
+typedef struct joyreguservalues_tag *LPJOYREGUSERVALUES;
+
+typedef struct joyreghwsettings_tag {
+    DWORD dwFlags;
+    DWORD dwNumButtons;
+} JOYREGHWSETTINGS;
+typedef struct joyreghwsettings_tag *LPJOYHWSETTINGS;
+
+typedef struct joyreghwvalues_tag {
+    JOYRANGE jrvHardware;
+    DWORD dwPOVValues[4];
+    DWORD dwCalFlags;
+} JOYREGHWVALUES;
+typedef struct joyreghwvalues_tag *LPJOYREGHWVALUES;
+
+typedef struct joyreghwconfig_tag {
+    JOYREGHWSETTINGS hws;
+    DWORD dwUsageSettings;
+    JOYREGHWVALUES hwv;
+    DWORD dwType;
+    DWORD dwReserved;
+} JOYREGHWCONFIG;
+typedef struct joyreghwconfig_tag *LPJOYREGHWCONFIG;
+
+typedef struct joycalibrate_tag {
+    UINT wXbase;
+    UINT wXdelta;
+    UINT wYbase;
+    UINT wYdelta;
+    UINT wZbase;
+    UINT wZdelta;
+} JOYCALIBRATE;
+typedef struct joycalibrate_tag *LPJOYCALIBRATE;
+#endif /* JOY_HW_NONE */
+#ifndef DIJ_RINGZERO
+#define MAX_JOYSTRING (256)
+
+typedef WINBOOL (WINAPI *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID);
+#if 0
+#define MAX_JOYSTICKOEMVXDNAME (260)
+
+#endif
+#ifndef MAX_JOYSTICKOEMVXDNAME
+#define MAX_JOYSTICKOEMVXDNAME 260
+#endif
+#define DITC_REGHWSETTINGS 0x00000001
+#define DITC_CLSIDCONFIG 0x00000002
+#define DITC_DISPLAYNAME 0x00000004
+#define DITC_CALLOUT 0x00000008
+#define DITC_HARDWAREID 0x00000010
+#define DITC_FLAGS1 0x00000020
+#define DITC_FLAGS2 0x00000040
+#define DITC_MAPFILE 0x00000080
+
+typedef struct DIJOYTYPEINFO_DX5 {
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[256];
+    WCHAR wszCallout[260];
+} DIJOYTYPEINFO_DX5;
+typedef struct DIJOYTYPEINFO_DX5 *LPDIJOYTYPEINFO_DX5;
+typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5;
+
+typedef struct DIJOYTYPEINFO_DX6 {
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[256];
+    WCHAR wszCallout[260];
+    WCHAR wszHardwareId[256];
+    DWORD dwFlags1;
+} DIJOYTYPEINFO_DX6;
+typedef struct DIJOYTYPEINFO_DX6 *LPDIJOYTYPEINFO_DX6;
+typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6;
+
+typedef struct DIJOYTYPEINFO {
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[256];
+    WCHAR wszCallout[260];
+    WCHAR wszHardwareId[256];
+    DWORD dwFlags1;
+    DWORD dwFlags2;
+    WCHAR wszMapFile[256];
+} DIJOYTYPEINFO;
+typedef struct DIJOYTYPEINFO *LPDIJOYTYPEINFO;
+typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO;
+#define DIJC_GUIDINSTANCE 0x00000001
+#define DIJC_REGHWCONFIGTYPE 0x00000002
+#define DIJC_GAIN 0x00000004
+#define DIJC_CALLOUT 0x00000008
+#define DIJC_WDMGAMEPORT 0x00000010
+
+typedef struct DIJOYCONFIG_DX5 {
+    DWORD dwSize;
+    GUID guidInstance;
+    JOYREGHWCONFIG hwc;
+    DWORD dwGain;
+    WCHAR wszType[256];
+    WCHAR wszCallout[256];
+} DIJOYCONFIG_DX5;
+typedef struct DIJOYCONFIG_DX5 *LPDIJOYCONFIG_DX5;
+typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5;
+
+typedef struct DIJOYCONFIG {
+    DWORD dwSize;
+    GUID guidInstance;
+    JOYREGHWCONFIG hwc;
+    DWORD dwGain;
+    WCHAR wszType[256];
+    WCHAR wszCallout[256];
+    GUID guidGameport;
+} DIJOYCONFIG;
+typedef struct DIJOYCONFIG *LPDIJOYCONFIG;
+typedef const DIJOYCONFIG *LPCDIJOYCONFIG;
+#define DIJU_USERVALUES 0x00000001
+#define DIJU_GLOBALDRIVER 0x00000002
+#define DIJU_GAMEPORTEMULATOR 0x00000004
+
+typedef struct DIJOYUSERVALUES {
+    DWORD dwSize;
+    JOYREGUSERVALUES ruv;
+    WCHAR wszGlobalDriver[256];
+    WCHAR wszGameportEmulator[256];
+} DIJOYUSERVALUES;
+typedef struct DIJOYUSERVALUES *LPDIJOYUSERVALUES;
+typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES;
+DEFINE_GUID(GUID_KeyboardClass, 0x4d36e96b,0xe325,0x11ce,0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18);
+DEFINE_GUID(GUID_MediaClass, 0x4d36e96c,0xe325,0x11ce,0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18);
+DEFINE_GUID(GUID_MouseClass, 0x4d36e96f,0xe325,0x11ce,0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18);
+DEFINE_GUID(GUID_HIDClass, 0x745a17a0,0x74d3,0x11d0,0xb6,0xfe,0x00,0xa0,0xc9,0x0f,0x57,0xda);
+
+/*****************************************************************************
+ * IDirectInputJoyConfig interface
+ */
+#ifndef __IDirectInputJoyConfig_INTERFACE_DEFINED__
+#define __IDirectInputJoyConfig_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectInputJoyConfig, 0x1de12ab1, 0xc9f5, 0x11cf, 0xbf,0xc7, 0x44,0x45,0x53,0x54,0x00,0x00);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1de12ab1-c9f5-11cf-bfc7-444553540000")
+IDirectInputJoyConfig : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Acquire(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unacquire(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCooperativeLevel(
+        HWND a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendNotify(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumTypes(
+        LPVOID a,
+        LPVOID b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+        LPCWSTR a,
+        LPDIJOYTYPEINFO b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypeInfo(
+        LPCWSTR a,
+        LPCDIJOYTYPEINFO b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteType(
+        LPCWSTR a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetConfig(
+        UINT a,
+        LPDIJOYCONFIG b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetConfig(
+        UINT a,
+        LPCDIJOYCONFIG b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteConfig(
+        UINT a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserValues(
+        LPDIJOYUSERVALUES a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUserValues(
+        LPCDIJOYUSERVALUES a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddNewHardware(
+        HWND a,
+        REFGUID b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenTypeKey(
+        LPCWSTR a,
+        DWORD b,
+        HKEY *c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenConfigKey(
+        UINT a,
+        DWORD b,
+        HKEY *c) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectInputJoyConfig, 0x1de12ab1, 0xc9f5, 0x11cf, 0xbf,0xc7, 0x44,0x45,0x53,0x54,0x00,0x00)
+#endif
+#else
+typedef struct IDirectInputJoyConfigVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectInputJoyConfig *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectInputJoyConfig *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectInputJoyConfig *This);
+
+    /*** IDirectInputJoyConfig methods ***/
+    HRESULT (STDMETHODCALLTYPE *Acquire)(
+        IDirectInputJoyConfig *This);
+
+    HRESULT (STDMETHODCALLTYPE *Unacquire)(
+        IDirectInputJoyConfig *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetCooperativeLevel)(
+        IDirectInputJoyConfig *This,
+        HWND a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *SendNotify)(
+        IDirectInputJoyConfig *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnumTypes)(
+        IDirectInputJoyConfig *This,
+        LPVOID a,
+        LPVOID b);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDirectInputJoyConfig *This,
+        LPCWSTR a,
+        LPDIJOYTYPEINFO b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeInfo)(
+        IDirectInputJoyConfig *This,
+        LPCWSTR a,
+        LPCDIJOYTYPEINFO b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteType)(
+        IDirectInputJoyConfig *This,
+        LPCWSTR a);
+
+    HRESULT (STDMETHODCALLTYPE *GetConfig)(
+        IDirectInputJoyConfig *This,
+        UINT a,
+        LPDIJOYCONFIG b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *SetConfig)(
+        IDirectInputJoyConfig *This,
+        UINT a,
+        LPCDIJOYCONFIG b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteConfig)(
+        IDirectInputJoyConfig *This,
+        UINT a);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserValues)(
+        IDirectInputJoyConfig *This,
+        LPDIJOYUSERVALUES a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *SetUserValues)(
+        IDirectInputJoyConfig *This,
+        LPCDIJOYUSERVALUES a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *AddNewHardware)(
+        IDirectInputJoyConfig *This,
+        HWND a,
+        REFGUID b);
+
+    HRESULT (STDMETHODCALLTYPE *OpenTypeKey)(
+        IDirectInputJoyConfig *This,
+        LPCWSTR a,
+        DWORD b,
+        HKEY *c);
+
+    HRESULT (STDMETHODCALLTYPE *OpenConfigKey)(
+        IDirectInputJoyConfig *This,
+        UINT a,
+        DWORD b,
+        HKEY *c);
+
+    END_INTERFACE
+} IDirectInputJoyConfigVtbl;
+
+interface IDirectInputJoyConfig {
+    CONST_VTBL IDirectInputJoyConfigVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectInputJoyConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectInputJoyConfig_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectInputJoyConfig methods ***/
+#define IDirectInputJoyConfig_Acquire(This) (This)->lpVtbl->Acquire(This)
+#define IDirectInputJoyConfig_Unacquire(This) (This)->lpVtbl->Unacquire(This)
+#define IDirectInputJoyConfig_SetCooperativeLevel(This,a,b) (This)->lpVtbl->SetCooperativeLevel(This,a,b)
+#define IDirectInputJoyConfig_SendNotify(This) (This)->lpVtbl->SendNotify(This)
+#define IDirectInputJoyConfig_EnumTypes(This,a,b) (This)->lpVtbl->EnumTypes(This,a,b)
+#define IDirectInputJoyConfig_GetTypeInfo(This,a,b,c) (This)->lpVtbl->GetTypeInfo(This,a,b,c)
+#define IDirectInputJoyConfig_SetTypeInfo(This,a,b,c) (This)->lpVtbl->SetTypeInfo(This,a,b,c)
+#define IDirectInputJoyConfig_DeleteType(This,a) (This)->lpVtbl->DeleteType(This,a)
+#define IDirectInputJoyConfig_GetConfig(This,a,b,c) (This)->lpVtbl->GetConfig(This,a,b,c)
+#define IDirectInputJoyConfig_SetConfig(This,a,b,c) (This)->lpVtbl->SetConfig(This,a,b,c)
+#define IDirectInputJoyConfig_DeleteConfig(This,a) (This)->lpVtbl->DeleteConfig(This,a)
+#define IDirectInputJoyConfig_GetUserValues(This,a,b) (This)->lpVtbl->GetUserValues(This,a,b)
+#define IDirectInputJoyConfig_SetUserValues(This,a,b) (This)->lpVtbl->SetUserValues(This,a,b)
+#define IDirectInputJoyConfig_AddNewHardware(This,a,b) (This)->lpVtbl->AddNewHardware(This,a,b)
+#define IDirectInputJoyConfig_OpenTypeKey(This,a,b,c) (This)->lpVtbl->OpenTypeKey(This,a,b,c)
+#define IDirectInputJoyConfig_OpenConfigKey(This,a,b,c) (This)->lpVtbl->OpenConfigKey(This,a,b,c)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectInputJoyConfig_QueryInterface(IDirectInputJoyConfig* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectInputJoyConfig_AddRef(IDirectInputJoyConfig* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectInputJoyConfig_Release(IDirectInputJoyConfig* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectInputJoyConfig methods ***/
+static FORCEINLINE HRESULT IDirectInputJoyConfig_Acquire(IDirectInputJoyConfig* This) {
+    return This->lpVtbl->Acquire(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_Unacquire(IDirectInputJoyConfig* This) {
+    return This->lpVtbl->Unacquire(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_SetCooperativeLevel(IDirectInputJoyConfig* This,HWND a,DWORD b) {
+    return This->lpVtbl->SetCooperativeLevel(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_SendNotify(IDirectInputJoyConfig* This) {
+    return This->lpVtbl->SendNotify(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_EnumTypes(IDirectInputJoyConfig* This,LPVOID a,LPVOID b) {
+    return This->lpVtbl->EnumTypes(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_GetTypeInfo(IDirectInputJoyConfig* This,LPCWSTR a,LPDIJOYTYPEINFO b,DWORD c) {
+    return This->lpVtbl->GetTypeInfo(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_SetTypeInfo(IDirectInputJoyConfig* This,LPCWSTR a,LPCDIJOYTYPEINFO b,DWORD c) {
+    return This->lpVtbl->SetTypeInfo(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_DeleteType(IDirectInputJoyConfig* This,LPCWSTR a) {
+    return This->lpVtbl->DeleteType(This,a);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_GetConfig(IDirectInputJoyConfig* This,UINT a,LPDIJOYCONFIG b,DWORD c) {
+    return This->lpVtbl->GetConfig(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_SetConfig(IDirectInputJoyConfig* This,UINT a,LPCDIJOYCONFIG b,DWORD c) {
+    return This->lpVtbl->SetConfig(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_DeleteConfig(IDirectInputJoyConfig* This,UINT a) {
+    return This->lpVtbl->DeleteConfig(This,a);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_GetUserValues(IDirectInputJoyConfig* This,LPDIJOYUSERVALUES a,DWORD b) {
+    return This->lpVtbl->GetUserValues(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_SetUserValues(IDirectInputJoyConfig* This,LPCDIJOYUSERVALUES a,DWORD b) {
+    return This->lpVtbl->SetUserValues(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_AddNewHardware(IDirectInputJoyConfig* This,HWND a,REFGUID b) {
+    return This->lpVtbl->AddNewHardware(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_OpenTypeKey(IDirectInputJoyConfig* This,LPCWSTR a,DWORD b,HKEY *c) {
+    return This->lpVtbl->OpenTypeKey(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig_OpenConfigKey(IDirectInputJoyConfig* This,UINT a,DWORD b,HKEY *c) {
+    return This->lpVtbl->OpenConfigKey(This,a,b,c);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectInputJoyConfig_INTERFACE_DEFINED__ */
+
+
+/*****************************************************************************
+ * IDirectInputJoyConfig8 interface
+ */
+#ifndef __IDirectInputJoyConfig8_INTERFACE_DEFINED__
+#define __IDirectInputJoyConfig8_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xeb0d7dfa, 0x1990, 0x4f27, 0xb4,0xd6, 0xed,0xf2,0xee,0xc4,0xa4,0x4c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("eb0d7dfa-1990-4f27-b4d6-edf2eec4a44c")
+IDirectInputJoyConfig8 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Acquire(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unacquire(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCooperativeLevel(
+        HWND a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendNotify(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumTypes(
+        LPVOID a,
+        LPVOID b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+        LPCWSTR a,
+        LPDIJOYTYPEINFO b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypeInfo(
+        LPCWSTR a,
+        LPCDIJOYTYPEINFO b,
+        DWORD c,
+        LPWSTR d) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteType(
+        LPCWSTR a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetConfig(
+        UINT a,
+        LPDIJOYCONFIG b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetConfig(
+        UINT a,
+        LPCDIJOYCONFIG b,
+        DWORD c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteConfig(
+        UINT a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserValues(
+        LPDIJOYUSERVALUES a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUserValues(
+        LPCDIJOYUSERVALUES a,
+        DWORD b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddNewHardware(
+        HWND a,
+        REFGUID b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenTypeKey(
+        LPCWSTR a,
+        DWORD b,
+        HKEY *c) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenAppStatusKey(
+        HKEY *a) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectInputJoyConfig8, 0xeb0d7dfa, 0x1990, 0x4f27, 0xb4,0xd6, 0xed,0xf2,0xee,0xc4,0xa4,0x4c)
+#endif
+#else
+typedef struct IDirectInputJoyConfig8Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectInputJoyConfig8 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectInputJoyConfig8 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectInputJoyConfig8 *This);
+
+    /*** IDirectInputJoyConfig8 methods ***/
+    HRESULT (STDMETHODCALLTYPE *Acquire)(
+        IDirectInputJoyConfig8 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Unacquire)(
+        IDirectInputJoyConfig8 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetCooperativeLevel)(
+        IDirectInputJoyConfig8 *This,
+        HWND a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *SendNotify)(
+        IDirectInputJoyConfig8 *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnumTypes)(
+        IDirectInputJoyConfig8 *This,
+        LPVOID a,
+        LPVOID b);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDirectInputJoyConfig8 *This,
+        LPCWSTR a,
+        LPDIJOYTYPEINFO b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeInfo)(
+        IDirectInputJoyConfig8 *This,
+        LPCWSTR a,
+        LPCDIJOYTYPEINFO b,
+        DWORD c,
+        LPWSTR d);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteType)(
+        IDirectInputJoyConfig8 *This,
+        LPCWSTR a);
+
+    HRESULT (STDMETHODCALLTYPE *GetConfig)(
+        IDirectInputJoyConfig8 *This,
+        UINT a,
+        LPDIJOYCONFIG b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *SetConfig)(
+        IDirectInputJoyConfig8 *This,
+        UINT a,
+        LPCDIJOYCONFIG b,
+        DWORD c);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteConfig)(
+        IDirectInputJoyConfig8 *This,
+        UINT a);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserValues)(
+        IDirectInputJoyConfig8 *This,
+        LPDIJOYUSERVALUES a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *SetUserValues)(
+        IDirectInputJoyConfig8 *This,
+        LPCDIJOYUSERVALUES a,
+        DWORD b);
+
+    HRESULT (STDMETHODCALLTYPE *AddNewHardware)(
+        IDirectInputJoyConfig8 *This,
+        HWND a,
+        REFGUID b);
+
+    HRESULT (STDMETHODCALLTYPE *OpenTypeKey)(
+        IDirectInputJoyConfig8 *This,
+        LPCWSTR a,
+        DWORD b,
+        HKEY *c);
+
+    HRESULT (STDMETHODCALLTYPE *OpenAppStatusKey)(
+        IDirectInputJoyConfig8 *This,
+        HKEY *a);
+
+    END_INTERFACE
+} IDirectInputJoyConfig8Vtbl;
+
+interface IDirectInputJoyConfig8 {
+    CONST_VTBL IDirectInputJoyConfig8Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig8_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectInputJoyConfig8_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectInputJoyConfig8_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectInputJoyConfig8 methods ***/
+#define IDirectInputJoyConfig8_Acquire(This) (This)->lpVtbl->Acquire(This)
+#define IDirectInputJoyConfig8_Unacquire(This) (This)->lpVtbl->Unacquire(This)
+#define IDirectInputJoyConfig8_SetCooperativeLevel(This,a,b) (This)->lpVtbl->SetCooperativeLevel(This,a,b)
+#define IDirectInputJoyConfig8_SendNotify(This) (This)->lpVtbl->SendNotify(This)
+#define IDirectInputJoyConfig8_EnumTypes(This,a,b) (This)->lpVtbl->EnumTypes(This,a,b)
+#define IDirectInputJoyConfig8_GetTypeInfo(This,a,b,c) (This)->lpVtbl->GetTypeInfo(This,a,b,c)
+#define IDirectInputJoyConfig8_SetTypeInfo(This,a,b,c,d) (This)->lpVtbl->SetTypeInfo(This,a,b,c,d)
+#define IDirectInputJoyConfig8_DeleteType(This,a) (This)->lpVtbl->DeleteType(This,a)
+#define IDirectInputJoyConfig8_GetConfig(This,a,b,c) (This)->lpVtbl->GetConfig(This,a,b,c)
+#define IDirectInputJoyConfig8_SetConfig(This,a,b,c) (This)->lpVtbl->SetConfig(This,a,b,c)
+#define IDirectInputJoyConfig8_DeleteConfig(This,a) (This)->lpVtbl->DeleteConfig(This,a)
+#define IDirectInputJoyConfig8_GetUserValues(This,a,b) (This)->lpVtbl->GetUserValues(This,a,b)
+#define IDirectInputJoyConfig8_SetUserValues(This,a,b) (This)->lpVtbl->SetUserValues(This,a,b)
+#define IDirectInputJoyConfig8_AddNewHardware(This,a,b) (This)->lpVtbl->AddNewHardware(This,a,b)
+#define IDirectInputJoyConfig8_OpenTypeKey(This,a,b,c) (This)->lpVtbl->OpenTypeKey(This,a,b,c)
+#define IDirectInputJoyConfig8_OpenAppStatusKey(This,a) (This)->lpVtbl->OpenAppStatusKey(This,a)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_QueryInterface(IDirectInputJoyConfig8* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectInputJoyConfig8_AddRef(IDirectInputJoyConfig8* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectInputJoyConfig8_Release(IDirectInputJoyConfig8* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectInputJoyConfig8 methods ***/
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_Acquire(IDirectInputJoyConfig8* This) {
+    return This->lpVtbl->Acquire(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_Unacquire(IDirectInputJoyConfig8* This) {
+    return This->lpVtbl->Unacquire(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_SetCooperativeLevel(IDirectInputJoyConfig8* This,HWND a,DWORD b) {
+    return This->lpVtbl->SetCooperativeLevel(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_SendNotify(IDirectInputJoyConfig8* This) {
+    return This->lpVtbl->SendNotify(This);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_EnumTypes(IDirectInputJoyConfig8* This,LPVOID a,LPVOID b) {
+    return This->lpVtbl->EnumTypes(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_GetTypeInfo(IDirectInputJoyConfig8* This,LPCWSTR a,LPDIJOYTYPEINFO b,DWORD c) {
+    return This->lpVtbl->GetTypeInfo(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_SetTypeInfo(IDirectInputJoyConfig8* This,LPCWSTR a,LPCDIJOYTYPEINFO b,DWORD c,LPWSTR d) {
+    return This->lpVtbl->SetTypeInfo(This,a,b,c,d);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_DeleteType(IDirectInputJoyConfig8* This,LPCWSTR a) {
+    return This->lpVtbl->DeleteType(This,a);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_GetConfig(IDirectInputJoyConfig8* This,UINT a,LPDIJOYCONFIG b,DWORD c) {
+    return This->lpVtbl->GetConfig(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_SetConfig(IDirectInputJoyConfig8* This,UINT a,LPCDIJOYCONFIG b,DWORD c) {
+    return This->lpVtbl->SetConfig(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_DeleteConfig(IDirectInputJoyConfig8* This,UINT a) {
+    return This->lpVtbl->DeleteConfig(This,a);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_GetUserValues(IDirectInputJoyConfig8* This,LPDIJOYUSERVALUES a,DWORD b) {
+    return This->lpVtbl->GetUserValues(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_SetUserValues(IDirectInputJoyConfig8* This,LPCDIJOYUSERVALUES a,DWORD b) {
+    return This->lpVtbl->SetUserValues(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_AddNewHardware(IDirectInputJoyConfig8* This,HWND a,REFGUID b) {
+    return This->lpVtbl->AddNewHardware(This,a,b);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_OpenTypeKey(IDirectInputJoyConfig8* This,LPCWSTR a,DWORD b,HKEY *c) {
+    return This->lpVtbl->OpenTypeKey(This,a,b,c);
+}
+static FORCEINLINE HRESULT IDirectInputJoyConfig8_OpenAppStatusKey(IDirectInputJoyConfig8* This,HKEY *a) {
+    return This->lpVtbl->OpenAppStatusKey(This,a);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDirectInputJoyConfig8_INTERFACE_DEFINED__ */
+
+#endif /* DIJ_RINGZERO */
+#define DIRECTINPUT_NOTIFICATION_MSGSTRINGA "DIRECTINPUT_NOTIFICATION_MSGSTRING"
+#define DIRECTINPUT_NOTIFICATION_MSGSTRINGW L"DIRECTINPUT_NOTIFICATION_MSGSTRING"
+#define DIRECTINPUT_NOTIFICATION_MSGSTRING __MINGW_NAME_AW(DIRECTINPUT_NOTIFICATION_MSGSTRING)
+#define DIMSGWP_NEWAPPSTART 0x00000001
+#define DIMSGWP_DX8APPSTART 0x00000002
+#define DIMSGWP_DX8MAPPERAPPSTART 0x00000003
+#define DIAPPIDFLAG_NOTIME 0x00000001
+#define DIAPPIDFLAG_NOSIZE 0x00000002
+#define DIRECTINPUT_REGSTR_VAL_APPIDFLAGA "AppIdFlag"
+#define DIRECTINPUT_REGSTR_KEY_LASTAPPA "MostRecentApplication"
+#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPPA "MostRecentMapperApplication"
+#define DIRECTINPUT_REGSTR_VAL_VERSIONA "Version"
+#define DIRECTINPUT_REGSTR_VAL_NAMEA "Name"
+#define DIRECTINPUT_REGSTR_VAL_IDA "Id"
+#define DIRECTINPUT_REGSTR_VAL_MAPPERA "UsesMapper"
+#define DIRECTINPUT_REGSTR_VAL_LASTSTARTA "MostRecentStart"
+#define DIRECTINPUT_REGSTR_VAL_APPIDFLAGW L"AppIdFlag"
+#define DIRECTINPUT_REGSTR_KEY_LASTAPPW L"MostRecentApplication"
+#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPPW L"MostRecentMapperApplication"
+#define DIRECTINPUT_REGSTR_VAL_VERSIONW L"Version"
+#define DIRECTINPUT_REGSTR_VAL_NAMEW L"Name"
+#define DIRECTINPUT_REGSTR_VAL_IDW L"Id"
+#define DIRECTINPUT_REGSTR_VAL_MAPPERW L"UsesMapper"
+#define DIRECTINPUT_REGSTR_VAL_LASTSTARTW L"MostRecentStart"
+#define DIRECTINPUT_REGSTR_VAL_APPIDFLAG __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_APPIDFLAG)
+#define DIRECTINPUT_REGSTR_KEY_LASTAPP __MINGW_NAME_AW(DIRECTINPUT_REGSTR_KEY_LASTAPP)
+#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPP __MINGW_NAME_AW(DIRECTINPUT_REGSTR_KEY_LASTMAPAPP)
+#define DIRECTINPUT_REGSTR_VAL_VERSION __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_VERSION)
+#define DIRECTINPUT_REGSTR_VAL_NAME __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_NAME)
+#define DIRECTINPUT_REGSTR_VAL_ID __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_ID)
+#define DIRECTINPUT_REGSTR_VAL_MAPPER __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_MAPPER)
+#define DIRECTINPUT_REGSTR_VAL_LASTSTART __MINGW_NAME_AW(DIRECTINPUT_REGSTR_VAL_LASTSTART)
+#define DIERR_NOMOREITEMS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS)
+#define DIERR_DRIVERFIRST __MSABI_LONG(0x80040300)
+#define DIERR_DRIVERLAST __MSABI_LONG(0x800403FF)
+#define DIERR_INVALIDCLASSINSTALLER __MSABI_LONG(0x80040400)
+#define DIERR_CANCELLED __MSABI_LONG(0x80040401)
+#define DIERR_BADINF __MSABI_LONG(0x80040402)
+#define DIDIFT_DELETE __MSABI_LONG(0x01000000)
+#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dinputd_h__ */