ReactOS  0.4.14-dev-293-g2b39b42
winemm.h
Go to the documentation of this file.
1 /*
2  * Copyright 1998, Luiz Otavio L. Zorzella
3  * 1999, Eric Pouech
4  *
5  * Purpose: multimedia declarations (internal to WINMM & MMSYSTEM DLLs)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #ifndef _WINEMM_H_
23 #define _WINEMM_H_
24 
25 #include <wine/config.h>
26 
27 #include <assert.h>
28 #include <stdio.h>
29 
30 #define _INC_WINDOWS
31 #define COM_NO_WINDOWS_H
32 
33 #define NONAMELESSUNION
34 #define NONAMELESSSTRUCT
35 
36 #include <windef.h>
37 #include <winbase.h>
38 #include <winuser.h>
39 #include <winreg.h>
40 #include <mmddk.h>
41 
42 #include <wine/debug.h>
43 #include <wine/exception.h>
44 #include <wine/unicode.h>
45 
46 #define WINE_DEFAULT_WINMM_DRIVER "alsa,oss,coreaudio,esd"
47 #define WINE_DEFAULT_WINMM_MAPPER "msacm32.drv"
48 #define WINE_DEFAULT_WINMM_MIDI "midimap.dll"
49 
50 /* Who said goofy boy ? */
51 #define WINE_DI_MAGIC 0x900F1B01
52 
53 typedef struct tagWINE_DRIVER
54 {
56  /* as usual LPWINE_DRIVER == hDriver32 */
64 
66 
67 /* for each loaded driver and each known type of driver, this structure contains
68  * the information needed to access it
69  */
70 typedef struct tagWINE_MM_DRIVER_PART {
71  int nIDMin; /* lower bound of global indexes for this type */
72  int nIDMax; /* hhigher bound of global indexes for this type */
73  WINEMM_msgFunc32 fnMessage32; /* pointer to function */
75 
76 #define MMDRV_AUX 0
77 #define MMDRV_MIXER 1
78 #define MMDRV_MIDIIN 2
79 #define MMDRV_MIDIOUT 3
80 #define MMDRV_WAVEIN 4
81 #define MMDRV_WAVEOUT 5
82 #define MMDRV_MAX 6
83 
84 /* each low-level .drv will be associated with an instance of this structure */
85 typedef struct tagWINE_MM_DRIVER {
86  HDRVR hDriver;
87  LPSTR drvname; /* name of the driver */
88  unsigned bIsMapper : 1; /* TRUE if mapper */
89  WINE_MM_DRIVER_PART parts[MMDRV_MAX];/* Information for all known types */
91 
92 typedef struct tagWINE_MLD {
93 /* EPP struct tagWINE_MLD* lpNext; */ /* not used so far */
96  UINT mmdIndex; /* index to low-level driver in MMDrvs table */
97  DWORD_PTR dwDriverInstance; /* this value is driver related, as opposed to
98  * opendesc.dwInstance which is client (callback) related */
102 } WINE_MLD, *LPWINE_MLD;
103 
104 typedef struct {
107 
108 typedef struct {
110  MIDIOPENDESC mod; /* FIXME: should be removed */
112 
113 typedef struct {
116 
117 typedef struct tagWINE_MCIDRIVER {
123  HDRVR hDriver;
132 
134 {
135  struct IOProcList*pNext; /* Next item in linked list */
136  FOURCC fourCC; /* four-character code identifying IOProc */
137  LPMMIOPROC pIOProc; /* pointer to IProc */
138  BOOL is_unicode; /* 32A or 32W */
139  int count; /* number of objects linked to it */
140 };
141 
142 typedef struct tagWINE_MMIO {
146  unsigned bTmpIOProc : 1,
147  bBufferLoaded : 1;
150 
151 /* function prototypes */
154 BOOL DRIVER_GetLibName(LPCWSTR keyName, LPCWSTR sectName, LPWSTR buf, int sz);
156 void DRIVER_UnloadAll(void);
157 HDRVR WINAPI OpenDriverA(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam);
158 BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper);
160 BOOL MMDRV_Init(void);
161 void MMDRV_Exit(void);
164  DWORD_PTR* dwCallback, DWORD_PTR* dwInstance);
165 void MMDRV_Free(HANDLE hndl, LPWINE_MLD mld);
166 DWORD MMDRV_Open(LPWINE_MLD mld, UINT wMsg, DWORD_PTR dwParam1, DWORD dwParam2);
167 DWORD MMDRV_Close(LPWINE_MLD mld, UINT wMsg);
168 LPWINE_MLD MMDRV_Get(HANDLE hndl, UINT type, BOOL bCanBeID);
169 LPWINE_MLD MMDRV_GetRelated(HANDLE hndl, UINT srcType, BOOL bSrcCanBeID, UINT dstTyped);
170 DWORD MMDRV_Message(LPWINE_MLD mld, UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
171 UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
172 
173 const char* MCI_MessageToString(UINT wMsg);
174 DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
177 
178 const char* WINMM_ErrorToString(MMRESULT error);
179 
180 void TIME_MMTimeStop(void);
181 
182 MMRESULT WINMM_CheckCallback(DWORD_PTR dwCallback, DWORD fdwOpen, BOOL mixer) DECLSPEC_HIDDEN;
183 
184 /* Global variables */
187 extern HANDLE psLastEvent;
188 extern HANDLE psStopEvent;
189 
190 /* GetDriverFlags() returned bits is not documented (nor the call itself)
191  * Here are Wine only definitions of the bits
192  */
193 #define WINE_GDF_EXIST 0x80000000
194 #define WINE_GDF_EXTERNAL_MASK 0xF0000000
195 #define WINE_GDF_SESSION 0x00000001
196 
197 
198 /* Modification to take into account Windows NT's registry format */
199 
200 #define NT_MME_DRIVERS32_KEY \
201  "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32"
202 
203 #define NT_MME_DRIVERS_KEY \
204  "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers"
205 
207 
208 #endif /* _WINEMM_H_ */
struct tagWINE_MMIO * LPWINE_MMIO
LRESULT(CALLBACK * DRIVERPROC)(DWORD_PTR, HDRVR, UINT, LPARAM, LPARAM)
Definition: mmsystem.h:1001
LPWINE_DRIVER DRIVER_TryOpenDriver32(LPCWSTR fn, LPARAM lParam2)
Definition: driver.c:273
struct IOProcList * ioProc
Definition: winemm.h:145
WINE_MLD mld
Definition: winemm.h:109
struct WINE_MIXER * LPWINE_MIXER
DRIVERPROC lpDrvProc
Definition: winemm.h:59
struct tagWINE_MLD WINE_MLD
void MMDRV_Exit(void)
Definition: lolvldrv.c:607
MMIOPROC * LPMMIOPROC
Definition: mmsystem.h:1483
#define DWORD_PTR
Definition: treelist.c:76
#define error(str)
Definition: mkdosfs.c:1605
struct tagWINE_DRIVER * LPWINE_DRIVER
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPWSTR lpstrAlias
Definition: winemm.h:122
LPWINE_DRIVER DRIVER_FindFromHDrvr(HDRVR hDrvr)
Definition: driver.c:89
DWORD dwMagic
Definition: winemm.h:55
unsigned bBufferLoaded
Definition: winemm.h:146
BOOL is_unicode
Definition: winemm.h:138
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
HDRVR WINAPI OpenDriverA(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam)
Definition: driver.c:365
UINT MMDRV_GetNum(UINT)
Definition: lolvldrv.c:61
unsigned bIsMapper
Definition: winemm.h:88
DWORD dwFileSize
Definition: winemm.h:148
struct tagWINE_DRIVER * lpNextItem
Definition: winemm.h:62
FOURCC fourCC
Definition: winemm.h:136
#define CALLBACK
Definition: compat.h:27
HANDLE psStopEvent
Definition: winmm.c:52
int count
Definition: winemm.h:139
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
UINT MMRESULT
Definition: mmsystem.h:962
char * LPSTR
Definition: xmlstorage.h:182
void DRIVER_UnloadAll(void)
Definition: driver.c:658
unsigned bTmpIOProc
Definition: winemm.h:146
DWORD_PTR dwClientInstance
Definition: winemm.h:101
HINSTANCE hWinMM32Instance
Definition: winmm.c:50
#define DWORD
Definition: nt_native.h:44
int32_t INT
Definition: typedefs.h:56
LPWINE_MLD MMDRV_Get(HANDLE hndl, UINT type, BOOL bCanBeID)
Definition: lolvldrv.c:250
struct IOProcList * pNext
Definition: winemm.h:135
LPWINE_MLD MMDRV_GetRelated(HANDLE hndl, UINT srcType, BOOL bSrcCanBeID, UINT dstTyped)
Definition: lolvldrv.c:285
MIDIOPENDESC mod
Definition: winemm.h:110
LPSTR drvname
Definition: winemm.h:87
UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
Definition: lolvldrv.c:303
WINE_MLD mld
Definition: winemm.h:114
YIELDPROC lpfnYieldProc
Definition: winemm.h:125
LPMMIOPROC pIOProc
Definition: winemm.h:137
BOOL MMDRV_Init(void)
Definition: lolvldrv.c:526
BOOL LoadRegistryMMEDrivers(char *key)
Definition: registry.c:23
DWORD MMDRV_Message(LPWINE_MLD mld, UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
Definition: lolvldrv.c:71
unsigned int BOOL
Definition: ntddk_ex.h:94
LPWINE_MLD MMDRV_Alloc(UINT size, UINT type, LPHANDLE hndl, DWORD *dwFlags, DWORD_PTR *dwCallback, DWORD_PTR *dwInstance)
Definition: lolvldrv.c:123
#define MMDRV_MAX
Definition: winemm.h:82
const WCHAR * str
WINE_MLD mld
Definition: winemm.h:105
struct tagWINE_MLD * LPWINE_MLD
LONG_PTR LPARAM
Definition: windef.h:208
HANDLE psLastEvent
Definition: winmm.c:51
MMIOINFO info
Definition: winemm.h:143
UINT type
Definition: winemm.h:95
LPWSTR MCI_strdupAtoW(LPCSTR str)
Definition: mci.c:202
const char * LPCSTR
Definition: xmlstorage.h:183
BOOL DRIVER_GetLibName(LPCWSTR keyName, LPCWSTR sectName, LPWSTR buf, int sz)
Definition: driver.c:233
BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper)
Definition: lolvldrv.c:436
LPSTR MCI_strdupWtoA(LPCWSTR str)
Definition: mci.c:214
void MMDRV_Free(HANDLE hndl, LPWINE_MLD mld)
Definition: lolvldrv.c:165
MMRESULT WINMM_CheckCallback(DWORD_PTR dwCallback, DWORD fdwOpen, BOOL mixer) DECLSPEC_HIDDEN
Definition: winmm.c:196
struct tagWINE_DRIVER WINE_DRIVER
GLsizeiptr size
Definition: glext.h:5919
CRITICAL_SECTION WINMM_cs
Definition: winmm.c:54
HDRVR hDriver
Definition: winemm.h:86
#define WINAPI
Definition: msvc.h:8
UINT uSpecificCmdTable
Definition: winemm.h:129
unsigned short WORD
Definition: ntddk_ex.h:93
struct tagWINE_MMIO WINE_MMIO
unsigned long DWORD
Definition: ntddk_ex.h:95
struct tagWINE_MCIDRIVER * lpNext
Definition: winemm.h:130
struct tagWINE_MCIDRIVER WINE_MCIDRIVER
DWORD(CALLBACK * WINEMM_msgFunc32)(UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR)
Definition: winemm.h:65
struct tagWINE_MM_DRIVER WINE_MM_DRIVER
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
BOOL WINMM_CheckForMMSystem(void)
Definition: winmm.c:89
WINEMM_msgFunc32 fnMessage32
Definition: winemm.h:73
uint32_t DWORD_PTR
Definition: typedefs.h:63
const char * WINMM_ErrorToString(MMRESULT error)
Definition: winmm.c:113
DWORD FOURCC
Definition: dmdls.h:25
DWORD_PTR dwCallback
Definition: winemm.h:100
struct tagWINE_MM_DRIVER * LPWINE_MM_DRIVER
UINT uDeviceID
Definition: winemm.h:94
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
HMODULE hModule
Definition: winemm.h:58
struct tagWINE_MMIO * lpNext
Definition: winemm.h:144
DWORD MMDRV_Open(LPWINE_MLD mld, UINT wMsg, DWORD_PTR dwParam1, DWORD dwParam2)
Definition: lolvldrv.c:183
LPWSTR lpstrDeviceType
Definition: winemm.h:121
unsigned short UINT16
unsigned int UINT
Definition: ndis.h:50
const char * MCI_MessageToString(UINT wMsg)
Definition: mci.c:130
DWORD dwFlags
Definition: winemm.h:57
struct WINE_MIDI * LPWINE_MIDI
LPWSTR lpstrElementName
Definition: winemm.h:120
DWORD CreatorThread
Definition: winemm.h:127
WINE_MM_DRIVER_PART parts[MMDRV_MAX]
Definition: winemm.h:89
UINT mmdIndex
Definition: winemm.h:96
DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
Definition: mci.c:1908
DWORD_PTR dwDriverID
Definition: winemm.h:60
struct tagWINE_MCIDRIVER * LPWINE_MCIDRIVER
DWORD dwYieldData
Definition: winemm.h:126
WCHAR * LPWSTR
Definition: xmlstorage.h:184
struct tagWINE_MM_DRIVER_PART WINE_MM_DRIVER_PART
UINT uTypeCmdTable
Definition: winemm.h:128
void TIME_MMTimeStop(void)
Definition: time.c:270
LPARAM lParam
Definition: combotst.c:139
DWORD_PTR dwPrivate
Definition: winemm.h:124
UINT(CALLBACK * YIELDPROC)(MCIDEVICEID, DWORD)
Definition: mmsystem.h:960
WORD dwFlags
Definition: winemm.h:99
DWORD MMDRV_Close(LPWINE_MLD mld, UINT wMsg)
Definition: lolvldrv.c:228
struct tagWINE_DRIVER * lpPrevItem
Definition: winemm.h:61
struct WINE_WAVE * LPWINE_WAVE
DWORD_PTR dwDriverInstance
Definition: winemm.h:97
Definition: path.c:42