Sync to trunk head (r42241)
[reactos.git] / reactos / include / psdk / mmsystem.h
index d12f9a3..a3d7a97 100644 (file)
@@ -1,13 +1,20 @@
+/*
+ * Multimedia declarations
+ */
 
 #ifndef _MMSYSTEM_H
 #define _MMSYSTEM_H
-#if __GNUC__ >=3
-#pragma GCC system_header
-#endif
+
 #pragma pack(push,1)
 #ifdef __cplusplus
 extern "C" {
 #endif
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4201)
+#endif
+
 #define        WINMMAPI        DECLSPEC_IMPORT
 #define _loadds
 #define _huge
@@ -119,6 +126,11 @@ extern "C" {
 #define DRV_RESTART           DRVCNF_RESTART
 #define DRV_MCI_FIRST         DRV_RESERVED
 #define DRV_MCI_LAST          (DRV_RESERVED+0xFFF)
+#ifdef _WINE
+#define DRV_SUCCESS            0x0001
+#define DRV_FAILURE            0x0000
+#define DRV_EXITAPPLICATION     0x000C
+#endif
 #define CALLBACK_TYPEMASK     0x70000
 #define CALLBACK_NULL         0
 #define CALLBACK_WINDOW       0x10000
@@ -199,7 +211,11 @@ extern "C" {
 #define WAVE_FORMAT_96S08           131072
 #define WAVE_FORMAT_96M16           262144
 #define WAVE_FORMAT_96S16           524288
+
+#ifndef WAVE_FORMAT_PCM
 #define WAVE_FORMAT_PCM             1
+#endif
+
 #define MIDIERR_UNPREPARED          MIDIERR_BASE
 #define MIDIERR_STILLPLAYING        (MIDIERR_BASE+1)
 #define MIDIERR_NOMAP               (MIDIERR_BASE+2)
@@ -357,6 +373,7 @@ extern "C" {
 #define MIXERCONTROL_CONTROLTYPE_MONO          (MIXERCONTROL_CONTROLTYPE_BOOLEAN+3)
 #define MIXERCONTROL_CONTROLTYPE_LOUDNESS      (MIXERCONTROL_CONTROLTYPE_BOOLEAN+4)
 #define MIXERCONTROL_CONTROLTYPE_STEREOENH     (MIXERCONTROL_CONTROLTYPE_BOOLEAN+5)
+#define MIXERCONTROL_CONTROLTYPE_BASS_BOOST    (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)
 #define MIXERCONTROL_CONTROLTYPE_BUTTON        (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN)
 #define MIXERCONTROL_CONTROLTYPE_DECIBELS      (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS)
 #define MIXERCONTROL_CONTROLTYPE_SIGNED        (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED)
@@ -893,6 +910,12 @@ extern "C" {
 #define MCI_OVLY_WHERE_DESTINATION        0x40000
 #define MCI_OVLY_WHERE_FRAME              0x80000
 #define MCI_OVLY_WHERE_VIDEO              0x100000
+#ifdef _WINE
+#define MCI_OPEN_DRIVER                   0x0801
+#define MCI_CLOSE_DRIVER                  0x0802
+#define MCI_SOUND                         0x0812
+#define MCI_SOUND_NAME                    0x00000100L
+#endif
 #define NEWTRANSPARENT 3
 #define QUERYROPSUPPORT 40
 #define SELECTDIB 41
@@ -910,6 +933,18 @@ extern "C" {
 #define SEEK_END 2
 #endif
 
+#ifdef _WINE
+#define MAXWAVEDRIVERS 10
+#define MAXMIDIDRIVERS 10
+#define MAXAUXDRIVERS  10
+#define MAXMCIDRIVERS  32
+#define MAXMIXERDRIVERS        10
+#endif
+
+#ifdef _WINE
+typedef LPCSTR HPCSTR;
+#endif
+
 typedef DWORD MCIERROR;
 typedef UINT MCIDEVICEID;
 typedef UINT(CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD);
@@ -953,7 +988,7 @@ typedef struct DRVCONFIGINFOEX {
        DWORD dnDevNode;
 } DRVCONFIGINFOEX,*PDRVCONFIGINFOEX,*LPDRVCONFIGINFOEX;
 
-typedef LRESULT(CALLBACK* DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
+typedef LRESULT (CALLBACK* DRIVERPROC)(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
 typedef void (CALLBACK DRVCALLBACK)(HDRVR,UINT,DWORD,DWORD,DWORD);
 typedef DRVCALLBACK *LPDRVCALLBACK;
 typedef DRVCALLBACK *PDRVCALLBACK;
@@ -969,11 +1004,11 @@ typedef struct wavehdr_tag {
        LPSTR lpData;
        DWORD dwBufferLength;
        DWORD dwBytesRecorded;
-       DWORD dwUser;
+       DWORD_PTR dwUser;
        DWORD dwFlags;
        DWORD dwLoops;
        struct wavehdr_tag *lpNext;
-       DWORD reserved;
+       DWORD_PTR reserved;
 } WAVEHDR,*PWAVEHDR,*LPWAVEHDR;
 
 typedef struct tagWAVEOUTCAPSA {
@@ -1043,7 +1078,7 @@ typedef struct tWAVEFORMATEX {
        WORD cbSize;
 } WAVEFORMATEX,*PWAVEFORMATEX,*LPWAVEFORMATEX;
 
-typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
+typedef const struct tWAVEFORMATEX *LPCWAVEFORMATEX;
 #endif
 
 DECLARE_HANDLE(HMIDI);
@@ -1120,6 +1155,9 @@ typedef struct midievent_tag {
        DWORD dwEvent;
        DWORD dwParms[1];
 } MIDIEVENT;
+#ifdef _WINE
+typedef struct midievent_tag *LPMIDIEVENT;
+#endif
 
 typedef struct midistrmbuffver_tag {
        DWORD dwVersion;
@@ -1338,7 +1376,7 @@ typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
        DWORD dwValue;
 } MIXERCONTROLDETAILS_UNSIGNED,*PMIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED;
 
-typedef void(CALLBACK TIMECALLBACK)(UINT,UINT,DWORD,DWORD,DWORD);
+typedef void(CALLBACK TIMECALLBACK)(UINT,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);
 
 typedef TIMECALLBACK *LPTIMECALLBACK;
 
@@ -1466,11 +1504,11 @@ typedef struct _MMCKINFO {
 typedef const MMCKINFO *LPCMMCKINFO;
 
 typedef struct tagMCI_GENERIC_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
 } MCI_GENERIC_PARMS,*PMCI_GENERIC_PARMS,*LPMCI_GENERIC_PARMS;
 
 typedef struct tagMCI_OPEN_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCSTR lpstrDeviceType;
        LPCSTR lpstrElementName;
@@ -1478,7 +1516,7 @@ typedef struct tagMCI_OPEN_PARMSA {
 } MCI_OPEN_PARMSA,*PMCI_OPEN_PARMSA,*LPMCI_OPEN_PARMSA;
 
 typedef struct tagMCI_OPEN_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCWSTR lpstrDeviceType;
        LPCWSTR lpstrElementName;
@@ -1486,43 +1524,61 @@ typedef struct tagMCI_OPEN_PARMSW {
 } MCI_OPEN_PARMSW,*PMCI_OPEN_PARMSW,*LPMCI_OPEN_PARMSW;
 
 typedef struct tagMCI_PLAY_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrom;
        DWORD dwTo;
 } MCI_PLAY_PARMS,*PMCI_PLAY_PARMS,*LPMCI_PLAY_PARMS;
 
 typedef struct tagMCI_SEEK_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwTo;
 } MCI_SEEK_PARMS, *PMCI_SEEK_PARMS,*LPMCI_SEEK_PARMS;
 
+#ifdef _WINE
+typedef struct tagMCI_SOUND_PARMSA {
+    DWORD_PTR   dwCallback;
+    LPCSTR      lpstrSoundName;
+} MCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA;
+
+typedef struct tagMCI_SOUND_PARMSW {
+    DWORD_PTR   dwCallback;
+    LPCWSTR     lpstrSoundName;
+} MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;
+
+#ifdef UNICODE
+typedef MCI_SOUND_PARMSW MCI_SOUND_PARMS;
+#else
+typedef MCI_SOUND_PARMSA MCI_SOUND_PARMS;
+#endif
+#endif
+
 typedef struct tagMCI_STATUS_PARMS {
-       DWORD dwCallback;
-       DWORD dwReturn;
+       DWORD_PTR dwCallback;
+       DWORD_PTR dwReturn;
        DWORD dwItem;
        DWORD dwTrack;
 } MCI_STATUS_PARMS,*PMCI_STATUS_PARMS,*LPMCI_STATUS_PARMS;
 
 typedef struct tagMCI_INFO_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPSTR lpstrReturn;
        DWORD dwRetSize;
 } MCI_INFO_PARMSA,*LPMCI_INFO_PARMSA;
 
 typedef struct tagMCI_INFO_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPWSTR lpstrReturn;
        DWORD dwRetSize;
 } MCI_INFO_PARMSW,*LPMCI_INFO_PARMSW;
 
 typedef struct tagMCI_GETDEVCAPS_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwReturn;
        DWORD dwItem;
 } MCI_GETDEVCAPS_PARMS,*PMCI_GETDEVCAPS_PARMS,*LPMCI_GETDEVCAPS_PARMS;
 
 typedef struct tagMCI_SYSINFO_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPSTR lpstrReturn;
        DWORD dwRetSize;
        DWORD dwNumber;
@@ -1530,7 +1586,7 @@ typedef struct tagMCI_SYSINFO_PARMSA {
 } MCI_SYSINFO_PARMSA,*PMCI_SYSINFO_PARMSA,*LPMCI_SYSINFO_PARMSA;
 
 typedef struct tagMCI_SYSINFO_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPWSTR lpstrReturn;
        DWORD dwRetSize;
        DWORD dwNumber;
@@ -1538,67 +1594,67 @@ typedef struct tagMCI_SYSINFO_PARMSW {
 } MCI_SYSINFO_PARMSW,*PMCI_SYSINFO_PARMSW,*LPMCI_SYSINFO_PARMSW;
 
 typedef struct tagMCI_SET_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwTimeFormat;
        DWORD dwAudio;
 } MCI_SET_PARMS,*PMCI_SET_PARMS,*LPMCI_SET_PARMS;
 
 typedef struct tagMCI_BREAK_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        int nVirtKey;
        HWND hwndBreak;
 } MCI_BREAK_PARMS,*PMCI_BREAK_PARMS,*LPMCI_BREAK_PARMS;
 
 typedef struct tagMCI_SAVE_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCSTR lpfilename;
 } MCI_SAVE_PARMSA,*PMCI_SAVE_PARMSA,*LPMCI_SAVE_PARMSA;
 
 typedef struct tagMCI_SAVE_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCWSTR lpfilename;
 } MCI_SAVE_PARMSW,*PMCI_SAVE_PARMSW,*LPMCI_SAVE_PARMSW;
 
 typedef struct tagMCI_LOAD_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCSTR lpfilename;
 } MCI_LOAD_PARMSA,*PMCI_LOAD_PARMSA,*LPMCI_LOAD_PARMSA;
 
 typedef struct tagMCI_LOAD_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCWSTR lpfilename;
 } MCI_LOAD_PARMSW,*PMCI_LOAD_PARMSW,*LPMCI_LOAD_PARMSW;
 
 typedef struct tagMCI_RECORD_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrom;
        DWORD dwTo;
 } MCI_RECORD_PARMS,*LPMCI_RECORD_PARMS;
 
 typedef struct tagMCI_VD_PLAY_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrom;
        DWORD dwTo;
        DWORD dwSpeed;
 } MCI_VD_PLAY_PARMS,*PMCI_VD_PLAY_PARMS,*LPMCI_VD_PLAY_PARMS;
 
 typedef struct tagMCI_VD_STEP_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrames;
 } MCI_VD_STEP_PARMS,*PMCI_VD_STEP_PARMS,*LPMCI_VD_STEP_PARMS;
 
 typedef struct tagMCI_VD_ESCAPE_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCSTR lpstrCommand;
 } MCI_VD_ESCAPE_PARMSA,*PMCI_VD_ESCAPE_PARMSA,*LPMCI_VD_ESCAPE_PARMSA;
 
 typedef struct tagMCI_VD_ESCAPE_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCWSTR lpstrCommand;
 } MCI_VD_ESCAPE_PARMSW,*PMCI_VD_ESCAPE_PARMSW,*LPMCI_VD_ESCAPE_PARMSW;
 
 typedef struct tagMCI_WAVE_OPEN_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCSTR lpstrDeviceType;
        LPCSTR lpstrElementName;
@@ -1607,7 +1663,7 @@ typedef struct tagMCI_WAVE_OPEN_PARMSA {
 } MCI_WAVE_OPEN_PARMSA,*PMCI_WAVE_OPEN_PARMSA,*LPMCI_WAVE_OPEN_PARMSA;
 
 typedef struct tagMCI_WAVE_OPEN_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCWSTR lpstrDeviceType;
        LPCWSTR lpstrElementName;
@@ -1616,13 +1672,13 @@ typedef struct tagMCI_WAVE_OPEN_PARMSW {
 } MCI_WAVE_OPEN_PARMSW,*PMCI_WAVE_OPEN_PARMSW,*LPMCI_WAVE_OPEN_PARMSW;
 
 typedef struct tagMCI_WAVE_DELETE_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrom;
        DWORD dwTo;
 } MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS,*LPMCI_WAVE_DELETE_PARMS;
 
 typedef struct tagMCI_WAVE_SET_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwTimeFormat;
        DWORD dwAudio;
        UINT wInput;
@@ -1639,12 +1695,12 @@ typedef struct tagMCI_WAVE_SET_PARMS {
        WORD wReserved5;
 } MCI_WAVE_SET_PARMS,*PMCI_WAVE_SET_PARMS,*LPMCI_WAVE_SET_PARMS;
 
-LRESULT WINAPI CloseDriver(HDRVR,LONG,LONG);
-HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LONG);
-LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LONG,LONG);
+LRESULT WINAPI CloseDriver(HDRVR,LPARAM,LPARAM);
+HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LPARAM);
+LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LPARAM,LPARAM);
 HMODULE WINAPI DrvGetModuleHandle(HDRVR);
 HMODULE WINAPI GetDriverModuleHandle(HDRVR);
-LRESULT WINAPI DefDriverProc(DWORD,HDRVR,UINT,LPARAM,LPARAM);
+LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
 UINT WINAPI mmsystemGetVersion(void);
 #define OutputDebugStr OutputDebugString
 BOOL WINAPI sndPlaySoundA(LPCSTR,UINT);
@@ -1652,8 +1708,8 @@ BOOL WINAPI sndPlaySoundW(LPCWSTR,UINT);
 BOOL WINAPI PlaySoundA(LPCSTR,HMODULE,DWORD);
 BOOL WINAPI PlaySoundW(LPCWSTR,HMODULE,DWORD);
 UINT WINAPI waveOutGetNumDevs(void);
-MMRESULT WINAPI waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT);
-MMRESULT WINAPI waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT);
+MMRESULT WINAPI waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT);
+MMRESULT WINAPI waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT);
 MMRESULT WINAPI waveOutGetVolume(HWAVEOUT,PDWORD);
 MMRESULT WINAPI waveOutSetVolume(HWAVEOUT,DWORD);
 MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT,LPSTR,UINT);
@@ -1673,10 +1729,16 @@ MMRESULT WINAPI waveOutSetPitch(HWAVEOUT,DWORD);
 MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT,PDWORD);
 MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD);
 MMRESULT WINAPI waveOutGetID(HWAVEOUT,LPUINT);
-MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD);
+#if (WINVER >= 0x030a)
+#ifdef _WIN32
+MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR);
+#else
+DWORD WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD);
+#endif
+#endif
 UINT WINAPI waveInGetNumDevs(void);
-MMRESULT WINAPI waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT);
-MMRESULT WINAPI waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT);
+MMRESULT WINAPI waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT);
+MMRESULT WINAPI waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT);
 MMRESULT WINAPI waveInGetErrorTextA(MMRESULT,LPSTR,UINT);
 MMRESULT WINAPI waveInGetErrorTextW(MMRESULT,LPWSTR,UINT);
 MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);
@@ -1689,9 +1751,15 @@ MMRESULT WINAPI waveInStop(HWAVEIN);
 MMRESULT WINAPI waveInReset(HWAVEIN);
 MMRESULT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT);
 MMRESULT WINAPI waveInGetID(HWAVEIN,LPUINT);
-MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD);
+#if (WINVER >= 0x030a)
+#ifdef _WIN32
+MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR);
+#else
+DWORD WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD);
+#endif
+#endif
 UINT WINAPI midiOutGetNumDevs(void);
-MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD);
 MMRESULT WINAPI midiStreamClose(HMIDISTRM);
 MMRESULT WINAPI midiStreamProperty(HMIDISTRM,LPBYTE,DWORD);
 MMRESULT WINAPI midiStreamPosition(HMIDISTRM,LPMMTIME,UINT);
@@ -1701,13 +1769,13 @@ MMRESULT WINAPI midiStreamRestart(HMIDISTRM);
 MMRESULT WINAPI midiStreamStop(HMIDISTRM);
 MMRESULT WINAPI midiConnect(HMIDI,HMIDIOUT,PVOID);
 MMRESULT WINAPI midiDisconnect(HMIDI,HMIDIOUT,PVOID);
-MMRESULT WINAPI midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT);
-MMRESULT WINAPI midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT);
+MMRESULT WINAPI midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT);
+MMRESULT WINAPI midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT);
 MMRESULT WINAPI midiOutGetVolume(HMIDIOUT,PDWORD);
 MMRESULT WINAPI midiOutSetVolume(HMIDIOUT,DWORD);
 MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT,LPSTR,UINT);
 MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT);
-MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT_PTR,DWORD_PTR,DWORD_PTR,DWORD);
 MMRESULT WINAPI midiOutClose(HMIDIOUT);
 MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT);
 MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT);
@@ -1717,13 +1785,19 @@ MMRESULT WINAPI midiOutReset(HMIDIOUT);
 MMRESULT WINAPI midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT);
 MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT);
 MMRESULT WINAPI midiOutGetID(HMIDIOUT,LPUINT);
-MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD);
+#if (WINVER >= 0x030a)
+#ifdef _WIN32
+MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR);
+#else
+DWORD WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD);
+#endif
+#endif
 UINT WINAPI midiInGetNumDevs(void);
-MMRESULT WINAPI midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT);
-MMRESULT WINAPI midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT);
+MMRESULT WINAPI midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT);
+MMRESULT WINAPI midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT);
 MMRESULT WINAPI midiInGetErrorTextA(MMRESULT,LPSTR,UINT);
 MMRESULT WINAPI midiInGetErrorTextW(MMRESULT,LPWSTR,UINT);
-MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT_PTR,DWORD_PTR,DWORD_PTR,DWORD);
 MMRESULT WINAPI midiInClose(HMIDIIN);
 MMRESULT WINAPI midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT);
 MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT);
@@ -1732,17 +1806,23 @@ MMRESULT WINAPI midiInStart(HMIDIIN);
 MMRESULT WINAPI midiInStop(HMIDIIN);
 MMRESULT WINAPI midiInReset(HMIDIIN);
 MMRESULT WINAPI midiInGetID(HMIDIIN,LPUINT);
-MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD);
+#if (WINVER >= 0x030a)
+#ifdef _WIN32
+MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR);
+#else
+DWORD WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD);
+#endif
+#endif
 UINT WINAPI auxGetNumDevs(void);
-MMRESULT WINAPI auxGetDevCapsA(UINT,LPAUXCAPSA,UINT);
-MMRESULT WINAPI auxGetDevCapsW(UINT,LPAUXCAPSW,UINT);
+MMRESULT WINAPI auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT);
+MMRESULT WINAPI auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT);
 MMRESULT WINAPI auxSetVolume(UINT,DWORD);
 MMRESULT WINAPI auxGetVolume(UINT,PDWORD);
-MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD,DWORD);
+MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR);
 UINT WINAPI mixerGetNumDevs(void);
-MMRESULT WINAPI mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT);
-MMRESULT WINAPI mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT);
-MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT);
+MMRESULT WINAPI mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT);
+MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD);
 MMRESULT WINAPI mixerClose(HMIXER);
 DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR);
 MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);
@@ -1755,14 +1835,14 @@ MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
 MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
 MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT);
 DWORD WINAPI timeGetTime(void);
-MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT);
+MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT);
 MMRESULT WINAPI timeKillEvent(UINT);
 MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT);
 MMRESULT WINAPI timeBeginPeriod(UINT);
 MMRESULT WINAPI timeEndPeriod(UINT);
 UINT WINAPI joyGetNumDevs(void);
-MMRESULT WINAPI joyGetDevCapsA(UINT,LPJOYCAPSA,UINT);
-MMRESULT WINAPI joyGetDevCapsW(UINT,LPJOYCAPSW,UINT);
+MMRESULT WINAPI joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT);
+MMRESULT WINAPI joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT);
 MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO);
 MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX);
 MMRESULT WINAPI joyGetThreshold(UINT,LPUINT);
@@ -1790,8 +1870,8 @@ LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM);
 MMRESULT WINAPI mmioDescend(HMMIO,LPMMCKINFO,const MMCKINFO*,UINT);
 MMRESULT WINAPI mmioAscend(HMMIO,LPMMCKINFO,UINT);
 MMRESULT WINAPI mmioCreateChunk(HMMIO,LPMMCKINFO,UINT);
-MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD,DWORD);
-MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD,DWORD);
+MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
+MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
 MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
 MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);
 MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR);
@@ -1801,11 +1881,11 @@ MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR);
 BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT);
 BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT);
 BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD);
-HTASK WINAPI mciGetCreatorTask(MCIDEVICEID);
+HANDLE WINAPI mciGetCreatorTask(MCIDEVICEID);
 YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD);
 
 typedef struct tagMCI_SEQ_SET_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwTimeFormat;
        DWORD dwAudio;
        DWORD dwTempo;
@@ -1815,7 +1895,7 @@ typedef struct tagMCI_SEQ_SET_PARMS {
        DWORD dwOffset;
 } MCI_SEQ_SET_PARMS,*PMCI_SEQ_SET_PARMS,*LPMCI_SEQ_SET_PARMS;
 typedef struct tagMCI_ANIM_OPEN_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCSTR lpstrDeviceType;
        LPCSTR lpstrElementName;
@@ -1824,7 +1904,7 @@ typedef struct tagMCI_ANIM_OPEN_PARMSA {
        HWND hWndParent;
 } MCI_ANIM_OPEN_PARMSA,*PMCI_ANIM_OPEN_PARMSA,*LPMCI_ANIM_OPEN_PARMSA;
 typedef struct tagMCI_ANIM_OPEN_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCWSTR lpstrDeviceType;
        LPCWSTR lpstrElementName;
@@ -1833,29 +1913,29 @@ typedef struct tagMCI_ANIM_OPEN_PARMSW {
        HWND hWndParent;
 } MCI_ANIM_OPEN_PARMSW,*PMCI_ANIM_OPEN_PARMSW,*LPMCI_ANIM_OPEN_PARMSW;
 typedef struct tagMCI_ANIM_PLAY_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrom;
        DWORD dwTo;
        DWORD dwSpeed;
 } MCI_ANIM_PLAY_PARMS,*PMCI_ANIM_PLAY_PARMS,*LPMCI_ANIM_PLAY_PARMS;
 typedef struct tagMCI_ANIM_STEP_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        DWORD dwFrames;
 } MCI_ANIM_STEP_PARMS,*PMCI_ANIM_STEP_PARMS,*LPMCI_ANIM_STEP_PARMS;
 typedef struct tagMCI_ANIM_WINDOW_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        HWND hWnd;
        UINT nCmdShow;
        LPCSTR lpstrText;
 } MCI_ANIM_WINDOW_PARMSA,*PMCI_ANIM_WINDOW_PARMSA,*LPMCI_ANIM_WINDOW_PARMSA;
 typedef struct tagMCI_ANIM_WINDOW_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        HWND hWnd;
        UINT nCmdShow;
        LPCWSTR lpstrText;
 } MCI_ANIM_WINDOW_PARMSW,*PMCI_ANIM_WINDOW_PARMSW,*LPMCI_ANIM_WINDOW_PARMSW;
 typedef struct tagMCI_ANIM_RECT_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
 #ifdef MCI_USE_OFFEXT
        POINT ptOffset;
        POINT ptExtent;
@@ -1864,12 +1944,12 @@ typedef struct tagMCI_ANIM_RECT_PARMS {
 #endif
 } MCI_ANIM_RECT_PARMS,*PMCI_ANIM_RECT_PARMS,*LPMCI_ANIM_RECT_PARMS;
 typedef struct tagMCI_ANIM_UPDATE_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        RECT rc;
        HDC hDC;
 } MCI_ANIM_UPDATE_PARMS,*PMCI_ANIM_UPDATE_PARMS,*LPMCI_ANIM_UPDATE_PARMS;
 typedef struct tagMCI_OVLY_OPEN_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCSTR lpstrDeviceType;
        LPCSTR lpstrElementName;
@@ -1878,7 +1958,7 @@ typedef struct tagMCI_OVLY_OPEN_PARMSA {
        HWND hWndParent;
 } MCI_OVLY_OPEN_PARMSA,*PMCI_OVLY_OPEN_PARMSA,*LPMCI_OVLY_OPEN_PARMSA;
 typedef struct tagMCI_OVLY_OPEN_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        MCIDEVICEID wDeviceID;
        LPCWSTR lpstrDeviceType;
        LPCWSTR lpstrElementName;
@@ -1887,19 +1967,19 @@ typedef struct tagMCI_OVLY_OPEN_PARMSW {
        HWND hWndParent;
 } MCI_OVLY_OPEN_PARMSW,*PMCI_OVLY_OPEN_PARMSW,*LPMCI_OVLY_OPEN_PARMSW;
 typedef struct tagMCI_OVLY_WINDOW_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        HWND hWnd;
        UINT nCmdShow;
        LPCSTR lpstrText;
 } MCI_OVLY_WINDOW_PARMSA,*PMCI_OVLY_WINDOW_PARMSA,*LPMCI_OVLY_WINDOW_PARMSA;
 typedef struct tagMCI_OVLY_WINDOW_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        HWND hWnd;
        UINT nCmdShow;
        LPCWSTR lpstrText;
 } MCI_OVLY_WINDOW_PARMSW,*PMCI_OVLY_WINDOW_PARMSW,*LPMCI_OVLY_WINDOW_PARMSW;
 typedef struct tagMCI_OVLY_RECT_PARMS {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
 #ifdef MCI_USE_OFFEXT
        POINT ptOffset;
        POINT ptExtent;
@@ -1908,22 +1988,22 @@ typedef struct tagMCI_OVLY_RECT_PARMS {
 #endif
 } MCI_OVLY_RECT_PARMS,*PMCI_OVLY_RECT_PARMS,*LPMCI_OVLY_RECT_PARMS;
 typedef struct tagMCI_OVLY_SAVE_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCSTR lpfilename;
        RECT rc;
 } MCI_OVLY_SAVE_PARMSA,*PMCI_OVLY_SAVE_PARMSA,*LPMCI_OVLY_SAVE_PARMSA;
 typedef struct tagMCI_OVLY_SAVE_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCWSTR lpfilename;
        RECT rc;
 } MCI_OVLY_SAVE_PARMSW,*PMCI_OVLY_SAVE_PARMSW,*LPMCI_OVLY_SAVE_PARMSW;
 typedef struct tagMCI_OVLY_LOAD_PARMSA {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCSTR lpfilename;
        RECT rc;
 } MCI_OVLY_LOAD_PARMSA,*PMCI_OVLY_LOAD_PARMSA,*LPMCI_OVLY_LOAD_PARMSA;
 typedef struct tagMCI_OVLY_LOAD_PARMSW {
-       DWORD dwCallback;
+       DWORD_PTR dwCallback;
        LPCWSTR lpfilename;
        RECT rc;
 } MCI_OVLY_LOAD_PARMSW,*PMCI_OVLY_LOAD_PARMSW,*LPMCI_OVLY_LOAD_PARMSW;
@@ -2027,6 +2107,11 @@ typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OV
 #define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDA
 #define mciGetErrorString mciGetErrorStringA
 #endif
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
 #ifdef __cplusplus
 }
 #endif