Umm, disregard all of this... sorry for spam
To wine developers: would it be useful to review dlls/winmm? Currently all mm-drivers (aux, mid, mod, wid, wod) functions are called using MDRV_Message calls. The arguments of a MDRV_Message are the device id (an array index), the message identifier, dwUser as the driver instance, and two parameters that depend upon the message. The driver instance DWORD seems useless to me, and it's value, while consistent, looks uninitialized (on my system is either 57 if I enable tracing, or random crazy large for a pointer if not.) My problem is that WaveIn / WaveOut devices are supposed to be able to support multiple streams if the hardware allows it, however it is impossible to support this currently as all MDRV_Message gives us is the device id the message is for (the only arguments to a WODM_PAUSE is the device id for instance.) This makes multiple streams impossible and therefor waveout drivers only support one stream per device. wineesd.drv gets around this by staticly making 10 waveout and 10 wavein devices, all effectively the same. If MDRV_Message were to pass in dwUser the device opening instance handle which winmm creates and apps use for the wave{out,in}* calls it would be possible to support multiple streams per device, and devices could represent hardware 1:1 like they are supposed to. So my questions are this: would changing the value of dwUser to the device instance handle be a good idea, and do any current mm-drivers depend upon dwUser being the seemingly uninitialized driver instance value?